#include <EcalHitResponse.h>
Public Types | |
enum | { BUNCHSPACE = 25 } |
typedef CaloTSamplesBase< float > | EcalSamples |
typedef std::vector< unsigned int > | VecInd |
Public Member Functions | |
void | add (const EcalSamples *pSam) |
EcalHitResponse (const CaloVSimParameterMap *parameterMap, const CaloVShape *shape) | |
const EcalSamples * | findDetId (const DetId &detId) const |
virtual const EcalSamples * | operator[] (unsigned int i) const =0 |
virtual EcalSamples * | operator[] (unsigned int i)=0 |
virtual void | run (MixCollection< PCaloHit > &hits) |
virtual unsigned int | samplesSize () const =0 |
void | setBunchRange (int minBunch, int maxBunch) |
void | setGeometry (const CaloSubdetectorGeometry *geometry) |
void | setHitCorrection (const CaloVHitCorrection *hitCorrection) |
void | setHitFilter (const CaloVHitFilter *filter) |
void | setPECorrection (const CaloVPECorrection *peCorrection) |
void | setPhaseShift (double phaseShift) |
virtual | ~EcalHitResponse () |
Protected Member Functions | |
double | analogSignalAmplitude (const PCaloHit &hit) const |
void | blankOutUsedSamples () |
EcalSamples * | findSignal (const DetId &detId) |
const CaloSubdetectorGeometry * | geometry () const |
const CaloVHitFilter * | hitFilter () const |
const VecInd & | index () const |
VecInd & | index () |
int | maxBunch () const |
int | minBunch () const |
const CaloSimParameters * | params (const DetId &detId) const |
double | phaseShift () const |
virtual void | putAnalogSignal (const PCaloHit &inputHit) |
CLHEP::RandGaussQ * | ranGauss () const |
CLHEP::RandPoissonQ * | ranPois () const |
virtual unsigned int | samplesSizeAll () const =0 |
const CaloVShape * | shape () const |
double | timeOfFlight (const DetId &detId) const |
virtual EcalSamples * | vSam (unsigned int i)=0 |
virtual const EcalSamples * | vSamAll (unsigned int i) const =0 |
virtual EcalSamples * | vSamAll (unsigned int i)=0 |
Private Attributes | |
const CaloSubdetectorGeometry * | m_geometry |
const CaloVHitCorrection * | m_hitCorrection |
const CaloVHitFilter * | m_hitFilter |
VecInd | m_index |
int | m_maxBunch |
int | m_minBunch |
const CaloVSimParameterMap * | m_parameterMap |
const CaloVPECorrection * | m_PECorrection |
double | m_phaseShift |
CLHEP::RandGaussQ * | m_RandGauss |
CLHEP::RandPoissonQ * | m_RandPoisson |
const CaloVShape * | m_shape |
Definition at line 25 of file EcalHitResponse.h.
typedef CaloTSamplesBase<float> EcalHitResponse::EcalSamples |
Definition at line 29 of file EcalHitResponse.h.
typedef std::vector< unsigned int > EcalHitResponse::VecInd |
Definition at line 31 of file EcalHitResponse.h.
anonymous enum |
EcalHitResponse::EcalHitResponse | ( | const CaloVSimParameterMap * | parameterMap, |
const CaloVShape * | shape | ||
) |
Definition at line 23 of file EcalHitResponse.cc.
References Exception, edm::Service< T >::isAvailable(), m_RandGauss, and m_RandPoisson.
: m_parameterMap ( parameterMap ) , m_shape ( shape ) , m_hitCorrection ( 0 ) , m_PECorrection ( 0 ) , m_hitFilter ( 0 ) , m_geometry ( 0 ) , m_RandPoisson ( 0 ) , m_RandGauss ( 0 ) , m_minBunch ( -10 ) , m_maxBunch ( 10 ) , m_phaseShift ( 1 ) { edm::Service<edm::RandomNumberGenerator> rng ; if ( !rng.isAvailable() ) { throw cms::Exception("Configuration") << "EcalHitResponse requires the RandomNumberGeneratorService\n" "which is not present in the configuration file. You must add the service\n" "in the configuration file or remove the modules that require it."; } m_RandPoisson = new CLHEP::RandPoissonQ( rng->getEngine() ) ; m_RandGauss = new CLHEP::RandGaussQ( rng->getEngine() ) ; }
EcalHitResponse::~EcalHitResponse | ( | ) | [virtual] |
Definition at line 49 of file EcalHitResponse.cc.
References m_RandGauss, and m_RandPoisson.
{ delete m_RandPoisson ; delete m_RandGauss ; }
void EcalHitResponse::add | ( | const EcalSamples * | pSam | ) |
Definition at line 234 of file EcalHitResponse.cc.
References findSignal(), and CaloTSamplesBase< Ttype >::id().
{ EcalSamples& sam ( *findSignal( pSam->id() ) ) ; sam += (*pSam) ; }
double EcalHitResponse::analogSignalAmplitude | ( | const PCaloHit & | hit | ) | const [protected] |
Definition at line 206 of file EcalHitResponse.cc.
References CaloVPECorrection::correctPE(), PCaloHit::energy(), PCaloHit::id(), m_PECorrection, Parameters::parameters, params(), and ranPois().
Referenced by putAnalogSignal().
{ const DetId& detId ( hit.id() ) ; const CaloSimParameters& parameters ( *params( detId ) ) ; // OK, the "energy" in the hit could be a real energy, deposited energy, // or pe count. This factor converts to photoelectrons double npe ( hit.energy()*parameters.simHitToPhotoelectrons( detId ) ) ; // do we need to doPoisson statistics for the photoelectrons? if( parameters.doPhotostatistics() ) npe = ranPois()->fire( npe ) ; if( 0 != m_PECorrection ) npe = m_PECorrection->correctPE( detId, npe ) ; return npe ; }
void EcalHitResponse::blankOutUsedSamples | ( | ) | [protected] |
Definition at line 133 of file EcalHitResponse.cc.
References i, m_index, CaloTSamplesBase< Ttype >::setZero(), findQualityFiles::size, and vSamAll().
Referenced by run(), and EBHitResponse::run().
const EcalHitResponse::EcalSamples * EcalHitResponse::findDetId | ( | const DetId & | detId | ) | const |
Definition at line 271 of file EcalHitResponse.cc.
References vSamAll().
Referenced by ESDigitizer::run().
{ const unsigned int di ( CaloGenericDetId( detId ).denseIndex() ) ; return vSamAll( di ) ; }
EcalHitResponse::EcalSamples * EcalHitResponse::findSignal | ( | const DetId & | detId | ) | [protected] |
Definition at line 197 of file EcalHitResponse.cc.
References m_index, query::result, vSamAll(), and CaloTSamplesBase< Ttype >::zero().
Referenced by add(), putAnalogSignal(), and EBHitResponse::putAPDSignal().
{ const unsigned int di ( CaloGenericDetId( detId ).denseIndex() ) ; EcalSamples* result ( vSamAll( di ) ) ; if( result->zero() ) m_index.push_back( di ) ; return result ; }
const CaloSubdetectorGeometry * EcalHitResponse::geometry | ( | ) | const [protected] |
Definition at line 82 of file EcalHitResponse.cc.
References m_geometry.
Referenced by setGeometry(), and timeOfFlight().
{ assert( 0 != m_geometry ) ; return m_geometry ; }
const CaloVHitFilter * EcalHitResponse::hitFilter | ( | ) | const [protected] |
Definition at line 265 of file EcalHitResponse.cc.
References m_hitFilter.
Referenced by EBHitResponse::run().
{ return m_hitFilter ; }
EcalHitResponse::VecInd & EcalHitResponse::index | ( | ) | [protected] |
Definition at line 253 of file EcalHitResponse.cc.
References m_index.
Referenced by ESHitResponse::operator[](), EBHitResponse::run(), ESHitResponse::samplesSize(), and ESHitResponse::vSam().
{ return m_index ; }
const EcalHitResponse::VecInd & EcalHitResponse::index | ( | ) | const [protected] |
int EcalHitResponse::maxBunch | ( | ) | const [protected] |
Definition at line 247 of file EcalHitResponse.cc.
References m_maxBunch.
Referenced by EBHitResponse::run(), and setBunchRange().
{ return m_maxBunch ; }
int EcalHitResponse::minBunch | ( | ) | const [protected] |
Definition at line 241 of file EcalHitResponse.cc.
References m_minBunch.
Referenced by EBHitResponse::run(), and setBunchRange().
{ return m_minBunch ; }
virtual EcalSamples* EcalHitResponse::operator[] | ( | unsigned int | i | ) | [pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
virtual const EcalSamples* EcalHitResponse::operator[] | ( | unsigned int | i | ) | const [pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
const CaloSimParameters * EcalHitResponse::params | ( | const DetId & | detId | ) | const [protected] |
Definition at line 68 of file EcalHitResponse.cc.
References m_parameterMap, and CaloVSimParameterMap::simParameters().
Referenced by analogSignalAmplitude(), putAnalogSignal(), and EBHitResponse::putAPDSignal().
{ assert( 0 != m_parameterMap ) ; return &m_parameterMap->simParameters( detId ) ; }
double EcalHitResponse::phaseShift | ( | ) | const [protected] |
Definition at line 109 of file EcalHitResponse.cc.
References m_phaseShift.
Referenced by EBHitResponse::putAPDSignal(), and setPhaseShift().
{ return m_phaseShift ; }
void EcalHitResponse::putAnalogSignal | ( | const PCaloHit & | inputHit | ) | [protected, virtual] |
Definition at line 164 of file EcalHitResponse.cc.
References analogSignalAmplitude(), newFWLiteAna::bin, BUNCHSPACE, CaloVHitCorrection::correct(), findSignal(), PCaloHit::id(), m_hitCorrection, m_phaseShift, Parameters::parameters, params(), query::result, shape(), CaloTSamplesBase< Ttype >::size(), PCaloHit::time(), timeOfFlight(), CaloVShape::timeToRise(), and tzero.
Referenced by run(), and EBHitResponse::run().
{ PCaloHit hit ( inputHit ) ; if( 0 != m_hitCorrection ) m_hitCorrection->correct( hit ) ; const DetId detId ( hit.id() ) ; const CaloSimParameters* parameters ( params( detId ) ) ; const double signal ( analogSignalAmplitude( hit ) ) ; const double jitter ( hit.time() - timeOfFlight( detId ) ) ; const double tzero = ( shape()->timeToRise() + parameters->timePhase() - jitter - BUNCHSPACE*( parameters->binOfMaximum() - m_phaseShift ) ) ; double binTime ( tzero ) ; EcalSamples& result ( *findSignal( detId ) ) ; const unsigned int rsize ( result.size() ) ; for( unsigned int bin ( 0 ) ; bin != rsize ; ++bin ) { result[ bin ] += (*shape())( binTime )*signal ; binTime += BUNCHSPACE ; } }
CLHEP::RandGaussQ * EcalHitResponse::ranGauss | ( | ) | const [protected] |
Definition at line 62 of file EcalHitResponse.cc.
References m_RandGauss.
Referenced by EBHitResponse::EBHitResponse().
{ return m_RandGauss ; }
CLHEP::RandPoissonQ * EcalHitResponse::ranPois | ( | ) | const [protected] |
Definition at line 56 of file EcalHitResponse.cc.
References m_RandPoisson.
Referenced by analogSignalAmplitude(), and EBHitResponse::apdSignalAmplitude().
{ return m_RandPoisson ; }
void EcalHitResponse::run | ( | MixCollection< PCaloHit > & | hits | ) | [virtual] |
Reimplemented in EBHitResponse.
Definition at line 146 of file EcalHitResponse.cc.
References CaloVHitFilter::accepts(), MixCollection< T >::begin(), blankOutUsedSamples(), MixCollection< T >::end(), edm::detail::isnan(), m_hitFilter, m_maxBunch, m_minBunch, putAnalogSignal(), and PCaloHit::time().
{ blankOutUsedSamples() ; for( MixCollection<PCaloHit>::MixItr hitItr ( hits.begin() ) ; hitItr != hits.end() ; ++hitItr ) { const PCaloHit& hit ( *hitItr ) ; const int bunch ( hitItr.bunch() ) ; if( m_minBunch <= bunch && m_maxBunch >= bunch && !isnan( hit.time() ) && ( 0 == m_hitFilter || m_hitFilter->accepts( hit ) ) ) putAnalogSignal( hit ) ; } }
virtual unsigned int EcalHitResponse::samplesSize | ( | ) | const [pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
virtual unsigned int EcalHitResponse::samplesSizeAll | ( | ) | const [protected, pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
void EcalHitResponse::setBunchRange | ( | int | minBunch, |
int | maxBunch | ||
) |
Definition at line 89 of file EcalHitResponse.cc.
References m_maxBunch, m_minBunch, maxBunch(), and minBunch().
{ m_minBunch = minBunch ; m_maxBunch = maxBunch ; }
void EcalHitResponse::setGeometry | ( | const CaloSubdetectorGeometry * | geometry | ) |
Definition at line 97 of file EcalHitResponse.cc.
References geometry(), and m_geometry.
Referenced by EcalDigiProducer::updateGeometry().
{ m_geometry = geometry ; }
void EcalHitResponse::setHitCorrection | ( | const CaloVHitCorrection * | hitCorrection | ) |
Definition at line 121 of file EcalHitResponse.cc.
References m_hitCorrection.
{ m_hitCorrection = hitCorrection ; }
void EcalHitResponse::setHitFilter | ( | const CaloVHitFilter * | filter | ) |
Definition at line 115 of file EcalHitResponse.cc.
References align_tpl::filter, and m_hitFilter.
{ m_hitFilter = filter ; }
void EcalHitResponse::setPECorrection | ( | const CaloVPECorrection * | peCorrection | ) |
Definition at line 127 of file EcalHitResponse.cc.
References m_PECorrection.
{ m_PECorrection = peCorrection ; }
void EcalHitResponse::setPhaseShift | ( | double | phaseShift | ) |
Definition at line 103 of file EcalHitResponse.cc.
References m_phaseShift, and phaseShift().
Referenced by EcalDigiProducer::EcalDigiProducer(), and EcalTBDigiProducer::setPhaseShift().
{ m_phaseShift = phaseShift ; }
const CaloVShape * EcalHitResponse::shape | ( | void | ) | const [protected] |
Definition at line 75 of file EcalHitResponse.cc.
References m_shape.
Referenced by putAnalogSignal().
double EcalHitResponse::timeOfFlight | ( | const DetId & | detId | ) | const [protected] |
Definition at line 226 of file EcalHitResponse.cc.
References geometry(), CaloCellGeometry::getPosition(), and PV3DBase< T, PVType, FrameType >::mag().
Referenced by putAnalogSignal(), and EBHitResponse::putAPDSignal().
{ const CaloCellGeometry* cellGeometry ( geometry()->getGeometry( detId ) ) ; assert( 0 != cellGeometry ) ; return cellGeometry->getPosition().mag()*cm/c_light ; // Units of c_light: mm/ns }
virtual EcalSamples* EcalHitResponse::vSam | ( | unsigned int | i | ) | [protected, pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
virtual const EcalSamples* EcalHitResponse::vSamAll | ( | unsigned int | i | ) | const [protected, pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
virtual EcalSamples* EcalHitResponse::vSamAll | ( | unsigned int | i | ) | [protected, pure virtual] |
Implemented in EBHitResponse, EEHitResponse, and ESHitResponse.
Referenced by blankOutUsedSamples(), findDetId(), and findSignal().
const CaloSubdetectorGeometry* EcalHitResponse::m_geometry [private] |
Definition at line 114 of file EcalHitResponse.h.
Referenced by geometry(), and setGeometry().
const CaloVHitCorrection* EcalHitResponse::m_hitCorrection [private] |
Definition at line 111 of file EcalHitResponse.h.
Referenced by putAnalogSignal(), and setHitCorrection().
const CaloVHitFilter* EcalHitResponse::m_hitFilter [private] |
Definition at line 113 of file EcalHitResponse.h.
Referenced by hitFilter(), run(), and setHitFilter().
VecInd EcalHitResponse::m_index [private] |
Definition at line 123 of file EcalHitResponse.h.
Referenced by blankOutUsedSamples(), findSignal(), and index().
int EcalHitResponse::m_maxBunch [private] |
Definition at line 120 of file EcalHitResponse.h.
Referenced by maxBunch(), run(), and setBunchRange().
int EcalHitResponse::m_minBunch [private] |
Definition at line 119 of file EcalHitResponse.h.
Referenced by minBunch(), run(), and setBunchRange().
const CaloVSimParameterMap* EcalHitResponse::m_parameterMap [private] |
Definition at line 109 of file EcalHitResponse.h.
Referenced by params().
const CaloVPECorrection* EcalHitResponse::m_PECorrection [private] |
Definition at line 112 of file EcalHitResponse.h.
Referenced by analogSignalAmplitude(), and setPECorrection().
double EcalHitResponse::m_phaseShift [private] |
Definition at line 121 of file EcalHitResponse.h.
Referenced by phaseShift(), putAnalogSignal(), and setPhaseShift().
CLHEP::RandGaussQ* EcalHitResponse::m_RandGauss [mutable, private] |
Definition at line 117 of file EcalHitResponse.h.
Referenced by EcalHitResponse(), ranGauss(), and ~EcalHitResponse().
CLHEP::RandPoissonQ* EcalHitResponse::m_RandPoisson [mutable, private] |
Definition at line 116 of file EcalHitResponse.h.
Referenced by EcalHitResponse(), ranPois(), and ~EcalHitResponse().
const CaloVShape* EcalHitResponse::m_shape [private] |
Definition at line 110 of file EcalHitResponse.h.
Referenced by shape().