CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 ( 0 ) ,
13  m_mips ( 0 )
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( 0 != m_peds &&
50  0 != 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 
72  double signal;
73 
74  if(!m_PreMix1) signal = cs[i]*ADCGeV + noi + baseline ;
75  else signal = cs[i]*ADCGeV ;
76 
77 
78  if( 0 <= signal )
79  {
80  signal += 0.5 ;
81  }
82  else
83  {
84  signal -= 0.5 ;
85  }
86 
87  adc = int( signal ) ;
88 
89  if(!m_PreMix1) assert( 0 < adc ) ;
90 
91  if( 0.5 < signal - adc ) ++adc ;
92 
93  if( MAXADC < adc )
94  {
95  adc = MAXADC ;
96  }
97  else
98  {
99  if( MINADC > adc ) adc = MINADC ;
100  }
101 
102  df.setSample( i, ESSample( adc ) ) ;
103 // std::cout<<", "<<df[i];
104  }
105 // std::cout<<std::endl ;
106 }
int adc(sample_type sample)
get the ADC sample (12 bits)
int i
Definition: DBlmapReader.cc:9
void setMIPToGeV(double MIPToGeV)
auto_ptr< ClusterSequence > cs
const ESIntercalibConstants * m_mips
const_iterator end() const
const self & getMap() const
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)