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 (const EventContext &ctx) override
 Execute method.
StatusCode finalize () override
virtual StatusCode sysInitialize () override
 Override sysInitialize.
virtual const DataObjIDColl & extraOutputDeps () const override
 Return the list of extra output dependencies.
bool filterPassed (const EventContext &ctx) const
void setFilterPassed (bool state, const EventContext &ctx) const
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
const EventContext & getContext () const
 Deprecated methods (use the ones with EventContext).
bool filterPassed () const
void setFilterPassed (bool state) const

Protected Member Functions

virtual bool isReEntrant () const override final
 Legacy algorithms are not thread-safe.
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::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< Gaudi::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(const std::string &name, ISvcLocator *pSvcLocator)
Constructor with parameters:

◆ ~FPGATrackSimMapMakerAlg()

virtual FPGATrackSimMapMakerAlg::~FPGATrackSimMapMakerAlg ( )
virtualdefault

Member Function Documentation

◆ declareGaudiProperty()

Gaudi::Details::PropertyBase & AthCommonDataStore< AthCommonMsg< Gaudi::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< Gaudi::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< Gaudi::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 701 of file FPGATrackSimMapMakerAlg.cxx.

702{
703 m_monitorFile->cd();
704
705 std::vector<TH2F*> h_slicemap;
706 char hname[20];
707
708 for (unsigned i = 0; i < (unsigned)m_nSlices.value(); i++)
709 {
710 sprintf(hname,"rz_slice%u",i);
711 // This should just default to the entire range, I think.
712 // The user can reduce the binning.
713 TH2F *h = new TH2F(hname,hname,7000,-3500,3500,1200,0,1200);
714 h_slicemap.push_back(h);
715 }
716
717 for (const auto& hit: allHits)
718 {
719 if (m_usedTracks.find(hit.getEventIndex()) == m_usedTracks.end()) continue; // skip if we don't use this track
720 int s = m_track2slice[hit.getEventIndex()];
721 h_slicemap[s]->Fill(hit.getZ(),hit.getR());
722 }
723
724 for (int i = 0; i < m_nSlices.value(); i++)
725 h_slicemap[i]->Write();
726
727}
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< Gaudi::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 ( const EventContext & ctx)
overridevirtual

Execute method.

Provides access to the EventContext if needed but is non-const as opposed to AthReentrantAlgorithm.

Implements AthAlgorithm.

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< Gaudi::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

◆ filterPassed() [1/2]

bool AthAlgorithm::filterPassed ( ) const
inherited

Definition at line 94 of file AthAlgorithm.cxx.

94 {
95 return filterPassed( Gaudi::Hive::currentContext() );
96}
bool filterPassed() const

◆ filterPassed() [2/2]

bool AthAlgorithm::filterPassed ( const EventContext & ctx) const
inherited

Definition at line 98 of file AthAlgorithm.cxx.

98 {
99 return execState( ctx ).filterPassed();
100}

◆ finalize()

StatusCode FPGATrackSimMapMakerAlg::finalize ( )
override

Definition at line 683 of file FPGATrackSimMapMakerAlg.cxx.

684{
685 // Write the output
691 m_monitorFile.reset();
692 delete m_moduleRelabel;
693 m_moduleRelabel = nullptr;
694 return StatusCode::SUCCESS;
695}
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 744 of file FPGATrackSimMapMakerAlg.cxx.

745{
746 int pcounter = 0;
747 for (auto& plane : *planes) {
748 for (auto& layer : plane) {
749 if (test == layer) return pcounter;
750 }
751 pcounter ++;
752 }
753 return -1;
754}

◆ getContext()

const EventContext & AthAlgorithm::getContext ( ) const
inherited

Deprecated methods (use the ones with EventContext).

Definition at line 90 of file AthAlgorithm.cxx.

90 {
91 return Gaudi::Hive::currentContext();
92}

◆ 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< Gaudi::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 729 of file FPGATrackSimMapMakerAlg.cxx.

730{
731 int det = static_cast<int>(t_det);
732 int bec = static_cast<int>(t_bec);
733 if (keynum == 1)
734 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())
735 return true;
736
737 if (keynum == 2)
738 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())
739 return true;
740
741 return false;
742}
std::string find(const std::string &s)
return a remapped string
Definition hcg.cxx:140

◆ isReEntrant()

virtual bool AthAlgorithm::isReEntrant ( ) const
inlinefinaloverrideprotectedvirtualinherited

Legacy algorithms are not thread-safe.

Definition at line 111 of file AthAlgorithm.h.

111{ return false; }

◆ makeRmapLines()

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

Definition at line 756 of file FPGATrackSimMapMakerAlg.cxx.

757{
758 std::stringstream rmap_line;
759 std::set<int> etas, phis;
760
761 for(int lyr = 0; lyr <= max; lyr++)
762 {
763 etas.clear();
764 phis.clear();
765 for (const auto& hit: hits)
766 {
767 if(static_cast<int>(hit.getPhysLayer()) == lyr && hit.getDetectorZone() == bec) // cast from uint to int just to remove Wsign-compare warnings
768 {
769 etas.insert(hit.getEtaModule());
770 phis.insert(hit.getPhiModule());
771 }
772 }
773 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";
774 else rmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " 0 0 0 0 0 0\n";
775
776 }
777
778 return rmap_line.str();
779}
#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 879 of file FPGATrackSimMapMakerAlg.cxx.

880{
881 std::stringstream subrmap_line;
882 std::set<int> etas, phis;
883
884 std::vector<Module*> mods;
885 for (auto* mod: allmods) // just want modules in pb/pe/sb/se etc, not all at once
886 if (mod->det == det && mod->bec == bec) mods.push_back(mod);
887
888 for(int lyr = 0; lyr <= max; lyr++)
889 {
890 etas.clear();
891 phis.clear();
892 for (auto mod: mods)
893 {
894 if(mod->lyr == lyr)
895 {
896 etas.insert(mod->eta);
897 phis.insert(mod->phi);
898 }
899 }
900 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";
901 else subrmap_line << static_cast<int>(det) << " " << static_cast<int>(bec) << " " << lyr << " 0 0 0 0 0 0\n";
902
903 }
904
905 return subrmap_line.str();
906}

◆ msg()

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

Definition at line 24 of file AthCommonMsg.h.

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

◆ msgLvl()

bool AthCommonMsg< Gaudi::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< Gaudi::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 781 of file FPGATrackSimMapMakerAlg.cxx.

782{
783 // Parse keystring and define the Key Layer
784 std::string delimiter = ",";
785 std::string s = m_keystring.value();
786 std::string det, bec, lyr;
787 std::map <std::string, std::vector<std::string>> abrevs = { {"pb",{"pixel","barrel"}}, {"pe",{"pixel","endcap"}}, {"sb",{"strip","barrel"}}, {"se",{"strip","endcap"}} };
788 if( s.find(delimiter) != std::string::npos) // keylayer format is 'strip,barrel,4'
789 {
790 try {
791 std::string det = s.substr(0, s.find(delimiter));
792 s.erase(0, s.find(delimiter) + delimiter.length());
793 std::string bec = s.substr(0, s.find(delimiter));
794 s.erase(0, s.find(delimiter) + delimiter.length());
795 std::string lyr = s.substr(0, s.find(delimiter));
796 s.erase(0, s.find(delimiter) + delimiter.length());
797 m_keylayer["det"].insert(static_cast<int>(m_det2tech[det]));
798 m_keylayer["bec"].insert(static_cast<int>(m_bec2zone[bec]));
799 m_keylayer["lyr"].insert(std::stoi(lyr));
800 ATH_MSG_INFO("Using key layer: " << m_keystring.value());
801 } catch (...){
802 ATH_MSG_ERROR("Invalid KeyString: '" << m_keystring.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
803 }
804 }
805 else // keylayer format is 'plane 0'
806 {
807 std::string delimiter = " ";
808 try {
809 s.erase(0, s.find(delimiter) + delimiter.length());
810 std::string plane = s.substr(0, s.find(delimiter));
811 std::vector<std::string> s = (m_planes)->at(std::stoi(plane));
812 for (unsigned i = 0; i < s.size(); i++){
813 std::string reg = s[i].substr(0, 2);
814 std::vector<std::string> zone = abrevs[reg];
815 if (s[i].back() == '+') zone[1] = "posEndcap";
816 if (s[i].back() == '-') zone[1] = "negEndcap";
817 s[i].erase(std::remove(s[i].begin(), s[i].end(), '+'), s[i].end());
818 s[i].erase(std::remove(s[i].begin(), s[i].end(), '-'), s[i].end());
819 std::string lyr = s[i].substr(2);
820 m_keylayer["det"].insert(static_cast<int>(m_det2tech[zone[0]]));
821 m_keylayer["bec"].insert(static_cast<int>(m_bec2zone[zone[1]]));
822 m_keylayer["lyr"].insert(std::stoi(lyr));
823 }
824 ATH_MSG_INFO("Using key layer (in plane X format) " << m_keystring.value());
825 } catch (...){
826 ATH_MSG_ERROR("Invalid KeyString: '" << m_keystring.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
827 }
828 }
829
830 // if 2D slicing
831 if (m_keystring2.value() != "")
832 {
833 m_key2 = true;
834 std::string s = m_keystring2.value();
835 if( s.find(delimiter) != std::string::npos) // keylayer format is 'strip,barrel,8'
836 {
837 try {
838 std::string det = s.substr(0, s.find(delimiter));
839 s.erase(0, s.find(delimiter) + delimiter.length());
840 std::string bec = s.substr(0, s.find(delimiter));
841 s.erase(0, s.find(delimiter) + delimiter.length());
842 std::string lyr = s.substr(0, s.find(delimiter));
843 s.erase(0, s.find(delimiter) + delimiter.length());
844 m_keylayer2["det"].insert(static_cast<int>(m_det2tech[det]));
845 m_keylayer2["bec"].insert(static_cast<int>(m_bec2zone[bec]));
846 m_keylayer2["lyr"].insert(std::stoi(lyr));
847 ATH_MSG_INFO("Using key layer (2D): " << m_keystring2.value());
848 } catch (...){
849 ATH_MSG_ERROR("Invalid KeyString2: '" << m_keystring2.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
850 }
851 }
852 else // keylayer format is 'plane 0'
853 {
854 std::string delimiter = " ";
855 try {
856 s.erase(0, s.find(delimiter) + delimiter.length());
857 std::string plane = s.substr(0, s.find(delimiter));
858 std::vector<std::string> s = (m_planes)->at(std::stoi(plane));
859 for (unsigned i = 0; i < s.size(); i++){
860 std::string reg = s[i].substr(0, 2);
861 std::vector<std::string> zone = abrevs[reg];
862 if (s[i].back() == '+') zone[1] = "posEndcap";
863 if (s[i].back() == '-') zone[1] = "negEndcap";
864 s[i].erase(std::remove(s[i].begin(), s[i].end(), '+'), s[i].end());
865 s[i].erase(std::remove(s[i].begin(), s[i].end(), '-'), s[i].end());
866 std::string lyr = s[i].substr(2);
867 m_keylayer2["det"].insert(static_cast<int>(m_det2tech[zone[0]]));
868 m_keylayer2["bec"].insert(static_cast<int>(m_bec2zone[zone[1]]));
869 m_keylayer2["lyr"].insert(std::stoi(lyr));
870 }
871 ATH_MSG_INFO("Using key layer (2D) (in plane X format): " << m_keystring2.value());
872 } catch (...){
873 ATH_MSG_ERROR("Invalid KeyString2: '" << m_keystring2.value() << "'." << "Accepted formats are 'strip,posEndcap,2', 'pixel,barrel,3', or 'plane 0'");
874 }
875 }
876 }
877}
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
static const std::string delimiter("/")
return m_collEvts back().back().max_entries
mapped_type at(key_type key) const
Look up an element in the map.
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 m_key_etamods[eta] += 1;
161 }
162
163 if (m_key2) // if doing 2D slicing
164 if (isOnKeyLayer(2,det,bec,lyr)) m_key_etamods2.insert(eta);
165
166 // Keep a global record of all modules as we see them, indexed by the ID tuple.
167 Module mod = Module(det, bec, lyr, eta, phi);
168 auto [it, inserted] = m_modules.try_emplace(mod.moduleId(), mod);
169 Module* modref = &(it->second);
170
171 if (std::find(m_track2modules[hit.getEventIndex()].begin(), m_track2modules[hit.getEventIndex()].end(), modref) == m_track2modules[hit.getEventIndex()].end())
172 m_track2modules[hit.getEventIndex()].push_back(modref);
173 m_allHits.push_back(hit);
174 }
175
176 return StatusCode::SUCCESS;
177}
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< Gaudi::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< Gaudi::Algorithm > >::renounceArray ( SG::VarHandleKeyArray & handlesArray)
inlineprotectedinherited

remove all handles from I/O resolution

Definition at line 364 of file AthCommonDataStore.h.

364 {
366 }

◆ setFilterPassed() [1/2]

void AthAlgorithm::setFilterPassed ( bool state) const
inherited

Definition at line 102 of file AthAlgorithm.cxx.

102 {
103 setFilterPassed( state, Gaudi::Hive::currentContext() );
104}
void setFilterPassed(bool state) const

◆ setFilterPassed() [2/2]

void AthAlgorithm::setFilterPassed ( bool state,
const EventContext & ctx ) const
inherited

Definition at line 106 of file AthAlgorithm.cxx.

106 {
107 execState( ctx ).setFilterPassed(state);
108}

◆ 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< Gaudi::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< Gaudi::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< Gaudi::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 }

◆ writeEtaPatterns()

StatusCode FPGATrackSimMapMakerAlg::writeEtaPatterns ( )
private

Definition at line 485 of file FPGATrackSimMapMakerAlg.cxx.

486{
487 std::string slicingType = "";
488 if (m_key2) slicingType = "2D";
489
490 std::string etapat_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".patt";
491
492 ATH_MSG_INFO("Creating eta patterns file: " << etapat_path);
493 std::ofstream etapat(etapat_path, std::ofstream::out);
494
495 // assign logical layer to each module
496 for (auto& pair: m_track2modules) {
497 for (auto& m: pair.second)
498 {
499 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::barrel) m->plane = findPlane(m_planes, "pb" + std::to_string(m->lyr));
500 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::posEndcap) m->plane = findPlane(m_planes, "pe" + std::to_string(m->lyr) + "+");
501 if (m->det == SiliconTech::pixel && m->bec == DetectorZone::negEndcap) m->plane = findPlane(m_planes, "pe" + std::to_string(m->lyr) + "-");
502
503 if (m->det == SiliconTech::strip && m->bec == DetectorZone::barrel) m->plane = findPlane(m_planes, "sb" + std::to_string(m->lyr));
504 if (m->det == SiliconTech::strip && m->bec == DetectorZone::posEndcap) m->plane = findPlane(m_planes, "se" + std::to_string(m->lyr) + "+");
505 if (m->det == SiliconTech::strip && m->bec == DetectorZone::negEndcap) m->plane = findPlane(m_planes, "se" + std::to_string(m->lyr) + "-");
506 }
507 }
508
509 for(auto trk: m_usedTracks)
510 {
511 std::stringstream track_etapatts;
512 unsigned planesDone = 0;
513 for (unsigned p = 0; p < (m_planes)->size(); p++)
514 {
515 for (const Module* m : m_track2modules[trk]) {
516 if (m->plane == static_cast<int>(p))
517 {
518 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";
519 planesDone++;
520 break;
521 }
522 }
523 }
524 if (planesDone == (m_planes)->size())
525 etapat << track_etapatts.str() << "\n";
526
527 }
528 etapat.close();
529 return StatusCode::SUCCESS;
530}
size_t size() const
Number of registered mappings.
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 602 of file FPGATrackSimMapMakerAlg.cxx.

603{
604 // calculate median z. We do this globally and slice-by-slice.
605 m_z.resize(m_nSlices.value(), std::vector<std::vector<float>>((m_planes2)->size(),std::vector<float>(0)));
606 for (const auto& hit: allHits)
607 {
608 SiliconTech det = hit.getDetType();
609 DetectorZone bec = hit.getDetectorZone();
610 int lyr = hit.getPhysLayer();
611 int slice = m_track2slice[hit.getEventIndex()];
612 int plane = -1;
613 if (det == SiliconTech::pixel && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "pb" + std::to_string(lyr));
614 if (det == SiliconTech::pixel && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "+");
615 if (det == SiliconTech::pixel && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "pe" + std::to_string(lyr) + "-");
616 if (det == SiliconTech::strip && bec == DetectorZone::barrel) plane = findPlane(m_planes2, "sb" + std::to_string(lyr));
617 if (det == SiliconTech::strip && bec == DetectorZone::posEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "+");
618 if (det == SiliconTech::strip && bec == DetectorZone::negEndcap) plane = findPlane(m_planes2, "se" + std::to_string(lyr) + "-");
619
620 if (plane != -1) {
621 m_z[slice][plane].push_back(hit.getZ());
622 }
623 }
624
625 // print file
626 std::string zed_path = m_outFileName.value() + "region" + std::to_string(m_region) + "_z.txt";
627
628 ATH_MSG_INFO("Creating median z file: " << zed_path);
629 std::ofstream zedfile(zed_path, std::ofstream::out);
630 for (int s = 0; s < m_nSlices.value(); s++){
631 zedfile << std::to_string(s) << " ";
632 for (unsigned p = 0; p < (m_planes2)->size(); p++){
633 if (m_z[s][p].size() != 0){
634 float minZ = *std::min_element(m_z[s][p].begin(), m_z[s][p].end());
635 float maxZ = *std::max_element(m_z[s][p].begin(), m_z[s][p].end());
636 float median = (minZ + maxZ)/2;
637 zedfile << std::setprecision(3) << std::fixed << median << " ";
638 } else {
639 int median = -1;
640 zedfile << median << " ";
641 }
642 }
643 zedfile << '\n';
644 }
645
646 // Now do this globally. Note: should this be meanZ instead of medianZ in the forward region?
647 zedfile << -1 << " ";
648 for (unsigned p = 0; p < (m_planes2)->size(); p++) {
649 float minZ = 0;
650 float maxZ = 0;
651 bool doneInitial = false;
652 for (int s = 0; s < m_nSlices.value(); s++) {
653 if (m_z[s][p].size() != 0) {
654 float newMinZ = *std::min_element(m_z[s][p].begin(), m_z[s][p].end());
655 float newMaxZ = *std::max_element(m_z[s][p].begin(), m_z[s][p].end());
656 // slightly clunky, but z can be positive and negative so there's not a sane initial/placeholder value.
657 if (doneInitial) {
658 minZ = std::min(minZ, newMinZ);
659 maxZ = std::max(maxZ, newMaxZ);
660 } else {
661 minZ = newMinZ;
662 maxZ = newMaxZ;
663 doneInitial = true;
664 }
665 }
666 }
667 if (doneInitial) {
668 float median = (minZ + maxZ)/2;
669 zedfile << std::setprecision(3) << std::fixed << median << " ";
670 } else {
671 int median = -1;
672 zedfile << median << " ";
673 }
674 }
675 zedfile << '\n';
676
677 zedfile.close();
678
679 return StatusCode::SUCCESS;
680}
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 185 of file FPGATrackSimMapMakerAlg.cxx.

186{
187 // Plane Map
188
189 // to avoid vector _M_range_check errors, print at least one line for each DetectorZone
190 if (m_pbmax == -1) m_pbmax = 0;
191 if (m_sbmax == -1) m_sbmax = 0;
192 if (m_pemax[0] == -1) m_pemax[0] = 0;
193 if (m_pemax[1] == -1) m_pemax[1] = 0;
194 if (m_semax[0] == -1) m_semax[0] = 0;
195 if (m_semax[1] == -1) m_semax[1] = 0;
196
197 std::string pmap_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".pmap";
198 ATH_MSG_INFO("Creating pmap: " << pmap_path);
199 std::ostringstream buffer;
200
201 buffer << m_geoTag.value() << "\n" << m_planes->size() << " logical_s1\n" << m_planes2->size() << " logical_s2\n";
202 buffer << m_pbmax+1 << " pixel barrel \n" << m_pemax[0]+1 << " pixel endcap+ \n" << m_pemax[1]+1 << " pixel endcap- \n";
203 buffer << m_sbmax+1 << " SCT barrel \n" << m_semax[0]+1 << " SCT endcap+\n" << m_semax[1]+1 << " SCT endcap-\n";
204 buffer << "! silicon endCap physDisk physLayer ['stereo' stripSide <strip only>] 'plane1' logiLayer1 'plane2' logiLayer2\n";
205 buffer << "\nregion " << reg << "\n";
206
207 int p1,p2;
208 for (int lyr = 0; lyr <= m_pbmax; lyr++) { // Pixel Barrel
209 p1 = findPlane(m_planes, "pb" + std::to_string(lyr));
210 p2 = findPlane(m_planes2, "pb" + std::to_string(lyr));
211 buffer << "pixel 0 -1 " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
212 }
213 for (int lyr = 0; lyr <= m_pemax[0]; lyr++) { // Pixel Postive Endap
214 p1 = findPlane(m_planes, "pe" + std::to_string(lyr) + "+");
215 p2 = findPlane(m_planes2, "pe" + std::to_string(lyr) + "+");
216 buffer << "pixel 1 " << lyr << " " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
217 }
218 for (int lyr = 0; lyr <= m_pemax[1]; lyr++) { // Pixel Negative Endcap
219 p1 = findPlane(m_planes, "pe" + std::to_string(lyr) + "-");
220 p2 = findPlane(m_planes2, "pe" + std::to_string(lyr) + "-");
221 buffer << "pixel 2 " << lyr << " " << lyr << " plane1 " << p1 << " plane2 " << p2 << "\n";
222 }
223 for (int lyr = 0; lyr <= m_sbmax; lyr++) { // Strip Barrel
224 p1 = findPlane(m_planes, "sb" + std::to_string(lyr));
225 p2 = findPlane(m_planes2, "sb" + std::to_string(lyr));
226 buffer << "SCT 0 -1 " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
227 }
228 for (int lyr = 0; lyr <= m_semax[0]; lyr++) { // Strip Positive Endcap
229 p1 = findPlane(m_planes, "se" + std::to_string(lyr) + "+");
230 p2 = findPlane(m_planes2, "se" + std::to_string(lyr) + "+");
231 buffer << "SCT 1 " << lyr/2 << " " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
232 }
233 for (int lyr = 0; lyr <= m_semax[1]; lyr++) { // Strip Negative Endcap
234 p1 = findPlane(m_planes, "se" + std::to_string(lyr) + "-");
235 p2 = findPlane(m_planes2, "se" + std::to_string(lyr) + "-");
236 buffer << "SCT 2 " << lyr/2 << " " << lyr << " stereo " << lyr % 2 << " plane1 " << p1 << " plane2 " << p2 << "\n";
237 }
238
239 // Region Map
240 std::string rmap_path = m_outFileName.value() + "region" + std::to_string(m_region) + ".rmap";
241 ATH_MSG_INFO("Creating rmap: " << rmap_path);
242 std::ofstream rmap(rmap_path, std::ofstream::out);
243 rmap << "towers 1 phi 16\n\n0\n";
244
248
252
253 rmap.close();
254
255
256// Now write out to disk directly without reopening
257 std::ofstream outputFile(pmap_path);
258 if (!outputFile) {
259 ATH_MSG_ERROR("Error: Unable to open file for writing: " << pmap_path);
260 return StatusCode::FAILURE;
261 }
262
263 std::string fileContent = buffer.str();
264 for (int i = 0; i < m_nSlices; ++i) {
265 outputFile << fileContent << '\n';
266 }
267 outputFile.close();
268 return StatusCode::SUCCESS;
269}
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 532 of file FPGATrackSimMapMakerAlg.cxx.

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

◆ writeSubrmap()

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

Definition at line 271 of file FPGATrackSimMapMakerAlg.cxx.

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

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 185 of file FPGATrackSimMapMakerAlg.h.

185{ {"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 184 of file FPGATrackSimMapMakerAlg.h.

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

◆ m_detStore

StoreGateSvc_t AthCommonDataStore< AthCommonMsg< Gaudi::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 173 of file FPGATrackSimMapMakerAlg.h.

173{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_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< Gaudi::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 114 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 169 of file FPGATrackSimMapMakerAlg.h.

169{};

◆ 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_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_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_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< Gaudi::Algorithm > >::m_varHandleArraysDeclared
privateinherited

Definition at line 399 of file AthCommonDataStore.h.

◆ m_vhka

std::vector<SG::VarHandleKeyArray*> AthCommonDataStore< AthCommonMsg< Gaudi::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.


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