15 #include "CLHEP/Random/RandPoissonQ.h"
16 #include "CLHEP/Units/GlobalPhysicalConstants.h"
17 #include "CLHEP/Units/GlobalSystemOfUnits.h"
25 : theAnalogSignalMap(),
26 theParameterMap(parametersMap),
29 theHitCorrection(nullptr),
30 thePECorrection(nullptr),
31 theHitFilter(nullptr),
36 storePrecise(HighFidelity),
38 highFidelityPreMix(HighFidelity),
45 : theAnalogSignalMap(),
46 theParameterMap(parametersMap),
49 theHitCorrection(nullptr),
50 thePECorrection(nullptr),
51 theHitFilter(nullptr),
56 storePrecise(HighFidelity),
58 highFidelityPreMix(HighFidelity),
73 result += itr->second;
99 const unsigned int size(signal.
size());
101 for (
unsigned int i(0);
i !=
size; ++
i) {
102 keep = keep || signal[
i] > 1.e-7;
115 if (oldSignal ==
nullptr) {
119 (*oldSignal) += signal;
128 double time = hit.
time();
135 double jitter = time - tof;
142 const double tzero = (shape->
timeToRise() + parameters.timePhase() - jitter -
144 double binTime =
tzero;
154 double pulseBit = (*shape)(binTime)*signal *
dt;
155 result[sampleBin] += pulseBit;
161 result[
bin] += (*shape)(binTime)*signal;
171 CLHEP::HepRandomEngine *engine)
const {
178 npe = CLHEP::RandPoissonQ::shoot(engine, npe);
191 result = &(signalItr->second);
203 return readoutFrameSize;
213 result.setPreciseSize(preciseSize);
224 edm::LogWarning(
"CaloHitResponse") <<
"No Calo Geometry set, so no time of flight correction";
227 if (cellGeometry ==
nullptr) {
229 <<
" so no time-of-flight subtraction will be done";
231 double distance = cellGeometry->getPosition().mag();
232 result = distance * cm / c_light;
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
CaloHitResponse(const CaloVSimParameterMap *parameterMap, const CaloVShape *shape, bool PreMix1=false, bool HighFidelity=false)
CaloSamples makeBlankSignal(const DetId &detId) const
creates an empty signal for this DetId
virtual ~CaloHitResponse()
doesn't delete the pointers passed in
uint16_t *__restrict__ id
int getReadoutFrameSize(const DetId &id) const
constexpr bool isNotFinite(T x)
virtual const CaloVShape * shape(const DetId &detId, bool precise=false) const
bool withinBunchRange(int bunchCrossing) const
check if crossing is within bunch range:
constexpr uint32_t rawId() const
get the raw id
bool doPhotostatistics() const
whether or not to apply Poisson statistics to photoelectrons
virtual bool keepBlank() const
Electronic response of the preamp.
static constexpr int invdt
int preciseSize() const
get the size
virtual void run(const MixCollection< PCaloHit > &hits, CLHEP::HepRandomEngine *)
Complete cell digitization.
Main class for Parameters in different subdetectors.
const CaloGeometry * theGeometry
virtual double correctPE(const DetId &detId, double npe, CLHEP::HepRandomEngine *) const =0
const CaloVPECorrection * thePECorrection
virtual CaloSamples makeAnalogSignal(const PCaloHit &inputHit, CLHEP::HepRandomEngine *) const
creates the signal corresponding to this hit
double simHitToPhotoelectrons() const
virtual double timeToRise() const =0
virtual const CaloSimParameters & simParameters(const DetId &id) const =0
virtual bool accepts(const PCaloHit &hit) const =0
double timeOfFlight(const DetId &detId) const
int readoutFrameSize() const
for now, the LinearFrames and trhe digis will be one-to-one.
const CaloVHitCorrection * theHitCorrection
virtual double delay(const PCaloHit &hit, CLHEP::HepRandomEngine *) const =0
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.
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 finalizeHits(CLHEP::HepRandomEngine *)
Finalize hits.
virtual void add(const PCaloHit &hit, CLHEP::HepRandomEngine *)
process a single SimHit
static constexpr double dt
static const double tzero[3]
const CaloVHitFilter * theHitFilter
const CaloVShape * theShape
DetId id() const
get the (generic) id
Log< level::Warning, false > LogWarning
tuple size
Write out results.