CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Private Member Functions | Private Attributes
ESElectronicsSimFast Class Reference

#include <ESElectronicsSimFast.h>

Public Types

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

Public Member Functions

virtual void analogToDigital (const CaloSamples &cs, ESDataFrame &df, bool wasEmpty, CLHEP::RandGeneral *histoDistribution, double hInf, double hSup, double hBin) const
 
void digitalToAnalog (const ESDataFrame &df, CaloSamples &cs) const
 
 ESElectronicsSimFast (bool addNoise)
 
void newEvent ()
 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)
 

Private Member Functions

double decode (const ESSample &sample, const DetId &detId) const
 
std::vector< ESSamplefastEncode (const CaloSamples &timeframe, CLHEP::RandGeneral *histoDistribution, double hInf, double hSup, double hBin) const
 
std::vector< ESSamplestandEncode (const CaloSamples &timeframe) const
 

Private Attributes

bool addNoise_
 
int gain_
 
const ESIntercalibConstantsmips_
 
double MIPToGeV_
 
const ESPedestalspeds_
 

Detailed Description

Definition at line 14 of file ESElectronicsSimFast.h.

Member Enumeration Documentation

anonymous enum
Enumerator
MAXADC 

Definition at line 18 of file ESElectronicsSimFast.h.

anonymous enum
Enumerator
MINADC 

Definition at line 19 of file ESElectronicsSimFast.h.

Constructor & Destructor Documentation

ESElectronicsSimFast::ESElectronicsSimFast ( bool  addNoise)

Definition at line 13 of file ESElectronicsSimFast.cc.

13  :
14  addNoise_(addNoise), peds_(0), mips_(0)
15 {
16  // Preshower "Fast" Electronics Simulation
17  // gain = 1 : low gain for data taking
18  // gain = 2 : high gain for calibration and low energy runs
19  // For 300(310/320) um Si, the MIP is 78.47(81.08/83.7) keV
20 }
const ESPedestals * peds_
const ESIntercalibConstants * mips_

Member Function Documentation

void ESElectronicsSimFast::analogToDigital ( const CaloSamples cs,
ESDataFrame df,
bool  wasEmpty,
CLHEP::RandGeneral *  histoDistribution,
double  hInf,
double  hSup,
double  hBin 
) const
virtual

Definition at line 22 of file ESElectronicsSimFast.cc.

References fastEncode(), i, ESDataFrame::setSample(), ESDataFrame::setSize(), ESDataFrame::size(), CaloSamples::size(), and standEncode().

Referenced by ESFastTDigitizer::run().

23 {
24  std::vector<ESSample> essamples;
25  if (!wasEmpty) essamples = standEncode(cs);
26  if ( wasEmpty) essamples = fastEncode(cs, histoDistribution, hInf, hSup, hBin);
27 
28  df.setSize(cs.size());
29  for(int i=0; i<df.size(); i++) {
30  df.setSample(i, essamples[i]);
31  }
32 }
int i
Definition: DBlmapReader.cc:9
int size() const
Definition: ESDataFrame.h:20
void setSize(int size)
Definition: ESDataFrame.cc:16
std::vector< ESSample > fastEncode(const CaloSamples &timeframe, CLHEP::RandGeneral *histoDistribution, double hInf, double hSup, double hBin) const
void setSample(int i, const ESSample &sam)
Definition: ESDataFrame.h:27
int size() const
get the size
Definition: CaloSamples.h:24
std::vector< ESSample > standEncode(const CaloSamples &timeframe) const
double ESElectronicsSimFast::decode ( const ESSample sample,
const DetId detId 
) const
private

Definition at line 131 of file ESElectronicsSimFast.cc.

Referenced by digitalToAnalog().

132 {
133  return 0. ;
134 }
void ESElectronicsSimFast::digitalToAnalog ( const ESDataFrame df,
CaloSamples cs 
) const

Definition at line 34 of file ESElectronicsSimFast.cc.

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

35 {
36  for(int i = 0; i < df.size(); i++) {
37  cs[i] = decode(df[i], df.id());
38  }
39 }
int i
Definition: DBlmapReader.cc:9
double decode(const ESSample &sample, const DetId &detId) const
const ESDetId & id() const
Definition: ESDataFrame.h:18
int size() const
Definition: ESDataFrame.h:20
std::vector< ESSample > ESElectronicsSimFast::fastEncode ( const CaloSamples timeframe,
CLHEP::RandGeneral *  histoDistribution,
double  hInf,
double  hSup,
double  hBin 
) const
private

Definition at line 93 of file ESElectronicsSimFast.cc.

References ecalMGPA::adc(), newFWLiteAna::bin, ESCondObjectContainer< T >::find(), CaloSamples::id(), MAXADC, MINADC, peds_, python.entryComment::results, CaloSamples::size(), and tablePrinter::width.

Referenced by analogToDigital().

94 {
95  std::vector<ESSample> results;
96  results.reserve(timeframe.size());
97 
98  int bin[3];
99  double hBin2 = hBin*hBin;
100  double hBin3 = hBin*hBin*hBin;
101  double width = (hSup - hInf)/hBin;
102 
103  double thisRnd = histoDistribution->fire();
104  int thisRndCell = (int)((hBin3)*(thisRnd)/width);
105  bin[2] = (int)(thisRndCell/hBin2); // sample2 - bin [0,N-1]
106  bin[1] = (int)((thisRndCell - hBin2*bin[2])/hBin); // sample1
107  bin[0] = (int)(thisRndCell - hBin*(bin[1] + hBin*bin[2])); // sample0
108 
109  ESPedestals::const_iterator it_ped = peds_->find(timeframe.id());
110  int baseline_ = (int) it_ped->getMean();
111 
112  int adc[3];
113  double noi[3];
114  for(int ii=0; ii<3; ii++){
115 
116  noi[ii] = hInf + bin[ii]*width;
117  if (noi[ii]>0) noi[ii] += 0.5;
118  else if (noi[ii]<0) noi[ii] -= 0.5;
119 
120  adc[ii] = int(noi[ii]) - 1000 + baseline_;
121 
122  if (adc[ii]>MAXADC) adc[ii] = MAXADC;
123  if (adc[ii]<MINADC) adc[ii] = MINADC;
124 
125  results.push_back(ESSample(adc[ii]));
126  }
127 
128  return results;
129 }
int adc(sample_type sample)
get the ADC sample (12 bits)
const ESPedestals * peds_
const_iterator find(uint32_t rawId) const
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
void ESElectronicsSimFast::newEvent ( )
inline

anything that needs to be done once per event

Definition at line 33 of file ESElectronicsSimFast.h.

Referenced by ESFastTDigitizer::run().

33 {}
void ESElectronicsSimFast::setGain ( const int  gain)
inline

Definition at line 23 of file ESElectronicsSimFast.h.

References gain_.

Referenced by EcalDigiProducer::checkCalibrations().

23 { gain_ = gain; }
void ESElectronicsSimFast::setMIPs ( const ESIntercalibConstants mips)
inline

Definition at line 25 of file ESElectronicsSimFast.h.

References mips_.

Referenced by EcalDigiProducer::checkCalibrations().

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

Definition at line 26 of file ESElectronicsSimFast.h.

References MIPToGeV_.

Referenced by EcalDigiProducer::checkCalibrations().

26 { MIPToGeV_ = MIPToGeV; }
void ESElectronicsSimFast::setPedestals ( const ESPedestals peds)
inline

Definition at line 24 of file ESElectronicsSimFast.h.

References peds_.

Referenced by EcalDigiProducer::checkCalibrations().

24 { peds_ = peds; }
const ESPedestals * peds_
std::vector< ESSample > ESElectronicsSimFast::standEncode ( const CaloSamples timeframe) const
private

Definition at line 42 of file ESElectronicsSimFast.cc.

References ecalMGPA::adc(), addNoise_, edm::hlt::Exception, ESCondObjectContainer< T >::find(), edm::RandomNumberGenerator::getEngine(), ESCondObjectContainer< T >::getMap(), i, CaloSamples::id(), edm::Service< T >::isAvailable(), MAXADC, MINADC, mips_, MIPToGeV_, peds_, python.entryComment::results, and CaloSamples::size().

Referenced by analogToDigital().

43 {
45  if ( ! rng.isAvailable()) {
46  throw cms::Exception("Configuration")
47  << "ESElectroncSimFast requires the RandomNumberGeneratorService\n"
48  "which is not present in the configuration file. You must add the service\n"
49  "in the configuration file or remove the modules that require it.";
50  }
51 
52  std::vector<ESSample> results;
53  results.reserve(timeframe.size());
54 
55  ESPedestals::const_iterator it_ped = peds_->find(timeframe.id());
57  int baseline_ = (int) it_ped->getMean();
58  double sigma_ = (double) it_ped->getRms();
59  double MIPADC_ = (double) (*it_mip);
60 
61  int adc = 0;
62  double ADCGeV = MIPADC_/MIPToGeV_;
63  for (int i=0; i<timeframe.size(); i++) {
64 
65  double noi = 0;
66  double signal = 0;
67 
68  if (addNoise_) {
69  CLHEP::RandGaussQ gaussQDistribution(rng->getEngine(), 0, sigma_);
70  noi = gaussQDistribution.fire();
71  }
72 
73  signal = timeframe[i]*ADCGeV + noi + baseline_;
74 
75  if (signal>0)
76  signal += 0.5;
77  else if (signal<0)
78  signal -= 0.5;
79 
80  adc = int(signal);
81 
82  if (adc>MAXADC) adc = MAXADC;
83  if (adc<MINADC) adc = MINADC;
84 
85  results.push_back(ESSample(adc));
86  }
87 
88  return results;
89 }
int adc(sample_type sample)
get the ADC sample (12 bits)
const ESPedestals * peds_
int i
Definition: DBlmapReader.cc:9
const ESIntercalibConstants * mips_
const self & getMap() const
const_iterator find(uint32_t rawId) const
bool isAvailable() const
Definition: Service.h:47
virtual CLHEP::HepRandomEngine & getEngine() const =0
Use this to get the random number engine, this is the only function most users should call...
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

Member Data Documentation

bool ESElectronicsSimFast::addNoise_
private

Definition at line 37 of file ESElectronicsSimFast.h.

Referenced by standEncode().

int ESElectronicsSimFast::gain_
private

Definition at line 38 of file ESElectronicsSimFast.h.

Referenced by setGain().

const ESIntercalibConstants* ESElectronicsSimFast::mips_
private

Definition at line 40 of file ESElectronicsSimFast.h.

Referenced by setMIPs(), and standEncode().

double ESElectronicsSimFast::MIPToGeV_
private

Definition at line 41 of file ESElectronicsSimFast.h.

Referenced by setMIPToGeV(), and standEncode().

const ESPedestals* ESElectronicsSimFast::peds_
private

Definition at line 39 of file ESElectronicsSimFast.h.

Referenced by fastEncode(), setPedestals(), and standEncode().