![]() |
![]() |
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