![]() |
![]() |
00001 #ifndef CaloSimAlgos_CaloHitRespoNew_h 00002 #define CaloSimAlgos_CaloHitRespoNew_h 00003 00004 #include "CalibFormats/CaloObjects/interface/CaloSamples.h" 00005 #include "DataFormats/DetId/interface/DetId.h" 00006 #include "SimDataFormats/CrossingFrame/interface/MixCollection.h" 00007 #include "SimDataFormats/CaloHit/interface/PCaloHit.h" 00008 00009 #include<vector> 00010 00020 class CaloVShape ; 00021 class CaloVSimParameterMap ; 00022 class CaloVHitCorrection ; 00023 class CaloVHitFilter ; 00024 class CaloSimParameters ; 00025 class CaloSubdetectorGeometry ; 00026 class CaloVPECorrection ; 00027 namespace CLHEP 00028 { 00029 class RandPoissonQ ; 00030 class RandGaussQ ; 00031 class HepRandomEngine ; 00032 } 00033 00034 class CaloHitRespoNew 00035 { 00036 public: 00037 00038 typedef std::vector< CaloSamples > VecSam ; 00039 typedef std::vector< unsigned int > VecInd ; 00040 00041 enum {BUNCHSPACE=25}; 00042 00043 CaloHitRespoNew( const CaloVSimParameterMap* parameterMap , 00044 const CaloVShape* shape , 00045 const DetId detId ) ; 00046 00047 virtual ~CaloHitRespoNew() ; 00048 00049 void setBunchRange( int minBunch , 00050 int maxBunch ) ; 00051 00052 void setGeometry( const CaloSubdetectorGeometry* geometry ) ; 00053 00054 void setPhaseShift( double phaseShift ) ; 00055 00056 void setHitFilter( const CaloVHitFilter* filter) ; 00057 00058 void setHitCorrection( const CaloVHitCorrection* hitCorrection) ; 00059 00060 void setPECorrection( const CaloVPECorrection* peCorrection ) ; 00061 00062 virtual void setRandomEngine( CLHEP::HepRandomEngine& engine ) const ; 00063 00064 virtual void run( MixCollection<PCaloHit>& hits ) ; 00065 00066 virtual void add(const PCaloHit & hit); 00067 00068 unsigned int samplesSize() const ; 00069 00070 const CaloSamples& operator[]( unsigned int i ) const ; 00071 00072 virtual void initializeHits() {} 00073 00074 virtual void finalizeHits() {} 00075 00076 bool withinBunchRange(int bunchCrossing) const { 00077 return(bunchCrossing >= m_minBunch && bunchCrossing <= m_maxBunch); 00078 } 00079 00080 00081 protected: 00082 00083 CaloSamples* findSignal( const DetId& detId ) ; 00084 00085 virtual void putAnalogSignal( const PCaloHit& inputHit) ; 00086 00087 double analogSignalAmplitude( const DetId& id, float energy ) const; 00088 00089 double timeOfFlight( const DetId& detId ) const ; 00090 00091 double phaseShift() const ; 00092 00093 CLHEP::RandPoissonQ* ranPois() const ; 00094 00095 CLHEP::RandGaussQ* ranGauss() const ; 00096 00097 void setupSamples( const DetId& detId ) ; 00098 00099 void blankOutUsedSamples() ; 00100 00101 const CaloSimParameters* params( const DetId& detId ) const ; 00102 00103 const CaloVShape* shape() const ; 00104 00105 const CaloSubdetectorGeometry* geometry() const ; 00106 00107 int minBunch() const { return m_minBunch ; } 00108 00109 int maxBunch() const { return m_maxBunch ; } 00110 00111 VecInd& index() { return m_index ; } 00112 00113 const CaloVHitFilter* hitFilter() const { return m_hitFilter ; } 00114 00115 private: 00116 00117 const CaloVSimParameterMap* m_parameterMap ; 00118 const CaloVShape* m_shape ; 00119 const CaloVHitCorrection* m_hitCorrection ; 00120 const CaloVPECorrection* m_PECorrection ; 00121 const CaloVHitFilter* m_hitFilter ; 00122 const CaloSubdetectorGeometry* m_geometry ; 00123 00124 mutable CLHEP::RandPoissonQ* m_RandPoisson ; 00125 00126 mutable CLHEP::RandGaussQ* m_RandGauss ; 00127 00128 int m_minBunch ; 00129 int m_maxBunch ; 00130 double m_phaseShift ; 00131 00132 VecSam m_vSamp ; 00133 VecInd m_index ; 00134 }; 00135 00136 #endif