CMS 3D CMS Logo

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

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   // Constructor
00051   DigiSimLinkAlgorithm(const edm::ParameterSet& conf, CLHEP::HepRandomEngine&);
00052 
00053   // Destructor
00054   ~DigiSimLinkAlgorithm();
00055 
00056   // Runs the algorithm
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   // digisimlink
00065   std::vector<StripDigiSimLink> make_link() { return link_coll; }
00066 
00067   // ParticleDataTable
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   //double noiseRMS;
00098   //double pedValue;
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   // local amplitude of detector channels (from processed PSimHit)
00109   std::vector<double> locAmpl;
00110   // total amplitude of detector channels
00111   std::vector<double> 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<double>&,
00132                  unsigned int);
00133   
00134   void push_link_raw(const DigitalRawVecType&,
00135                      const HitToDigisMapType&,
00136                      const HitCounterToDigisMapType&,
00137                      const std::vector<double>&,
00138                      unsigned int);
00139 };
00140 
00141 #endif