ATLAS Offline Software
PadTdsOfflineTool.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef PADTDSOFFLINETOOL_H
6 #define PADTDSOFFLINETOOL_H
7 
11 #include "CLHEP/Random/RandGauss.h"
13 #include "Gaudi/Property.h"
14 #include "GaudiKernel/EventContext.h"
15 #include "GaudiKernel/ServiceHandle.h"
16 #include "GaudiKernel/ThreadLocalContext.h"
27 
28 #include <functional>
29 #include <algorithm>
30 #include <map>
31 #include <utility>
32 
33 class sTgcDigit;
35 class sTgcDigitContainer;
36 
37 namespace CLHEP {
38 class HepRandomEngine;
39 }
40 
41 namespace MuonGM {
42 class MuonDetectorManager;
43 }
44 
45 
46 // namespace for the NSW LVL1 related classes
47 namespace NSWL1 {
75  class PadHits;
76  class PadTrigger;
77 
78  class PadTdsOfflineTool: virtual public IPadTdsTool,
79  public AthAlgTool {
80 
81  public:
82  PadTdsOfflineTool(const std::string& type,
83  const std::string& name,
84  const IInterface* parent);
85  virtual ~PadTdsOfflineTool()=default;
86  virtual StatusCode initialize () override;
87  virtual StatusCode gather_pad_data(std::vector<std::shared_ptr<PadData>>& pads, int side=-1, int sector=-1) const override;
88 
89  public:
95  static size_t firstSector() { return 0; }
97  static size_t lastSector() { return 31; }
98  static size_t numberOfSectors() { return 32; }
99  static size_t numberOfSectorsPerSide() { return 16; }
100  static size_t firstSectorAside() { return 0; }
101  static size_t lastSectorAside() { return 15; }
102  static size_t firstSectorCside() { return 16; }
103  static size_t lastSectorCside() { return 31; }
104  static size_t firstSector(const int &side)
105  { return (side==0 ? firstSectorAside() : side==1 ? firstSectorCside() : 0); }
106  static size_t lastSector(const int &side)
107  { return (side==0 ? lastSectorAside() : side==1 ? lastSectorCside() : 0); }
108  static char sideLabel(const int &side)
109  { return (side==0 ? 'A' : side==1 ? 'C' : '?'); }
111  static size_t sectorIndex(const int &side, const int &sector)
112  { return side * numberOfSectorsPerSide() + sector; }
114 
115  private:
116  // methods implementing the internal data processing
117  StatusCode fill_pad_cache(std::vector< std::vector<std::shared_ptr<PadData>> > &pad_cache) const;
118 
119  double computeTof(const sTgcDigit* digit) const;
120  double computeTimeJitter() const;
121  void simulateDeadTime(std::vector<PadHits>& h) const;
122  bool get_truth_hits_this_pad(const Identifier &pad_id, std::vector<MuonSimData::Deposit> &deposits) const;
123  bool is_pad_digit(const sTgcDigit* digit) const;
124  int cache_index(const sTgcDigit* digit) const;
125  /*
126  * Apply time delay and determine BC tag for the hit according to the trigger capture window.
127  * BC tag: bit nr. 8 correspond to the current bunch for simulated events
128  */
129  // FIXME: method not used anywhere, drop it?
130  bool determine_delay_and_bc(const sTgcDigit* digit, const int pad_hit_number, double &delayed_time, uint16_t &BCtag) const;
131  void store_pads(const std::vector<PadHits> &pad_hits, std::vector< std::vector<std::shared_ptr<PadData>> > &pad_cache) const;
132  void print_digit(const sTgcDigit* digit) const;
133 
134  void print_pad_time(const std::vector<PadHits> &pad_hits) const;
135  void print_pad_cache(std::vector< std::vector<std::shared_ptr<PadData>> > &pad_cache) const;
136 
137  // needed Servives, Tools and Helpers
138  ServiceHandle<IAthRNGSvc> m_rndmSvc{this, "RndmSvc", "AthRNGSvc", ""};
139  ServiceHandle<Muon::IMuonIdHelperSvc> m_idHelperSvc {this, "MuonIdHelperSvc", "Muon::MuonIdHelperSvc/MuonIdHelperSvc"};
140  SG::ReadCondHandleKey<MuonGM::MuonDetectorManager> m_detManagerKey{this, "MuonManagerKey", "MuonDetectorManager"};
141 
142  // properties: container and service names
143  Gaudi::Property<bool> m_isMC {this, "IsMC", true, "This is MC"};
144  Gaudi::Property<std::string> m_rndmEngineName{this, "RndmEngineName", "PadTdsOfflineTool", "Name of the random engine"};
145  Gaudi::Property<float> m_vmmTimeOverThreshold{this, "VMM_TimeOverThreshold", 0., "Time to form a digital signal"};
146  Gaudi::Property<float> m_vmmShapingTime {this, "VMM_ShapingTime", 0., "Time from the leading edge of the signal and its peak"};
147  Gaudi::Property<float> m_vmmDeadTime {this, "VMM_DeadTime", 50., "VMM chip dead time to produce another signal on the same channel"};
148  Gaudi::Property<float> m_triggerCaptureWindow{this, "TriggerCaptureWindow", 30., "Time window for valid hit coincidences"};
149  Gaudi::Property<float> m_timeJitter {this, "TimeJitter", 2., "Time jitter"};
150 
151  Gaudi::Property<bool> m_applyTDS_TofSubtraction {this, "ApplyTofSubtraction", false, "Time of flight subtraction"};
152  Gaudi::Property<bool> m_applyTDS_TimeJitterSubtraction{this, "ApplyTimeJitterSubtraction", false, "Time jitter subtraction"};
153  Gaudi::Property<bool> m_applyVMM_ToT {this, "ApplyToT", false, "Time over threshold criteria"};
154  Gaudi::Property<bool> m_applyVMM_ShapingTime {this, "ApplyVMMShapingTime", false, "VMM Shaping time condition"};
155  Gaudi::Property<bool> m_applyVMM_DeadTime {this, "ApplyVMMDeadTime", false, "VMM Dead time condition"};
156 
157  SG::ReadHandleKey<sTgcDigitContainer> m_sTgcDigitContainer = {this,"sTGC_DigitContainerName","sTGC_DIGITS","the name of the sTGC digit container"};
158  SG::ReadHandleKey<MuonSimDataCollection> m_sTgcSdoContainer = {this,"sTGC_SdoContainerName","sTGC_SDO","the name of the sTGC SDO container"};
159  };
160 }
161 #endif
NSWL1::PadTdsOfflineTool::sideLabel
static char sideLabel(const int &side)
Definition: PadTdsOfflineTool.h:108
sTgcDigitContainer
Use IdentifiableContainer with sTgcDigitCollection.
Definition: sTgcDigitContainer.h:50
NSWL1::PadTdsOfflineTool::m_applyTDS_TimeJitterSubtraction
Gaudi::Property< bool > m_applyTDS_TimeJitterSubtraction
Definition: PadTdsOfflineTool.h:152
MuonGM
Ensure that the Athena extensions are properly loaded.
Definition: GeoMuonHits.h:27
NSWL1::PadTdsOfflineTool::print_pad_time
void print_pad_time(const std::vector< PadHits > &pad_hits) const
Print time for each pad.
Definition: PadTdsOfflineTool.cxx:360
tdr_compat_enum.h
NSWL1::PadTdsOfflineTool::numberOfSectors
static size_t numberOfSectors()
Definition: PadTdsOfflineTool.h:98
NSWL1::PadTdsOfflineTool::computeTimeJitter
double computeTimeJitter() const
extract the time jitter t subtract from the PAD hit time
Definition: PadTdsOfflineTool.cxx:186
sTgcReadoutElement.h
NSWL1::PadTdsOfflineTool
Definition: PadTdsOfflineTool.h:79
NSWL1::PadTdsOfflineTool::determine_delay_and_bc
bool determine_delay_and_bc(const sTgcDigit *digit, const int pad_hit_number, double &delayed_time, uint16_t &BCtag) const
Definition: PadTdsOfflineTool.cxx:250
NSWL1::PadTdsOfflineTool::lastSector
static size_t lastSector()
Definition: PadTdsOfflineTool.h:97
NSWL1::PadTdsOfflineTool::m_triggerCaptureWindow
Gaudi::Property< float > m_triggerCaptureWindow
Definition: PadTdsOfflineTool.h:148
NSWL1::PadTdsOfflineTool::firstSectorAside
static size_t firstSectorAside()
Definition: PadTdsOfflineTool.h:100
NSWL1::PadTdsOfflineTool::numberOfSectorsPerSide
static size_t numberOfSectorsPerSide()
Definition: PadTdsOfflineTool.h:99
checkRpcDigits.digit
digit
Definition: checkRpcDigits.py:186
SG::ReadHandleKey< sTgcDigitContainer >
NSWL1::PadTdsOfflineTool::get_truth_hits_this_pad
bool get_truth_hits_this_pad(const Identifier &pad_id, std::vector< MuonSimData::Deposit > &deposits) const
Definition: PadTdsOfflineTool.cxx:297
python.CaloAddPedShiftConfig.type
type
Definition: CaloAddPedShiftConfig.py:42
NSWL1::PadTdsOfflineTool::cache_index
int cache_index(const sTgcDigit *digit) const
Definition: PadTdsOfflineTool.cxx:237
NSWL1::PadTdsOfflineTool::m_vmmShapingTime
Gaudi::Property< float > m_vmmShapingTime
Definition: PadTdsOfflineTool.h:146
NSWL1::PadTdsOfflineTool::fill_pad_cache
StatusCode fill_pad_cache(std::vector< std::vector< std::shared_ptr< PadData >> > &pad_cache) const
Apply the additional processing then fill the cache, locally.
Definition: PadTdsOfflineTool.cxx:125
TRT::Hit::side
@ side
Definition: HitInfo.h:83
NSWL1::PadTdsOfflineTool::computeTof
double computeTof(const sTgcDigit *digit) const
compute the time of flight of particle giving the PAD hit
Definition: PadTdsOfflineTool.cxx:171
NSWL1::PadTdsOfflineTool::m_sTgcSdoContainer
SG::ReadHandleKey< MuonSimDataCollection > m_sTgcSdoContainer
Definition: PadTdsOfflineTool.h:158
sTgcDigit
Definition: sTgcDigit.h:20
NSWL1::PadTdsOfflineTool::gather_pad_data
virtual StatusCode gather_pad_data(std::vector< std::shared_ptr< PadData >> &pads, int side=-1, int sector=-1) const override
Definition: PadTdsOfflineTool.cxx:64
NSWL1::PadTdsOfflineTool::m_vmmDeadTime
Gaudi::Property< float > m_vmmDeadTime
Definition: PadTdsOfflineTool.h:147
NSWL1::PadTdsOfflineTool::firstSector
static size_t firstSector()
Definition: PadTdsOfflineTool.h:96
IPadTdsTool.h
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
NSWL1::IPadTdsTool
interface for the PadTDS tools
Definition: IPadTdsTool.h:34
NSWL1::PadTdsOfflineTool::m_sTgcDigitContainer
SG::ReadHandleKey< sTgcDigitContainer > m_sTgcDigitContainer
Definition: PadTdsOfflineTool.h:157
NSWL1::PadTdsOfflineTool::m_isMC
Gaudi::Property< bool > m_isMC
Definition: PadTdsOfflineTool.h:143
CLHEP
STD'S.
Definition: CaloNoiseCompCondAlg.h:58
MuonSimDataCollection
Definition: MuonSimDataCollection.h:21
AthAlgTool.h
NSWL1::PadTdsOfflineTool::m_idHelperSvc
ServiceHandle< Muon::IMuonIdHelperSvc > m_idHelperSvc
Definition: PadTdsOfflineTool.h:139
NSWL1::PadTdsOfflineTool::m_rndmSvc
ServiceHandle< IAthRNGSvc > m_rndmSvc
Random number generator engine to use.
Definition: PadTdsOfflineTool.h:138
test_pyathena.parent
parent
Definition: test_pyathena.py:15
NSWL1::PadTdsOfflineTool::sectorIndex
static size_t sectorIndex(const int &side, const int &sector)
internal index.
Definition: PadTdsOfflineTool.h:111
NSWL1::PadTdsOfflineTool::PadTdsOfflineTool
PadTdsOfflineTool(const std::string &type, const std::string &name, const IInterface *parent)
Definition: PadTdsOfflineTool.cxx:32
NSWL1::PadTdsOfflineTool::~PadTdsOfflineTool
virtual ~PadTdsOfflineTool()=default
NSWL1::PadTdsOfflineTool::m_applyTDS_TofSubtraction
Gaudi::Property< bool > m_applyTDS_TofSubtraction
Definition: PadTdsOfflineTool.h:151
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
NSWL1::PadTdsOfflineTool::m_timeJitter
Gaudi::Property< float > m_timeJitter
Definition: PadTdsOfflineTool.h:149
PadOfflineData.h
NSWL1::PadTdsOfflineTool::firstSector
static size_t firstSector(const int &side)
Definition: PadTdsOfflineTool.h:104
NSWL1::PadTdsOfflineTool::print_pad_cache
void print_pad_cache(std::vector< std::vector< std::shared_ptr< PadData >> > &pad_cache) const
Print all info stored in the pad cache.
Definition: PadTdsOfflineTool.cxx:365
MuonDetectorManager.h
RNGWrapper.h
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager >
NSWL1::PadTdsOfflineTool::lastSectorAside
static size_t lastSectorAside()
Definition: PadTdsOfflineTool.h:101
h
NSWL1::PadTdsOfflineTool::lastSectorCside
static size_t lastSectorCside()
Definition: PadTdsOfflineTool.h:103
NSWL1::PadTdsOfflineTool::m_detManagerKey
SG::ReadCondHandleKey< MuonGM::MuonDetectorManager > m_detManagerKey
Definition: PadTdsOfflineTool.h:140
NSWL1::PadTdsOfflineTool::initialize
virtual StatusCode initialize() override
Definition: PadTdsOfflineTool.cxx:38
sTgcDigit.h
NSWL1::PadTdsOfflineTool::m_applyVMM_ShapingTime
Gaudi::Property< bool > m_applyVMM_ShapingTime
Definition: PadTdsOfflineTool.h:154
sTgcDigitContainer.h
NSWL1::PadTdsOfflineTool::m_applyVMM_ToT
Gaudi::Property< bool > m_applyVMM_ToT
Definition: PadTdsOfflineTool.h:153
NSWL1::PadTdsOfflineTool::m_vmmTimeOverThreshold
Gaudi::Property< float > m_vmmTimeOverThreshold
Definition: PadTdsOfflineTool.h:145
NSWL1::PadTdsOfflineTool::lastSector
static size_t lastSector(const int &side)
Definition: PadTdsOfflineTool.h:106
AthAlgTool
Definition: AthAlgTool.h:26
NSWL1::PadTdsOfflineTool::m_rndmEngineName
Gaudi::Property< std::string > m_rndmEngineName
Definition: PadTdsOfflineTool.h:144
MuonSimDataCollection.h
NSWL1::PadTdsOfflineTool::store_pads
void store_pads(const std::vector< PadHits > &pad_hits, std::vector< std::vector< std::shared_ptr< PadData >> > &pad_cache) const
Store pad data in the cache.
Definition: PadTdsOfflineTool.cxx:315
checker_macros.h
Define macros for attributes used to control the static checker.
NSWL1::PadTdsOfflineTool::m_applyVMM_DeadTime
Gaudi::Property< bool > m_applyVMM_DeadTime
Definition: PadTdsOfflineTool.h:155
NSWL1::PadTdsOfflineTool::is_pad_digit
bool is_pad_digit(const sTgcDigit *digit) const
Definition: PadTdsOfflineTool.cxx:232
NSWL1
A trigger trigger candidate for a stgc sector.
Definition: NSWL1Simulation.cxx:7
NSWL1::PadTdsOfflineTool::firstSectorCside
static size_t firstSectorCside()
Definition: PadTdsOfflineTool.h:102
IMuonIdHelperSvc.h
NSWL1::PadTdsOfflineTool::print_digit
void print_digit(const sTgcDigit *digit) const
Definition: PadTdsOfflineTool.cxx:331
MuonSimData.h
IAthRNGSvc.h
ServiceHandle< IAthRNGSvc >
NSWL1::PadTdsOfflineTool::simulateDeadTime
void simulateDeadTime(std::vector< PadHits > &h) const
simulate the dead time of the VMM
Definition: PadTdsOfflineTool.cxx:192
Identifier
Definition: IdentifierFieldParser.cxx:14