![]() |
![]() |
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 private: 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 double generatePhotonTime() const; 00059 00060 HcalSiPM * theSiPM; 00061 double theRecoveryTime; 00062 int const TIMEMULT; 00063 float const Y11RANGE; 00064 float const Y11MAX; 00065 float const Y11TIMETORISE; 00066 00067 photonTimeMap precisionTimedPhotons; 00068 HcalTDCParameters theTDCParams; 00069 00070 CLHEP::RandFlat * theRndFlat; 00071 00072 }; 00073 00074 #endif //HcalSimAlgos_HcalSiPMHitResponse_h