ATLAS Offline Software
Loading...
Searching...
No Matches
TrackHitAssignementAlg.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3*/
4
5// TrackHitAssignement includes
7
8
9TrackHitAssignementAlg::TrackHitAssignementAlg( const std::string& name, ISvcLocator* pSvcLocator ) : AthReentrantAlgorithm( name, pSvcLocator ){
10}
11
12
14
15
17 ATH_MSG_INFO ("Initializing " << name() << "...");
18 ATH_CHECK(m_tracks.initialize());
19 ATH_CHECK(m_JetPixelCluster.initialize());
20 ATH_CHECK(m_JetSCTCluster.initialize());
21 ATH_CHECK(m_TrackCollection.initialize());
22 ATH_CHECK(m_JetPixelClusterHits.initialize());
23 ATH_CHECK(m_JetSCTClusterHits.initialize());
26
27 return StatusCode::SUCCESS;
28}
29
30StatusCode TrackHitAssignementAlg::execute(const EventContext& context) const {
31 ATH_MSG_DEBUG ("Executing " << name() << "...");
32 //Read needed Containers to decorate
33 //and check if valid
37
42
43 if(!JetPixelCluster.isValid()){
44 ATH_MSG_ERROR ("Couldn't find Pixel");
45 return StatusCode::FAILURE;
46 }
47 if(!JetSCTCluster.isValid()){
48 ATH_MSG_ERROR ("Couldn't find SCT");
49 return StatusCode::FAILURE;
50 }
51 if(!tracks.isValid()){
52 ATH_MSG_ERROR ("Couldn't find tracks");
53 return StatusCode::FAILURE;
54 }
55
56 std::multimap<uint64_t, const xAOD::TrackParticle*> track_hits;
57
58 //go from tracks to hits and save the hits used for reconstruction in a map
59 for(const auto trk:*tracks){
60 auto trkTrk_link = trk->trackLink();
61 if (trkTrk_link.isValid()){
62 auto trkTrk = *trkTrk_link;
63 auto states = trkTrk->trackStateOnSurfaces();
64 for(const auto state:*states){
66 continue;
67 }
68 auto hitOnTrack = state->measurementOnTrack();
69 if(hitOnTrack->type(Trk::MeasurementBaseType::RIO_OnTrack)){
70 const Trk::RIO_OnTrack* hit = dynamic_cast <const Trk::RIO_OnTrack*>( hitOnTrack ) ;
71 const Trk::PrepRawData* prd = hit->prepRawData() ;
72 Identifier ident_hit = prd->identify();
73 track_hits.emplace(ident_hit.get_compact(), trk);
74 }
75 }
76 }
77 }
78
79
80 // run through SCT/Pixel Clusters and check if hit is in map
81 // if yes, add also ElementLink
82 typedef std::multimap<uint64_t, const xAOD::TrackParticle*>::iterator MMAPIterator;
83
84 for(const xAOD::TrackMeasurementValidation* hit: *JetSCTCluster){
85 std::pair<MMAPIterator, MMAPIterator> result = track_hits.equal_range(hit->identifier());
86 int count = std::distance(result.first, result.second);
87 std::vector<ElementLink<xAOD::TrackParticleContainer>> vec_ElemLink_SCT;
88 if(count == 0){
89 JetSCTClusterHits(*hit)=0;
90 }
91 else{
92 JetSCTClusterHits(*hit)=1;
93 for (MMAPIterator it = result.first; it != result.second; ++it){
94 vec_ElemLink_SCT.push_back(ElementLink<xAOD::TrackParticleContainer> ((it->second),*tracks, context));
95 }
96 }
97 JetSCTClusterTrackAssocs(*hit)=vec_ElemLink_SCT;
98 }
99
100 for(const xAOD::TrackMeasurementValidation* hit: *JetPixelCluster){
101 std::pair<MMAPIterator, MMAPIterator> result = track_hits.equal_range(hit->identifier());
102 int count = std::distance(result.first, result.second);
103 std::vector<ElementLink<xAOD::TrackParticleContainer>> vec_ElemLink_pix;
104 if(count == 0){
105 JetPixelClusterHits(*hit)=0;
106 }
107 else{
108 JetPixelClusterHits(*hit)=1;
109 for (MMAPIterator it = result.first; it != result.second; ++it){
110 vec_ElemLink_pix.push_back(ElementLink<xAOD::TrackParticleContainer> ((it->second),*tracks, context));
111 }
112 }
113 JetPixelClusterTrackAssocs(*hit)=vec_ElemLink_pix;
114 }
115 return StatusCode::SUCCESS;
116}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
An algorithm that can be simultaneously executed in multiple threads.
value_type get_compact() const
Get the compact id.
virtual bool isValid() override final
Can the handle be successfully dereferenced?
Handle class for adding a decoration to an object.
SG::ReadHandleKey< xAOD::TrackParticleContainer > m_tracks
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetPixelClusterHits
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetPixelCluster
SG::ReadHandleKey< TrackCollection > m_TrackCollection
TrackHitAssignementAlg(const std::string &name, ISvcLocator *pSvcLocator)
virtual StatusCode initialize() override
SG::ReadHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetSCTCluster
virtual StatusCode execute(const EventContext &context) const override
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetPixelClusterTrackAssocs
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetSCTClusterHits
SG::WriteDecorHandleKey< xAOD::TrackMeasurementValidationContainer > m_JetSCTClusterTrackAssocs
Identifier identify() const
return the identifier
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
Definition RIO_OnTrack.h:70
virtual const Trk::PrepRawData * prepRawData() const =0
returns the PrepRawData (also known as RIO) object to which this RIO_OnTrack is associated.
@ Measurement
This is a measurement, and will at least contain a Trk::MeasurementBase.
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
TrackMeasurementValidation_v1 TrackMeasurementValidation
Reference the current persistent version: