File indexing completed on 2023-03-17 11:25:20
0001 #ifndef MU_END_STRIP_ELECTRONICS_SIM_H
0002 #define MU_END_STRIP_ELECTRONICS_SIM_H
0003
0004
0005
0006
0007
0008
0009
0010
0011 #include "DataFormats/CSCDigi/interface/CSCComparatorDigiCollection.h"
0012 #include "DataFormats/CSCDigi/interface/CSCStripDigiCollection.h"
0013 #include "SimMuon/CSCDigitizer/src/CSCBaseElectronicsSim.h"
0014 #include "SimMuon/CSCDigitizer/src/CSCStripAmpResponse.h"
0015
0016 class CSCDetectorHit;
0017 class CSCComparatorDigi;
0018 class CSCCrosstalkGenerator;
0019 class CSCStripConditions;
0020 #include <list>
0021 #include <string>
0022 #include <vector>
0023
0024 namespace CLHEP {
0025 class HepRandomEngine;
0026 }
0027
0028 class CSCStripElectronicsSim : public CSCBaseElectronicsSim {
0029 public:
0030
0031 explicit CSCStripElectronicsSim(const edm::ParameterSet &p);
0032
0033 ~CSCStripElectronicsSim() override;
0034
0035 void fillDigis(CSCStripDigiCollection &digis, CSCComparatorDigiCollection &comparators, CLHEP::HepRandomEngine *);
0036
0037 void fillMissingLayer(const CSCLayer *layer,
0038 const CSCComparatorDigiCollection &comparators,
0039 CSCStripDigiCollection &digis,
0040 CLHEP::HepRandomEngine *);
0041
0042 void setStripConditions(CSCStripConditions *cond) { theStripConditions = cond; }
0043
0044 CSCAnalogSignal makeNoiseSignal(int element, CLHEP::HepRandomEngine *) override;
0045
0046 void createDigi(int istrip,
0047 const CSCAnalogSignal &signal,
0048 std::vector<CSCStripDigi> &result,
0049 CLHEP::HepRandomEngine *);
0050
0051 private:
0052
0053 void initParameters() override;
0054
0055 int readoutElement(int strip) const override;
0056
0057 float calculateAmpResponse(float t) const override;
0058 CSCStripAmpResponse theAmpResponse;
0059
0060 void runComparator(std::vector<CSCComparatorDigi> &result, CLHEP::HepRandomEngine *);
0061
0062
0063 float comparatorReading(const CSCAnalogSignal &signal, float time, CLHEP::HepRandomEngine *) const;
0064
0065
0066 void getReadoutRange(int inputStrip, int &minStrip, int &maxStrip);
0067
0068
0069 std::list<int> getKeyStrips(const std::vector<CSCComparatorDigi> &comparators) const;
0070
0071
0072 std::list<int> getKeyStripsFromMC() const;
0073
0074
0075 std::list<int> channelsToRead(const std::list<int> &keyStrips, int window) const;
0076
0077 void fillStripDigis(const std::list<int> &keyStrips, CSCStripDigiCollection &digis, CLHEP::HepRandomEngine *);
0078
0079 void addCrosstalk(CLHEP::HepRandomEngine *);
0080 void addCrosstalk(const CSCAnalogSignal &signal, int thisStrip, int otherStrip, CLHEP::HepRandomEngine *);
0081
0082 void selfTest() const;
0083
0084
0085 void doSaturation(CSCStripDigi &digi);
0086
0087
0088 float theComparatorThreshold;
0089 float theComparatorNoise;
0090 float theComparatorRMSOffset;
0091
0092 float theComparatorSaturation;
0093
0094 float theComparatorWait;
0095 float theComparatorDeadTime;
0096 float theDaqDeadTime;
0097
0098 float theTimingOffset;
0099
0100 int nScaBins_;
0101 bool doSuppression_;
0102 bool doCrosstalk_;
0103 CSCStripConditions *theStripConditions;
0104 CSCCrosstalkGenerator *theCrosstalkGenerator;
0105
0106 int theComparatorClockJump;
0107
0108 float sca_time_bin_size;
0109
0110
0111 int sca_peak_bin;
0112
0113 double theComparatorTimeBinOffset;
0114
0115 double theComparatorTimeOffset;
0116 double theComparatorSamplingTime;
0117
0118 std::vector<double> theSCATimingOffsets;
0119
0120
0121 float theAverageTimeOfFlight;
0122 };
0123
0124 #endif