#include <HcalSiPMHitResponse.h>
Public Member Functions | |
HcalSiPMHitResponse (const CaloVSimParameterMap *parameterMap, const CaloShapes *shapes) | |
virtual void | run (MixCollection< PCaloHit > &hits) |
Complete cell digitization. | |
virtual void | setRandomEngine (CLHEP::HepRandomEngine &engine) |
virtual | ~HcalSiPMHitResponse () |
Protected Member Functions | |
virtual CaloSamples | makeSiPMSignal (const PCaloHit &inHit, int &integral) const |
Protected Attributes | |
double | theRecoveryTime |
HcalSiPM * | theSiPM |
Definition at line 9 of file HcalSiPMHitResponse.h.
HcalSiPMHitResponse::HcalSiPMHitResponse | ( | const CaloVSimParameterMap * | parameterMap, |
const CaloShapes * | shapes | ||
) |
Definition at line 25 of file HcalSiPMHitResponse.cc.
References theSiPM.
: CaloHitResponse(parameterMap, shapes), theSiPM(0), theRecoveryTime(250.) { theSiPM = new HcalSiPM(14000); }
HcalSiPMHitResponse::~HcalSiPMHitResponse | ( | ) | [virtual] |
Definition at line 31 of file HcalSiPMHitResponse.cc.
References theSiPM.
CaloSamples HcalSiPMHitResponse::makeSiPMSignal | ( | const PCaloHit & | inHit, |
int & | integral | ||
) | const [protected, virtual] |
Definition at line 78 of file HcalSiPMHitResponse.cc.
References CaloHitResponse::analogSignalAmplitude(), newFWLiteAna::bin, CaloHitResponse::BUNCHSPACE, CaloVHitCorrection::correct(), HcalSiPM::hitCells(), PCaloHit::id(), errorMatrix2Lands_multiChannel::id, CaloHitResponse::makeBlankSignal(), interactiveExample::photons, query::result, HcalSiPM::setNCells(), CaloShapes::shape(), CaloVSimParameterMap::simParameters(), CaloSamples::size(), CaloHitResponse::theHitCorrection, CaloHitResponse::theParameterMap, CaloHitResponse::thePhaseShift_, CaloHitResponse::theShapes, theSiPM, PCaloHit::time(), CaloHitResponse::timeOfFlight(), and tzero.
Referenced by run().
{ PCaloHit hit = inHit; if (theHitCorrection != 0) theHitCorrection->correct(hit); DetId id(hit.id()); const HcalSimParameters& pars = dynamic_cast<const HcalSimParameters&>(theParameterMap->simParameters(id)); theSiPM->setNCells(pars.pixels()); double signal = analogSignalAmplitude(hit, pars); int photons = static_cast<int>(signal + 0.5); int pixels = theSiPM->hitCells(photons, integral); integral += pixels; signal = double(pixels); CaloSamples result(makeBlankSignal(id)); if(pixels > 0) { const CaloVShape * shape = theShapes->shape(id); double jitter = hit.time() - timeOfFlight(id); const double tzero = pars.timePhase() - jitter - BUNCHSPACE*(pars.binOfMaximum() - thePhaseShift_); double binTime = tzero; for (int bin = 0; bin < result.size(); bin++) { result[bin] += (*shape)(binTime)*signal; binTime += BUNCHSPACE; } } return result; }
void HcalSiPMHitResponse::run | ( | MixCollection< PCaloHit > & | hits | ) | [virtual] |
Complete cell digitization.
Reimplemented from CaloHitResponse.
Definition at line 36 of file HcalSiPMHitResponse.cc.
References CaloVHitFilter::accepts(), CaloHitResponse::add(), HcalSiPMRecovery::addToHistory(), MixCollection< T >::begin(), HcalSiPMRecovery::clearHistory(), MixCollection< T >::end(), HcalSiPMRecovery::getIntegral(), i, errorMatrix2Lands_multiChannel::id, edm::detail::isnan(), makeSiPMSignal(), CaloHitResponse::theHitFilter, CaloHitResponse::theMaxBunch, CaloHitResponse::theMinBunch, theRecoveryTime, and PCaloHit::time().
{ typedef std::multiset <const PCaloHit *, PCaloHitCompareTimes> SortedHitSet; std::map< DetId, SortedHitSet > sortedhits; for (MixCollection<PCaloHit>::MixItr hitItr = hits.begin(); hitItr != hits.end(); ++hitItr) { if (!((hitItr.bunch() < theMinBunch) || (hitItr.bunch() > theMaxBunch)) && !(isnan(hitItr->time())) && ((theHitFilter == 0) || (theHitFilter->accepts(*hitItr)))) { DetId id(hitItr->id()); if (sortedhits.find(id)==sortedhits.end()) sortedhits.insert(std::pair<DetId, SortedHitSet>(id, SortedHitSet())); sortedhits[id].insert(&(*hitItr)); } } int pixelIntegral, oldIntegral; HcalSiPMRecovery pixelHistory(theRecoveryTime); const PCaloHit * hit; for (std::map<DetId, SortedHitSet>::iterator i = sortedhits.begin(); i!=sortedhits.end(); ++i) { pixelHistory.clearHistory(); for (SortedHitSet::iterator itr = i->second.begin(); itr != i->second.end(); ++itr) { hit = *itr; pixelIntegral = pixelHistory.getIntegral(hit->time()); oldIntegral = pixelIntegral; CaloSamples signal(makeSiPMSignal(*hit, pixelIntegral)); pixelHistory.addToHistory(hit->time(), pixelIntegral-oldIntegral); add(signal); } } }
void HcalSiPMHitResponse::setRandomEngine | ( | CLHEP::HepRandomEngine & | engine | ) | [virtual] |
Reimplemented from CaloHitResponse.
Definition at line 71 of file HcalSiPMHitResponse.cc.
References HcalSiPM::initRandomEngine(), and theSiPM.
{ theSiPM->initRandomEngine(engine); CaloHitResponse::setRandomEngine(engine); }
double HcalSiPMHitResponse::theRecoveryTime [protected] |
Definition at line 26 of file HcalSiPMHitResponse.h.
Referenced by run().
HcalSiPM* HcalSiPMHitResponse::theSiPM [protected] |
Definition at line 25 of file HcalSiPMHitResponse.h.
Referenced by HcalSiPMHitResponse(), makeSiPMSignal(), setRandomEngine(), and ~HcalSiPMHitResponse().