CMS 3D CMS Logo

List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
ESElectronicsSim Class Reference

#include <ESElectronicsSim.h>

Public Types

enum  { MINADC = 0 }
 
enum  { MAXADC = 4095 }
 

Public Member Functions

virtual void analogToDigital (CLHEP::HepRandomEngine *, const CaloSamples &cs, ESDataFrame &df) const
 
virtual void digitalToAnalog (const ESDataFrame &df, CaloSamples &cs) const
 
 ESElectronicsSim (bool addNoise)
 
void newEvent (CLHEP::HepRandomEngine *)
 anything that needs to be done once per event More...
 
void setGain (const int gain)
 
void setMIPs (const ESIntercalibConstants *mips)
 
void setMIPToGeV (const double MIPToGeV)
 
void setPedestals (const ESPedestals *peds)
 
virtual ~ESElectronicsSim ()
 

Private Member Functions

double decode (const ESSample &sample, const DetId &detId) const
 
std::vector< ESSampleencode (const CaloSamples &timeframe, CLHEP::HepRandomEngine *) const
 

Private Attributes

bool addNoise_
 
int gain_
 
const ESIntercalibConstantsmips_
 
double MIPToGeV_
 
const ESPedestalspeds_
 

Detailed Description

Definition at line 16 of file ESElectronicsSim.h.

Member Enumeration Documentation

anonymous enum
Enumerator
MINADC 

Definition at line 19 of file ESElectronicsSim.h.

anonymous enum
Enumerator
MAXADC 

Definition at line 18 of file ESElectronicsSim.h.

Constructor & Destructor Documentation

ESElectronicsSim::ESElectronicsSim ( bool  addNoise)

Definition at line 11 of file ESElectronicsSim.cc.

11  : addNoise_(addNoise), peds_(nullptr), mips_(nullptr) {
12  // Preshower Electronics Simulation
13  // gain = 1 : low gain for data taking
14  // gain = 2 : high gain for calibration and low energy runs
15  // For 300(310/320) um Si, the MIP is 78.47(81.08/83.7) keV
16 }
const ESIntercalibConstants * mips_
const ESPedestals * peds_
ESElectronicsSim::~ESElectronicsSim ( )
virtual

Definition at line 18 of file ESElectronicsSim.cc.

18 {}

Member Function Documentation

void ESElectronicsSim::analogToDigital ( CLHEP::HepRandomEngine *  engine,
const CaloSamples cs,
ESDataFrame df 
) const
virtual

Definition at line 20 of file ESElectronicsSim.cc.

References encode(), mps_fire::i, ESDataFrame::setSample(), ESDataFrame::setSize(), ESDataFrame::size(), and CaloSamples::size().

20  {
21  std::vector<ESSample> essamples = encode(cs, engine);
22 
23  df.setSize(cs.size());
24  for (int i = 0; i < df.size(); i++) {
25  df.setSample(i, essamples[i]);
26  }
27 }
int size() const
Definition: ESDataFrame.h:23
std::vector< ESSample > encode(const CaloSamples &timeframe, CLHEP::HepRandomEngine *) const
void setSize(int size)
Definition: ESDataFrame.cc:27
void setSample(int i, const ESSample &sam)
Definition: ESDataFrame.h:30
int size() const
get the size
Definition: CaloSamples.h:24
double ESElectronicsSim::decode ( const ESSample sample,
const DetId detId 
) const
private

Definition at line 84 of file ESElectronicsSim.cc.

Referenced by digitalToAnalog().

84 { return 0.; }
void ESElectronicsSim::digitalToAnalog ( const ESDataFrame df,
CaloSamples cs 
) const
virtual

Definition at line 29 of file ESElectronicsSim.cc.

References decode(), mps_fire::i, ESDataFrame::id(), and ESDataFrame::size().

29  {
30  for (int i = 0; i < df.size(); i++) {
31  cs[i] = decode(df[i], df.id());
32  }
33 }
const ESDetId & id() const
Definition: ESDataFrame.h:21
int size() const
Definition: ESDataFrame.h:23
double decode(const ESSample &sample, const DetId &detId) const
std::vector< ESSample > ESElectronicsSim::encode ( const CaloSamples timeframe,
CLHEP::HepRandomEngine *  engine 
) const
private

Definition at line 35 of file ESElectronicsSim.cc.

References ecalMGPA::adc(), addNoise_, Exception, ESCondObjectContainer< T >::find(), ESCondObjectContainer< T >::getMap(), mps_fire::i, CaloSamples::id(), createfilelist::int, edm::Service< T >::isAvailable(), MAXADC, MINADC, mips_, MIPToGeV_, peds_, and CaloSamples::size().

Referenced by analogToDigital().

35  {
37  if (!rng.isAvailable()) {
38  throw cms::Exception("Configuration")
39  << "ESElectroncSim requires the RandomNumberGeneratorService\n"
40  "which is not present in the configuration file. You must add the service\n"
41  "in the configuration file or remove the modules that require it.";
42  }
43 
44  std::vector<ESSample> results;
45  results.reserve(timeframe.size());
46 
47  ESPedestals::const_iterator it_ped = peds_->find(timeframe.id());
49  int baseline_ = (int)it_ped->getMean();
50  double sigma_ = (double)it_ped->getRms();
51  double MIPADC_ = (double)(*it_mip);
52 
53  int adc = 0;
54  double ADCGeV = MIPADC_ / MIPToGeV_;
55 
56  for (int i = 0; i < timeframe.size(); i++) {
57  double noi = 0;
58  double signal = 0;
59 
60  if (addNoise_) {
61  noi = CLHEP::RandGaussQ::shoot(engine, 0., sigma_);
62  }
63 
64  signal = timeframe[i] * ADCGeV + noi + baseline_;
65 
66  if (signal > 0)
67  signal += 0.5;
68  else if (signal < 0)
69  signal -= 0.5;
70 
71  adc = int(signal);
72 
73  if (adc > MAXADC)
74  adc = MAXADC;
75  if (adc < MINADC)
76  adc = MINADC;
77 
78  results.emplace_back(adc);
79  }
80 
81  return results;
82 }
const ESIntercalibConstants * mips_
const self & getMap() const
const_iterator find(uint32_t rawId) const
bool isAvailable() const
Definition: Service.h:40
constexpr int adc(sample_type sample)
get the ADC sample (12 bits)
int size() const
get the size
Definition: CaloSamples.h:24
std::vector< Item >::const_iterator const_iterator
DetId id() const
get the (generic) id
Definition: CaloSamples.h:21
const ESPedestals * peds_
void ESElectronicsSim::newEvent ( CLHEP::HepRandomEngine *  )
inline

anything that needs to be done once per event

Definition at line 33 of file ESElectronicsSim.h.

33 {}
void ESElectronicsSim::setGain ( const int  gain)
inline
void ESElectronicsSim::setMIPs ( const ESIntercalibConstants mips)
inline

Definition at line 26 of file ESElectronicsSim.h.

26 { mips_ = mips; }
const ESIntercalibConstants * mips_
void ESElectronicsSim::setMIPToGeV ( const double  MIPToGeV)
inline

Definition at line 27 of file ESElectronicsSim.h.

References fwrapper::cs.

27 { MIPToGeV_ = MIPToGeV; }
void ESElectronicsSim::setPedestals ( const ESPedestals peds)
inline

Definition at line 25 of file ESElectronicsSim.h.

25 { peds_ = peds; }
const ESPedestals * peds_

Member Data Documentation

bool ESElectronicsSim::addNoise_
private

Definition at line 36 of file ESElectronicsSim.h.

Referenced by encode().

int ESElectronicsSim::gain_
private

Definition at line 37 of file ESElectronicsSim.h.

const ESIntercalibConstants* ESElectronicsSim::mips_
private

Definition at line 39 of file ESElectronicsSim.h.

Referenced by encode().

double ESElectronicsSim::MIPToGeV_
private

Definition at line 40 of file ESElectronicsSim.h.

Referenced by encode().

const ESPedestals* ESElectronicsSim::peds_
private

Definition at line 38 of file ESElectronicsSim.h.

Referenced by encode().