ATLAS Offline Software
MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3 */
4 
13 #ifndef STGCDIGITMAKER_H
14 #define STGCDIGITMAKER_H
15 
22 #include "CxxUtils/ArrayHelper.h"
25 
26 namespace CLHEP {
27  class HepRandomEngine;
28  class HepRandom;
29 }
35 class sTgcDigitMaker : public AthMessaging {
36  public:
40  enum digitMode {
43  AllChType = 3,
44  };
45  sTgcDigitMaker(const Muon::IMuonIdHelperSvc* idHelperSvc,
47  double meanGasGain,
48  bool doPadChargeSharing);
49 
53  virtual ~sTgcDigitMaker();
54 
59 
64  struct DigiConditions {
66  const Muon::DigitEffiData* efficiencies{nullptr};
67  const NswCalibDbThresholdData* thresholdData{nullptr};
68  CLHEP::HepRandomEngine* rndEngine{nullptr};
69  };
70 
73 
79  using sTgcDigitVec = std::vector<std::unique_ptr<sTgcDigit>>;
80  sTgcDigitVec executeDigi(const DigiConditions& condContainers, const TimedHit& hit) const;
81 
82  private:
87  struct GammaParameter {
88  double lowEdge{0.};
89  double kParameter{0.};
90  double thetaParameter{0.};
91  };
92 
97  struct Ionization {
98  double distance{-9.99}; //smallest distance bet the wire and particle trajectory
99  Amg::Vector3D posOnSegment{Amg::Vector3D::Zero()}; // Point of closest approach
100  Amg::Vector3D posOnWire{Amg::Vector3D::Zero()}; // Position on the wire
101  };
102 
106  static void addDigit(sTgcDigitVec& digits,
107  const Identifier& id,
108  uint16_t bctag,
109  double digittime,
110  double charge);
111 
116 
121 
133  int wireNumber,
134  const Amg::Vector3D& locHitPos,
135  const Amg::Vector3D& locHitDir,
136  const double stepLength) const;
137 
145  double getTimeOffsetStrip(size_t neighbor_index) const;
146 
150  static double getPadChargeFraction(double distance);
151 
156 
160  double getMostProbableArrivalTime(double distance) const;
161 
162  // Parameters of the gamma probability distribution function
163  std::vector<GammaParameter> m_gammaParameter;
164  std::array<double, 5> m_mostProbableArrivalTime{make_array<double, 5>(0.)};
165  std::array<double, 6> m_timeOffsetStrip{make_array<double, 6>(0.)};
166 
167  const Muon::IMuonIdHelperSvc* m_idHelperSvc{nullptr};
168 
169  // Computes the charge on a strip given the limits of integral using the error function
170  // In R3, strip cluster charge profile was defined by a double gaussian for every digit
171  // which is computationally inefficient, here we use result of double gaussian integral
172  // to find the charge on each strip of the cluster, where M, N are upper and lower
173  // limits respectively
174  // Strip cluster charge profile: [0] = sigma of inner Gaussian, [1] = sigma of outer Gaussian
175  static constexpr std::array<double, 2> m_clusterParams{0.573, 1.092};
176  double chargeIntegral(double N, double M) const;
177 
184  // Digitization parameters
186  double m_theta{10}; // theta=10 value best matches the PDF
187  double m_meanGasGain{5.e4}; // mean gain estimated from ATLAS note "ATL-MUON-PUB-2014-001"
188  bool m_doPadSharing{false};
189 
190  // Flag to enable strip time offset
191  bool m_doTimeOffsetStrip{false};
192  // Angular strip resolution parameter
193  double m_StripResolution{0.0949};
194  double m_posResIncident{1.};
195  double m_posResAngular{0.305/m_StripResolution};
196 
197  // Dependence of energy deposited on incident angle
198  double m_chargeAngularFactor{4.0};
199 };
200 
201 #endif
NswCalibDbThresholdData
Definition: NswCalibDbThresholdData.h:17
sTgcDigitMaker::m_posResIncident
double m_posResIncident
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:158
MuonGMR4::WireGroupDesign
Definition: WireGroupDesign.h:23
MuonGMR4::MuonDetectorManager
Definition: MuonPhaseII/MuonDetDescr/MuonReadoutGeometryR4/MuonReadoutGeometryR4/MuonDetectorManager.h:62
sTgcDigitMaker::GammaParameter::lowEdge
double lowEdge
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:76
sTgcDigitMaker::getTimeOffsetStrip
double getTimeOffsetStrip(size_t neighbor_index) const
Gets the time offset for a strip cluster.
sTgcDigitMaker::readFileOfTimeOffsetStrip
StatusCode readFileOfTimeOffsetStrip()
Reads strip time offset data file.
sTgcDigitMaker::m_timeOffsetStrip
std::array< double, 6 > m_timeOffsetStrip
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:137
sTgcDigitMaker::m_clusterParams
static constexpr std::array< double, 2 > m_clusterParams
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:175
sTgcDigitMaker::Ionization
Ionization object with distance, position on the hit segment and position on the wire.
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:84
sTgcDigitMaker::chargeIntegral
double chargeIntegral(double N, double M) const
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/src/sTgcDigitMaker.cxx:763
sTgcDigitMaker::getMostProbableArrivalTime
double getMostProbableArrivalTime(double distance) const
Computes the most probable arrival time based on the distance of closest approach.
sTgcDigitMaker::m_chargeAngularFactor
double m_chargeAngularFactor
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:164
sTgcDigitMaker::executeDigi
sTgcDigitVec executeDigi(const DigiConditions &condContainers, const sTGCSimHit &hit) const
Definition: MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx:72
sTgcDigitMaker::readFileOfTimeArrival
StatusCode readFileOfTimeArrival()
Reads time arrival data file.
JetTiledMap::N
@ N
Definition: TiledEtaPhiMap.h:44
sTgcDigitMaker::DigiConditions
Digitize a given hit, determining the time and charge spread on wires, pads and strips.
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:58
TimedHitPtr< xAOD::MuonSimHit >
sTgcDigitMaker::GammaParameter
Parameters of a gamma probability distribution function, required for estimating wire digit's time of...
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:75
sTgcIdHelper::sTgcChannelTypes
sTgcChannelTypes
Definition: sTgcIdHelper.h:190
sTgcDigitMaker::GammaParameter::thetaParameter
double thetaParameter
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:78
sTgcDigitMaker::getGammaParameter
GammaParameter getGammaParameter(double distance) const
Retrieves gamma distribution parameters based on distance.
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: MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx:642
TimedHitPtr.h
sTgcReadoutElement.h
sTgcDigitMaker::m_digitMode
digitMode m_digitMode
define offsets and widths of time windows for signals from wiregroups and strips.
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:185
sTgcDigitMaker::m_posResAngular
double m_posResAngular
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:159
xAOD::uint16_t
setWord1 uint16_t
Definition: eFexEMRoI_v1.cxx:93
sTgcDigitMaker::AllChType
@ AllChType
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:43
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
CLHEP
STD'S.
Definition: CaloNoiseCompCondAlg.h:58
sTgcDigitMaker::StripsOnly
@ StripsOnly
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:41
MuonDetectorManager.h
ArrayHelper.h
sTgcDigitMaker::m_gammaParameter
std::vector< GammaParameter > m_gammaParameter
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:132
AthMessaging
Class to provide easy MsgStream access and capabilities.
Definition: AthMessaging.h:55
MuonSimHitContainer.h
Preparation.mode
mode
Definition: Preparation.py:107
sTgcDigitMaker::GammaParameter::kParameter
double kParameter
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:77
sTgcDigitMaker::DigiConditions::rndEngine
CLHEP::HepRandomEngine * rndEngine
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:68
sTgcDigitMaker::DigiConditions::efficiencies
const Muon::DigitEffiData * efficiencies
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:60
sTgcDigitMaker::Ionization::posOnWire
Amg::Vector3D posOnWire
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:87
sTgcDigitMaker::Ionization::posOnSegment
Amg::Vector3D posOnSegment
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:86
sTgcDigitMaker::m_doTimeOffsetStrip
bool m_doTimeOffsetStrip
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:155
Muon::DigitEffiData
Definition: DigitEffiData.h:23
sTgcDigitMaker::m_doPadSharing
bool m_doPadSharing
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:151
charge
double charge(const T &p)
Definition: AtlasPID.h:986
sTgcDigitMaker::StripsAndPads
@ StripsAndPads
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:42
sTgcDigitMaker::Ionization::distance
double distance
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:85
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
sTgcDigitMaker::DigiConditions::detMgr
const MuonGM::MuonDetectorManager * detMgr
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:59
sTgcDigitMaker::m_idHelperSvc
const Muon::IMuonIdHelperSvc * m_idHelperSvc
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:139
sTgcDigitMaker::m_mostProbableArrivalTime
std::array< double, 5 > m_mostProbableArrivalTime
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:134
sTgcDigitMaker::getPadChargeFraction
static double getPadChargeFraction(double distance)
Computes charge fraction shared among pads.
sTgcDigitMaker::addDigit
static void addDigit(sTgcDigitVec &digits, const Identifier &id, uint16_t bctag, double digittime, double charge)
Adds a digit to the appropriate cache.
AthMessaging.h
sTgcDigitMaker::m_theta
double m_theta
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:149
sTgcDigitMaker::digitMode
digitMode
Constructor initializing digitization parameters.
Definition: MuonPhaseII/MuonDigitization/sTgcDigitizationR4/sTgcDigitizationR4/sTgcDigitMaker.h:40
Muon::IMuonIdHelperSvc
Interface for Helper service that creates muon Identifiers and can be used to print Identifiers.
Definition: IMuonIdHelperSvc.h:27
sTgcDigitMaker::initialize
StatusCode initialize()
Initialize digitization parameters, including reading necessary data files.
sTgcDigitMaker::m_StripResolution
double m_StripResolution
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:157
sTgcDigitMaker::sTgcDigitVec
std::vector< std::unique_ptr< sTgcDigit > > sTgcDigitVec
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:65
sTgcDigitContainer.h
DigitEffiData.h
sTgcDigitMaker::DigiConditions::thresholdData
const NswCalibDbThresholdData * thresholdData
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:61
sTgcDigitMaker::~sTgcDigitMaker
virtual ~sTgcDigitMaker()
Destructor.
sTgcDigitMaker::sTgcDigitMaker
sTgcDigitMaker(const Muon::IMuonIdHelperSvc *idHelperSvc, const int channelTypes, double meanGasGain, bool doPadChargeSharing, double stripChargeScale, bool applyAsBuiltBLines)
Definition: MuonDigitization/sTGC_Digitization/src/sTgcDigitMaker.cxx:34
sTgcDigitMaker::m_meanGasGain
double m_meanGasGain
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:150
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
Handles the digitization of sTGC hits, converting simulated hits into sTGC digits.
Definition: MuonDigitization/sTGC_Digitization/sTGC_Digitization/sTgcDigitMaker.h:36
NswCalibDbThresholdData.h
generate::Zero
void Zero(TH1D *hin)
Definition: generate.cxx:32
Identifier
Definition: IdentifierFieldParser.cxx:14