Creates electronics signals from hits. More...
#include <CaloHitResponse.h>
Public Types | |
enum | { BUNCHSPACE = 25 } |
typedef std::map< DetId, CaloSamples > | AnalogSignalMap |
Public Member Functions | |
virtual void | add (const PCaloHit &hit) |
process a single SimHit | |
void | add (const CaloSamples &signal) |
add a signal, in units of pe | |
void | addHit (const PCaloHit *hit, CaloSamples &frame) const |
adds the amplitude for a single hit to the frame | |
double | analogSignalAmplitude (const PCaloHit &hit, const CaloSimParameters ¶meters) const |
CaloHitResponse (const CaloVSimParameterMap *parameterMap, const CaloVShape *shape) | |
CaloHitResponse (const CaloVSimParameterMap *parameterMap, const CaloShapes *shapes) | |
void | clear () |
frees up memory | |
CaloSamples * | findSignal (const DetId &detId) |
users can look for the signal for a given cell | |
virtual bool | keepBlank () const |
virtual CaloSamples | makeAnalogSignal (const PCaloHit &inputHit) const |
creates the signal corresponding to this hit | |
CaloSamples | makeBlankSignal (const DetId &detId) const |
creates an empty signal for this DetId | |
int | nSignals () const |
number of signals in the current cache | |
virtual void | run (MixCollection< PCaloHit > &hits) |
Complete cell digitization. | |
void | setBunchRange (int minBunch, int maxBunch) |
tells it which pileup bunches to do | |
void | setGeometry (const CaloGeometry *geometry) |
geometry needed for time-of-flight | |
void | setHitCorrection (const CaloVHitCorrection *hitCorrection) |
If you want to correct hits, for attenuation or delay, set this. | |
void | setHitFilter (const CaloVHitFilter *filter) |
if you want to reject hits, for example, from a certain subdetector, set this | |
void | setPECorrection (const CaloVPECorrection *peCorrection) |
if you want to correct the photoelectrons | |
void | setPhaseShift (const double &thePhaseShift) |
setting the phase shift for asynchronous trigger (e.g. test beams) | |
virtual void | setRandomEngine (CLHEP::HepRandomEngine &engine) |
double | timeOfFlight (const DetId &detId) const |
virtual | ~CaloHitResponse () |
doesn't delete the pointers passed in | |
Protected Attributes | |
AnalogSignalMap | theAnalogSignalMap |
const CaloGeometry * | theGeometry |
const CaloVHitCorrection * | theHitCorrection |
const CaloVHitFilter * | theHitFilter |
int | theMaxBunch |
int | theMinBunch |
const CaloVSimParameterMap * | theParameterMap |
const CaloVPECorrection * | thePECorrection |
double | thePhaseShift_ |
CLHEP::RandPoissonQ * | theRandPoisson |
const CaloVShape * | theShape |
const CaloShapes * | theShapes |
Creates electronics signals from hits.
Definition at line 31 of file CaloHitResponse.h.
typedef std::map<DetId, CaloSamples> CaloHitResponse::AnalogSignalMap |
Definition at line 34 of file CaloHitResponse.h.
anonymous enum |
CaloHitResponse::CaloHitResponse | ( | const CaloVSimParameterMap * | parameterMap, |
const CaloVShape * | shape | ||
) |
Definition at line 23 of file CaloHitResponse.cc.
: theAnalogSignalMap(), theParameterMap(parametersMap), theShapes(0), theShape(shape), theHitCorrection(0), thePECorrection(0), theHitFilter(0), theGeometry(0), theRandPoisson(0), theMinBunch(-10), theMaxBunch(10), thePhaseShift_(1.) { }
CaloHitResponse::CaloHitResponse | ( | const CaloVSimParameterMap * | parameterMap, |
const CaloShapes * | shapes | ||
) |
Definition at line 41 of file CaloHitResponse.cc.
: theAnalogSignalMap(), theParameterMap(parametersMap), theShapes(shapes), theShape(0), theHitCorrection(0), thePECorrection(0), theHitFilter(0), theGeometry(0), theRandPoisson(0), theMinBunch(-10), theMaxBunch(10), thePhaseShift_(1.) { }
CaloHitResponse::~CaloHitResponse | ( | ) | [virtual] |
doesn't delete the pointers passed in
Definition at line 59 of file CaloHitResponse.cc.
References theRandPoisson.
{ delete theRandPoisson; }
void CaloHitResponse::add | ( | const PCaloHit & | hit | ) | [virtual] |
process a single SimHit
Definition at line 92 of file CaloHitResponse.cc.
References CaloVHitFilter::accepts(), i, edm::detail::isnan(), keep, keepBlank(), LogDebug, makeAnalogSignal(), findQualityFiles::size, CaloSamples::size(), theHitFilter, and PCaloHit::time().
Referenced by CaloTDigitizer< Traits >::addNoiseHits(), CaloTDigitizer< Traits >::addNoiseSignals(), run(), and HcalSiPMHitResponse::run().
{ // check the hit time makes sense if ( isnan(hit.time()) ) { return; } // maybe it's not from this subdetector if(theHitFilter == 0 || theHitFilter->accepts(hit)) { LogDebug("CaloHitResponse") << hit; CaloSamples signal( makeAnalogSignal( hit ) ) ; bool keep ( keepBlank() ) ; // here we check for blank signal if not keeping them if( !keep ) { const unsigned int size ( signal.size() ) ; if( 0 != size ) { for( unsigned int i ( 0 ) ; i != size ; ++i ) { keep = keep || signal[i] > 1.e-7 ; } } } LogDebug("CaloHitResponse") << signal; if( keep ) add(signal); } }
void CaloHitResponse::add | ( | const CaloSamples & | signal | ) |
add a signal, in units of pe
Definition at line 120 of file CaloHitResponse.cc.
References findSignal(), i, CaloSamples::id(), CaloSamples::presamples(), CaloSamples::size(), and theAnalogSignalMap.
{ DetId id(signal.id()); CaloSamples * oldSignal = findSignal(id); if (oldSignal == 0) { theAnalogSignalMap[id] = signal; } else { // need a "+=" to CaloSamples int sampleSize = oldSignal->size(); assert(sampleSize == signal.size()); assert(signal.presamples() == oldSignal->presamples()); for(int i = 0; i < sampleSize; ++i) { (*oldSignal)[i] += signal[i]; } } }
void CaloHitResponse::addHit | ( | const PCaloHit * | hit, |
CaloSamples & | frame | ||
) | const |
adds the amplitude for a single hit to the frame
double CaloHitResponse::analogSignalAmplitude | ( | const PCaloHit & | hit, |
const CaloSimParameters & | parameters | ||
) | const |
finds the amplitude contribution from this hit, applying photostatistics, if needed. Results are in photoelectrons
Definition at line 177 of file CaloHitResponse.cc.
References CaloVPECorrection::correctPE(), CaloSimParameters::doPhotostatistics(), PCaloHit::energy(), Exception, PCaloHit::id(), edm::Service< T >::isAvailable(), CaloSimParameters::simHitToPhotoelectrons(), thePECorrection, and theRandPoisson.
Referenced by makeAnalogSignal(), and HcalSiPMHitResponse::makeSiPMSignal().
{ if(!theRandPoisson) { edm::Service<edm::RandomNumberGenerator> rng; if ( ! rng.isAvailable()) { throw cms::Exception("Configuration") << "CaloHitResponse 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."; } theRandPoisson = new CLHEP::RandPoissonQ(rng->getEngine()); } // OK, the "energy" in the hit could be a real energy, deposited energy, // or pe count. This factor converts to photoelectrons DetId detId(hit.id()); double npe = hit.energy() * parameters.simHitToPhotoelectrons(detId); // do we need to doPoisson statistics for the photoelectrons? if(parameters.doPhotostatistics()) { npe = theRandPoisson->fire(npe); } if(thePECorrection) npe = thePECorrection->correctPE(detId, npe); return npe; }
void CaloHitResponse::clear | ( | void | ) | [inline] |
frees up memory
Definition at line 81 of file CaloHitResponse.h.
References theAnalogSignalMap.
Referenced by EcalMixingModuleValidation::computeSDBunchDigi(), and CaloTDigitizer< Traits >::run().
{theAnalogSignalMap.clear();}
CaloSamples * CaloHitResponse::findSignal | ( | const DetId & | detId | ) |
users can look for the signal for a given cell
Definition at line 204 of file CaloHitResponse.cc.
References query::result, and theAnalogSignalMap.
Referenced by add(), EcalMixingModuleValidation::computeSDBunchDigi(), and CaloTDigitizer< Traits >::run().
{ CaloSamples * result = 0; AnalogSignalMap::iterator signalItr = theAnalogSignalMap.find(detId); if(signalItr == theAnalogSignalMap.end()) { result = 0; } else { result = &(signalItr->second); } return result; }
virtual bool CaloHitResponse::keepBlank | ( | ) | const [inline, virtual] |
Definition at line 52 of file CaloHitResponse.h.
References funct::true.
Referenced by add().
{ return true ; }
CaloSamples CaloHitResponse::makeAnalogSignal | ( | const PCaloHit & | inputHit | ) | const [virtual] |
creates the signal corresponding to this hit
Definition at line 139 of file CaloHitResponse.cc.
References analogSignalAmplitude(), newFWLiteAna::bin, BUNCHSPACE, CaloVHitCorrection::correct(), PCaloHit::id(), makeBlankSignal(), Parameters::parameters, query::result, CaloShapes::shape(), CaloVSimParameterMap::simParameters(), CaloSamples::size(), theHitCorrection, theParameterMap, thePhaseShift_, theShape, theShapes, PCaloHit::time(), timeOfFlight(), CaloVShape::timeToRise(), and tzero.
Referenced by add().
{ // see if we need to correct the hit PCaloHit hit = inputHit; if(theHitCorrection != 0) { theHitCorrection->correct(hit); } DetId detId(hit.id()); const CaloSimParameters & parameters = theParameterMap->simParameters(detId); double signal = analogSignalAmplitude(hit, parameters); double jitter = hit.time() - timeOfFlight(detId); const CaloVShape * shape = theShape; if(!shape) { shape = theShapes->shape(detId); } // assume bins count from zero, go for center of bin const double tzero = ( shape->timeToRise() + parameters.timePhase() - jitter - BUNCHSPACE*( parameters.binOfMaximum() - thePhaseShift_ ) ) ; double binTime = tzero; CaloSamples result(makeBlankSignal(detId)); for(int bin = 0; bin < result.size(); bin++) { result[bin] += (*shape)(binTime)* signal; binTime += BUNCHSPACE; } return result; }
CaloSamples CaloHitResponse::makeBlankSignal | ( | const DetId & | detId | ) | const |
creates an empty signal for this DetId
Definition at line 217 of file CaloHitResponse.cc.
References CaloSimParameters::binOfMaximum(), Parameters::parameters, CaloSimParameters::readoutFrameSize(), query::result, CaloVSimParameterMap::simParameters(), and theParameterMap.
Referenced by makeAnalogSignal(), HcalSiPMHitResponse::makeSiPMSignal(), and CaloTDigitizer< Traits >::run().
{ const CaloSimParameters & parameters = theParameterMap->simParameters(detId); CaloSamples result(detId, parameters.readoutFrameSize()); result.setPresamples(parameters.binOfMaximum()-1); return result; }
int CaloHitResponse::nSignals | ( | ) | const [inline] |
number of signals in the current cache
Definition at line 97 of file CaloHitResponse.h.
References theAnalogSignalMap.
Referenced by CaloTDigitizer< Traits >::run().
{return theAnalogSignalMap.size();}
void CaloHitResponse::run | ( | MixCollection< PCaloHit > & | hits | ) | [virtual] |
Complete cell digitization.
Reimplemented in HcalSiPMHitResponse.
Definition at line 77 of file CaloHitResponse.cc.
References add(), MixCollection< T >::begin(), MixCollection< T >::end(), theMaxBunch, and theMinBunch.
Referenced by EcalMixingModuleValidation::computeSDBunchDigi(), and CaloTDigitizer< Traits >::run().
{ for(MixCollection<PCaloHit>::MixItr hitItr = hits.begin(); hitItr != hits.end(); ++hitItr) { // check the bunch crossing range if ( hitItr.bunch() < theMinBunch || hitItr.bunch() > theMaxBunch ) { continue; } add(*hitItr); } // loop over hits }
void CaloHitResponse::setBunchRange | ( | int | minBunch, |
int | maxBunch | ||
) |
tells it which pileup bunches to do
Definition at line 65 of file CaloHitResponse.cc.
References theMaxBunch, and theMinBunch.
Referenced by EcalMixingModuleValidation::computeSDBunchDigi().
{ theMinBunch = minBunch; theMaxBunch = maxBunch; }
void CaloHitResponse::setGeometry | ( | const CaloGeometry * | geometry | ) | [inline] |
geometry needed for time-of-flight
Definition at line 49 of file CaloHitResponse.h.
References geometry, and theGeometry.
Referenced by CastorDigiProducer::checkGeometry(), EcalMixingModuleValidation::computeSDBunchDigi(), HcalTBDigiProducer::updateGeometry(), HcalDigitizer::updateGeometry(), and EcalDigiProducer::updateGeometry().
{ theGeometry = geometry; }
void CaloHitResponse::setHitCorrection | ( | const CaloVHitCorrection * | hitCorrection | ) | [inline] |
If you want to correct hits, for attenuation or delay, set this.
Definition at line 69 of file CaloHitResponse.h.
References theHitCorrection.
Referenced by CastorDigiProducer::CastorDigiProducer(), and HcalTBDigiProducer::HcalTBDigiProducer().
{ theHitCorrection = hitCorrection; }
void CaloHitResponse::setHitFilter | ( | const CaloVHitFilter * | filter | ) | [inline] |
if you want to reject hits, for example, from a certain subdetector, set this
Definition at line 64 of file CaloHitResponse.h.
References align_tpl::filter, and theHitFilter.
Referenced by CastorDigiProducer::CastorDigiProducer(), HcalDigitizer::HcalDigitizer(), and HcalTBDigiProducer::HcalTBDigiProducer().
{ theHitFilter = filter; }
void CaloHitResponse::setPECorrection | ( | const CaloVPECorrection * | peCorrection | ) | [inline] |
if you want to correct the photoelectrons
Definition at line 74 of file CaloHitResponse.h.
References thePECorrection.
Referenced by HcalDigitizer::HcalDigitizer().
{ thePECorrection = peCorrection; }
void CaloHitResponse::setPhaseShift | ( | const double & | thePhaseShift | ) | [inline] |
setting the phase shift for asynchronous trigger (e.g. test beams)
Definition at line 108 of file CaloHitResponse.h.
References thePhaseShift_.
Referenced by HcalTBDigiProducer::setPhaseShift().
{ thePhaseShift_ = thePhaseShift; }
void CaloHitResponse::setRandomEngine | ( | CLHEP::HepRandomEngine & | engine | ) | [virtual] |
Reimplemented in HcalSiPMHitResponse.
Definition at line 71 of file CaloHitResponse.cc.
References theRandPoisson.
Referenced by CaloTDigitizer< Traits >::setRandomEngine().
{ theRandPoisson = new CLHEP::RandPoissonQ(engine); }
double CaloHitResponse::timeOfFlight | ( | const DetId & | detId | ) | const |
time-of-flight, in ns, to get to this cell returns 0 if no geometry has been set
Definition at line 225 of file CaloHitResponse.cc.
References CaloSubdetectorGeometry::getGeometry(), CaloCellGeometry::getPosition(), CaloGeometry::getSubdetectorGeometry(), PV3DBase< T, PVType, FrameType >::mag(), DetId::rawId(), query::result, and theGeometry.
Referenced by makeAnalogSignal(), and HcalSiPMHitResponse::makeSiPMSignal().
{ // not going to assume there's one of these per subdetector. // Take the whole CaloGeometry and find the right subdet double result = 0.; if(theGeometry == 0) { edm::LogWarning("CaloHitResponse") << "No Calo Geometry set, so no time of flight correction"; } else { const CaloCellGeometry* cellGeometry = theGeometry->getSubdetectorGeometry(detId)->getGeometry(detId); if(cellGeometry == 0) { edm::LogWarning("CaloHitResponse") << "No Calo cell found for ID" << detId.rawId() << " so no time-of-flight subtraction will be done"; } else { double distance = cellGeometry->getPosition().mag(); result = distance * cm / c_light; // Units of c_light: mm/ns } } return result; }
AnalogSignalMap CaloHitResponse::theAnalogSignalMap [protected] |
Definition at line 112 of file CaloHitResponse.h.
Referenced by add(), clear(), findSignal(), and nSignals().
const CaloGeometry* CaloHitResponse::theGeometry [protected] |
Definition at line 121 of file CaloHitResponse.h.
Referenced by setGeometry(), and timeOfFlight().
const CaloVHitCorrection* CaloHitResponse::theHitCorrection [protected] |
Definition at line 117 of file CaloHitResponse.h.
Referenced by makeAnalogSignal(), HcalSiPMHitResponse::makeSiPMSignal(), and setHitCorrection().
const CaloVHitFilter* CaloHitResponse::theHitFilter [protected] |
Definition at line 119 of file CaloHitResponse.h.
Referenced by add(), HcalSiPMHitResponse::run(), and setHitFilter().
int CaloHitResponse::theMaxBunch [protected] |
Definition at line 126 of file CaloHitResponse.h.
Referenced by run(), HcalSiPMHitResponse::run(), and setBunchRange().
int CaloHitResponse::theMinBunch [protected] |
Definition at line 125 of file CaloHitResponse.h.
Referenced by run(), HcalSiPMHitResponse::run(), and setBunchRange().
const CaloVSimParameterMap* CaloHitResponse::theParameterMap [protected] |
Definition at line 114 of file CaloHitResponse.h.
Referenced by makeAnalogSignal(), makeBlankSignal(), and HcalSiPMHitResponse::makeSiPMSignal().
const CaloVPECorrection* CaloHitResponse::thePECorrection [protected] |
Definition at line 118 of file CaloHitResponse.h.
Referenced by analogSignalAmplitude(), and setPECorrection().
double CaloHitResponse::thePhaseShift_ [protected] |
Definition at line 128 of file CaloHitResponse.h.
Referenced by makeAnalogSignal(), HcalSiPMHitResponse::makeSiPMSignal(), and setPhaseShift().
CLHEP::RandPoissonQ* CaloHitResponse::theRandPoisson [mutable, protected] |
Definition at line 123 of file CaloHitResponse.h.
Referenced by analogSignalAmplitude(), setRandomEngine(), and ~CaloHitResponse().
const CaloVShape* CaloHitResponse::theShape [protected] |
Definition at line 116 of file CaloHitResponse.h.
Referenced by makeAnalogSignal().
const CaloShapes* CaloHitResponse::theShapes [protected] |
Definition at line 115 of file CaloHitResponse.h.
Referenced by makeAnalogSignal(), and HcalSiPMHitResponse::makeSiPMSignal().