ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimRawToLogicalHitsTool.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3*/
4
7
16
20
21
22
23FPGATrackSimRawToLogicalHitsTool::FPGATrackSimRawToLogicalHitsTool(const std::string& algname, const std::string &name, const IInterface *ifc) :
24 AthAlgTool(algname,name,ifc){}
25
26
29 ATH_CHECK(m_EvtSel.retrieve());
30
31 ATH_MSG_INFO("SaveOptional="<<m_saveOptional);
32 // remove deferensed m_towersToMap.value() in newer releases!
33 if( m_towersToMap.value().empty() ){
34 int maxNtowers = m_FPGATrackSimMapping->RegionMap_2nd()->getNRegions();
35 for (int ireg=0;ireg!=maxNtowers;++ireg) m_towers.push_back(ireg);
36 }else{
37 m_towers = m_towersToMap.value();
38 }
39
40 ATH_MSG_DEBUG ("Configured to process "<<m_towers.size() << " towers");
41 std::stringstream listOfTowers;
42 for (int ireg: m_towers){
43 listOfTowers<<", "<<ireg;
44 }
45 ATH_MSG_DEBUG ("List of Towers: "<<listOfTowers.str());
46 return StatusCode::SUCCESS;
47}
48
49
51
52 ATH_MSG_DEBUG ("Mapping " << eventHeader.nHits() << " hits using stage " << stage);
53 FPGATrackSimEventInfo eventinfo = eventHeader.event();
54 ATH_MSG_DEBUG ("Getting Event " << eventinfo);
55 logicEventHeader.newEvent(eventinfo);//this also reset all varaibles
56
57 if(stage!=1 && stage!=2)
58 {
59 ATH_MSG_FATAL("convert() must have stage == 1 or 2");
60 }
61
62 const FPGATrackSimPlaneMap* pmap = m_FPGATrackSimMapping->PlaneMap_2nd(0);
63
64 logicEventHeader.reserveTowers(m_towers.size());
65 for (int ireg: m_towers){
66 FPGATrackSimTowerInputHeader tower = FPGATrackSimTowerInputHeader(ireg);//default header, can eventually set eta/phi/deta/dphi
67 logicEventHeader.addTower( tower);
68 }
69 for (FPGATrackSimHit hit: eventHeader.hits()) { // hit loop
70 // In the ITk geometry, some of the plane IDs are -1 if the layers are not yet being used.
71 // This causes the code in this hit loop to crash. As a workaround for the moment, we currently
72 // skip over hits in layers that are not included in the FPGATrackSim geometry, with plane = -1
73
74 pmap->doRemap(hit);
75
76 for (unsigned int ireg = 0; ireg != m_towers.size(); ++ireg) {
77 logicEventHeader.getTower(ireg)->addHit(hit);
78 ATH_MSG_VERBOSE("Hit mapped (" << hit.isMapped() << ") to tower=" << ireg << ", nHits now=" << logicEventHeader.getTower(ireg)->nHits());
79 }
80 } // end hit loop
81
82 if (stage == 1) {
83 FPGATrackSimOptionalEventInfo op = eventHeader.optional();
84 if (m_saveOptional == 2) {
85 logicEventHeader.setOptional(op);
86 }
87 else if (m_saveOptional == 1) {
88 // save offline tracks
91 for (FPGATrackSimOfflineTrack const & offline_t : op.getOfflineTracks()) newop.addOfflineTrack(offline_t);
92 // save truth in region
93 for (FPGATrackSimTruthTrack const & truth_t : op.getTruthTracks()) {
94 if (m_EvtSel->passMatching(truth_t)) newop.addTruthTrack(truth_t);
95 }
96 ATH_MSG_DEBUG("Selected " << newop.nTruthTracks() << " truth tracks");
97 logicEventHeader.setOptional(newop);
98 }
99 }
100
101 return StatusCode::SUCCESS;
102}
103
105 return m_FPGATrackSimMapping->PlaneMap_1st(sliceNum);
106}
107
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_FATAL(x)
#define ATH_MSG_INFO(x)
#define ATH_MSG_VERBOSE(x)
#define ATH_MSG_DEBUG(x)
Maps physical layers to logical layers.
Maps ITK module indices to FPGATrackSim regions.
AthAlgTool(const std::string &type, const std::string &name, const IInterface *parent)
Constructor with parameters:
FPGATrackSimEventInfo const & event() const
FPGATrackSimOptionalEventInfo const & optional() const
const std::vector< FPGATrackSimHit > & hits() const
void addTower(const FPGATrackSimTowerInputHeader &s)
void setOptional(const FPGATrackSimOptionalEventInfo &o)
FPGATrackSimTowerInputHeader * getTower(size_t index)
void addTruthTrack(const FPGATrackSimTruthTrack &t)
void addOfflineTrack(const FPGATrackSimOfflineTrack &t)
const std::vector< FPGATrackSimTruthTrack > & getTruthTracks() const
const std::vector< FPGATrackSimOfflineTrack > & getOfflineTracks() const
void doRemap(FPGATrackSimHit &hit) const
ServiceHandle< IFPGATrackSimEventSelectionSvc > m_EvtSel
StatusCode convert(unsigned stage, const FPGATrackSimEventInputHeader &header, FPGATrackSimLogicalEventInputHeader &logicheader)
const FPGATrackSimPlaneMap * getPlaneMap_1st(int sliceNum)
ServiceHandle< IFPGATrackSimMappingSvc > m_FPGATrackSimMapping
FPGATrackSimRawToLogicalHitsTool(const std::string &, const std::string &, const IInterface *)
void addHit(const FPGATrackSimHit &s)