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 std::vector<ActsTrk::ATLASUncalibSourceLink> dummyPoints;
22 size_t nPix = 1;
23 size_t nStrip = 7;
24 for (size_t k = 0; k < nPix; ++k){
25 auto index = rand() % pixelContainer.size();
26 dummyPoints.push_back(makeATLASUncalibSourceLink(&pixelContainer, index, ctx));
27 }
28
29
30 for (size_t k = 0; k < nStrip; ++k){
31 auto index = rand() % stripContainer.size();
32 dummyPoints.push_back(makeATLASUncalibSourceLink(&stripContainer, index, ctx));
33 }
34
35 ATH_MSG_DEBUG("Made a proto-track with " <<dummyPoints.size()<<" random clusters");
36
37
38 // Make the intput perigee
39 auto inputPerigee = makeDummyParams(dummyPoints[0]);
40
41 // and add to the list (will only make one prototrack per event for now)
42 foundProtoTracks.push_back({dummyPoints,std::move(inputPerigee)});
43
44 return StatusCode::SUCCESS;
45}
46
49 return dynamic_cast <const xAOD::PixelCluster*>(theMeas)->globalPosition().cast<double>();
50 } else if (theMeas->type() == xAOD::UncalibMeasType::StripClusterType){
51 return dynamic_cast<const xAOD::StripCluster*>(theMeas)->globalPosition().cast<double>();
52 }
53 return Amg::Vector3D::Zero();
54}
55
56
57std::unique_ptr<Acts::BoundTrackParameters> ActsTrk::RandomProtoTrackCreatorTool::makeDummyParams (const ActsTrk::ATLASUncalibSourceLink & firstPRD) const{
58
59 const xAOD::UncalibratedMeasurement* measurement = &getUncalibratedMeasurement(firstPRD);
60 using namespace Acts::UnitLiterals;
61 std::shared_ptr<const Acts::Surface> actsSurface = Acts::Surface::makeShared<Acts::PerigeeSurface>(
62 Acts::Vector3(0., 0., 0.));
63 Acts::BoundVector params;
64
65 auto globalPos = getMeasurementPos(measurement);
66
67 // No, this is not a physically correct parameter estimate!
68 // We just want a placeholder to point in roughly the expected direction...
69 // A real track finder would do something more reasonable here.
70 params << 0., 0.,
71 globalPos.phi(), globalPos.theta(),
72 1. / (1000000000. * 1_MeV), 0.;
73
74
75 // Covariance - let's be honest and say we have no clue ;-)
76 Acts::BoundSquareMatrix cov = Acts::BoundSquareMatrix::Identity();
77 cov *= 100000;
78
79 return std::make_unique<Acts::BoundTrackParameters>(actsSurface, params,
80 cov, Acts::ParticleHypothesis::pion());
81
82}
#define ATH_MSG_DEBUG(x)
std::unique_ptr< Acts::BoundTrackParameters > makeDummyParams(const ActsTrk::ATLASUncalibSourceLink &firstPRD) const
creates a random, dummy set of parameters Warning: This is not a real parameter estimate.
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
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.
const xAOD::UncalibratedMeasurement & getUncalibratedMeasurement(const ATLASUncalibSourceLink &source_link)
ATLASUncalibSourceLink makeATLASUncalibSourceLink(const xAOD::UncalibratedMeasurementContainer *container, std::size_t index, const EventContext &ctx)
const xAOD::UncalibratedMeasurement * ATLASUncalibSourceLink
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.
StripClusterContainer_v1 StripClusterContainer
Define the version of the strip cluster container.
PixelCluster_v1 PixelCluster
Define the version of the pixel cluster class.
UncalibratedMeasurement_v1 UncalibratedMeasurement
Define the version of the uncalibrated measurement class.