File indexing completed on 2024-04-06 12:30:59
0001 #ifndef SiStripDigitizerAlgorithm_h
0002 #define SiStripDigitizerAlgorithm_h
0003
0004
0005
0006
0007
0008
0009
0010 #include <memory>
0011 #include <string>
0012
0013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
0014
0015 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
0016 #include "SimDataFormats/PileupSummaryInfo/interface/PileupMixingContent.h"
0017 #include "DataFormats/DetId/interface/DetId.h"
0018 #include "DataFormats/Common/interface/DetSet.h"
0019 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
0020 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
0021 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
0022 #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h"
0023 #include "CondFormats/SiStripObjects/interface/SiStripThreshold.h"
0024 #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h"
0025 #include "CondFormats/SiStripObjects/interface/SiStripApvSimulationParameters.h"
0026 #include "CalibFormats/SiStripObjects/interface/SiStripGain.h"
0027 #include "CondFormats/DataRecord/interface/SiStripCondDataRecords.h"
0028 #include "SimTracker/SiStripDigitizer/interface/SiTrivialDigitalConverter.h"
0029 #include "SimTracker/SiStripDigitizer/interface/SiGaussianTailNoiseAdder.h"
0030 #include "SiHitDigitizer.h"
0031 #include "SimTracker/SiStripDigitizer/interface/SiPileUpSignals.h"
0032 #include "Geometry/CommonDetUnit/interface/GeomDet.h"
0033 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
0034 #include "Geometry/CommonTopologies/interface/StripTopology.h"
0035 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
0036 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
0037 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h"
0038 #include "Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h"
0039 #include "FWCore/Framework/interface/FrameworkfwdMostUsed.h"
0040 #include "FWCore/Utilities/interface/ESGetToken.h"
0041
0042 #include "TH1F.h"
0043
0044 #include <iostream>
0045 #include <fstream>
0046
0047 class TrackerTopology;
0048
0049 class SiStripLorentzAngle;
0050 class StripDigiSimLink;
0051
0052 namespace CLHEP {
0053 class HepRandomEngine;
0054 }
0055
0056 class SiStripDigitizerAlgorithm {
0057 public:
0058 typedef SiDigitalConverter::DigitalVecType DigitalVecType;
0059 typedef SiDigitalConverter::DigitalRawVecType DigitalRawVecType;
0060 typedef SiPileUpSignals::SignalMapType SignalMapType;
0061 typedef std::map<int, float, std::less<int>> hit_map_type;
0062 typedef float Amplitude;
0063
0064
0065 SiStripDigitizerAlgorithm(const edm::ParameterSet& conf, edm::ConsumesCollector iC);
0066
0067
0068 ~SiStripDigitizerAlgorithm();
0069
0070 void initializeDetUnit(StripGeomDetUnit const* det, SiStripBadStrip const&);
0071
0072 void initializeEvent(const edm::EventSetup& iSetup);
0073
0074
0075 void accumulateSimHits(const std::vector<PSimHit>::const_iterator inputBegin,
0076 const std::vector<PSimHit>::const_iterator inputEnd,
0077 size_t inputBeginGlobalIndex,
0078 unsigned int tofBin,
0079 const StripGeomDetUnit* stripdet,
0080 const GlobalVector& bfield,
0081 const TrackerTopology* tTopo,
0082 CLHEP::HepRandomEngine*);
0083
0084 void digitize(edm::DetSet<SiStripDigi>& outDigis,
0085 edm::DetSet<SiStripRawDigi>& outRawDigis,
0086 edm::DetSet<SiStripRawDigi>& outStripAmplitudes,
0087 edm::DetSet<SiStripRawDigi>& outStripAmplitudesPostAPV,
0088 edm::DetSet<SiStripRawDigi>& outStripAPVBaselines,
0089 edm::DetSet<StripDigiSimLink>& outLink,
0090 const StripGeomDetUnit* stripdet,
0091 const SiStripGain&,
0092 const SiStripThreshold&,
0093 const SiStripNoises&,
0094 const SiStripPedestals&,
0095 bool simulateAPVInThisEvent,
0096 const SiStripApvSimulationParameters*,
0097 std::vector<std::pair<int, std::bitset<6>>>& theAffectedAPVvector,
0098 CLHEP::HepRandomEngine*,
0099 const TrackerTopology* tTopo);
0100
0101 void calculateInstlumiScale(PileupMixingContent* puInfo);
0102
0103
0104 void setParticleDataTable(const ParticleDataTable* pardt) {
0105 theSiHitDigitizer->setParticleDataTable(pardt);
0106 pdt = pardt;
0107 }
0108
0109 private:
0110 const double theThreshold;
0111 const double cmnRMStib;
0112 const double cmnRMStob;
0113 const double cmnRMStid;
0114 const double cmnRMStec;
0115 const double APVSaturationProbScaling_;
0116 const bool
0117 makeDigiSimLinks_;
0118 const bool peakMode;
0119 const bool noise;
0120 const bool RealPedestals;
0121 const bool SingleStripNoise;
0122 const bool CommonModeNoise;
0123 const bool BaselineShift;
0124 const bool APVSaturationFromHIP;
0125
0126 const int theFedAlgo;
0127 const bool zeroSuppression;
0128 const double theElectronPerADC;
0129
0130 const double theTOFCutForPeak;
0131 const double theTOFCutForDeconvolution;
0132 const double tofCut;
0133 const double cosmicShift;
0134 const double inefficiency;
0135 const double pedOffset;
0136 const bool PreMixing_;
0137 const edm::ESGetToken<HepPDT::ParticleDataTable, PDTRecord> pdtToken_;
0138 const edm::ESGetToken<SiStripLorentzAngle, SiStripLorentzAngleSimRcd> lorentzAngleToken_;
0139
0140 const ParticleDataTable* pdt;
0141 const ParticleData* particle;
0142
0143 double APVSaturationProb_;
0144 bool FirstLumiCalc_;
0145 bool FirstDigitize_;
0146
0147 const std::unique_ptr<SiHitDigitizer> theSiHitDigitizer;
0148 const std::unique_ptr<SiPileUpSignals> theSiPileUpSignals;
0149 const std::unique_ptr<const SiGaussianTailNoiseAdder> theSiNoiseAdder;
0150 const std::unique_ptr<SiTrivialDigitalConverter> theSiDigitalConverter;
0151 const std::unique_ptr<SiStripFedZeroSuppression> theSiZeroSuppress;
0152
0153
0154 std::map<unsigned int, std::vector<bool>> allBadChannels;
0155 std::map<unsigned int, std::vector<bool>> allHIPChannels;
0156
0157 std::map<unsigned int, size_t> firstChannelsWithSignal;
0158 std::map<unsigned int, size_t> lastChannelsWithSignal;
0159
0160
0161 edm::ESHandle<SiStripLorentzAngle> lorentzAngleHandle;
0162
0163
0164
0165 struct AssociationInfo {
0166 unsigned int trackID;
0167 EncodedEventId eventID;
0168 float contributionToADC;
0169 size_t simHitGlobalIndex;
0170 unsigned int tofBin;
0171 };
0172
0173 typedef std::map<int, std::vector<AssociationInfo>> AssociationInfoForChannel;
0174 typedef std::map<uint32_t, AssociationInfoForChannel> AssociationInfoForDetId;
0175
0176 AssociationInfoForDetId associationInfoForDetId_;
0177
0178 edm::FileInPath APVProbabilityFile;
0179
0180 std::ifstream APVProbaFile;
0181 std::map<int, float> mapOfAPVprobabilities;
0182 std::map<int, std::bitset<6>> SiStripTrackerAffectedAPVMap;
0183 int NumberOfBxBetweenHIPandEvent;
0184
0185 bool includeAPVSimulation_;
0186 const double apv_maxResponse_;
0187 const double apv_rate_;
0188 const double apv_mVPerQ_;
0189 const double apv_fCPerElectron_;
0190 unsigned int nTruePU_;
0191 };
0192
0193 #endif