ATLAS Offline Software
Loading...
Searching...
No Matches
RandomProtoTrackCreatorTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 */
4
7#include "Acts/Surfaces/PerigeeSurface.hpp"
8
9
11 const std::string& name,
12 const IInterface* parent)
13 : base_class(type,name,parent)
14{}
15
17 const xAOD::PixelClusterContainer & pixelContainer,
18 const xAOD::StripClusterContainer & stripContainer,
19 std::vector<ActsTrk::ProtoTrack> & foundProtoTracks ) const {
20 // Sample N random hits for example
21 ATH_MSG_VERBOSE("Generate a random proto track in "<<ctx.eventID()<<" from "<<pixelContainer.size()<<" pixel measurements "
22 <<", "<<stripContainer.size()<<" strip measurements");
23 std::vector<const xAOD::UncalibratedMeasurement*> dummyPoints;
24 size_t nPix = 1;
25 size_t nStrip = 7;
26 for (size_t k = 0; k < nPix; ++k){
27 auto index = rand() % pixelContainer.size();
28 dummyPoints.push_back(pixelContainer.at(index));
29 }
30
31
32 for (size_t k = 0; k < nStrip; ++k){
33 auto index = rand() % stripContainer.size();
34 dummyPoints.push_back(stripContainer.at(index));
35 }
36
37 ATH_MSG_DEBUG("Made a proto-track with " <<dummyPoints.size()<<" random clusters");
38
39
40 // Make the intput perigee
41 auto inputPerigee = makeDummyParams(dummyPoints[0]);
42
43 // and add to the list (will only make one prototrack per event for now)
44 foundProtoTracks.push_back({dummyPoints,std::move(inputPerigee)});
45
46 return StatusCode::SUCCESS;
47}
48
51 return dynamic_cast <const xAOD::PixelCluster*>(theMeas)->globalPosition().cast<double>();
52 } else if (theMeas->type() == xAOD::UncalibMeasType::StripClusterType){
53 return dynamic_cast<const xAOD::StripCluster*>(theMeas)->globalPosition().cast<double>();
54 }
55 return Amg::Vector3D::Zero();
56}
57
58
59std::unique_ptr<Acts::BoundTrackParameters> ActsTrk::RandomProtoTrackCreatorTool::makeDummyParams (const xAOD::UncalibratedMeasurement* measurement) const{
60
61 using namespace Acts::UnitLiterals;
62 std::shared_ptr<const Acts::Surface> actsSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(
63 Acts::Vector3::Zero());
64 Acts::BoundVector params;
65
66 auto globalPos = getMeasurementPos(measurement);
67
68 // No, this is not a physically correct parameter estimate!
69 // We just want a placeholder to point in roughly the expected direction...
70 // A real track finder would do something more reasonable here.
71 params << 0., 0.,
72 globalPos.phi(), globalPos.theta(),
73 1. / (1000000000. * 1_MeV), 0.;
74
75
76 // Covariance - let's be honest and say we have no clue ;-)
77 Acts::BoundMatrix cov = Acts::BoundMatrix::Identity();
78 cov *= 100000;
79
80 return std::make_unique<Acts::BoundTrackParameters>(actsSurface, params,
81 cov, Acts::ParticleHypothesis::pion());
82
83}
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
virtual StatusCode findProtoTracks(const EventContext &ctx, const xAOD::PixelClusterContainer &pixelContainer, const xAOD::StripClusterContainer &stripContainer, std::vector< ActsTrk::ProtoTrack > &foundProtoTracks) const override final
EF-style pattern recognition to create prototracks.
Amg::Vector3D getMeasurementPos(const xAOD::UncalibratedMeasurement *theMeas) const
get the global position for an uncalibrated measurement - delegates to the specialisation
std::unique_ptr< Acts::BoundTrackParameters > makeDummyParams(const xAOD::UncalibratedMeasurement *firstPRD) const
creates a random, dummy set of parameters Warning: This is not a real parameter estimate.
RandomProtoTrackCreatorTool(const std::string &type, const std::string &name, const IInterface *parent)
virtual xAOD::UncalibMeasType type() const =0
Returns the type of the measurement type as a simple enumeration.
Eigen::Matrix< double, 3, 1 > Vector3D
Definition index.py:1
PixelClusterContainer_v1 PixelClusterContainer
Define the version of the pixel cluster container.
StripCluster_v1 StripCluster
Define the version of the strip cluster class.
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.
StripClusterContainer_v1 StripClusterContainer
Define the version of the strip cluster container.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.