ATLAS Offline Software
Loading...
Searching...
No Matches
FPGATrackSimMapMakerAlg Class Reference

#include <FPGATrackSimMapMakerAlg.h>

Inheritance diagram for FPGATrackSimMapMakerAlg:

Classes

struct  Module

Public Types

typedef std::tuple< SiliconTech, DetectorZone, int, int, int > FPGATrackSimModuleId

Public Member Functions

 FPGATrackSimMapMakerAlg (const std::string &name, ISvcLocator *pSvcLocator)
virtual ~FPGATrackSimMapMakerAlg ()=default
StatusCode initialize () override
StatusCode execute () override
StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
ServiceHandle< StoreGateSvc > & evtStore ()
 The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.
const ServiceHandle< StoreGateSvc > & detStore () const
 The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.
virtual StatusCode sysStart () override
 Handle START transition.
virtual std::vector< Gaudi::DataHandle * > inputHandles () const override
 Return this algorithm's input handles.
virtual std::vector< Gaudi::DataHandle * > outputHandles () const override
 Return this algorithm's output handles.
Gaudi::Details::PropertyBase & declareProperty (Gaudi::Property< T, V, H > &t)
void updateVHKA (Gaudi::Details::PropertyBase &)
MsgStream & msg () const
bool msgLvl (const MSG::Level lvl) const

Protected Member Functions

void renounceArray (SG::VarHandleKeyArray &handlesArray)
 remove all handles from I/O resolution
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce (T &h)
void extraDeps_update_handler (Gaudi::Details::PropertyBase &ExtraDeps)
 Add StoreName to extra input/output deps as needed.

Private Types

typedef ServiceHandle< StoreGateSvcStoreGateSvc_t

Private Member Functions

StatusCode readInputs (bool &done)
StatusCode writePmapAndRmap (std::vector< FPGATrackSimHit > const &pbHits, std::vector< FPGATrackSimHit > const &peHits, std::vector< FPGATrackSimHit > const &sbHits, std::vector< FPGATrackSimHit > const &seHits, int region)
StatusCode writeSubrmap (std::vector< FPGATrackSimHit > const &allHits)
StatusCode writeEtaPatterns ()
StatusCode writeRadiiFile (std::vector< FPGATrackSimHit > const &allHits)
StatusCode writeMedianZFile (std::vector< FPGATrackSimHit > const &allHits)
void drawSlices (std::vector< FPGATrackSimHit > const &allHits)
bool isOnKeyLayer (int keynum, SiliconTech det, DetectorZone bec, int lyr)
int findPlane (const std::vector< std::vector< std::string > > *planes, const std::string &test)
std::string makeRmapLines (std::vector< FPGATrackSimHit > const &hits, SiliconTech det, DetectorZone bec, int max)
std::string makeSubrmapLines (std::vector< Module * > const &allmods, SiliconTech det, DetectorZone bec, int max)
void parseKeyString ()
Gaudi::Details::PropertyBase & declareGaudiProperty (Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
 specialization for handling Gaudi::Property<SG::VarHandleKey>

Private Attributes

ToolHandle< IFPGATrackSimEventInputHeaderToolm_hitInputTool { this, "InputTool", "FPGATrackSimSGToRawHitsTool/FPGATrackSimInputTool", "HitInput Tool" }
ToolHandle< IFPGATrackSimInputToolm_hitSGInputTool {this, "SGInputTool", "", "Input tool from SG"}
ServiceHandle< IFPGATrackSimEventSelectionSvcm_evtSel {this, "eventSelector", "", "Event selection Svc"}
FPGATrackSimEventInputHeader m_eventHeader
Gaudi::Property< int > m_maxEvents {this, "maxEvents", 10000, "Max Events"}
Gaudi::Property< int > m_region {this, "region", 0, "Region"}
Gaudi::Property< float > m_trim {this, "trim", 0.1, "trim modules with less than given percent of tracks"}
Gaudi::Property< std::string > m_outFileName {this, "OutFileName", "", "naming convention for maps"}
Gaudi::Property< std::string > m_keystring {this, "KeyString", "strip,barrel,2", "key layer to use for subrmap"}
Gaudi::Property< std::string > m_keystring2 {this, "KeyString2", "", "second key layer for 2D slicing"}
Gaudi::Property< int > m_nSlices {this, "nSlices", -1, "default is full granularity/maximum number of slices possible"}
Gaudi::Property< float > m_globalTrim {this, "globalTrim", 0.1, "Trimming applied globally to the key layer before determining slice boundaries"}
Gaudi::Property< std::string > m_description {this, "description", "", "tag description"}
Gaudi::Property< std::string > m_geoTag {this, "GeometryVersion", "ATLAS-P2-ITK-22-02-00", "Geometry tag that this set of maps is for. TODO can we store/read from wrappers?"}
Gaudi::Property< bool > m_remapModules {this, "remapModules", false, "Allow maps to be drawn that slice modules more finely, by remapping module indices"}
Gaudi::Property< bool > m_drawSlices {this, "drawSlices", false, "Draw the huge 2D slice histograms"}
FPGATrackSimModuleRelabelm_moduleRelabel = nullptr
std::map< FPGATrackSimModuleId, Modulem_modules
std::map< int, std::vector< Module * > > m_track2modules
std::map< int, std::vector< Module * > > m_slice2modules
std::map< int, int > m_track2slice
std::vector< FPGATrackSimHitm_pbHits
std::vector< FPGATrackSimHitm_peHits
std::vector< FPGATrackSimHitm_sbHits
std::vector< FPGATrackSimHitm_seHits
std::vector< FPGATrackSimHitm_allHits
int m_pbmax = -1
int m_sbmax = -1
std::vector< int > m_pemax = {-1,-1}
std::vector< int > m_semax = {-1,-1}
const std::vector< std::vector< std::string > > * m_planes {}
const std::vector< std::vector< std::string > > * m_planes2 {}
const std::vector< std::vector< std::string > > m_planes_generic
const std::vector< std::vector< std::string > > m_planes2_generic
Gaudi::Property< std::vector< std::vector< std::string > > > m_overridePlanes {this, "planes", m_planes_generic, "Logical layer assignments" }
Gaudi::Property< std::vector< std::vector< std::string > > > m_overridePlanes2 {this, "planes2", m_planes2_generic, "Logical layer assignments" }
std::map< std::string, std::set< int > > m_keylayer
std::map< std::string, std::set< int > > m_keylayer2
bool m_key2 = false
std::map< int, int > m_key_etamods
std::set< int > m_key_etamods2
std::set< int > m_usedTracks
std::vector< std::vector< std::vector< float > > > m_radii
std::vector< std::vector< std::vector< float > > > m_z
std::ofstream m_pmap
std::ofstream m_rmap
std::ofstream m_subrmap
std::ofstream m_etapat
std::ofstream m_radfile
std::ofstream m_zedfile
std::unique_ptr< TFile > m_monitorFile {}
const std::vector< uint32_t > m_diskIndex = {0,17,47,58,66}
std::map< std::string, SiliconTechm_det2tech = { {"pixel",SiliconTech::pixel}, {"strip",SiliconTech::strip} }
std::map< std::string, DetectorZonem_bec2zone = { {"barrel",DetectorZone::barrel}, {"posEndcap",DetectorZone::posEndcap}, {"negEndcap",DetectorZone::negEndcap} }
DataObjIDColl m_extendedExtraObjects
StoreGateSvc_t m_evtStore
 Pointer to StoreGate (event store by default)
StoreGateSvc_t m_detStore
 Pointer to StoreGate (detector store by default)
std::vector< SG::VarHandleKeyArray * > m_vhka
bool m_varHandleArraysDeclared

Detailed Description

Definition at line 33 of file FPGATrackSimMapMakerAlg.h.

Member Typedef Documentation

◆ FPGATrackSimModuleId

Definition at line 36 of file FPGATrackSimMapMakerAlg.h.

◆ StoreGateSvc_t

typedef ServiceHandle<StoreGateSvc> AthCommonDataStore< AthCommonMsg< Algorithm > >::StoreGateSvc_t
privateinherited

Definition at line 388 of file AthCommonDataStore.h.

Constructor & Destructor Documentation

◆ FPGATrackSimMapMakerAlg()

FPGATrackSimMapMakerAlg::FPGATrackSimMapMakerAlg ( const std::string & name,
ISvcLocator * pSvcLocator )

Definition at line 17 of file FPGATrackSimMapMakerAlg.cxx.

17 :
18 AthAlgorithm(name, pSvcLocator)
19{
20}
AthAlgorithm()
Default constructor:

◆ ~FPGATrackSimMapMakerAlg()

virtual FPGATrackSimMapMakerAlg::~FPGATrackSimMapMakerAlg ( )
virtualdefault

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareGaudiProperty ( Gaudi::Property< T, V, H > & hndl,
const SG::VarHandleKeyType &  )
inlineprivateinherited

specialization for handling Gaudi::Property<SG::VarHandleKey>

Definition at line 156 of file AthCommonDataStore.h.

158 {
160 hndl.value(),
161 hndl.documentation());
162
163 }
Gaudi::Details::PropertyBase & declareProperty(Gaudi::Property< T, V, H > &t)

◆ declareProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Algorithm > >::declareProperty ( Gaudi::Property< T, V, H > & t)
inlineinherited

Definition at line 145 of file AthCommonDataStore.h.

145 {
146 typedef typename SG::HandleClassifier<T>::type htype;
148 }
Gaudi::Details::PropertyBase & declareGaudiProperty(Gaudi::Property< T, V, H > &hndl, const SG::VarHandleKeyType &)
specialization for handling Gaudi::Property<SG::VarHandleKey>

◆ detStore()

const ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::detStore ( ) const
inlineinherited

The standard StoreGateSvc/DetectorStore Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 95 of file AthCommonDataStore.h.

◆ drawSlices()

void FPGATrackSimMapMakerAlg::drawSlices ( std::vector< FPGATrackSimHit > const & allHits)
private

Definition at line 721 of file FPGATrackSimMapMakerAlg.cxx.

722{
723 m_monitorFile->cd();
724
725 std::vector<TH2F*> h_slicemap;
726 char *hname = new char[20];
727
728 for (unsigned i = 0; i < (unsigned)m_nSlices.value(); i++)
729 {
730 sprintf(hname,"rz_slice%u",i);
731 // This should just default to the entire range, I think.
732 // The user can reduce the binning.
733 TH2F *h = new TH2F(hname,hname,7000,-3500,3500,1200,0,1200);
734 h_slicemap.push_back(h);
735 }
736
737 for (const auto& hit: allHits)
738 {
739 if (m_usedTracks.find(hit.getEventIndex()) == m_usedTracks.end()) continue; // skip if we don't use this track
740 int s = m_track2slice[hit.getEventIndex()];
741 h_slicemap[s]->Fill(hit.getZ(),hit.getR());
742 }
743
744 for (int i = 0; i < m_nSlices.value(); i++)
745 h_slicemap[i]->Write();
746
747 delete [] hname;
748}
std::unique_ptr< TFile > m_monitorFile
std::map< int, int > m_track2slice
Gaudi::Property< int > m_nSlices
TH2F(name, title, nxbins, bins_par2, bins_par3, bins_par4, bins_par5=None, bins_par6=None, path='', **kwargs)

◆ evtStore()

ServiceHandle< StoreGateSvc > & AthCommonDataStore< AthCommonMsg< Algorithm > >::evtStore ( )
inlineinherited

The standard StoreGateSvc (event store) Returns (kind of) a pointer to the StoreGateSvc.

Definition at line 85 of file AthCommonDataStore.h.

◆ execute()

StatusCode FPGATrackSimMapMakerAlg::execute ( )
override

Definition at line 69 of file FPGATrackSimMapMakerAlg.cxx.

70{
71 // Read inputs
72 bool done = false;
73 ATH_CHECK(readInputs(done));
74
75 if (done) {
76 SmartIF<IEventProcessor> appMgr{service("ApplicationMgr")};
77 if (!appMgr) {
78 ATH_MSG_ERROR("Failed to retrieve ApplicationMgr as IEventProcessor");
79 return StatusCode::FAILURE;
80 }
81 return appMgr->stopRun();
82 }
83
84 // Reset data pointers
85 m_eventHeader.reset();
86
87 return StatusCode::SUCCESS;
88}
#define ATH_CHECK
Evaluate an expression and check for errors.
#define ATH_MSG_ERROR(x)
FPGATrackSimEventInputHeader m_eventHeader
StatusCode readInputs(bool &done)

◆ extraDeps_update_handler()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::extraDeps_update_handler ( Gaudi::Details::PropertyBase & ExtraDeps)
protectedinherited

Add StoreName to extra input/output deps as needed.

use the logic of the VarHandleKey to parse the DataObjID keys supplied via the ExtraInputs and ExtraOuputs Properties to add the StoreName if it's not explicitly given

◆ extraOutputDeps()

const DataObjIDColl & AthAlgorithm::extraOutputDeps ( ) const
overridevirtualinherited

Return the list of extra output dependencies.

This list is extended to include symlinks implied by inheritance relations.

Definition at line 50 of file AthAlgorithm.cxx.

51{
52 // If we didn't find any symlinks to add, just return the collection
53 // from the base class. Otherwise, return the extended collection.
54 if (!m_extendedExtraObjects.empty()) {
56 }
57 return Algorithm::extraOutputDeps();
58}
DataObjIDColl m_extendedExtraObjects

◆ finalize()

StatusCode FPGATrackSimMapMakerAlg::finalize ( )
override

Definition at line 703 of file FPGATrackSimMapMakerAlg.cxx.

704{
705 // Write the output
711 m_monitorFile.reset();
712 delete m_moduleRelabel;
713 m_moduleRelabel = nullptr;
714 return StatusCode::SUCCESS;
715}
StatusCode writePmapAndRmap(std::vector< FPGATrackSimHit > const &pbHits, std::vector< FPGATrackSimHit > const &peHits, std::vector< FPGATrackSimHit > const &sbHits, std::vector< FPGATrackSimHit > const &seHits, int region)
StatusCode writeRadiiFile(std::vector< FPGATrackSimHit > const &allHits)
std::vector< FPGATrackSimHit > m_sbHits
std::vector< FPGATrackSimHit > m_seHits
std::vector< FPGATrackSimHit > m_pbHits
StatusCode writeMedianZFile(std::vector< FPGATrackSimHit > const &allHits)
FPGATrackSimModuleRelabel * m_moduleRelabel
Gaudi::Property< int > m_region
std::vector< FPGATrackSimHit > m_peHits
std::vector< FPGATrackSimHit > m_allHits
StatusCode writeSubrmap(std::vector< FPGATrackSimHit > const &allHits)

◆ findPlane()

int FPGATrackSimMapMakerAlg::findPlane ( const std::vector< std::vector< std::string > > * planes,
const std::string & test )
private

Definition at line 765 of file FPGATrackSimMapMakerAlg.cxx.

766{
767 int pcounter = 0;
768 for (auto& plane : *planes) {
769 for (auto& layer : plane) {
770 if (test == layer) return pcounter;
771 }
772 pcounter ++;
773 }
774 return -1;
775}

◆ initialize()

StatusCode FPGATrackSimMapMakerAlg::initialize ( )
override

Definition at line 23 of file FPGATrackSimMapMakerAlg.cxx.

24{
25
26 m_monitorFile.reset (new TFile((m_outFileName.value() + "region" + std::to_string(m_region) + ".root").c_str(), "RECREATE"));
27 std::stringstream ss(m_description);
28 std::string line;
29 ATH_MSG_INFO("Tag config:");
30 if (m_description.value() != "")
31 while (std::getline(ss, line, '\n'))
32 ATH_MSG_INFO('\t' << line);
33
34 // reset Hit and Module vectors
35 m_pbHits.clear(); m_peHits.clear(); m_sbHits.clear(); m_seHits.clear(); m_allHits.clear();
36 m_track2modules.clear(); m_track2slice.clear(); m_slice2modules.clear();
37 m_key_etamods.clear(); m_key_etamods2.clear(); m_usedTracks.clear();
38 m_radii.clear(); m_keylayer.clear(); m_keylayer2.clear();
39 m_modules.clear();
40
41 // Set up the module relabel tool.
42 m_moduleRelabel = new FPGATrackSimModuleRelabel(m_geoTag.value(), m_remapModules);
43
44 // We need to select this before calling parseKeyString() in case the user
45 // has specified a plane (logical layer) as the keystring.
46 // If running with the new regions. Don't use the hardcoded layer assignments. Use either a generic one
47 // or one passed in via a flag.
48 ATH_MSG_INFO("Using Python configuration for regions. All pixel layers -> first stage, all strip layers -> second stage");
49 m_planes = &(m_overridePlanes.value());
50 m_planes2 = &(m_overridePlanes2.value());
51
53 ATH_CHECK(m_evtSel.retrieve());
54
55 ATH_CHECK(m_hitSGInputTool.retrieve(EnableTool{!m_hitSGInputTool.empty()}));
56 ATH_CHECK(m_hitInputTool.retrieve(EnableTool{!m_hitInputTool.empty()}));
57
58 ATH_MSG_DEBUG("initialize() Instantiating root objects");
59 ATH_MSG_DEBUG("initialize() Finished");
60
61
62 return StatusCode::SUCCESS;
63}
#define ATH_MSG_INFO(x)
#define ATH_MSG_DEBUG(x)
static Double_t ss
ToolHandle< IFPGATrackSimInputTool > m_hitSGInputTool
std::vector< std::vector< std::vector< float > > > m_radii
std::map< std::string, std::set< int > > m_keylayer2
std::map< std::string, std::set< int > > m_keylayer
Gaudi::Property< std::string > m_description
std::map< FPGATrackSimModuleId, Module > m_modules
Gaudi::Property< std::string > m_outFileName
const std::vector< std::vector< std::string > > * m_planes
ToolHandle< IFPGATrackSimEventInputHeaderTool > m_hitInputTool
std::map< int, std::vector< Module * > > m_track2modules
Gaudi::Property< std::vector< std::vector< std::string > > > m_overridePlanes
Gaudi::Property< bool > m_remapModules
const std::vector< std::vector< std::string > > * m_planes2
std::map< int, int > m_key_etamods
Gaudi::Property< std::vector< std::vector< std::string > > > m_overridePlanes2
Gaudi::Property< std::string > m_geoTag
std::map< int, std::vector< Module * > > m_slice2modules
ServiceHandle< IFPGATrackSimEventSelectionSvc > m_evtSel

◆ inputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::inputHandles ( ) const
overridevirtualinherited

Return this algorithm's input handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ isOnKeyLayer()

bool FPGATrackSimMapMakerAlg::isOnKeyLayer ( int keynum,
SiliconTech det,
DetectorZone bec,
int lyr )
private

Definition at line 750 of file FPGATrackSimMapMakerAlg.cxx.

751{
752 int det = static_cast<int>(t_det);
753 int bec = static_cast<int>(t_bec);
754 if (keynum == 1)
755 if (m_keylayer["det"].find(det) != m_keylayer["det"].end() && m_keylayer["bec"].find(bec) != m_keylayer["bec"].end() && m_keylayer["lyr"].find(lyr) != m_keylayer["lyr"].end())
756 return true;
757
758 if (keynum == 2)
759 if (m_keylayer2["det"].find(det) != m_keylayer2["det"].end() && m_keylayer2["bec"].find(bec) != m_keylayer2["bec"].end() && m_keylayer2["lyr"].find(lyr) != m_keylayer2["lyr"].end())
760 return true;
761
762 return false;
763}
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:138

◆ makeRmapLines()

std::string FPGATrackSimMapMakerAlg::makeRmapLines ( std::vector< FPGATrackSimHit > const & hits,
SiliconTech det,
DetectorZone bec,
int max )
private

Definition at line 777 of file FPGATrackSimMapMakerAlg.cxx.

778{
779 std::stringstream rmap_line;
780 std::set<int> etas, phis;
781
782 for(int lyr = 0; lyr <= max; lyr++)
783 {
784 etas.clear();
785 phis.clear();
786 for (const auto& hit: hits)
787 {
788 if(static_cast<int>(hit.getPhysLayer()) == lyr && hit.getDetectorZone() == bec) // cast from uint to int just to remove Wsign-compare warnings
789 {
790 etas.insert(hit.getEtaModule());
791 phis.insert(hit.getPhiModule());
792 }
793 }
794 if (etas.size() != 0) rmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " " << *phis.begin() << " " << *phis.rbegin() << " " << phis.size() << " " << *etas.begin() << " " << *etas.rbegin() << " " << etas.size() << "\n";
795 else rmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " 0 0 0 0 0 0\n";
796
797 }
798
799 return rmap_line.str();
800}
#define max(a, b)
Definition cfImp.cxx:41

◆ makeSubrmapLines()

std::string FPGATrackSimMapMakerAlg::makeSubrmapLines ( std::vector< Module * > const & allmods,
SiliconTech det,
DetectorZone bec,
int max )
private

Definition at line 900 of file FPGATrackSimMapMakerAlg.cxx.

901{
902 std::stringstream subrmap_line;
903 std::set<int> etas, phis;
904
905 std::vector<Module*> mods;
906 for (auto* mod: allmods) // just want modules in pb/pe/sb/se etc, not all at once
907 if (mod->det == det && mod->bec == bec) mods.push_back(mod);
908
909 for(int lyr = 0; lyr <= max; lyr++)
910 {
911 etas.clear();
912 phis.clear();
913 for (auto mod: mods)
914 {
915 if(mod->lyr == lyr)
916 {
917 etas.insert(mod->eta);
918 phis.insert(mod->phi);
919 }
920 }
921 if (etas.size() != 0) subrmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " " << *phis.begin() << " " << *phis.rbegin() << " " << phis.size() << " " << *etas.begin() << " " << *etas.rbegin() << " " << etas.size() << "\n";
922 else subrmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " 0 0 0 0 0 0\n";
923
924 }
925
926 return subrmap_line.str();
927}

◆ msg()

MsgStream & AthCommonMsg< Algorithm >::msg ( ) const
inlineinherited

Definition at line 24 of file AthCommonMsg.h.

24 {
25 return this->msgStream();
26 }

◆ msgLvl()

bool AthCommonMsg< Algorithm >::msgLvl ( const MSG::Level lvl) const
inlineinherited

Definition at line 30 of file AthCommonMsg.h.

30 {
31 return this->msgLevel(lvl);
32 }

◆ outputHandles()

virtual std::vector< Gaudi::DataHandle * > AthCommonDataStore< AthCommonMsg< Algorithm > >::outputHandles ( ) const
overridevirtualinherited

Return this algorithm's output handles.

We override this to include handle instances from key arrays if they have not yet been declared. See comments on updateVHKA.

◆ parseKeyString()

void FPGATrackSimMapMakerAlg::parseKeyString ( )
private

Definition at line 802 of file FPGATrackSimMapMakerAlg.cxx.

803{
804 // Parse keystring and define the Key Layer
805 std::string delimiter = ",";
806 std::string s = m_keystring.value();
807 std::string det, bec, lyr;
808 std::map <std::string, std::vector<std::string>> abrevs = { {"pb",{"pixel","barrel"}}, {"pe",{"pixel","endcap"}}, {"sb",{"strip","barrel"}}, {"se",{"strip","endcap"}} };
809 if( s.find(delimiter) != std::string::npos) // keylayer format is 'strip,barrel,4'
810 {
811 try {
812 std::string det = s.substr(0, s.find(delimiter));
813 s.erase(0, s.find(delimiter) + delimiter.length());
814 std::string bec = s.substr(0, s.find(delimiter));
815 s.erase(0, s.find(delimiter) + delimiter.length());
816 std::string lyr = s.substr(0, s.find(delimiter));
817 s.erase(0, s.find(delimiter) + delimiter.length());
818 m_keylayer["det"].insert(static_cast<int>(m_det2tech[det]));
819 m_keylayer["bec"].insert(static_cast<int>(m_bec2zone[bec]));
820 m_keylayer["lyr"].insert(std::stoi(lyr));
821 ATH_MSG_INFO("Using key layer: " << m_keystring.value());
822 } catch (...){
823 ATH_MSG_ERROR("Invalid KeyString: '" << m_keystring.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
824 }
825 }
826 else // keylayer format is 'plane 0'
827 {
828 std::string delimiter = " ";
829 try {
830 s.erase(0, s.find(delimiter) + delimiter.length());
831 std::string plane = s.substr(0, s.find(delimiter));
832 std::vector<std::string> s = (m_planes)->at(std::stoi(plane));
833 for (unsigned i = 0; i < s.size(); i++){
834 std::string reg = s[i].substr(0, 2);
835 std::vector<std::string> zone = abrevs[reg];
836 if (s[i].back() == '+') zone[1] = "posEndcap";
837 if (s[i].back() == '-') zone[1] = "negEndcap";
838 s[i].erase(std::remove(s[i].begin(), s[i].end(), '+'), s[i].end());
839 s[i].erase(std::remove(s[i].begin(), s[i].end(), '-'), s[i].end());
840 std::string lyr = s[i].substr(2);
841 m_keylayer["det"].insert(static_cast<int>(m_det2tech[zone[0]]));
842 m_keylayer["bec"].insert(static_cast<int>(m_bec2zone[zone[1]]));
843 m_keylayer["lyr"].insert(std::stoi(lyr));
844 }
845 ATH_MSG_INFO("Using key layer (in plane X format) " << m_keystring.value());
846 } catch (...){
847 ATH_MSG_ERROR("Invalid KeyString: '" << m_keystring.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
848 }
849 }
850
851 // if 2D slicing
852 if (m_keystring2.value() != "")
853 {
854 m_key2 = true;
855 std::string s = m_keystring2.value();
856 if( s.find(delimiter) != std::string::npos) // keylayer format is 'strip,barrel,8'
857 {
858 try {
859 std::string det = s.substr(0, s.find(delimiter));
860 s.erase(0, s.find(delimiter) + delimiter.length());
861 std::string bec = s.substr(0, s.find(delimiter));
862 s.erase(0, s.find(delimiter) + delimiter.length());
863 std::string lyr = s.substr(0, s.find(delimiter));
864 s.erase(0, s.find(delimiter) + delimiter.length());
865 m_keylayer2["det"].insert(static_cast<int>(m_det2tech[det]));
866 m_keylayer2["bec"].insert(static_cast<int>(m_bec2zone[bec]));
867 m_keylayer2["lyr"].insert(std::stoi(lyr));
868 ATH_MSG_INFO("Using key layer (2D): " << m_keystring2.value());
869 } catch (...){
870 ATH_MSG_ERROR("Invalid KeyString2: '" << m_keystring2.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
871 }
872 }
873 else // keylayer format is 'plane 0'
874 {
875 std::string delimiter = " ";
876 try {
877 s.erase(0, s.find(delimiter) + delimiter.length());
878 std::string plane = s.substr(0, s.find(delimiter));
879 std::vector<std::string> s = (m_planes)->at(std::stoi(plane));
880 for (unsigned i = 0; i < s.size(); i++){
881 std::string reg = s[i].substr(0, 2);
882 std::vector<std::string> zone = abrevs[reg];
883 if (s[i].back() == '+') zone[1] = "posEndcap";
884 if (s[i].back() == '-') zone[1] = "negEndcap";
885 s[i].erase(std::remove(s[i].begin(), s[i].end(), '+'), s[i].end());
886 s[i].erase(std::remove(s[i].begin(), s[i].end(), '-'), s[i].end());
887 std::string lyr = s[i].substr(2);
888 m_keylayer2["det"].insert(static_cast<int>(m_det2tech[zone[0]]));
889 m_keylayer2["bec"].insert(static_cast<int>(m_bec2zone[zone[1]]));
890 m_keylayer2["lyr"].insert(std::stoi(lyr));
891 }
892 ATH_MSG_INFO("Using key layer (2D) (in plane X format): " << m_keystring2.value());
893 } catch (...){
894 ATH_MSG_ERROR("Invalid KeyString2: '" << m_keystring2.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
895 }
896 }
897 }
898}
std::map< std::string, SiliconTech > m_det2tech
Gaudi::Property< std::string > m_keystring2
Gaudi::Property< std::string > m_keystring
std::map< std::string, DetectorZone > m_bec2zone
DataModel_detail::iterator< DVL > remove(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, const T &value)
Specialization of remove for DataVector/List.

◆ readInputs()

StatusCode FPGATrackSimMapMakerAlg::readInputs ( bool & done)
private

Definition at line 96 of file FPGATrackSimMapMakerAlg.cxx.

97{
98 // Read primary input
99 if ( !m_hitSGInputTool.empty()) {
100 ATH_CHECK(m_hitSGInputTool->readData(&m_eventHeader, Gaudi::Hive::currentContext()));
101 ATH_MSG_DEBUG("Loaded " << m_eventHeader.nHits() << " hits in event header from SG");
102 }
103 else {
104 ATH_CHECK(m_hitInputTool->readData(&m_eventHeader, done));
105 if (done)
106 {
107 ATH_MSG_INFO("Cannot read more events from file, returning");
108 return StatusCode::SUCCESS; // end of loop over events
109 }
110 }
111
112 // Ask the event selection service if this event really falls within the region.
113 if (!m_evtSel->selectEvent(&m_eventHeader))
114 {
115 ATH_MSG_DEBUG("Event skipped by: " << m_evtSel->name());
116 return StatusCode::SUCCESS;
117 }
118
119 FPGATrackSimEventInfo eventinfo = m_eventHeader.event();
120 ATH_MSG_DEBUG ("Getting Event " << eventinfo);
121
122 for (auto hit: m_eventHeader.hits()) // fill track to modules map and hit vectors
123 {
124 // barcode cut: these hits are not associated with our single muon tracks
125 if (hit.getBarcodePt() == 0) continue;
126
127 SiliconTech det = hit.getDetType();
128 DetectorZone bec = hit.getDetectorZone();
129 int lyr = hit.getPhysLayer();
130 int eta = hit.getEtaModule();
131 int phi = hit.getPhiModule();
132
133 if (hit.isPixel() && hit.isBarrel()) {
134 m_pbHits.push_back(hit);
135 if (lyr > m_pbmax) m_pbmax = lyr;
136 }
137 else if (hit.isPixel() && !hit.isBarrel()) {
138 // Perform the layer + module number remapping using our tool.
139 m_moduleRelabel->remap(hit);
140 eta = hit.getEtaModule();
141 lyr = hit.getPhysLayer();
142
143 m_peHits.push_back(hit);
144 if (bec == DetectorZone::posEndcap && lyr > m_pemax[0]) m_pemax[0] = lyr;
145 if (bec == DetectorZone::negEndcap && lyr > m_pemax[1]) m_pemax[1] = lyr;
146 }
147 else if (!hit.isPixel() && hit.isBarrel()) {
148 m_sbHits.push_back(hit);
149 if (lyr > m_sbmax) m_sbmax = lyr;
150 }
151 else if (!hit.isPixel() && !hit.isBarrel()) {
152 m_seHits.push_back(hit);
153 if (bec == DetectorZone::posEndcap && lyr > m_semax[0]) m_semax[0] = lyr;
154 if (bec == DetectorZone::negEndcap && lyr > m_semax[1]) m_semax[1] = lyr;
155 }
156 else ATH_MSG_ERROR("Invalid Region");
157
158 // keep track of all etamods on the key layer for slicing
159 if (isOnKeyLayer(1,det,bec,lyr)) {
160 if (m_key_etamods.count(eta) == 0) {
161 m_key_etamods.insert(std::pair<int, int>(eta, 1));
162 } else {
163 m_key_etamods[eta] += 1;
164 }
165 }
166
167 if (m_key2) // if doing 2D slicing
168 if (isOnKeyLayer(2,det,bec,lyr)) m_key_etamods2.insert(eta);
169
170 // Keep a global record of all modules as we see them, indexed by the ID tuple.
171 Module mod = Module(det, bec, lyr, eta, phi);
172 if (m_modules.count(mod.moduleId()) == 0) {
173 m_modules.insert(std::pair<FPGATrackSimModuleId, Module>(mod.moduleId(), mod));
174 }
175 Module* modref = &(m_modules[mod.moduleId()]);
176
177 if (std::find(m_track2modules[hit.getEventIndex()].begin(), m_track2modules[hit.getEventIndex()].end(), modref) == m_track2modules[hit.getEventIndex()].end())
178 m_track2modules[hit.getEventIndex()].push_back(modref);
179 m_allHits.push_back(hit);
180 }
181
182 return StatusCode::SUCCESS;
183}
Scalar eta() const
pseudorapidity method
Scalar phi() const
phi method
SiliconTech
DetectorZone
bool isOnKeyLayer(int keynum, SiliconTech det, DetectorZone bec, int lyr)

◆ renounce()

std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > AthCommonDataStore< AthCommonMsg< Algorithm > >::renounce ( T & h)
inlineprotectedinherited

Definition at line 380 of file AthCommonDataStore.h.

381 {
382 h.renounce();
384 }
std::enable_if_t< std::is_void_v< std::result_of_t< decltype(&T::renounce)(T)> > &&!std::is_base_of_v< SG::VarHandleKeyArray, T > &&std::is_base_of_v< Gaudi::DataHandle, T >, void > renounce(T &h)

◆ renounceArray()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ sysInitialize()

StatusCode AthAlgorithm::sysInitialize ( )
overridevirtualinherited

Override sysInitialize.

Override sysInitialize from the base class.

Loop through all output handles, and if they're WriteCondHandles, automatically register them and this Algorithm with the CondSvc

Scan through all outputHandles, and if they're WriteCondHandles, register them with the CondSvc

Reimplemented from AthCommonDataStore< AthCommonMsg< Algorithm > >.

Reimplemented in AthAnalysisAlgorithm, AthFilterAlgorithm, AthHistogramAlgorithm, and PyAthena::Alg.

Definition at line 66 of file AthAlgorithm.cxx.

66 {
68
69 if (sc.isFailure()) {
70 return sc;
71 }
72 ServiceHandle<ICondSvc> cs("CondSvc",name());
73 for (auto h : outputHandles()) {
74 if (h->isCondition() && h->mode() == Gaudi::DataHandle::Writer) {
75 // do this inside the loop so we don't create the CondSvc until needed
76 if ( cs.retrieve().isFailure() ) {
77 ATH_MSG_WARNING("no CondSvc found: won't autoreg WriteCondHandles");
78 return StatusCode::SUCCESS;
79 }
80 if (cs->regHandle(this,*h).isFailure()) {
81 sc = StatusCode::FAILURE;
82 ATH_MSG_ERROR("unable to register WriteCondHandle " << h->fullKey()
83 << " with CondSvc");
84 }
85 }
86 }
87 return sc;
88}
#define ATH_MSG_WARNING(x)
static Double_t sc
virtual StatusCode sysInitialize() override
Override sysInitialize.
AthCommonDataStore(const std::string &name, T... args)
virtual std::vector< Gaudi::DataHandle * > outputHandles() const override
::StatusCode StatusCode
StatusCode definition for legacy code.

◆ sysStart()

virtual StatusCode AthCommonDataStore< AthCommonMsg< Algorithm > >::sysStart ( )
overridevirtualinherited

Handle START transition.

We override this in order to make sure that conditions handle keys can cache a pointer to the conditions container.

◆ updateVHKA()

void AthCommonDataStore< AthCommonMsg< Algorithm > >::updateVHKA ( Gaudi::Details::PropertyBase & )
inlineinherited

Definition at line 308 of file AthCommonDataStore.h.

308 {
309 // debug() << "updateVHKA for property " << p.name() << " " << p.toString()
310 // << " size: " << m_vhka.size() << endmsg;
311 for (auto &a : m_vhka) {
313 for (auto k : keys) {
314 k->setOwner(this);
315 }
316 }
317 }
std::vector< SG::VarHandleKeyArray * > m_vhka

◆ writeEtaPatterns()

StatusCode FPGATrackSimMapMakerAlg::writeEtaPatterns ( )
private

Definition at line 505 of file FPGATrackSimMapMakerAlg.cxx.

506{
507 std::string slicingType = "";
508 if (m_key2) slicingType = "2D";
509
510 std::string etapat_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".patt";
511
512 ATH_MSG_INFO("Creating eta patterns file: " << etapat_path);
513 m_etapat.open(etapat_path, std::ofstream::out);
514
515 // assign logical layer to each module
516 for (auto& pair: m_track2modules) {
517 for (auto& m: pair.second)
518 {
519 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::barrel) m->plane = findPlane(m_planes, "pb" + std::to_string(m->lyr));
520 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::posEndcap) m->plane = findPlane(m_planes, "pe" + std::to_string(m->lyr) + "+");
521 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::negEndcap) m->plane = findPlane(m_planes, "pe" + std::to_string(m->lyr) + "-");
522
523 if (m->det == SiliconTech::strip && m->bec == DetectorZone::barrel) m->plane = findPlane(m_planes, "sb" + std::to_string(m->lyr));
524 if (m->det == SiliconTech::strip && m->bec == DetectorZone::posEndcap) m->plane = findPlane(m_planes, "se" + std::to_string(m->lyr) + "+");
525 if (m->det == SiliconTech::strip && m->bec == DetectorZone::negEndcap) m->plane = findPlane(m_planes, "se" + std::to_string(m->lyr) + "-");
526 }
527 }
528
529 for(auto trk: m_usedTracks)
530 {
531 std::stringstream track_etapatts;
532 unsigned planesDone = 0;
533 for (unsigned p = 0; p < (m_planes)->size(); p++)
534 {
535 for (const Module* m : m_track2modules[trk]) {
536 if (m->plane == static_cast<int>(p))
537 {
538 track_etapatts << std::to_string(static_cast<int>(m->det)) << "\t" << std::to_string(static_cast<int>(m->bec)) << "\t" << std::to_string(m->eta) << "\t\t";
539 planesDone++;
540 break;
541 }
542 }
543 }
544 if (planesDone == (m_planes)->size())
545 m_etapat << track_etapatts.str() << "\n";
546
547 }
548 m_etapat.close();
549 return StatusCode::SUCCESS;
550}
int findPlane(const std::vector< std::vector< std::string > > *planes, const std::string &test)

◆ writeMedianZFile()

StatusCode FPGATrackSimMapMakerAlg::writeMedianZFile ( std::vector< FPGATrackSimHit > const & allHits)
private

Definition at line 622 of file FPGATrackSimMapMakerAlg.cxx.

623{
624 // calculate median z. We do this globally and slice-by-slice.
625 m_z.resize(m_nSlices.value(), std::vector<std::vector<float>>((m_planes2)->size(),std::vector<float>(0)));
626 for (const auto& hit: allHits)
627 {
628 SiliconTech det = hit.getDetType();
629 DetectorZone bec = hit.getDetectorZone();
630 int lyr = hit.getPhysLayer();
631 int slice = m_track2slice[hit.getEventIndex()];
632 int plane = -1;
633 if (det == SiliconTech::pixel && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "pb" + std::to_string(lyr));
634 if (det == SiliconTech::pixel && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "+");
635 if (det == SiliconTech::pixel && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "-");
636 if (det == SiliconTech::strip && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "sb" + std::to_string(lyr));
637 if (det == SiliconTech::strip && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "+");
638 if (det == SiliconTech::strip && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "-");
639
640 if (plane != -1) {
641 m_z[slice][plane].push_back(hit.getZ());
642 }
643 }
644
645 // print file
646 std::string zed_path = m_outFileName.value() + "region" + std::to_string(m_region) + "_z.txt";
647
648 ATH_MSG_INFO("Creating median z file: " << zed_path);
649 m_zedfile.open(zed_path, std::ofstream::out);
650 for (int s = 0; s < m_nSlices.value(); s++){
651 m_zedfile << std::to_string(s) << " ";
652 for (unsigned p = 0; p < (m_planes2)->size(); p++){
653 if (m_z[s][p].size() != 0){
654 float minZ = *std::min_element(m_z[s][p].begin(), m_z[s][p].end());
655 float maxZ = *std::max_element(m_z[s][p].begin(), m_z[s][p].end());
656 float median = (minZ + maxZ)/2;
657 m_zedfile << std::setprecision(3) << std::fixed << median << " ";
658 } else {
659 int median = -1;
660 m_zedfile << median << " ";
661 }
662 }
663 m_zedfile << std::endl;
664 }
665
666 // Now do this globally. Note: should this be meanZ instead of medianZ in the forward region?
667 m_zedfile << -1 << " ";
668 for (unsigned p = 0; p < (m_planes2)->size(); p++) {
669 float minZ = 0;
670 float maxZ = 0;
671 bool doneInitial = false;
672 for (int s = 0; s < m_nSlices.value(); s++) {
673 if (m_z[s][p].size() != 0) {
674 float newMinZ = *std::min_element(m_z[s][p].begin(), m_z[s][p].end());
675 float newMaxZ = *std::max_element(m_z[s][p].begin(), m_z[s][p].end());
676 // slightly clunky, but z can be positive and negative so there's not a sane initial/placeholder value.
677 if (doneInitial) {
678 minZ = std::min(minZ, newMinZ);
679 maxZ = std::max(maxZ, newMaxZ);
680 } else {
681 minZ = newMinZ;
682 maxZ = newMaxZ;
683 doneInitial = true;
684 }
685 }
686 }
687 if (doneInitial) {
688 float median = (minZ + maxZ)/2;
689 m_zedfile << std::setprecision(3) << std::fixed << median << " ";
690 } else {
691 int median = -1;
692 m_zedfile << median << " ";
693 }
694 }
695 m_zedfile << std::endl;
696
697 m_zedfile.close();
698
699 return StatusCode::SUCCESS;
700}
std::vector< std::vector< std::vector< float > > > m_z
float median(std::vector< float > &Vec)

◆ writePmapAndRmap()

StatusCode FPGATrackSimMapMakerAlg::writePmapAndRmap ( std::vector< FPGATrackSimHit > const & pbHits,
std::vector< FPGATrackSimHit > const & peHits,
std::vector< FPGATrackSimHit > const & sbHits,
std::vector< FPGATrackSimHit > const & seHits,
int region )
private

Definition at line 191 of file FPGATrackSimMapMakerAlg.cxx.

192{
193 // Plane Map
194
195 // to avoid vector _M_range_check errors, print at least one line for each DetectorZone
196 if (m_pbmax == -1) m_pbmax = 0;
197 if (m_sbmax == -1) m_sbmax = 0;
198 if (m_pemax[0] == -1) m_pemax[0] = 0;
199 if (m_pemax[1] == -1) m_pemax[1] = 0;
200 if (m_semax[0] == -1) m_semax[0] = 0;
201 if (m_semax[1] == -1) m_semax[1] = 0;
202
203 std::string pmap_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".pmap";
204 ATH_MSG_INFO("Creating pmap: " << pmap_path);
205 m_pmap.open(pmap_path, std::ofstream::out);
206
207 m_pmap << m_geoTag.value() << "\n" << m_planes->size() << " logical_s1\n" << m_planes2->size() << " logical_s2\n";
208 m_pmap << m_pbmax+1 << " pixel barrel \n" << m_pemax[0]+1 << " pixel endcap+ \n" << m_pemax[1]+1 << " pixel endcap- \n";
209 m_pmap << m_sbmax+1 << " SCT barrel \n" << m_semax[0]+1 << " SCT endcap+\n" << m_semax[1]+1 << " SCT endcap-\n";
210 m_pmap << "! silicon endCap physDisk physLayer ['stereo' stripSide <strip only>] 'plane1' logiLayer1 'plane2' logiLayer2\n";
211 m_pmap << "\nregion " << reg << "\n";
212
213 int p1,p2;
214 for (int lyr = 0; lyr <= m_pbmax; lyr++) { // Pixel Barrel
215 p1 = findPlane(m_planes, "pb" + std::to_string(lyr));
216 p2 = findPlane(m_planes2, "pb" + std::to_string(lyr));
217 m_pmap << "pixel 0 -1 " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
218 }
219 for (int lyr = 0; lyr <= m_pemax[0]; lyr++) { // Pixel Postive Endap
220 p1 = findPlane(m_planes, "pe" + std::to_string(lyr) + "+");
221 p2 = findPlane(m_planes2, "pe" + std::to_string(lyr) + "+");
222 m_pmap << "pixel 1 " << lyr << " " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
223 }
224 for (int lyr = 0; lyr <= m_pemax[1]; lyr++) { // Pixel Negative Endcap
225 p1 = findPlane(m_planes, "pe" + std::to_string(lyr) + "-");
226 p2 = findPlane(m_planes2, "pe" + std::to_string(lyr) + "-");
227 m_pmap << "pixel 2 " << lyr << " " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
228 }
229 for (int lyr = 0; lyr <= m_sbmax; lyr++) { // Strip Barrel
230 p1 = findPlane(m_planes, "sb" + std::to_string(lyr));
231 p2 = findPlane(m_planes2, "sb" + std::to_string(lyr));
232 m_pmap << "SCT 0 -1 " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
233 }
234 for (int lyr = 0; lyr <= m_semax[0]; lyr++) { // Strip Positive Endcap
235 p1 = findPlane(m_planes, "se" + std::to_string(lyr) + "+");
236 p2 = findPlane(m_planes2, "se" + std::to_string(lyr) + "+");
237 m_pmap << "SCT 1 " << lyr/2 << " " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
238 }
239 for (int lyr = 0; lyr <= m_semax[1]; lyr++) { // Strip Negative Endcap
240 p1 = findPlane(m_planes, "se" + std::to_string(lyr) + "-");
241 p2 = findPlane(m_planes2, "se" + std::to_string(lyr) + "-");
242 m_pmap << "SCT 2 " << lyr/2 << " " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
243 }
244
245 // Region Map
246 std::string rmap_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".rmap";
247 ATH_MSG_INFO("Creating rmap: " << rmap_path);
248 m_rmap.open(rmap_path, std::ofstream::out);
249 m_rmap << "towers 1 phi 16\n\n0\n";
250
254
258
259 m_pmap.close();
260 m_rmap.close();
261
262 // Step 1: Read the entire contents of the file
263 std::ifstream inputFile(pmap_path);
264 if (!inputFile) {
265 ATH_MSG_ERROR("Error: Unable to open file for reading: " << pmap_path);
266 return StatusCode::FAILURE;
267 }
268
269 std::ostringstream buffer;
270 buffer << inputFile.rdbuf(); // Reading the entire file into the stringstream
271 std::string fileContent = buffer.str();
272 inputFile.close();
273
274 // Step 2: Concatenate the content n times
275 std::string newContent;
276 for (int i = 0; i < m_nSlices; ++i) {
277 newContent += fileContent;
278 newContent += '\n';
279 }
280
281 // Step 3: Write the new content back to the same file
282 std::ofstream outputFile(pmap_path);
283 if (!outputFile) {
284 ATH_MSG_ERROR("Error: Unable to open file for writing: " << pmap_path);
285 return StatusCode::FAILURE;
286 }
287
288 outputFile << newContent;
289 outputFile.close();
290
291 return StatusCode::SUCCESS;
292}
std::string makeRmapLines(std::vector< FPGATrackSimHit > const &hits, SiliconTech det, DetectorZone bec, int max)

◆ writeRadiiFile()

StatusCode FPGATrackSimMapMakerAlg::writeRadiiFile ( std::vector< FPGATrackSimHit > const & allHits)
private

Definition at line 552 of file FPGATrackSimMapMakerAlg.cxx.

553{
554 // calculate mean radii.
555 m_radii.resize(m_nSlices.value(), std::vector<std::vector<float>>(m_planes2->size(),std::vector<float>(0)));
556 for (const auto& hit: allHits)
557 {
558 SiliconTech det = hit.getDetType();
559 DetectorZone bec = hit.getDetectorZone();
560 int lyr = hit.getPhysLayer();
561 int slice = m_track2slice[hit.getEventIndex()];
562 int plane = -1;
563 if (det == SiliconTech::pixel && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "pb" + std::to_string(lyr));
564 if (det == SiliconTech::pixel && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "+");
565 if (det == SiliconTech::pixel && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "-");
566 if (det == SiliconTech::strip && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "sb" + std::to_string(lyr));
567 if (det == SiliconTech::strip && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "+");
568 if (det == SiliconTech::strip && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "-");
569
570 if (plane != -1) {
571 m_radii[slice][plane].push_back(hit.getR());
572 }
573 }
574
575 // print file
576 std::string radii_path = m_outFileName.value() + "region" + std::to_string(m_region) + "_radii.txt";
577
578 ATH_MSG_INFO("Creating radii file: " << radii_path);
579 m_radfile.open(radii_path, std::ofstream::out);
580 for (int s = 0; s < m_nSlices.value(); s++){
581 m_radfile << std::to_string(s) << " ";
582 for (unsigned p = 0; p < (m_planes2)->size(); p++){
583 if (m_radii[s][p].size() != 0){
584 // "If left to type inference, op operates on values of the same type as
585 // init which can result in unwanted casting of the iterator elements."
586 // https://en.cppreference.com/w/cpp/algorithm/accumulate
587 float avg = std::accumulate(m_radii[s][p].begin(), m_radii[s][p].end(), 0.0f) / float(m_radii[s][p].size());
588 m_radfile << std::setprecision(3) << std::fixed << avg << " ";
589 } else {
590 int avg = -1;
591 m_radfile << avg << " ";
592 }
593 }
594 m_radfile << "\n";
595 }
596
597 // Calculate global mean radii by reversing the order of the above two loops.
598 m_radfile << -1 << " ";
599 for (unsigned p = 0; p < (m_planes2)->size(); p++) {
600 float avg = 0;
601 int count = 0;
602 for (int s = 0; s < m_nSlices.value(); s++) {
603 if (m_radii[s][p].size() != 0) {
604 avg = std::accumulate(m_radii[s][p].begin(), m_radii[s][p].end(), avg);
605 count += m_radii[s][p].size();
606 }
607 }
608 if (count > 0) {
609 avg /= float(count);
610 m_radfile << std::setprecision(3) << std::fixed << avg << " ";
611 } else {
612 m_radfile << -1 << " ";
613 }
614 }
615 m_radfile << std::endl;
616
617 m_radfile.close();
618
619 return StatusCode::SUCCESS;
620}
int count(std::string s, const std::string &regx)
count how many occurances of a regx are in a string
Definition hcg.cxx:146
avg(a, b)
Definition Recovery.py:79

◆ writeSubrmap()

StatusCode FPGATrackSimMapMakerAlg::writeSubrmap ( std::vector< FPGATrackSimHit > const & allHits)
private

Definition at line 294 of file FPGATrackSimMapMakerAlg.cxx.

295{
296 /* ---------- Create z-slices ---------- */
297
298 // BEFORE DOING ANYTHING ELSE, apply global trimming to m_key_etamods.
299 std::set<int> key_etamods;
300 // First, sum up the total number of hits in the key layer. There should be a one-liner for this...
301 float total_hits = 0;
302 for (auto const &etamod : m_key_etamods) {
303 total_hits += etamod.second;
304 }
305 ATH_MSG_INFO("Found " << total_hits << " hits in the key layer, applying global trim factor of " << m_globalTrim << "%");
306
307 // Then, do the trim.
308 for (auto const &etamod : m_key_etamods) {
309 if (m_globalTrim == 0 || ((etamod.second / total_hits) >= m_globalTrim*0.01)) {
310 key_etamods.insert(etamod.first);
311 } else {
312 ATH_MSG_INFO("Eta module " << etamod.first << " only contains " << etamod.second << " out of " << total_hits << " hits, excluding from slices.");
313 }
314 }
315
316 if (m_nSlices.value() == -1) m_nSlices.value() = key_etamods.size(); //default is full granularity slicing
317 float etasPerSlice = float(key_etamods.size())/m_nSlices.value();
318 std::vector<std::vector<int>> key_modules_for_slices; // indexed by slice, holds module eta values
319
320 // easier to use vector than set, convert m_key_etamods into key_etas
321 std::vector<int> key_etas;
322 std::vector<int> key_etas2; // used if 2D slicing
323 key_etas.insert(key_etas.end(), key_etamods.begin(), key_etamods.end());
324
325 for (unsigned i = 0; i < key_etas.size(); i++)
326 {
327 if (i >= (key_modules_for_slices.size() * etasPerSlice)) key_modules_for_slices.push_back(std::vector<int>());
328 key_modules_for_slices.back().push_back(key_etas[i]);
329 }
330
331 std::map<int, int> keymod2slice;
332 for (unsigned s = 0; s < key_modules_for_slices.size(); s++)
333 for (unsigned e = 0; e < key_modules_for_slices[s].size(); e++)
334 keymod2slice[key_modules_for_slices[s][e]] = s;
335
336 std::string key = m_keystring.value();
337 key.erase(std::remove(key.begin(), key.end(), ','), key.end());
338 key.erase(std::remove(key.begin(), key.end(), ' '), key.end());
339 std::string key2 = m_keystring2.value();
340 key2.erase(std::remove(key2.begin(), key2.end(), ','), key2.end());
341 key2.erase(std::remove(key2.begin(), key2.end(), ' '), key2.end());
342
343 ATH_MSG_INFO("Doing z-slicing");
344 if (key_etamods.size() == 0) ATH_MSG_ERROR("Found 0 slices using the keystring: '" << m_keystring << "'");
345 ATH_MSG_INFO("Nslices = " << std::to_string(m_nSlices.value()) << ":");
346
347 std::stringstream eta_slices;
348 for (unsigned s = 0; s < key_modules_for_slices.size(); s++){
349 for (unsigned e = 0; e < key_modules_for_slices[s].size(); e++){
350 eta_slices << key_modules_for_slices[s][e] << " ";
351 }
352 eta_slices << ", ";
353 }
354 ATH_MSG_INFO(eta_slices.str());
355
356 // 2D key layer slicing
357 if (m_key2)
358 { // make new slices from combinations of keylayer1 slices and keylayer2 slices
359
360 /*------------- setup keylayer2 keymodule to slice map -------------- */
361 std::vector<std::vector<int>> key_modules_for_slices2;
362 float etasPerSlice2 = float(m_key_etamods2.size())/m_nSlices.value();
363 key_etas2.insert(key_etas2.end(), m_key_etamods2.begin(), m_key_etamods2.end());
364 for (unsigned i = 0; i < key_etas2.size(); i++)
365 {
366 if (i >= (key_modules_for_slices2.size() * etasPerSlice2)) key_modules_for_slices2.push_back(std::vector<int>());
367 key_modules_for_slices2.back().push_back(key_etas2[i]);
368 }
369
370 std::map<int, int> keymod2slice2;
371 for (unsigned s = 0; s < key_modules_for_slices2.size(); s++)
372 for (unsigned e = 0; e < key_modules_for_slices2[s].size(); e++)
373 keymod2slice2[key_modules_for_slices2[s][e]] = s;
374 /*----------------------------------------------------------------- */
375
376 int new_nSlice = m_nSlices.value();
377 for (int s1 = 0; s1 < m_nSlices.value(); s1++){ // loop over keylayer1's slices
378 for (int s2 = 0; s2 < m_nSlices.value(); s2++){ // loop over keylayer2's slices
379
380 for (auto& pair: m_track2modules) // track loop
381 {
382 if (m_usedTracks.find(pair.first) != m_usedTracks.end()) continue; // skip if already assigned a slice to this track
383 bool key1 = false;
384 bool key2 = false;
385 for (auto& m: pair.second) // module loop
386 {
387 if (isOnKeyLayer(1,m->det,m->bec,m->lyr))
388 if (keymod2slice[m->eta] == s1) key1 = true;
389
390 if (isOnKeyLayer(2,m->det,m->bec,m->lyr))
391 if (keymod2slice2[m->eta] == s2) key2 = true;
392 }
393
394 if (key1 && key2)
395 {
396 int newSlice = m_nSlices.value()*s1 + s2;
397 m_track2slice[pair.first] = newSlice;
398 m_usedTracks.insert(pair.first);
399 if (newSlice + 1 > new_nSlice) new_nSlice = newSlice + 1; // find max slice, to set new total number of slices
400 }
401 }
402 }
403 }
404 m_nSlices.value() = new_nSlice;
405 ATH_MSG_INFO("These slices were further divided based on the key layer 2: '" << key2 << "'. Now nSlices = " << m_nSlices.value());
406 ATH_MSG_INFO("Using " << m_usedTracks.size() << " tracks out of " << m_maxEvents << ". The rest were missing a hit in one or both of the key layers");
407 }
408
409
410 // 1D key layer slicing
411 else
412 {
413 for (const FPGATrackSimHit& hit: allHits) // Fill the track to slice map
414 {
415 if (m_usedTracks.find(hit.getEventIndex()) != m_usedTracks.end()) continue; // skip if already done a hit from this track
416 if (isOnKeyLayer(1,hit.getDetType(),hit.getDetectorZone(), hit.getPhysLayer()))
417 { // if hit is in key layer, add it's barcode to the map
418 if (keymod2slice.count(hit.getEtaModule()) > 0) {
419 int s = keymod2slice[hit.getEtaModule()];
420 m_track2slice[hit.getEventIndex()] = s;
421 m_usedTracks.insert(hit.getEventIndex());
422 }
423 }
424 }
425 ATH_MSG_INFO("Using " << m_usedTracks.size() << " tracks out of " << m_maxEvents << ". The rest missed the key layer");
426 }
427
428 std::string subrmap_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".subrmap";
429
430 ATH_MSG_INFO("Creating subrmap: " << subrmap_path);
431 m_subrmap.open(subrmap_path, std::ofstream::out);
432 m_subrmap << "towers " << m_nSlices.value() << " phi 16\n\n";
433
434 // Resize numTracks vector to be equal to the number of slices
435 // Now that this just stores module pointers we could loop over m_modules instead.
436 for (auto& pair: m_track2modules) {
437 for (Module* m: pair.second) {
438 if (m->numTracks.empty()) {
439 m->numTracks.resize(m_nSlices.value(), 0);
440 }
441 }
442 }
443
444
445 // Count tracks per slice
446 ATH_MSG_INFO("Counting number of tracks per slice.");
447 std::vector<std::vector<int>> slicedTracks (m_nSlices.value()); // vector of tracks, indexed by slice
448 for (auto trk: m_usedTracks) {
449 int s = m_track2slice[trk];
450 slicedTracks[s].push_back(trk);
451 std::vector<Module*> mods = m_track2modules[trk];
452 for (Module* mod: mods) {
453 mod->numTracks[s]++;
454 }
455 }
456
457 if (m_drawSlices)
458 drawSlices(allHits);
459
460 // Now do trimming and Fill slice2module map
461 int trimmed = 0;
462 for (int s = 0; s < m_nSlices.value(); s++) {
463 ATH_MSG_INFO("Applying local trimming in slice " << s);
464 for (auto trk : slicedTracks[s]) {
465 auto it = std::remove_if (m_track2modules[trk].begin(),
466 m_track2modules[trk].end(),
467 [&] (const Module* m) {
468 return 100 * ( float(m->numTracks[s]) / float(slicedTracks[s].size()) ) < m_trim;
469 });
470 trimmed += m_track2modules[trk].end() - it;
471 m_track2modules[trk].erase (it, m_track2modules[trk].end());
472
473 ATH_MSG_DEBUG("About to query trk2slice");
474 int s = m_track2slice[trk];
475 ATH_MSG_DEBUG("Queried trk2slice.");
476 // add all modules from track to slices
477 if (m_track2modules[trk].size() > 0) {
478 ATH_MSG_DEBUG("About to insert trk2modules");
480 ATH_MSG_DEBUG("Inserted trk2modules.");
481 }
482 }
483 }
484 ATH_MSG_INFO("Trimmed off " << trimmed << " modules that were hit by less than " << m_trim << "% of tracks");
485
486 /* ---------- Print z-slice map ---------- */
487
488 for (int s = 0; s < m_nSlices.value(); s++)
489 {
490 m_subrmap << s << "\n";
494
498 m_subrmap << "\n\n";
499 }
500
501 m_subrmap.close();
502 return StatusCode::SUCCESS;
503}
Gaudi::Property< float > m_trim
std::string makeSubrmapLines(std::vector< Module * > const &allmods, SiliconTech det, DetectorZone bec, int max)
Gaudi::Property< float > m_globalTrim
Gaudi::Property< bool > m_drawSlices
Gaudi::Property< int > m_maxEvents
void drawSlices(std::vector< FPGATrackSimHit > const &allHits)
etamod(flags, cells_name, *args, **kw)
DataModel_detail::iterator< DVL > remove_if(typename DataModel_detail::iterator< DVL > beg, typename DataModel_detail::iterator< DVL > end, Predicate pred)
Specialization of remove_if for DataVector/List.

Member Data Documentation

◆ m_allHits

std::vector<FPGATrackSimHit> FPGATrackSimMapMakerAlg::m_allHits
private

Definition at line 104 of file FPGATrackSimMapMakerAlg.h.

◆ m_bec2zone

std::map<std::string, DetectorZone> FPGATrackSimMapMakerAlg::m_bec2zone = { {"barrel",DetectorZone::barrel}, {"posEndcap",DetectorZone::posEndcap}, {"negEndcap",DetectorZone::negEndcap} }
private

Definition at line 186 of file FPGATrackSimMapMakerAlg.h.

186{ {"barrel",DetectorZone::barrel}, {"posEndcap",DetectorZone::posEndcap}, {"negEndcap",DetectorZone::negEndcap} };

◆ m_description

Gaudi::Property<std::string> FPGATrackSimMapMakerAlg::m_description {this, "description", "", "tag description"}
private

Definition at line 90 of file FPGATrackSimMapMakerAlg.h.

90{this, "description", "", "tag description"};

◆ m_det2tech

std::map<std::string, SiliconTech> FPGATrackSimMapMakerAlg::m_det2tech = { {"pixel",SiliconTech::pixel}, {"strip",SiliconTech::strip} }
private

Definition at line 185 of file FPGATrackSimMapMakerAlg.h.

185{ {"pixel",SiliconTech::pixel}, {"strip",SiliconTech::strip} }; // for parsing KeyString

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_detStore
privateinherited

Pointer to StoreGate (detector store by default)

Definition at line 393 of file AthCommonDataStore.h.

◆ m_diskIndex

const std::vector<uint32_t> FPGATrackSimMapMakerAlg::m_diskIndex = {0,17,47,58,66}
private

Definition at line 174 of file FPGATrackSimMapMakerAlg.h.

174{0,17,47,58,66}; // number of disks per layer in ATLAS-P2-ITK-22-02-00: [17, 30, 11, 8, 9] --> [0,17,47,58,66]

◆ m_drawSlices

Gaudi::Property<bool> FPGATrackSimMapMakerAlg::m_drawSlices {this, "drawSlices", false, "Draw the huge 2D slice histograms"}
private

Definition at line 93 of file FPGATrackSimMapMakerAlg.h.

93{this, "drawSlices", false, "Draw the huge 2D slice histograms"};

◆ m_etapat

std::ofstream FPGATrackSimMapMakerAlg::m_etapat
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.

◆ m_eventHeader

FPGATrackSimEventInputHeader FPGATrackSimMapMakerAlg::m_eventHeader
private

Definition at line 52 of file FPGATrackSimMapMakerAlg.h.

◆ m_evtSel

ServiceHandle<IFPGATrackSimEventSelectionSvc> FPGATrackSimMapMakerAlg::m_evtSel {this, "eventSelector", "", "Event selection Svc"}
private

Definition at line 50 of file FPGATrackSimMapMakerAlg.h.

50{this, "eventSelector", "", "Event selection Svc"};

◆ m_evtStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Algorithm > >::m_evtStore
privateinherited

Pointer to StoreGate (event store by default)

Definition at line 390 of file AthCommonDataStore.h.

◆ m_extendedExtraObjects

DataObjIDColl AthAlgorithm::m_extendedExtraObjects
privateinherited

Definition at line 79 of file AthAlgorithm.h.

◆ m_geoTag

Gaudi::Property<std::string> FPGATrackSimMapMakerAlg::m_geoTag {this, "GeometryVersion", "ATLAS-P2-ITK-22-02-00", "Geometry tag that this set of maps is for. TODO can we store/read from wrappers?"}
private

Definition at line 91 of file FPGATrackSimMapMakerAlg.h.

91{this, "GeometryVersion", "ATLAS-P2-ITK-22-02-00", "Geometry tag that this set of maps is for. TODO can we store/read from wrappers?"};

◆ m_globalTrim

Gaudi::Property<float> FPGATrackSimMapMakerAlg::m_globalTrim {this, "globalTrim", 0.1, "Trimming applied globally to the key layer before determining slice boundaries"}
private

Definition at line 89 of file FPGATrackSimMapMakerAlg.h.

89{this, "globalTrim", 0.1, "Trimming applied globally to the key layer before determining slice boundaries"};

◆ m_hitInputTool

ToolHandle<IFPGATrackSimEventInputHeaderTool> FPGATrackSimMapMakerAlg::m_hitInputTool { this, "InputTool", "FPGATrackSimSGToRawHitsTool/FPGATrackSimInputTool", "HitInput Tool" }
private

Definition at line 47 of file FPGATrackSimMapMakerAlg.h.

47{ this, "InputTool", "FPGATrackSimSGToRawHitsTool/FPGATrackSimInputTool", "HitInput Tool" };

◆ m_hitSGInputTool

ToolHandle<IFPGATrackSimInputTool> FPGATrackSimMapMakerAlg::m_hitSGInputTool {this, "SGInputTool", "", "Input tool from SG"}
private

Definition at line 48 of file FPGATrackSimMapMakerAlg.h.

48{this, "SGInputTool", "", "Input tool from SG"};

◆ m_key2

bool FPGATrackSimMapMakerAlg::m_key2 = false
private

Definition at line 162 of file FPGATrackSimMapMakerAlg.h.

◆ m_key_etamods

std::map<int, int> FPGATrackSimMapMakerAlg::m_key_etamods
private

Definition at line 163 of file FPGATrackSimMapMakerAlg.h.

◆ m_key_etamods2

std::set<int> FPGATrackSimMapMakerAlg::m_key_etamods2
private

Definition at line 164 of file FPGATrackSimMapMakerAlg.h.

◆ m_keylayer

std::map<std::string, std::set<int> > FPGATrackSimMapMakerAlg::m_keylayer
private

Definition at line 159 of file FPGATrackSimMapMakerAlg.h.

◆ m_keylayer2

std::map<std::string, std::set<int> > FPGATrackSimMapMakerAlg::m_keylayer2
private

Definition at line 160 of file FPGATrackSimMapMakerAlg.h.

◆ m_keystring

Gaudi::Property<std::string> FPGATrackSimMapMakerAlg::m_keystring {this, "KeyString", "strip,barrel,2", "key layer to use for subrmap"}
private

Definition at line 86 of file FPGATrackSimMapMakerAlg.h.

86{this, "KeyString", "strip,barrel,2", "key layer to use for subrmap"};

◆ m_keystring2

Gaudi::Property<std::string> FPGATrackSimMapMakerAlg::m_keystring2 {this, "KeyString2", "", "second key layer for 2D slicing"}
private

Definition at line 87 of file FPGATrackSimMapMakerAlg.h.

87{this, "KeyString2", "", "second key layer for 2D slicing"};

◆ m_maxEvents

Gaudi::Property<int> FPGATrackSimMapMakerAlg::m_maxEvents {this, "maxEvents", 10000, "Max Events"}
private

Definition at line 82 of file FPGATrackSimMapMakerAlg.h.

82{this, "maxEvents", 10000, "Max Events"};

◆ m_moduleRelabel

FPGATrackSimModuleRelabel* FPGATrackSimMapMakerAlg::m_moduleRelabel = nullptr
private

Definition at line 96 of file FPGATrackSimMapMakerAlg.h.

◆ m_modules

std::map<FPGATrackSimModuleId, Module> FPGATrackSimMapMakerAlg::m_modules
private

Definition at line 99 of file FPGATrackSimMapMakerAlg.h.

◆ m_monitorFile

std::unique_ptr<TFile> FPGATrackSimMapMakerAlg::m_monitorFile {}
private

Definition at line 170 of file FPGATrackSimMapMakerAlg.h.

170{};

◆ m_nSlices

Gaudi::Property<int> FPGATrackSimMapMakerAlg::m_nSlices {this, "nSlices", -1, "default is full granularity/maximum number of slices possible"}
private

Definition at line 88 of file FPGATrackSimMapMakerAlg.h.

88{this, "nSlices", -1, "default is full granularity/maximum number of slices possible"};

◆ m_outFileName

Gaudi::Property<std::string> FPGATrackSimMapMakerAlg::m_outFileName {this, "OutFileName", "", "naming convention for maps"}
private

Definition at line 85 of file FPGATrackSimMapMakerAlg.h.

85{this, "OutFileName", "", "naming convention for maps"};

◆ m_overridePlanes

Gaudi::Property<std::vector<std::vector<std::string> > > FPGATrackSimMapMakerAlg::m_overridePlanes {this, "planes", m_planes_generic, "Logical layer assignments" }
private

Definition at line 156 of file FPGATrackSimMapMakerAlg.h.

156{this, "planes", m_planes_generic, "Logical layer assignments" };
const std::vector< std::vector< std::string > > m_planes_generic

◆ m_overridePlanes2

Gaudi::Property<std::vector<std::vector<std::string> > > FPGATrackSimMapMakerAlg::m_overridePlanes2 {this, "planes2", m_planes2_generic, "Logical layer assignments" }
private

Definition at line 157 of file FPGATrackSimMapMakerAlg.h.

157{this, "planes2", m_planes2_generic, "Logical layer assignments" };
const std::vector< std::vector< std::string > > m_planes2_generic

◆ m_pbHits

std::vector<FPGATrackSimHit> FPGATrackSimMapMakerAlg::m_pbHits
private

Definition at line 104 of file FPGATrackSimMapMakerAlg.h.

◆ m_pbmax

int FPGATrackSimMapMakerAlg::m_pbmax = -1
private

Definition at line 106 of file FPGATrackSimMapMakerAlg.h.

◆ m_peHits

std::vector<FPGATrackSimHit> FPGATrackSimMapMakerAlg::m_peHits
private

Definition at line 104 of file FPGATrackSimMapMakerAlg.h.

◆ m_pemax

std::vector<int> FPGATrackSimMapMakerAlg::m_pemax = {-1,-1}
private

Definition at line 108 of file FPGATrackSimMapMakerAlg.h.

108{-1,-1}; // [positive endcap maxLayer, negative endcap maxLayer]

◆ m_planes

const std::vector<std::vector<std::string> >* FPGATrackSimMapMakerAlg::m_planes {}
private

Definition at line 118 of file FPGATrackSimMapMakerAlg.h.

118{};

◆ m_planes2

const std::vector<std::vector<std::string> >* FPGATrackSimMapMakerAlg::m_planes2 {}
private

Definition at line 119 of file FPGATrackSimMapMakerAlg.h.

119{};

◆ m_planes2_generic

const std::vector<std::vector<std::string> > FPGATrackSimMapMakerAlg::m_planes2_generic
private
Initial value:
= {
{"pb0", "pe0+","pe1+","pe2+","pe3+","pe4+","pe5+", "pe6+", "pe7+", "pe8+", "pe9+","pe10+","pe11+", "pe12+", "pe13+", "pe14+", "pe15+", "pe16+", },
{"pb1", "pe19+", "pe23+", "pe25+", },
{"pb2", "pe31+", "pe32+", "pe33+", "pe34+", "pe35+", "pe36+", "pe37+", "pe38+", "pe39+", "pe40+",
"pe41+", "pe42+", "pe43+", "pe44+", "pe45+", "pe46+",
"pe47+", "pe48+", "pe49+", "pe50+", "pe51+", "pe52+", "pe53+", "pe54+", "pe55+", "pe56+", },
{"pb3", "pe57+","pe58+","pe59+", "pe60+", "pe61+", "pe62+", "pe63+", "pe64+", "pe65+", "pe66+","pe67+","pe68+","pe69+"},
{"pb4", "pe70+","pe71+","pe72+", "pe73+", "pe74+", "pe75+", "pe76+", "pe77+", "pe78+", "pe79+",
"pe80+","pe81+","pe82+", "pe83+", "pe84+", "pe85+", "pe86+", "pe87+", "pe88+", "pe89+",},
{"sb0", "se4+", "se0+"},
{"sb1", "se5+", "se1+"},
{"sb2", "se6+", "se2+"},
{"sb3", "se7+", "se3+"},
{"sb4", "se8+"},
{"sb5", "se9+"},
{"sb6", "se10+"},
{"sb7", "se11+"}
}

Definition at line 136 of file FPGATrackSimMapMakerAlg.h.

136 {
137 {"pb0", "pe0+","pe1+","pe2+","pe3+","pe4+","pe5+", "pe6+", "pe7+", "pe8+", "pe9+","pe10+","pe11+", "pe12+", "pe13+", "pe14+", "pe15+", "pe16+", },
138 {"pb1", "pe19+", "pe23+", "pe25+", },
139 {"pb2", "pe31+", "pe32+", "pe33+", "pe34+", "pe35+", "pe36+", "pe37+", "pe38+", "pe39+", "pe40+",
140 "pe41+", "pe42+", "pe43+", "pe44+", "pe45+", "pe46+",
141 "pe47+", "pe48+", "pe49+", "pe50+", "pe51+", "pe52+", "pe53+", "pe54+", "pe55+", "pe56+", },
142 {"pb3", "pe57+","pe58+","pe59+", "pe60+", "pe61+", "pe62+", "pe63+", "pe64+", "pe65+", "pe66+","pe67+","pe68+","pe69+"},
143 {"pb4", "pe70+","pe71+","pe72+", "pe73+", "pe74+", "pe75+", "pe76+", "pe77+", "pe78+", "pe79+",
144 "pe80+","pe81+","pe82+", "pe83+", "pe84+", "pe85+", "pe86+", "pe87+", "pe88+", "pe89+",},
145 {"sb0", "se4+", "se0+"},
146 {"sb1", "se5+", "se1+"},
147 {"sb2", "se6+", "se2+"},
148 {"sb3", "se7+", "se3+"},
149 {"sb4", "se8+"},
150 {"sb5", "se9+"},
151 {"sb6", "se10+"},
152 {"sb7", "se11+"}
153 };

◆ m_planes_generic

const std::vector<std::vector<std::string> > FPGATrackSimMapMakerAlg::m_planes_generic
private
Initial value:
= {
{"pb0", "pe0+","pe1+","pe2+","pe3+","pe4+","pe5+", "pe6+", "pe7+", "pe8+", "pe9+","pe10+","pe11+", "pe12+", "pe13+", "pe14+", "pe15+", "pe16+", },
{"pb1", "pe19+", "pe23+", "pe25+", },
{"pb2", "pe31+", "pe32+", "pe33+", "pe34+", "pe35+", "pe36+", "pe37+", "pe38+", "pe39+", "pe40+",
"pe41+", "pe42+", "pe43+", "pe44+", "pe45+", "pe46+",
"pe47+", "pe48+", "pe49+", "pe50+", "pe51+", "pe52+", "pe53+", "pe54+", "pe55+", "pe56+", },
{"pb3", "pe57+","pe58+","pe59+", "pe60+", "pe61+", "pe62+", "pe63+", "pe64+", "pe65+", "pe66+","pe67+","pe68+","pe69+"},
{"pb4", "pe70+","pe71+","pe72+", "pe73+", "pe74+", "pe75+", "pe76+", "pe77+", "pe78+", "pe79+",
"pe80+","pe81+","pe82+", "pe83+", "pe84+", "pe85+", "pe86+", "pe87+", "pe88+", "pe89+",}
}

Definition at line 124 of file FPGATrackSimMapMakerAlg.h.

124 {
125 {"pb0", "pe0+","pe1+","pe2+","pe3+","pe4+","pe5+", "pe6+", "pe7+", "pe8+", "pe9+","pe10+","pe11+", "pe12+", "pe13+", "pe14+", "pe15+", "pe16+", },
126 {"pb1", "pe19+", "pe23+", "pe25+", },
127 {"pb2", "pe31+", "pe32+", "pe33+", "pe34+", "pe35+", "pe36+", "pe37+", "pe38+", "pe39+", "pe40+",
128 "pe41+", "pe42+", "pe43+", "pe44+", "pe45+", "pe46+",
129 "pe47+", "pe48+", "pe49+", "pe50+", "pe51+", "pe52+", "pe53+", "pe54+", "pe55+", "pe56+", },
130 {"pb3", "pe57+","pe58+","pe59+", "pe60+", "pe61+", "pe62+", "pe63+", "pe64+", "pe65+", "pe66+","pe67+","pe68+","pe69+"},
131 {"pb4", "pe70+","pe71+","pe72+", "pe73+", "pe74+", "pe75+", "pe76+", "pe77+", "pe78+", "pe79+",
132 "pe80+","pe81+","pe82+", "pe83+", "pe84+", "pe85+", "pe86+", "pe87+", "pe88+", "pe89+",}
133 };

◆ m_pmap

std::ofstream FPGATrackSimMapMakerAlg::m_pmap
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.

◆ m_radfile

std::ofstream FPGATrackSimMapMakerAlg::m_radfile
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.

◆ m_radii

std::vector<std::vector < std::vector<float> > > FPGATrackSimMapMakerAlg::m_radii
private

Definition at line 166 of file FPGATrackSimMapMakerAlg.h.

◆ m_region

Gaudi::Property<int> FPGATrackSimMapMakerAlg::m_region {this, "region", 0, "Region"}
private

Definition at line 83 of file FPGATrackSimMapMakerAlg.h.

83{this, "region", 0, "Region"};

◆ m_remapModules

Gaudi::Property<bool> FPGATrackSimMapMakerAlg::m_remapModules {this, "remapModules", false, "Allow maps to be drawn that slice modules more finely, by remapping module indices"}
private

Definition at line 92 of file FPGATrackSimMapMakerAlg.h.

92{this, "remapModules", false, "Allow maps to be drawn that slice modules more finely, by remapping module indices"};

◆ m_rmap

std::ofstream FPGATrackSimMapMakerAlg::m_rmap
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.

◆ m_sbHits

std::vector<FPGATrackSimHit> FPGATrackSimMapMakerAlg::m_sbHits
private

Definition at line 104 of file FPGATrackSimMapMakerAlg.h.

◆ m_sbmax

int FPGATrackSimMapMakerAlg::m_sbmax = -1
private

Definition at line 107 of file FPGATrackSimMapMakerAlg.h.

◆ m_seHits

std::vector<FPGATrackSimHit> FPGATrackSimMapMakerAlg::m_seHits
private

Definition at line 104 of file FPGATrackSimMapMakerAlg.h.

◆ m_semax

std::vector<int> FPGATrackSimMapMakerAlg::m_semax = {-1,-1}
private

Definition at line 109 of file FPGATrackSimMapMakerAlg.h.

109{-1,-1};

◆ m_slice2modules

std::map<int, std::vector<Module*> > FPGATrackSimMapMakerAlg::m_slice2modules
private

Definition at line 100 of file FPGATrackSimMapMakerAlg.h.

◆ m_subrmap

std::ofstream FPGATrackSimMapMakerAlg::m_subrmap
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.

◆ m_track2modules

std::map<int, std::vector<Module*> > FPGATrackSimMapMakerAlg::m_track2modules
private

Definition at line 100 of file FPGATrackSimMapMakerAlg.h.

◆ m_track2slice

std::map<int, int> FPGATrackSimMapMakerAlg::m_track2slice
private

Definition at line 101 of file FPGATrackSimMapMakerAlg.h.

◆ m_trim

Gaudi::Property<float> FPGATrackSimMapMakerAlg::m_trim {this, "trim", 0.1, "trim modules with less than given percent of tracks"}
private

Definition at line 84 of file FPGATrackSimMapMakerAlg.h.

84{this, "trim", 0.1, "trim modules with less than given percent of tracks"};

◆ m_usedTracks

std::set<int> FPGATrackSimMapMakerAlg::m_usedTracks
private

Definition at line 165 of file FPGATrackSimMapMakerAlg.h.

◆ m_varHandleArraysDeclared

bool AthCommonDataStore< AthCommonMsg< Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Algorithm > >::m_vhka
privateinherited

Definition at line 398 of file AthCommonDataStore.h.

◆ m_z

std::vector<std::vector < std::vector<float> > > FPGATrackSimMapMakerAlg::m_z
private

Definition at line 167 of file FPGATrackSimMapMakerAlg.h.

◆ m_zedfile

std::ofstream FPGATrackSimMapMakerAlg::m_zedfile
private

Definition at line 169 of file FPGATrackSimMapMakerAlg.h.


The documentation for this class was generated from the following files: