ATLAS Offline Software
sTgcDigitMaker.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2023 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #ifndef STGCDIGITMAKER_H
14 #define STGCDIGITMAKER_H
15 
23 #include "CxxUtils/ArrayHelper.h"
25 namespace CLHEP {
26  class HepRandomEngine;
27  class HepRandom;
28 }
29 
30 
32 class sTgcHitIdHelper;
33 class sTgcIdHelper;
34 
35 //--- class description
36 class sTgcDigitMaker : public AthMessaging {
37  //------ for public
38  public:
39 
40  sTgcDigitMaker(const Muon::IMuonIdHelperSvc* idHelperSvc,
41  const int channelTypes,
42  double meanGasGain,
43  bool doPadChargeSharing,
44  double stripChargeScale);
45 
46  virtual ~sTgcDigitMaker();
47 
53 
57  struct DigiConditions {
61  CLHEP::HepRandomEngine* rndmEngine{nullptr};
62  };
63 
64  using sTgcDigitVec = std::vector<std::unique_ptr<sTgcDigit>>;
65  sTgcDigitVec executeDigi(const DigiConditions& condContainers, const sTGCSimHit& hit) const;
66 
67  //====== for private
68  private:
69 
74  struct GammaParameter {
75  double lowEdge{0.}; // low side of the interval in ns
76  double kParameter{0.};
77  double thetaParameter{0.};
78  };
79 
83  struct Ionization {
84  double distance{-9.99}; //smallest distance bet the wire and particle trajectory
85  Amg::Vector3D posOnSegment{Amg::Vector3D::Zero()}; // Point of closest approach
86  Amg::Vector3D posOnWire{Amg::Vector3D::Zero()}; // Position on the wire
87  };
88 
89  //uint16_t bcTagging(const double digittime, const int channelType) const;
90  static void addDigit(sTgcDigitVec& digits,
91  const Identifier& id,
92  const uint16_t bctag,
93  const double digittime,
94  const double charge) ;
95 
100 
101 
102 
111  Ionization pointClosestApproach(const MuonGM::sTgcReadoutElement* readoutEle,
112  const Identifier& id,
113  int wireNumber,
114  const Amg::Vector3D& preStepPos,
115  const Amg::Vector3D& postStepPos) const;
116 
121  double getTimeOffsetStrip(size_t neighbor_index) const;
122 
123  static double getPadChargeFraction(double distance) ;
124 
126  GammaParameter getGammaParameter(double distance) const;
128  double getMostProbableArrivalTime(double distance) const;
129 
130  // Parameters of the gamma pdf required for determining digit time
131  std::vector<GammaParameter> m_gammaParameter;
132  // 4th-order polymonial describing the most probable time as function of the distance of closest approach
133  std::array<double, 5> m_mostProbableArrivalTime{make_array<double, 5>(0.)};
134 
135  // Time offset to add to Strip timing
136  std::array<double, 6> m_timeOffsetStrip{make_array<double, 6>(0.)};
137 
139 
147  int m_channelTypes{3}; // 1 -> strips, 2 -> strips+wires, 3 -> strips/wires/pads
148  double m_theta{0.8}; // theta=0.8 value best matches the PDF
149  double m_meanGasGain{5.e4}; // mean gain estimated from ATLAS note "ATL-MUON-PUB-2014-001"
150  bool m_doPadSharing{false};
151 
152 
153  // Flag to enable strip time offset
154  bool m_doTimeOffsetStrip{false};
155  // Angular strip resolution parameter
156  double m_StripResolution{0.0949};
157  double m_posResIncident{1.};
159  // Strip cluster charge profile: [0] = norm of inner Gaussian, [1] = sigma of inner Gaussian,
160  // [2] = norm of outer Gaussian, [3] = sigma of outer Gaussian
161  static constexpr std::array<double, 4> m_clusterProfile{0.350, 0.573, 0.186, 1.092};
162  // Dependence of energy deposited on incident angle
164  // Overall factor to scale the total strip cluster charge
165  double m_stripChargeScale{0.4};
166 };
167 
168 #endif
NswCalibDbThresholdData
Definition: NswCalibDbThresholdData.h:21
sTgcDigitMaker::m_posResIncident
double m_posResIncident
Definition: sTgcDigitMaker.h:157
sTgcDigitMaker::GammaParameter::lowEdge
double lowEdge
Definition: sTgcDigitMaker.h:75
sTgcDigitMaker::getTimeOffsetStrip
double getTimeOffsetStrip(size_t neighbor_index) const
Get digit time offset of a strip depending on its relative position to the strip at the centre of the...
Definition: sTgcDigitMaker.cxx:849
sTgcReadoutElement.h
sTgcDigitMaker::readFileOfTimeOffsetStrip
StatusCode readFileOfTimeOffsetStrip()
Read share/sTGC_Digitization_timeOffsetStrip.dat.
Definition: sTgcDigitMaker.cxx:810
sTgcDigitMaker::Ionization
Ionization object with distance, position on the hit segment and position on the wire.
Definition: sTgcDigitMaker.h:83
sTgcDigitMaker::getMostProbableArrivalTime
double getMostProbableArrivalTime(double distance) const
Get the most probable time of arrival.
Definition: sTgcDigitMaker.cxx:799
sTgcDigitMaker::m_chargeAngularFactor
double m_chargeAngularFactor
Definition: sTgcDigitMaker.h:163
sTGCSimHit.h
sTgcDigitMaker::executeDigi
sTgcDigitVec executeDigi(const DigiConditions &condContainers, const sTGCSimHit &hit) const
Definition: sTgcDigitMaker.cxx:70
sTgcDigitMaker::readFileOfTimeArrival
StatusCode readFileOfTimeArrival()
Read share/sTGC_Digitization_timeArrival.dat.
Definition: sTgcDigitMaker.cxx:744
sTgcDigitMaker::DigiConditions
Digitize a given hit, determining the time and charge spread on wires, pads and strips.
Definition: sTgcDigitMaker.h:57
sTgcDigitMaker::GammaParameter
Parameters of a gamma probability distribution function, required for estimating wire digit's time of...
Definition: sTgcDigitMaker.h:74
sTgcDigitMaker::~sTgcDigitMaker
virtual ~sTgcDigitMaker()
sTgcDigitMaker::GammaParameter::thetaParameter
double thetaParameter
Definition: sTgcDigitMaker.h:77
sTgcDigitMaker::pointClosestApproach
Ionization pointClosestApproach(const MuonGM::sTgcReadoutElement *readoutEle, const Identifier &id, int wireNumber, const Amg::Vector3D &preStepPos, const Amg::Vector3D &postStepPos) const
Determine the points where the distance between two segments is smallest.
Definition: sTgcDigitMaker.cxx:631
sTgcDigitMaker::m_gammaParameter
std::vector< GammaParameter > m_gammaParameter
Definition: sTgcDigitMaker.h:131
sTgcDigitMaker::m_posResAngular
double m_posResAngular
Definition: sTgcDigitMaker.h:158
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:88
sTgcDigitMaker::m_channelTypes
int m_channelTypes
define offsets and widths of time windows for signals from wiregangs and strips.
Definition: sTgcDigitMaker.h:147
sTgcDigitMaker::getGammaParameter
GammaParameter getGammaParameter(double distance) const
Find the gamma pdf parameters of a given distance.
Definition: sTgcDigitMaker.cxx:784
sTgcDigitCollection
Definition: sTgcDigitCollection.h:18
Identifier
Definition: DetectorDescription/Identifier/Identifier/Identifier.h:32
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CLHEP
STD'S.
Definition: IAtRndmGenSvc.h:19
MuonGM::sTgcReadoutElement
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:28
ArrayHelper.h
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
sTgcDigitMaker::GammaParameter::kParameter
double kParameter
Definition: sTgcDigitMaker.h:76
sTgcDigitMaker::addDigit
static void addDigit(sTgcDigitVec &digits, const Identifier &id, const uint16_t bctag, const double digittime, const double charge)
Definition: sTgcDigitMaker.cxx:729
sTgcDigitMaker::DigiConditions::thresholdData
const NswCalibDbThresholdData * thresholdData
Definition: sTgcDigitMaker.h:60
sTgcDigitMaker::Ionization::posOnWire
Amg::Vector3D posOnWire
Definition: sTgcDigitMaker.h:86
sTgcDigitMaker::Ionization::posOnSegment
Amg::Vector3D posOnSegment
Definition: sTgcDigitMaker.h:85
sTgcDigitMaker::m_doTimeOffsetStrip
bool m_doTimeOffsetStrip
Definition: sTgcDigitMaker.h:154
Muon::DigitEffiData
Definition: DigitEffiData.h:23
sTgcDigitMaker::m_doPadSharing
bool m_doPadSharing
Definition: sTgcDigitMaker.h:150
charge
double charge(const T &p)
Definition: AtlasPID.h:494
sTgcIdHelper
Definition: sTgcIdHelper.h:55
sTgcDigitMaker::getPadChargeFraction
static double getPadChargeFraction(double distance)
Definition: sTgcDigitMaker.cxx:854
sTgcDigitMaker::Ionization::distance
double distance
Definition: sTgcDigitMaker.h:84
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
MuonDetectorManager.h
sTgcDigitMaker::DigiConditions::detMgr
const MuonGM::MuonDetectorManager * detMgr
Definition: sTgcDigitMaker.h:58
sTGCSimHit
Definition: sTGCSimHit.h:15
sTgcDigitMaker::m_clusterProfile
static constexpr std::array< double, 4 > m_clusterProfile
Definition: sTgcDigitMaker.h:161
sTgcHitIdHelper
Definition: sTgcHitIdHelper.h:13
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
sTgcDigitMaker::m_timeOffsetStrip
std::array< double, 6 > m_timeOffsetStrip
Definition: sTgcDigitMaker.h:136
sTgcDigitMaker::m_stripChargeScale
double m_stripChargeScale
Definition: sTgcDigitMaker.h:165
sTgcDigitMaker::sTgcDigitMaker
sTgcDigitMaker(const Muon::IMuonIdHelperSvc *idHelperSvc, const int channelTypes, double meanGasGain, bool doPadChargeSharing, double stripChargeScale)
Definition: sTgcDigitMaker.cxx:34
AthMessaging.h
sTgcDigitMaker::m_theta
double m_theta
Definition: sTgcDigitMaker.h:148
Muon::IMuonIdHelperSvc
Interface for Helper service that creates muon Identifiers and can be used to print Identifiers.
Definition: IMuonIdHelperSvc.h:26
sTgcDigit.h
sTgcDigitMaker::m_mostProbableArrivalTime
std::array< double, 5 > m_mostProbableArrivalTime
Definition: sTgcDigitMaker.h:133
sTgcDigitMaker::initialize
StatusCode initialize()
Initializes sTgcHitIdHelper and sTgcIdHelper, and call the functions to read files containing digitiz...
Definition: sTgcDigitMaker.cxx:50
sTgcDigitMaker::m_StripResolution
double m_StripResolution
Definition: sTgcDigitMaker.h:156
sTgcDigitMaker::sTgcDigitVec
std::vector< std::unique_ptr< sTgcDigit > > sTgcDigitVec
Definition: sTgcDigitMaker.h:64
DigitEffiData.h
sTgcDigitMaker::DigiConditions::rndmEngine
CLHEP::HepRandomEngine * rndmEngine
Definition: sTgcDigitMaker.h:61
sTgcDigitMaker::m_meanGasGain
double m_meanGasGain
Definition: sTgcDigitMaker.h:149
Amg::distance
float distance(const Amg::Vector3D &p1, const Amg::Vector3D &p2)
calculates the distance between two point in 3D space
Definition: GeoPrimitivesHelpers.h:54
sTgcDigitMaker
Definition: sTgcDigitMaker.h:36
sTgcDigitMaker::m_idHelperSvc
const Muon::IMuonIdHelperSvc * m_idHelperSvc
Definition: sTgcDigitMaker.h:138
NswCalibDbThresholdData.h
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
sTgcHitIdHelper.h
sTgcDigitMaker::DigiConditions::efficiencies
const Muon::DigitEffiData * efficiencies
Definition: sTgcDigitMaker.h:59