CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_6_2_7/src/SimCalorimetry/CaloSimAlgos/interface/CaloHitRespoNew.h

Go to the documentation of this file.
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