CMS 3D CMS Logo

CSCStripElectronicsSim.h
Go to the documentation of this file.
1 #ifndef MU_END_STRIP_ELECTRONICS_SIM_H
2 #define MU_END_STRIP_ELECTRONICS_SIM_H
3 
15 
16 class CSCDetectorHit;
17 class CSCComparatorDigi;
19 class CSCStripConditions;
20 #include <list>
21 #include <string>
22 #include <vector>
23 
24 namespace CLHEP {
25  class HepRandomEngine;
26 }
27 
29 public:
32 
33  ~CSCStripElectronicsSim() override;
34 
35  void fillDigis(CSCStripDigiCollection &digis, CSCComparatorDigiCollection &comparators, CLHEP::HepRandomEngine *);
36 
37  void fillMissingLayer(const CSCLayer *layer,
38  const CSCComparatorDigiCollection &comparators,
40  CLHEP::HepRandomEngine *);
41 
42  void setStripConditions(CSCStripConditions *cond) { theStripConditions = cond; }
43 
44  CSCAnalogSignal makeNoiseSignal(int element, CLHEP::HepRandomEngine *) override;
45 
46  void createDigi(int istrip,
47  const CSCAnalogSignal &signal,
48  std::vector<CSCStripDigi> &result,
49  CLHEP::HepRandomEngine *);
50 
51 private:
53  void initParameters() override;
54 
55  int readoutElement(int strip) const override;
56 
57  float calculateAmpResponse(float t) const override;
59 
60  void runComparator(std::vector<CSCComparatorDigi> &result, CLHEP::HepRandomEngine *);
61 
63  float comparatorReading(const CSCAnalogSignal &signal, float time, CLHEP::HepRandomEngine *) const;
64 
65  // tells which strips to read out around the input strip
66  void getReadoutRange(int inputStrip, int &minStrip, int &maxStrip);
67 
69  std::list<int> getKeyStrips(const std::vector<CSCComparatorDigi> &comparators) const;
70 
72  std::list<int> getKeyStripsFromMC() const;
75  std::list<int> channelsToRead(const std::list<int> &keyStrips, int window) const;
76 
77  void fillStripDigis(const std::list<int> &keyStrips, CSCStripDigiCollection &digis, CLHEP::HepRandomEngine *);
78 
79  void addCrosstalk(CLHEP::HepRandomEngine *);
80  void addCrosstalk(const CSCAnalogSignal &signal, int thisStrip, int otherStrip, CLHEP::HepRandomEngine *);
81 
82  void selfTest() const;
83 
84  // saturation of the 12-bit ADC. Max reading is 4095
85  void doSaturation(CSCStripDigi &digi);
86 
87  // useful constants
88  float theComparatorThreshold; // in fC
91  // note that we don't implement the effect of the x3.5 amplifier
93  // all of these times are in nanoseconds
97  // save the calculation of time-of-flight+drift+shaping
99 
105 
107  // the length of each SCA time bin, in ns. 50 by default
109  // the SCA bin which holds the peak signal. 4, by default.
110  // that's really the 5th, since We start counting at 0
112  // which time bin the trigger crossing goes in
114  // to center comparator signals
117  // tweaks the timing of the SCA
118  std::vector<double> theSCATimingOffsets;
119  // remeber toe TOF correction in comparators,
120  // so we can undo it for SCA
122 };
123 
124 #endif
void setStripConditions(CSCStripConditions *cond)
CSCStripConditions * theStripConditions
std::vector< double > theSCATimingOffsets
def window(xmin, xmax, ymin, ymax, x=0, y=0, width=100, height=100, xlogbase=None, ylogbase=None, minusInfinity=-1000, flipx=False, flipy=True)
Definition: svgfig.py:643
CSCCrosstalkGenerator * theCrosstalkGenerator
Definition: plugin.cc:24
CSCStripAmpResponse theAmpResponse