Go to the documentation of this file.00001 #ifndef SiStripDigitizerAlgorithm_h
00002 #define SiStripDigitizerAlgorithm_h
00003
00010 #include <memory>
00011 #include <string>
00012
00013 #include "FWCore/ParameterSet/interface/ParameterSet.h"
00014
00015 #include "SimDataFormats/TrackingHit/interface/PSimHit.h"
00016 #include "DataFormats/DetId/interface/DetId.h"
00017 #include "DataFormats/Common/interface/DetSet.h"
00018 #include "DataFormats/SiStripDigi/interface/SiStripDigi.h"
00019 #include "DataFormats/SiStripDigi/interface/SiStripRawDigi.h"
00020 #include "CondFormats/SiStripObjects/interface/SiStripNoises.h"
00021 #include "CondFormats/SiStripObjects/interface/SiStripPedestals.h"
00022 #include "CondFormats/SiStripObjects/interface/SiStripThreshold.h"
00023 #include "CondFormats/SiStripObjects/interface/SiStripBadStrip.h"
00024 #include "CalibFormats/SiStripObjects/interface/SiStripGain.h"
00025 #include "SiTrivialDigitalConverter.h"
00026 #include "SiGaussianTailNoiseAdder.h"
00027 #include "SiHitDigitizer.h"
00028 #include "SiPileUpSignals.h"
00029 #include "Geometry/CommonDetUnit/interface/GeomDetUnit.h"
00030 #include "Geometry/TrackerGeometryBuilder/interface/StripGeomDetUnit.h"
00031 #include "Geometry/CommonTopologies/interface/StripTopology.h"
00032 #include "Geometry/CommonDetUnit/interface/GeomDetType.h"
00033 #include "SimGeneral/HepPDTRecord/interface/ParticleDataTable.h"
00034 #include "RecoLocalTracker/SiStripZeroSuppression/interface/SiStripFedZeroSuppression.h"
00035
00036 class TrackerTopology;
00037
00038 namespace edm {
00039 class EventSetup;
00040 }
00041
00042 class SiStripLorentzAngle;
00043
00044 namespace CLHEP {
00045 class HepRandomEngine;
00046 }
00047
00048 class SiStripDigitizerAlgorithm {
00049 public:
00050 typedef SiDigitalConverter::DigitalVecType DigitalVecType;
00051 typedef SiDigitalConverter::DigitalRawVecType DigitalRawVecType;
00052 typedef SiPileUpSignals::SignalMapType SignalMapType;
00053 typedef std::map< int, float, std::less<int> > hit_map_type;
00054 typedef float Amplitude;
00055
00056
00057 SiStripDigitizerAlgorithm(const edm::ParameterSet& conf, CLHEP::HepRandomEngine&);
00058
00059
00060 ~SiStripDigitizerAlgorithm();
00061
00062 void initializeDetUnit(StripGeomDetUnit* det, const edm::EventSetup& iSetup);
00063
00064 void initializeEvent(const edm::EventSetup& iSetup);
00065
00066
00067 void accumulateSimHits(const std::vector<PSimHit>::const_iterator inputBegin,
00068 const std::vector<PSimHit>::const_iterator inputEnd,
00069 const StripGeomDetUnit *stripdet,
00070 const GlobalVector& bfield,
00071 const TrackerTopology *tTopo);
00072
00073 void digitize(
00074 edm::DetSet<SiStripDigi>& outDigis,
00075 edm::DetSet<SiStripRawDigi>& outRawDigis,
00076 const StripGeomDetUnit* stripdet,
00077 edm::ESHandle<SiStripGain>&,
00078 edm::ESHandle<SiStripThreshold>&,
00079 edm::ESHandle<SiStripNoises>&,
00080 edm::ESHandle<SiStripPedestals>&);
00081
00082
00083 void setParticleDataTable(const ParticleDataTable * pardt) {
00084 theSiHitDigitizer->setParticleDataTable(pardt);
00085 pdt= pardt;
00086 }
00087
00088 private:
00089 const std::string lorentzAngleName;
00090 const double theThreshold;
00091 const double cmnRMStib;
00092 const double cmnRMStob;
00093 const double cmnRMStid;
00094 const double cmnRMStec;
00095 const double APVSaturationProb;
00096 const bool makeDigiSimLinks_;
00097 const bool peakMode;
00098 const bool noise;
00099 const bool RealPedestals;
00100 const bool SingleStripNoise;
00101 const bool CommonModeNoise;
00102 const bool BaselineShift;
00103 const bool APVSaturationFromHIP;
00104
00105 const int theFedAlgo;
00106 const bool zeroSuppression;
00107 const double theElectronPerADC;
00108 const double theTOFCutForPeak;
00109 const double theTOFCutForDeconvolution;
00110 const double tofCut;
00111 const double cosmicShift;
00112 const double inefficiency;
00113 const double pedOffset;
00114
00115 const ParticleDataTable * pdt;
00116 const ParticleData * particle;
00117
00118 const std::unique_ptr<SiHitDigitizer> theSiHitDigitizer;
00119 const std::unique_ptr<SiPileUpSignals> theSiPileUpSignals;
00120 const std::unique_ptr<const SiGaussianTailNoiseAdder> theSiNoiseAdder;
00121 const std::unique_ptr<SiTrivialDigitalConverter> theSiDigitalConverter;
00122 const std::unique_ptr<SiStripFedZeroSuppression> theSiZeroSuppress;
00123
00124 const std::unique_ptr<CLHEP::RandFlat> theFlatDistribution;
00125
00126
00127 std::map<unsigned int, std::vector<bool> > allBadChannels;
00128
00129 std::map<unsigned int, size_t> firstChannelsWithSignal;
00130 std::map<unsigned int, size_t> lastChannelsWithSignal;
00131
00132
00133 edm::ESHandle<SiStripLorentzAngle> lorentzAngleHandle;
00134
00135 };
00136
00137 #endif