6 #include "CLHEP/Random/RandGeneral.h" 7 #include "CLHEP/Random/RandPoissonQ.h" 8 #include "CLHEP/Random/RandFlat.h" 10 #include <gsl/gsl_sf_erf.h> 11 #include <gsl/gsl_sf_result.h> 16 m_ranGeneral(nullptr),
50 refFile =
"SimCalorimetry/EcalSimProducers/data/esRefHistosFile_LG.txt";
53 refFile =
"SimCalorimetry/EcalSimProducers/data/esRefHistosFile_HG.txt";
59 std::cerr <<
"ESDigitizer::could not compute gaussian tail probability for the threshold chosen" << std::endl;
61 const double probabilityLeft(
result.val);
71 while (0 == thisLine) {
75 sscanf(
buffer,
"%f", &histoBin);
81 const uint32_t histoBin2(histoBin1 * histoBin1);
85 std::vector<double> t_refHistos;
86 t_refHistos.reserve(2500);
94 sscanf(
buffer,
"%f", &histoInf);
99 sscanf(
buffer,
"%f", &histoSup);
100 t_histoSup = (double)histoSup;
104 sscanf(
buffer,
"%f", &refBin);
106 t_refHistos.push_back((
double)refBin);
107 const uint32_t
i2(thisBin / histoBin2);
108 const uint32_t off(
i2 * histoBin2);
109 const uint32_t
i1((thisBin - off) / histoBin1);
110 const uint32_t i0(thisBin - off -
i1 * histoBin1);
122 m_ranGeneral =
new CLHEP::RandGeneral(
nullptr, &t_refHistos.front(), t_refHistos.size(), 0);
139 std::vector<DetId> abThreshCh;
144 for (std::vector<DetId>::const_iterator idItr(abThreshCh.begin()); idItr != abThreshCh.end(); ++idItr) {
149 if (myBin ==
m_trip.size())
165 CLHEP::RandPoissonQ randPoissonQ(*engine,
m_meanNoisy);
166 const unsigned int nChan(randPoissonQ.fire());
167 abThreshCh.reserve(nChan);
169 for (
unsigned int i(0);
i != nChan; ++
i) {
170 std::vector<DetId>::const_iterator idItr(abThreshCh.end());
174 iChan = (uint32_t)CLHEP::RandFlat::shoot(engine,
m_detIds->size());
178 id = (*m_detIds)[iChan];
179 idItr =
find(abThreshCh.begin(), abThreshCh.end(),
id);
180 }
while (idItr != abThreshCh.end());
182 abThreshCh.push_back(
id);
void setDetIds(const std::vector< DetId > &detIds)
tell the digitizer which cells exist; cannot change during a run
std::vector< Triplet > m_trip
void find(edm::Handle< EcalRecHitCollection > &hits, DetId thisDet, std::vector< EcalRecHitCollection::const_iterator > &hit, bool debug=false)
CLHEP::RandGeneral * m_ranGeneral
void createNoisyList(std::vector< DetId > &abThreshCh, CLHEP::HepRandomEngine *)
void setGain(const int gain)
const ElectronicsSim * elecSim() const
const std::vector< DetId > * m_detIds
const EcalHitResponse * hitResponse() const
virtual void run(DigiCollection &output, CLHEP::HepRandomEngine *)
const EcalSamples * findDetId(const DetId &detId) const
void run(ESDigiCollection &output, CLHEP::HepRandomEngine *) override
turns hits into digis
ESDigitizer(EcalHitResponse *hitResponse, ElectronicsSim *electronicsSim, bool addNoise)