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 == 0) {
106 int sampleSize = oldSignal->
size();
107 assert(sampleSize <= signal.
size());
108 assert(signal.
presamples() == oldSignal->presamples());
110 for(
int i = 0;
i < sampleSize; ++
i) {
111 (*oldSignal)[
i] += signal[
i];
129 double jitter = time - tof;
137 + parameters.timePhase()
141 double binTime =
tzero;
151 double pulseBit = (*shape)(binTime)* signal;
152 result[sampleBin] += pulseBit;
159 result[
bin] += (*shape)(binTime)* signal;
174 npe = CLHEP::RandPoissonQ::shoot(engine,npe);
187 result = &(signalItr->second);
208 edm::LogWarning(
"CaloHitResponse") <<
"No Calo Geometry set, so no time of flight correction";
212 if(cellGeometry == 0) {
214 << detId.
rawId() <<
" so no time-of-flight subtraction will be done";
218 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
bool withinBunchRange(int bunchCrossing) const
check if crossing is within bunch range:
int presamples() const
access presample information
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
virtual const CaloCellGeometry * getGeometry(const DetId &id) const
Get the cell geometry of a given detector id. Should return false if not found.
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 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
const GlobalPoint & getPosition() const
Returns the position of reference for this cell.
virtual const CaloVShape * shape(const DetId &detId) const