ATLAS Offline Software
CSC_Digitizer.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2022 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef MUONDIGITIZATION_CSC_DIGITIZER_H
6 #define MUONDIGITIZATION_CSC_DIGITIZER_H
7 
8 #include <TString.h> // for Form
9 
10 #include <algorithm>
11 #include <cassert>
12 #include <map>
13 #include <vector>
14 
15 #include "CLHEP/Random/RandomEngine.h"
17 #include "GaudiKernel/ServiceHandle.h"
18 #include "GaudiKernel/StatusCode.h"
22 #include "MuonSimEvent/CSCSimHit.h"
24 
25 // Author: Ketevi A. Assamagan
26 // BNL, October 17 2003
27 
28 // Digitization class for CSC hits
29 
30 class DigitData {
31 public:
32  double driftTime0;
33  double driftTime;
34  double stripCharge;
35 };
36 
38 public:
39  // full constructor
40  CSC_Digitizer(const CscHitIdHelper* cscHitHelper, const MuonGM::MuonDetectorManager* muonMgr, ICscCalibTool* pcalib);
41 
42  // Destructor
43  ~CSC_Digitizer() = default;
44  // Public methods
45 
46  // initialize random number generators
48 
49  // set the digitization time window
50  void setWindow(const double t1, const double t2);
51 
52  void set(const double bunchTime);
53 
54  void setAmplification(const double amplification) { m_amplification = amplification; }
55 
56  void setDebug(int debug) { m_debug = debug; }
57 
58  void setDriftVelocity(double v0) { m_driftVelocity = v0; }
59  void setElectronEnergy(double e) { m_electronEnergy = e; } // eV
61 
62  // digitize a single hit
63  StatusCode digitize_hit(const CSCSimHit* cscHit, std::vector<IdentifierHash>& hashVec,
64  std::map<IdentifierHash, std::pair<double, double> >& data_map, CLHEP::HepRandomEngine* rndmEngine);
65  StatusCode digitize_hit(const CSCSimHit* cscHit, std::vector<IdentifierHash>& hashVec,
66  std::map<IdentifierHash, std::vector<float> >& data_SampleMap,
67  std::map<IdentifierHash, std::vector<float> >& data_SampleMapOddPhase, CLHEP::HepRandomEngine* rndmEngine);
68  StatusCode digitize_hit(const CSCSimHit* cscHit, std::vector<IdentifierHash>& hashVec,
69  std::map<IdentifierHash, std::vector<float> >& data_SampleMap, CLHEP::HepRandomEngine* rndmEngine);
70 
71  // input parameters should be as form of cscHelper returned value...
72  IdentifierHash getHashId(const Identifier& input_id, const int stripId, const int measuresPhi) const;
73 
74 private:
75  // private methods need to compute the induce charge on the strip
76  double qWire(const int& nElectrons, const double& gammaDist) const;
77  static double qStripR(const double x) ;
78  double qStripR(const double x, const Identifier& id) const;
79  double qStripPhi(const double x, const Identifier& id) const;
80  static double fparamPhi(const double x, const std::array<double, 9>& p) ;
81  double getDriftTime(const MuonGM::CscReadoutElement* descriptor, const Amg::Vector3D& pos) const;
82 
83  bool outsideWindow(double time) const; // default +-50...
84  void fillMaps(const IdentifierHash hash, const double driftTime, const double stripCharge, std::vector<IdentifierHash>& hashVec,
85  std::map<IdentifierHash, std::pair<double, double> >& data_map);
86  void fillSampleMaps(const IdentifierHash hash, const double driftTime, const double stripCharge, std::vector<IdentifierHash>& hashVec,
87  std::map<IdentifierHash, std::vector<float> >& data_map,
88  bool phase = 0); // new interface trying to provide 4 samples instead of q,t
89 
90  Identifier to_identifier(const CSCSimHit* cscHit) const;
91 
92  // private data members
93  const CscHitIdHelper* m_cscHitHelper{nullptr};
94  const MuonGM::MuonDetectorManager* m_muonMgr{nullptr}; // cannot use ReadCondHandleKey since no athena component
95  const CscIdHelper* m_cscIdHelper{nullptr};
97 
98  static constexpr int s_maxElectron{21}; // max electron per interaction :not configurable
100  double m_electronEnergy{66.}; // unit is eV
101 
102  double m_Polia{0.};
103  std::array<double, s_maxElectron> m_sprob{0.};
106  double m_bunchTime{0.};
107  double m_amplification{0.};
108  double m_driftVelocity{60.}; // (1e-6 * 1e9); // 6 cm/microsecond -> mm/ns // 0.06
109  int m_debug{0};
111  std::map<char, int> m_stationDict{};
112 };
113 
114 #endif
CscIdHelper.h
CSC_Digitizer::CSC_Digitizer
CSC_Digitizer(const CscHitIdHelper *cscHitHelper, const MuonGM::MuonDetectorManager *muonMgr, ICscCalibTool *pcalib)
Definition: CSC_Digitizer.cxx:23
CSC_Digitizer::setWindow
void setWindow(const double t1, const double t2)
Definition: CSC_Digitizer.cxx:593
ReadOfcFromCool.phase
phase
Definition: ReadOfcFromCool.py:127
DigitData::stripCharge
double stripCharge
Definition: CSC_Digitizer.h:34
python.PerfMonSerializer.p
def p
Definition: PerfMonSerializer.py:743
CSC_Digitizer::m_timeWindowLowerOffset
double m_timeWindowLowerOffset
Definition: CSC_Digitizer.h:104
CSC_Digitizer::getDriftTime
double getDriftTime(const MuonGM::CscReadoutElement *descriptor, const Amg::Vector3D &pos) const
Definition: CSC_Digitizer.cxx:681
CSC_Digitizer::m_cscIdHelper
const CscIdHelper * m_cscIdHelper
Definition: CSC_Digitizer.h:95
CSC_Digitizer::m_driftVelocity
double m_driftVelocity
Definition: CSC_Digitizer.h:108
DigitData::driftTime
double driftTime
Definition: CSC_Digitizer.h:33
ALFA_EventTPCnv_Dict::t1
std::vector< ALFA_RawDataCollection_p1 > t1
Definition: ALFA_EventTPCnvDict.h:43
CSC_Digitizer::m_stationDict
std::map< char, int > m_stationDict
Cache the csc id dictionary.
Definition: CSC_Digitizer.h:111
CSC_Digitizer::m_bunchTime
double m_bunchTime
Definition: CSC_Digitizer.h:106
ICscCalibTool.h
DigitData::driftTime0
double driftTime0
Definition: CSC_Digitizer.h:32
MuonGM::CscReadoutElement
Definition: CscReadoutElement.h:56
CSC_Digitizer::setDebug
void setDebug(int debug)
Definition: CSC_Digitizer.h:56
x
#define x
CSC_Digitizer::m_cscHitHelper
const CscHitIdHelper * m_cscHitHelper
Definition: CSC_Digitizer.h:93
CSC_Digitizer::m_sprob
std::array< double, s_maxElectron > m_sprob
Definition: CSC_Digitizer.h:103
CSC_Digitizer::m_Polia
double m_Polia
Definition: CSC_Digitizer.h:102
CSC_Digitizer::fillSampleMaps
void fillSampleMaps(const IdentifierHash hash, const double driftTime, const double stripCharge, std::vector< IdentifierHash > &hashVec, std::map< IdentifierHash, std::vector< float > > &data_map, bool phase=0)
Definition: CSC_Digitizer.cxx:556
CSC_Digitizer::fillMaps
void fillMaps(const IdentifierHash hash, const double driftTime, const double stripCharge, std::vector< IdentifierHash > &hashVec, std::map< IdentifierHash, std::pair< double, double > > &data_map)
Definition: CSC_Digitizer.cxx:709
CSC_Digitizer::qWire
double qWire(const int &nElectrons, const double &gammaDist) const
Definition: CSC_Digitizer.cxx:602
CSCSimHit
Definition: CSCSimHit.h:18
TRT::Hit::driftTime
@ driftTime
Definition: HitInfo.h:43
parseMapping.v0
def v0
Definition: parseMapping.py:149
CSC_Digitizer::qStripPhi
double qStripPhi(const double x, const Identifier &id) const
Definition: CSC_Digitizer.cxx:649
CSC_Digitizer::set
void set(const double bunchTime)
Definition: CSC_Digitizer.cxx:598
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
CscHitIdHelper
Definition: CscHitIdHelper.h:13
CSC_Digitizer::digitize_hit
StatusCode digitize_hit(const CSCSimHit *cscHit, std::vector< IdentifierHash > &hashVec, std::map< IdentifierHash, std::vector< float > > &data_SampleMap, CLHEP::HepRandomEngine *rndmEngine)
CSC_Digitizer::getHashId
IdentifierHash getHashId(const Identifier &input_id, const int stripId, const int measuresPhi) const
Definition: CSC_Digitizer.cxx:736
CSC_Digitizer::m_electronEnergy
double m_electronEnergy
Definition: CSC_Digitizer.h:100
CscReadoutElement.h
CSC_Digitizer::setAmplification
void setAmplification(const double amplification)
Definition: CSC_Digitizer.h:54
ICscCalibTool
Definition: ICscCalibTool.h:24
CSC_Digitizer::digitize_hit
StatusCode digitize_hit(const CSCSimHit *cscHit, std::vector< IdentifierHash > &hashVec, std::map< IdentifierHash, std::vector< float > > &data_SampleMap, std::map< IdentifierHash, std::vector< float > > &data_SampleMapOddPhase, CLHEP::HepRandomEngine *rndmEngine)
DigitData
Definition: CSC_Digitizer.h:30
CSC_Digitizer::m_timeWindowUpperOffset
double m_timeWindowUpperOffset
Definition: CSC_Digitizer.h:105
CscHitIdHelper.h
CSC_Digitizer::m_debug
int m_debug
Definition: CSC_Digitizer.h:109
CSCSimHit.h
CSC_Digitizer
Definition: CSC_Digitizer.h:37
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
CSC_Digitizer::outsideWindow
bool outsideWindow(double time) const
Definition: CSC_Digitizer.cxx:676
MuonDetectorManager.h
CSC_Digitizer::fparamPhi
static double fparamPhi(const double x, const std::array< double, 9 > &p)
Definition: CSC_Digitizer.cxx:667
python.LumiBlobConversion.pos
pos
Definition: LumiBlobConversion.py:18
CSC_Digitizer::initialize
StatusCode initialize()
Definition: CSC_Digitizer.cxx:31
ALFA_EventTPCnv_Dict::t2
std::vector< ALFA_RawDataContainer_p1 > t2
Definition: ALFA_EventTPCnvDict.h:44
CSC_Digitizer::setDriftVelocity
void setDriftVelocity(double v0)
Definition: CSC_Digitizer.h:58
CSC_Digitizer::digitize_hit
StatusCode digitize_hit(const CSCSimHit *cscHit, std::vector< IdentifierHash > &hashVec, std::map< IdentifierHash, std::pair< double, double > > &data_map, CLHEP::HepRandomEngine *rndmEngine)
DiTauMassTools::MaxHistStrategyV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:26
CSC_Digitizer::m_muonMgr
const MuonGM::MuonDetectorManager * m_muonMgr
Definition: CSC_Digitizer.h:94
CaloCondBlobAlgs_fillNoiseFromASCII.hash
dictionary hash
Definition: CaloCondBlobAlgs_fillNoiseFromASCII.py:109
CaloSwCorrections.time
def time(flags, cells_name, *args, **kw)
Definition: CaloSwCorrections.py:242
CscIdHelper
Definition: CscIdHelper.h:52
MuonGM::MuonDetectorManager
The MuonDetectorManager stores the transient representation of the Muon Spectrometer geometry and pro...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonDetectorManager.h:49
CSC_Digitizer::to_identifier
Identifier to_identifier(const CSCSimHit *cscHit) const
Definition: CSC_Digitizer.cxx:51
CSC_Digitizer::m_NInterFromEnergyLoss
bool m_NInterFromEnergyLoss
Definition: CSC_Digitizer.h:99
CSC_Digitizer::~CSC_Digitizer
~CSC_Digitizer()=default
CSC_Digitizer::m_pcalib
ICscCalibTool * m_pcalib
Definition: CSC_Digitizer.h:96
IdentifierHash
Definition: IdentifierHash.h:38
CSC_Digitizer::s_maxElectron
static constexpr int s_maxElectron
Definition: CSC_Digitizer.h:98
CSC_Digitizer::setNInterFixed
void setNInterFixed()
Definition: CSC_Digitizer.h:60
CSC_Digitizer::qStripR
static double qStripR(const double x)
Definition: CSC_Digitizer.cxx:618
CSC_Digitizer::setElectronEnergy
void setElectronEnergy(double e)
Definition: CSC_Digitizer.h:59
CSC_Digitizer::m_amplification
double m_amplification
Definition: CSC_Digitizer.h:107