15 #include "CLHEP/Random/RandPoissonQ.h" 16 #include "CLHEP/Units/GlobalPhysicalConstants.h" 17 #include "CLHEP/Units/GlobalSystemOfUnits.h" 23 : theAnalogSignalMap(),
24 theParameterMap(parametersMap),
64 hitItr != hits.
end(); ++hitItr) {
82 const unsigned int size ( signal.
size() ) ;
85 for(
unsigned int i ( 0 ) ;
i !=
size ; ++
i )
87 keep = keep || signal[
i] > 1.e-7 ;
92 if( keep )
add(signal);
101 if (oldSignal ==
nullptr) {
105 (*oldSignal) += signal;
122 double jitter = time - tof;
130 + parameters.timePhase()
134 double binTime =
tzero;
144 double pulseBit = (*shape)(binTime)* signal;
145 result[sampleBin] += pulseBit;
152 result[
bin] += (*shape)(binTime)* signal;
167 npe = CLHEP::RandPoissonQ::shoot(engine,npe);
180 result = &(signalItr->second);
201 edm::LogWarning(
"CaloHitResponse") <<
"No Calo Geometry set, so no time of flight correction";
205 if(cellGeometry ==
nullptr) {
207 << detId.
rawId() <<
" so no time-of-flight subtraction will be done";
210 double distance = cellGeometry->getPosition().mag();
211 result = distance * cm / c_light;
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
CaloSamples makeBlankSignal(const DetId &detId) const
creates an empty signal for this DetId
virtual ~CaloHitResponse()
doesn't delete the pointers passed in
virtual const CaloVShape * shape(const DetId &detId, bool precise=false) const
bool withinBunchRange(int bunchCrossing) const
check if crossing is within bunch range:
bool doPhotostatistics() const
whether or not to apply Poisson statistics to photoelectrons
virtual bool keepBlank() const
virtual double delay(const PCaloHit &hit, CLHEP::HepRandomEngine *) const =0
Electronic response of the preamp.
CaloHitResponse(const CaloVSimParameterMap *parameterMap, const CaloVShape *shape)
virtual void run(const MixCollection< PCaloHit > &hits, CLHEP::HepRandomEngine *)
Complete cell digitization.
Main class for Parameters in different subdetectors.
const CaloGeometry * theGeometry
uint32_t rawId() const
get the raw id
const CaloVPECorrection * thePECorrection
virtual bool accepts(const PCaloHit &hit) const =0
virtual double timeToRise() const =0
virtual CaloSamples makeAnalogSignal(const PCaloHit &inputHit, CLHEP::HepRandomEngine *) const
creates the signal corresponding to this hit
virtual const CaloSimParameters & simParameters(const DetId &id) const =0
double simHitToPhotoelectrons() const
double timeOfFlight(const DetId &detId) const
int readoutFrameSize() const
for now, the LinearFrames and trhe digis will be one-to-one.
const CaloVHitCorrection * theHitCorrection
bin
set the eta bin as selection string.
AnalogSignalMap theAnalogSignalMap
double analogSignalAmplitude(const DetId &id, float energy, const CaloSimParameters ¶meters, CLHEP::HepRandomEngine *) const
const CaloShapes * theShapes
const CaloVSimParameterMap * theParameterMap
int size() const
get the size
virtual std::shared_ptr< const CaloCellGeometry > getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
virtual double correctPE(const DetId &detId, double npe, CLHEP::HepRandomEngine *) const =0
void setBunchRange(int minBunch, int maxBunch)
tells it which pileup bunches to do
CaloSamples * findSignal(const DetId &detId)
users can look for the signal for a given cell
float & preciseAtMod(int i)
mutable function to access precise samples
virtual void add(const PCaloHit &hit, CLHEP::HepRandomEngine *)
process a single SimHit
static const double tzero[3]
const CaloVHitFilter * theHitFilter
const CaloVShape * theShape
DetId id() const
get the (generic) id