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