CMS 3D CMS Logo

ESElectronicsSimFast.cc
Go to the documentation of this file.
3 
4 #include "CLHEP/Random/RandGaussQ.h"
5 
6 #include <iostream>
7 
8 ESElectronicsSimFast::ESElectronicsSimFast( bool addNoise , bool PreMix1 ) :
9  m_addNoise ( addNoise ) ,
10  m_PreMix1 ( PreMix1 ) ,
11  m_MIPToGeV ( 0 ) ,
12  m_peds ( nullptr ) ,
13  m_mips ( nullptr )
14 {
15  // Preshower "Fast" Electronics Simulation
16  // gain = 1 : low gain for data taking
17  // gain = 2 : high gain for calibration and low energy runs
18  // For 300(310/320) um Si, the MIP is 78.47(81.08/83.7) keV
19 }
20 
22 {
23 }
24 
25 void
27 {
28  m_peds = peds ;
29 }
30 
31 void
33 {
34  m_mips = mips ;
35 }
36 
37 void
39 {
40  m_MIPToGeV = MIPToGeV ;
41 }
42 
43 void
44 ESElectronicsSimFast::analogToDigital( CLHEP::HepRandomEngine* engine,
45  ESSamples& cs,
46  ESDataFrame& df,
47  bool isNoise ) const
48 {
49  assert( nullptr != m_peds &&
50  nullptr != m_mips &&
51  0 < m_MIPToGeV ) ; // sanity check
52 
53  df.setSize( cs.size() ) ;
54 
55  const DetId id ( cs.id() ) ;
56  ESPedestals::const_iterator it_ped ( m_peds->find( id ) ) ;
58  isNoise ? m_mips->getMap().end() : m_mips->getMap().find( id ) ) ;
59 
60  const double baseline ( (double) it_ped->getMean() ) ;
61  const double sigma ( isNoise ? 0. : (double) it_ped->getRms() ) ;
62  const double MIPADC ( isNoise ? 0. : (double) (*it_mip) ) ;
63  const double ADCGeV ( isNoise ? 1. : MIPADC/m_MIPToGeV ) ;
64 
65  int adc = 0 ;
66 // std::cout<<" **Id="<<ESDetId(df.id())<<", size="<<df.size();
67  for( unsigned int i ( 0 ) ; i != cs.size(); ++i )
68  {
69  const double noi ( isNoise || (!m_addNoise) ? 0 :
70  sigma*CLHEP::RandGaussQ::shoot(engine, 0, 1) ) ;
71  double signal;
72 
73  if(!m_PreMix1) signal = cs[i]*ADCGeV + noi + baseline ;
74  else signal = cs[i]*ADCGeV ;
75 
76  if( 0 <= signal )
77  {
78  signal += 0.5 ;
79  }
80  else
81  {
82  signal -= 0.5 ;
83  }
84 
85  adc = int( signal ) ;
86 
87  if(!m_PreMix1) assert( 0 < adc ) ;
88 
89  if( 0.5 < signal - adc ) ++adc ;
90 
91  if( MAXADC < adc )
92  {
93  adc = MAXADC ;
94  }
95  else
96  {
97  if( MINADC > adc ) adc = MINADC ;
98  }
99 
100  df.setSample( i, ESSample( adc ) ) ;
101 // std::cout<<", "<<df[i];
102  }
103 // std::cout<<std::endl ;
104 }
int adc(sample_type sample)
get the ADC sample (12 bits)
void setMIPToGeV(double MIPToGeV)
const ESIntercalibConstants * m_mips
const_iterator end() const
unique_ptr< ClusterSequence > cs
const self & getMap() const
#define nullptr
void analogToDigital(CLHEP::HepRandomEngine *, ESSamples &cs, ESDataFrame &df, bool isNoise=false) const
void setPedestals(const ESPedestals *peds)
void setSize(int size)
Definition: ESDataFrame.cc:27
DetId id() const
const_iterator find(uint32_t rawId) const
void setSample(int i, const ESSample &sam)
Definition: ESDataFrame.h:30
Definition: DetId.h:18
ESElectronicsSimFast(bool addNoise, bool PreMix1)
const ESPedestals * m_peds
std::vector< Item >::const_iterator const_iterator
uint32_t size() const
void setMIPs(const ESIntercalibConstants *mips)