CMS 3D CMS Logo

/afs/cern.ch/work/c/cnuttens/private/SiStripDev/DocumentationProduction/CMSSW_6_1_0/src/SimTracker/SiStripDigitizer/plugins/SiStripDigitizerAlgorithm.h

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   // Constructor
00057   SiStripDigitizerAlgorithm(const edm::ParameterSet& conf, CLHEP::HepRandomEngine&);
00058 
00059   // Destructor
00060   ~SiStripDigitizerAlgorithm();
00061 
00062   void initializeDetUnit(StripGeomDetUnit* det, const edm::EventSetup& iSetup);
00063 
00064   void initializeEvent(const edm::EventSetup& iSetup);
00065 
00066   //run the algorithm to digitize a single det
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   // ParticleDataTable
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   // bad channels for each detector ID
00127   std::map<unsigned int, std::vector<bool> > allBadChannels;
00128   // first and last channel wit signal for each detector ID
00129   std::map<unsigned int, size_t> firstChannelsWithSignal;
00130   std::map<unsigned int, size_t> lastChannelsWithSignal;
00131 
00132   // ESHandles
00133   edm::ESHandle<SiStripLorentzAngle> lorentzAngleHandle;
00134 
00135 };
00136 
00137 #endif