1 #ifndef SimCalorimetry_HGCSimProducers_hgcdigitizerbase
2 #define SimCalorimetry_HGCSimProducers_hgcdigitizerbase
8 #include <unordered_map>
13 #include "CLHEP/Random/RandGaussQ.h"
45 if(digitizationType==0)
runTrivial(digiColl,simData,engine);
46 else runDigitizer(digiColl,simData,digitizationType,engine);
54 for(HGCSimHitDataAccumulator::iterator it=simData.begin();
55 it!=simData.end(); it++) {
58 D rawDataFrame( it->first );
60 for(
size_t i=0;
i<it->second.size();
i++) {
62 double totalEn=(it->second)[
i]*1e6;
67 if(totalEn<0) totalEn=0;
74 singleSample.
set(0, totalEnInt);
76 rawDataFrame.setSample(
i, singleSample);
96 coll->push_back(rawDataFrame);
99 D singleRawDataFrame( rawDataFrame.id() );
100 singleRawDataFrame.resize(1);
103 singleSample.
set(rawDataFrame[itIdx].gain(),rawDataFrame[itIdx].
adc());
104 singleRawDataFrame.setSample(0, singleSample);
106 coll->push_back(singleRawDataFrame);
114 std::vector<uint16_t> oldADC(dataFrame.size());
115 for(
int it=0; it<dataFrame.size(); it++) {
116 uint16_t gain=dataFrame[it].gain();
117 oldADC[it]=dataFrame[it].adc();
118 uint16_t newADC(oldADC[it]);
121 for(
int jt=0; jt<it; jt++) {
128 newSample.
set(gain,newADC);
129 dataFrame.setSample(it,newSample);
137 throw cms::Exception(
"HGCDigitizerBaseException") <<
" Failed to find specialization of runDigitizer";
int adc(sample_type sample)
get the ADC sample (12 bits)
T getParameter(std::string const &) const
edm::SortedCollection< D > DColl
void set(uint16_t gain, uint16_t adc)
std::array< HGCSimEn_t, 6 > HGCSimHitData
virtual void runDigitizer(std::auto_ptr< DColl > &coll, HGCSimHitDataAccumulator &simData, uint32_t digitizerType, CLHEP::HepRandomEngine *engine)
to be specialized by top class
void runTrivial(std::auto_ptr< DColl > &coll, HGCSimHitDataAccumulator &simData, CLHEP::HepRandomEngine *engine)
a trivial digitization: sum energies and digitize without noise
HGCDigitizerBase(const edm::ParameterSet &ps)
CTOR.
DecomposeProduct< arg, typename Div::arg > D
void run(std::auto_ptr< DColl > &digiColl, HGCSimHitDataAccumulator &simData, uint32_t digitizationType, CLHEP::HepRandomEngine *engine)
steer digitization mode
std::unordered_map< uint32_t, HGCSimHitData > HGCSimHitDataAccumulator
Power< A, B >::type pow(const A &a, const B &b)
void runShaper(D &dataFrame)
applies a shape to each time sample and propagates the tails to the subsequent time samples ...
void updateOutput(std::auto_ptr< DColl > &coll, D rawDataFrame)
prepares the output according to the number of time samples to produce