CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_5/src/SimCalorimetry/HcalSimAlgos/interface/HcalSiPMHitResponse.h

Go to the documentation of this file.
00001 // -*- C++ -*- 
00002 #ifndef HcalSimAlgos_HcalSiPMHitResponse_h
00003 #define HcalSimAlgos_HcalSiPMHitResponse_h
00004 
00005 #include "SimCalorimetry/CaloSimAlgos/interface/CaloHitResponse.h"
00006 #include "SimCalorimetry/HcalSimAlgos/interface/HcalSiPMRecovery.h"
00007 #include "SimCalorimetry/HcalSimAlgos/interface/HcalTDCParameters.h"
00008 
00009 #include <map>
00010 #include <set>
00011 #include <vector>
00012 
00013 #include "CLHEP/Random/RandFlat.h"
00014 
00015 class HcalSiPM;
00016 
00017 class PCaloHitCompareTimes {
00018 public:
00019   bool operator()(const PCaloHit * a, 
00020                   const PCaloHit * b) const {
00021     return a->time()<b->time();
00022   }
00023 };
00024 
00025 class HcalSiPMHitResponse : public CaloHitResponse {
00026 
00027 public:
00028   HcalSiPMHitResponse(const CaloVSimParameterMap * parameterMap, 
00029                       const CaloShapes * shapes);
00030 
00031   virtual ~HcalSiPMHitResponse();
00032 
00033   typedef std::vector<unsigned int> photonTimeHist;
00034   typedef std::map< DetId, photonTimeHist > photonTimeMap;
00035 
00036   virtual void initializeHits();
00037 
00038   virtual void finalizeHits();
00039 
00040   virtual void add(const PCaloHit& hit);
00041 
00042   virtual void add(const CaloSamples& signal);
00043 
00044   virtual void run(MixCollection<PCaloHit> & hits);
00045 
00046   virtual void setRandomEngine(CLHEP::HepRandomEngine & engine);
00047 
00048   virtual CaloSamples makeBlankSignal(const DetId & detId) const;
00049 
00050   static double Y11TimePDF( double t );
00051 
00052 protected:
00053   typedef std::multiset <PCaloHit, PCaloHitCompareTimes> SortedHitSet;
00054 
00055   virtual CaloSamples makeSiPMSignal(const DetId& id, const PCaloHit& hit, int & integral) const;
00056   virtual CaloSamples makeSiPMSignal(DetId const& id, photonTimeHist const& photons) const;
00057 
00058   virtual void differentiatePreciseSamples(CaloSamples& samples, 
00059                                            double diffNorm = 1.0) const;
00060 
00061   double generatePhotonTime() const;
00062 
00063 private:
00064   HcalSiPM * theSiPM;
00065   double theRecoveryTime;
00066   int const TIMEMULT;
00067   float const Y11RANGE;
00068   float const Y11MAX;
00069   float const Y11TIMETORISE;
00070   float theDiffNorm;
00071 
00072   photonTimeMap precisionTimedPhotons;
00073   HcalTDCParameters theTDCParams;
00074 
00075   CLHEP::RandFlat * theRndFlat;
00076 
00077 };
00078 
00079 #endif //HcalSimAlgos_HcalSiPMHitResponse_h