CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EcalDigiProducer.cc
Go to the documentation of this file.
14 //#include "SimCalorimetry/EcalSimAlgos/interface/ESFastTDigitizer.h"
35 
45 
47  m_APDShape ( params.getParameter<double>( "apdShapeTstart" ) ,
48  params.getParameter<double>( "apdShapeTau" ) ) ,
49  m_EBShape ( ) ,
50  m_EEShape ( ) ,
51  m_ESShape ( ) ,
52  m_EBdigiCollection ( params.getParameter<std::string>("EBdigiCollection") ) ,
53  m_EEdigiCollection ( params.getParameter<std::string>("EEdigiCollection") ) ,
54  m_ESdigiCollection ( params.getParameter<std::string>("ESdigiCollection") ) ,
55  m_hitsProducerTag ( params.getParameter<std::string>("hitsProducer" ) ) ,
56  m_useLCcorrection ( params.getParameter<bool> ("UseLCcorrection") ) ,
57  m_apdSeparateDigi ( params.getParameter<bool> ("apdSeparateDigi") ) ,
58 
59  m_EBs25notCont ( params.getParameter<double> ("EBs25notContainment") ) ,
60  m_EEs25notCont ( params.getParameter<double> ("EEs25notContainment") ) ,
61 
62  m_readoutFrameSize ( params.getParameter<int> ("readoutFrameSize") ) ,
63  m_ParameterMap ( new EcalSimParameterMap(
64  params.getParameter<double> ("simHitToPhotoelectronsBarrel") ,
65  params.getParameter<double> ("simHitToPhotoelectronsEndcap") ,
66  params.getParameter<double> ("photoelectronsToAnalogBarrel") ,
67  params.getParameter<double> ("photoelectronsToAnalogEndcap") ,
68  params.getParameter<double> ("samplingFactor") ,
69  params.getParameter<double> ("timePhase") ,
70  m_readoutFrameSize ,
71  params.getParameter<int> ("binOfMaximum") ,
72  params.getParameter<bool> ("doPhotostatistics") ,
73  params.getParameter<bool> ("syncPhase") ) ) ,
74 
75  m_apdDigiTag ( params.getParameter<std::string> ("apdDigiTag" ) ) ,
76  m_apdParameters ( new APDSimParameters(
77  params.getParameter<bool> ("apdAddToBarrel" ) ,
78  m_apdSeparateDigi ,
79  params.getParameter<double> ("apdSimToPELow" ) ,
80  params.getParameter<double> ("apdSimToPEHigh" ) ,
81  params.getParameter<double> ("apdTimeOffset" ) ,
82  params.getParameter<double> ("apdTimeOffWidth" ) ,
83  params.getParameter<bool> ("apdDoPEStats" ) ,
84  m_apdDigiTag ,
85  params.getParameter<std::vector<double> > ( "apdNonlParms" ) ) ) ,
86 
87  m_APDResponse ( !m_apdSeparateDigi ? 0 :
88  new EBHitResponse( m_ParameterMap ,
89  &m_EBShape ,
90  true ,
91  m_apdParameters ,
92  &m_APDShape ) ) ,
93 
94  m_EBResponse ( new EBHitResponse( m_ParameterMap ,
95  &m_EBShape ,
96  false , // barrel
97  m_apdParameters ,
98  &m_APDShape ) ) ,
99 
100  m_EEResponse ( new EEHitResponse( m_ParameterMap,
101  &m_EEShape ) ) ,
102  m_ESResponse ( new ESHitResponse( m_ParameterMap, &m_ESShape ) ) ,
103  m_ESOldResponse ( new CaloHitResponse( m_ParameterMap, &m_ESShape ) ) ,
104 
105  m_addESNoise ( params.getParameter<bool> ("doESNoise") ) ,
106  m_doFastES ( params.getParameter<bool> ("doFast" ) ) ,
107 
108  m_ESElectronicsSim ( m_doFastES ? 0 :
109  new ESElectronicsSim( m_addESNoise ) ) ,
110 
111  m_ESOldDigitizer ( m_doFastES ? 0 :
112  new ESOldDigitizer( m_ESOldResponse ,
113  m_ESElectronicsSim ,
114  m_addESNoise ) ) ,
115 
116  m_ESElectronicsSimFast ( !m_doFastES ? 0 :
117  new ESElectronicsSimFast( m_addESNoise ) ) ,
118 
119  m_ESDigitizer ( !m_doFastES ? 0 :
120  new ESDigitizer( m_ESResponse ,
121  m_ESElectronicsSimFast ,
122  m_addESNoise ) ) ,
123 
124  m_APDDigitizer ( 0 ) ,
125  m_BarrelDigitizer ( 0 ) ,
126  m_EndcapDigitizer ( 0 ) ,
127  m_ElectronicsSim ( 0 ) ,
128  m_Coder ( 0 ) ,
129  m_APDElectronicsSim ( 0 ) ,
130  m_APDCoder ( 0 ) ,
131  m_Geometry ( 0 ) ,
132  m_EBCorrNoise ( ) ,
133  m_EECorrNoise ( )
134 {
135  const std::vector<double> ebCorMatG12 = params.getParameter< std::vector<double> >("EBCorrNoiseMatrixG12");
136  const std::vector<double> eeCorMatG12 = params.getParameter< std::vector<double> >("EECorrNoiseMatrixG12");
137  const std::vector<double> ebCorMatG06 = params.getParameter< std::vector<double> >("EBCorrNoiseMatrixG06");
138  const std::vector<double> eeCorMatG06 = params.getParameter< std::vector<double> >("EECorrNoiseMatrixG06");
139  const std::vector<double> ebCorMatG01 = params.getParameter< std::vector<double> >("EBCorrNoiseMatrixG01");
140  const std::vector<double> eeCorMatG01 = params.getParameter< std::vector<double> >("EECorrNoiseMatrixG01");
141 
142 
143  const bool applyConstantTerm = params.getParameter<bool> ("applyConstantTerm");
144  const double rmsConstantTerm = params.getParameter<double> ("ConstantTerm");
145 
146  const bool addNoise = params.getParameter<bool> ("doNoise");
147  const bool cosmicsPhase = params.getParameter<bool> ("cosmicsPhase");
148  const double cosmicsShift = params.getParameter<double> ("cosmicsShift");
149 
150 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
151 
152  if( m_apdSeparateDigi ) produces<EBDigiCollection>( m_apdDigiTag ) ;
153  produces<EBDigiCollection>( m_EBdigiCollection ) ;
154  produces<EEDigiCollection>( m_EEdigiCollection ) ;
155  produces<ESDigiCollection>( m_ESdigiCollection ) ;
156 
157  // further phase for cosmics studies
158  if( cosmicsPhase )
159  {
160  m_EBResponse->setPhaseShift( 1. + cosmicsShift ) ;
161  m_EEResponse->setPhaseShift( 1. + cosmicsShift ) ;
162  }
163 
164  EcalCorrMatrix ebMatrix[ 3 ] ;
165  EcalCorrMatrix eeMatrix[ 3 ] ;
166 
167  assert( ebCorMatG12.size() == m_readoutFrameSize ) ;
168  assert( eeCorMatG12.size() == m_readoutFrameSize ) ;
169  assert( ebCorMatG06.size() == m_readoutFrameSize ) ;
170  assert( eeCorMatG06.size() == m_readoutFrameSize ) ;
171  assert( ebCorMatG01.size() == m_readoutFrameSize ) ;
172  assert( eeCorMatG01.size() == m_readoutFrameSize ) ;
173 
174  assert( 1.e-7 > fabs( ebCorMatG12[0] - 1.0 ) ) ;
175  assert( 1.e-7 > fabs( ebCorMatG06[0] - 1.0 ) ) ;
176  assert( 1.e-7 > fabs( ebCorMatG01[0] - 1.0 ) ) ;
177  assert( 1.e-7 > fabs( eeCorMatG12[0] - 1.0 ) ) ;
178  assert( 1.e-7 > fabs( eeCorMatG06[0] - 1.0 ) ) ;
179  assert( 1.e-7 > fabs( eeCorMatG01[0] - 1.0 ) ) ;
180 
181  for ( unsigned int row ( 0 ) ; row != m_readoutFrameSize ; ++row )
182  {
183  assert( 0 == row || 1. >= ebCorMatG12[row] ) ;
184  assert( 0 == row || 1. >= ebCorMatG06[row] ) ;
185  assert( 0 == row || 1. >= ebCorMatG01[row] ) ;
186  assert( 0 == row || 1. >= eeCorMatG12[row] ) ;
187  assert( 0 == row || 1. >= eeCorMatG06[row] ) ;
188  assert( 0 == row || 1. >= eeCorMatG01[row] ) ;
189  for ( unsigned int column ( 0 ) ; column <= row ; ++column )
190  {
191  const unsigned int index ( row - column ) ;
192  ebMatrix[0]( row, column ) = ebCorMatG12[ index ] ;
193  eeMatrix[0]( row, column ) = eeCorMatG12[ index ] ;
194  ebMatrix[1]( row, column ) = ebCorMatG06[ index ] ;
195  eeMatrix[1]( row, column ) = eeCorMatG06[ index ] ;
196  ebMatrix[2]( row, column ) = ebCorMatG01[ index ] ;
197  eeMatrix[2]( row, column ) = eeCorMatG01[ index ] ;
198  }
199  }
200 
201  m_EBCorrNoise[0] = new CorrelatedNoisifier<EcalCorrMatrix>( ebMatrix[0] ) ;
202  m_EECorrNoise[0] = new CorrelatedNoisifier<EcalCorrMatrix>( eeMatrix[0] ) ;
203  m_EBCorrNoise[1] = new CorrelatedNoisifier<EcalCorrMatrix>( ebMatrix[1] ) ;
204  m_EECorrNoise[1] = new CorrelatedNoisifier<EcalCorrMatrix>( eeMatrix[1] ) ;
205  m_EBCorrNoise[2] = new CorrelatedNoisifier<EcalCorrMatrix>( ebMatrix[2] ) ;
206  m_EECorrNoise[2] = new CorrelatedNoisifier<EcalCorrMatrix>( eeMatrix[2] ) ;
207 
208  m_Coder = new EcalCoder( addNoise ,
209  m_EBCorrNoise[0] ,
210  m_EECorrNoise[0] ,
211  m_EBCorrNoise[1] ,
212  m_EECorrNoise[1] ,
213  m_EBCorrNoise[2] ,
214  m_EECorrNoise[2] ) ;
215 
217  m_Coder ,
218  applyConstantTerm ,
219  rmsConstantTerm ) ;
220 
221  if( m_apdSeparateDigi )
222  {
223  m_APDCoder = new EcalCoder( false ,
224  m_EBCorrNoise[0] ,
225  m_EECorrNoise[0] ,
226  m_EBCorrNoise[1] ,
227  m_EECorrNoise[1] ,
228  m_EBCorrNoise[2] ,
229  m_EECorrNoise[2] ) ;
230 
232  m_APDCoder ,
233  applyConstantTerm ,
234  rmsConstantTerm ) ;
235 
238  false ) ;
239  }
240 
243  addNoise ) ;
244 
247  addNoise ) ;
248 }
249 
251 {
252  delete m_EndcapDigitizer ;
253  delete m_BarrelDigitizer ;
254  delete m_APDDigitizer ;
255  delete m_APDElectronicsSim ;
256  delete m_APDCoder ;
257  delete m_ElectronicsSim ;
258  delete m_Coder ;
259  delete m_EBCorrNoise[0] ;
260  delete m_EECorrNoise[0] ;
261  delete m_EBCorrNoise[1] ;
262  delete m_EECorrNoise[1] ;
263  delete m_EBCorrNoise[2] ;
264  delete m_EECorrNoise[2] ;
265 
266  delete m_ESDigitizer ;
267  delete m_ESElectronicsSimFast ;
268  delete m_ESOldDigitizer ;
269  delete m_ESElectronicsSim ;
270 
271  delete m_ESOldResponse ;
272  delete m_ESResponse ;
273  delete m_EEResponse ;
274  delete m_EBResponse ;
275  delete m_APDResponse ;
276 
277  delete m_apdParameters ;
278  delete m_ParameterMap ;
279 }
280 
281 void
283  const edm::EventSetup& eventSetup )
284 {
285  // Step A: Get Inputs
286 
287  checkGeometry( eventSetup );
288  checkCalibrations( event, eventSetup );
289 
290  // Get input
291  edm::Handle<CrossingFrame<PCaloHit> > crossingFrame;
292 
293  // test access to SimHits
294  const std::string barrelHitsName ( m_hitsProducerTag + "EcalHitsEB" ) ;
295  const std::string endcapHitsName ( m_hitsProducerTag + "EcalHitsEE" ) ;
296  const std::string preshowerHitsName ( m_hitsProducerTag + "EcalHitsES" ) ;
297 
298  event.getByLabel( "mix",
299  barrelHitsName ,
300  crossingFrame ) ;
301 
302  MixCollection<PCaloHit>* EBHits (
303  !crossingFrame.isValid() ? 0 :
304  new MixCollection<PCaloHit>( crossingFrame.product() ) ) ;
305 
306  const bool isEB ( crossingFrame.isValid() &&
307  0 != EBHits &&
308  EBHits->inRegistry() ) ;
309 
310  if( !crossingFrame.isValid() )
311  edm::LogError("EcalDigiProducer") << "Error! can't get the product "
312  << barrelHitsName.c_str() ;
313 
314  event.getByLabel( "mix",
315  endcapHitsName ,
316  crossingFrame ) ;
317 
318  MixCollection<PCaloHit>* EEHits (
319  !crossingFrame.isValid() ? 0 :
320  new MixCollection<PCaloHit>( crossingFrame.product() ) ) ;
321 
322  const bool isEE ( crossingFrame.isValid() &&
323  0 != EEHits &&
324  EEHits->inRegistry() ) ;
325 
326  if( !crossingFrame.isValid() )
327  edm::LogError("EcalDigiProducer") << "Error! can't get the product "
328  << endcapHitsName.c_str() ;
329 
330  event.getByLabel( "mix",
331  preshowerHitsName ,
332  crossingFrame ) ;
333 
334  MixCollection<PCaloHit>* ESHits (
335  !crossingFrame.isValid() ? 0 :
336  new MixCollection<PCaloHit>( crossingFrame.product() ) ) ;
337 
338  const bool isES ( crossingFrame.isValid() &&
339  0 != ESHits &&
340  ESHits->inRegistry() ) ;
341 
342  if( !crossingFrame.isValid() )
343  edm::LogError("EcalDigiProducer") << "Error! can't get the product "
344  << preshowerHitsName.c_str() ;
345 
346  // Step B: Create empty output
347  std::auto_ptr<EBDigiCollection> apdResult ( !m_apdSeparateDigi ? 0 :
348  new EBDigiCollection() ) ;
349  std::auto_ptr<EBDigiCollection> barrelResult ( new EBDigiCollection() ) ;
350  std::auto_ptr<EEDigiCollection> endcapResult ( new EEDigiCollection() ) ;
351  std::auto_ptr<ESDigiCollection> preshowerResult( new ESDigiCollection() ) ;
352 
353  // run the algorithm
354 
355  if( isEB )
356  {
357  std::auto_ptr<MixCollection<PCaloHit> > barrelHits( EBHits ) ;
358  m_BarrelDigitizer->run( *barrelHits ,
359  *barrelResult ) ;
360  cacheEBDigis( &*barrelResult ) ;
361 
362  edm::LogInfo("DigiInfo") << "EB Digis: " << barrelResult->size() ;
363 
364  if( m_apdSeparateDigi )
365  {
366  m_APDDigitizer->run( *barrelHits ,
367  *apdResult ) ;
368 
369  edm::LogInfo("DigiInfo") << "APD Digis: " << apdResult->size() ;
370  }
371  }
372 
373  if( isEE )
374  {
375  std::auto_ptr<MixCollection<PCaloHit> > endcapHits( EEHits ) ;
376  m_EndcapDigitizer->run( *endcapHits ,
377  *endcapResult ) ;
378  edm::LogInfo("EcalDigi") << "EE Digis: " << endcapResult->size() ;
379  cacheEEDigis( &*endcapResult ) ;
380  }
381 
382  if( isES )
383  {
384  std::auto_ptr<MixCollection<PCaloHit> > preshowerHits( ESHits ) ;
385  if (!m_doFastES)
386  {
387  m_ESOldDigitizer->run( *preshowerHits ,
388  *preshowerResult ) ;
389  }
390  else
391  {
392  m_ESDigitizer->run( *preshowerHits,
393  *preshowerResult ) ;
394  }
395  edm::LogInfo("EcalDigi") << "ES Digis: " << preshowerResult->size();
396  }
397 
398  // Step D: Put outputs into event
399  if( m_apdSeparateDigi )
400  event.put( apdResult, m_apdDigiTag ) ;
401 
402  event.put( barrelResult, m_EBdigiCollection ) ;
403  event.put( endcapResult, m_EEdigiCollection ) ;
404  event.put( preshowerResult, m_ESdigiCollection ) ;
405 }
406 
407 void
409 {
410  // Pedestals from event setup
411 
413  eventSetup.get<EcalPedestalsRcd>().get( dbPed ) ;
414  const EcalPedestals* pedestals ( dbPed.product() ) ;
415 
416  m_Coder->setPedestals( pedestals ) ;
417  if( 0 != m_APDCoder ) m_APDCoder->setPedestals( pedestals ) ;
418 
419  // Ecal Intercalibration Constants
421  eventSetup.get<EcalIntercalibConstantsMCRcd>().get( pIcal ) ;
422  const EcalIntercalibConstantsMC* ical ( pIcal.product() ) ;
423 
425  if( 0 != m_APDCoder) m_APDCoder->setIntercalibConstants( ical ) ;
426 
427  m_EBResponse->setIntercal( ical ) ;
428  if( 0 != m_APDResponse ) m_APDResponse->setIntercal( ical ) ;
429 
430  // Ecal LaserCorrection Constants
432  eventSetup.get<EcalLaserDbRecord>().get(laser);
433  const edm::TimeValue_t eventTimeValue = event.time().value();
434 
435  m_EBResponse->setEventTime(eventTimeValue);
437 
438  m_EEResponse->setEventTime(eventTimeValue);
440 
441  // ADC -> GeV Scale
443  eventSetup.get<EcalADCToGeVConstantRcd>().get(pAgc);
444  const EcalADCToGeVConstant* agc = pAgc.product();
445 
446  // Gain Ratios
448  eventSetup.get<EcalGainRatiosRcd>().get(pRatio);
449  const EcalGainRatios* gr = pRatio.product();
450 
451  m_Coder->setGainRatios( gr );
452  if( 0 != m_APDCoder) m_APDCoder->setGainRatios( gr );
453 
454  EcalMGPAGainRatio * defaultRatios = new EcalMGPAGainRatio();
455 
456  double theGains[m_Coder->NGAINS+1];
457  theGains[0] = 0.;
458  theGains[3] = 1.;
459  theGains[2] = defaultRatios->gain6Over1() ;
460  theGains[1] = theGains[2]*(defaultRatios->gain12Over6()) ;
461 
462  LogDebug("EcalDigi") << " Gains: " << "\n" << " g1 = " << theGains[1]
463  << "\n" << " g2 = " << theGains[2]
464  << "\n" << " g3 = " << theGains[3] ;
465 
466  delete defaultRatios;
467 
468  const double EBscale (
469  ( agc->getEBValue())*theGains[1]*(m_Coder->MAXADC)*m_EBs25notCont ) ;
470 
471  LogDebug("EcalDigi") << " GeV/ADC = " << agc->getEBValue()
472  << "\n" << " notCont = " << m_EBs25notCont
473  << "\n" << " saturation for EB = " << EBscale
474  << ", " << m_EBs25notCont ;
475 
476  const double EEscale (
477  (agc->getEEValue())*theGains[1]*(m_Coder->MAXADC)*m_EEs25notCont ) ;
478 
479  LogDebug("EcalDigi") << " GeV/ADC = " << agc->getEEValue()
480  << "\n" << " notCont = " << m_EEs25notCont
481  << "\n" << " saturation for EB = " << EEscale
482  << ", " << m_EEs25notCont ;
483 
484  m_Coder->setFullScaleEnergy( EBscale ,
485  EEscale ) ;
486  if( 0 != m_APDCoder ) m_APDCoder->setFullScaleEnergy( EBscale ,
487  EEscale ) ;
488 
489  if( 0 != m_ESOldDigitizer ||
490  0 != m_ESDigitizer )
491  {
492  // ES condition objects
493  edm::ESHandle<ESGain> hesgain ;
495  edm::ESHandle<ESPedestals> hesPedestals ;
497 
498  eventSetup.get<ESGainRcd>(). get( hesgain ) ;
499  eventSetup.get<ESMIPToGeVConstantRcd>(). get( hesMIPToGeV ) ;
500  eventSetup.get<ESPedestalsRcd>(). get( hesPedestals ) ;
501  eventSetup.get<ESIntercalibConstantsRcd>().get( hesMIPs ) ;
502 
503  const ESGain* esgain ( hesgain.product() ) ;
504  const ESPedestals* espeds ( hesPedestals.product() ) ;
505  const ESIntercalibConstants* esmips ( hesMIPs.product() ) ;
506  const ESMIPToGeVConstant* esMipToGeV ( hesMIPToGeV.product() ) ;
507  const int ESGain ( 1.1 > esgain->getESGain() ? 1 : 2 ) ;
508  const double ESMIPToGeV ( ( 1 == ESGain ) ?
509  esMipToGeV->getESValueLow() :
510  esMipToGeV->getESValueHigh() ) ;
511 
513 
514  if( !m_doFastES )
515  {
517  m_ESElectronicsSim->setPedestals( espeds ) ;
518  m_ESElectronicsSim->setMIPs( esmips ) ;
519  m_ESElectronicsSim->setMIPToGeV( ESMIPToGeV ) ;
520  }
521  else
522  {
525  m_ESElectronicsSimFast->setMIPs( esmips ) ;
526  m_ESElectronicsSimFast->setMIPToGeV( ESMIPToGeV ) ;
527  }
528  }
529 }
530 
531 void
533 {
534  // TODO find a way to avoid doing this every event
535  edm::ESHandle<CaloGeometry> hGeometry ;
536  eventSetup.get<CaloGeometryRecord>().get( hGeometry ) ;
537 
538  const CaloGeometry* pGeometry = &*hGeometry;
539 
540  if( pGeometry != m_Geometry )
541  {
542  m_Geometry = pGeometry;
543  updateGeometry();
544  }
545 }
546 
547 void
549 {
559 
560  const std::vector<DetId>* theESDets (
563 
564  if( !m_doFastES )
565  {
566  if( 0 != m_ESOldDigitizer &&
567  0 != theESDets )
568  m_ESOldDigitizer->setDetIds( *theESDets ) ;
569  }
570  else
571  {
572  if( 0 != m_ESDigitizer &&
573  0 != theESDets )
574  m_ESDigitizer->setDetIds( *theESDets ) ;
575  }
576 }
#define LogDebug(id)
EEDigitizer * m_EndcapDigitizer
T getParameter(std::string const &) const
const CaloSubdetectorGeometry * getSubdetectorGeometry(const DetId &id) const
access the subdetector geometry for the given subdetector directly
Definition: CaloGeometry.cc:43
void setGeometry(const CaloGeometry *geometry)
geometry needed for time-of-flight
void setMIPToGeV(double MIPToGeV)
CaloHitResponse * m_ESOldResponse
void setGain(const int gain)
virtual ~EcalDigiProducer()
EcalTDigitizer< EEDigitizerTraits > EEDigitizer
CorrelatedNoisifier< EcalCorrMatrix > * m_EBCorrNoise[3]
EcalDigiProducer(const edm::ParameterSet &params)
const std::string m_ESdigiCollection
const EcalSimParameterMap * m_ParameterMap
Definition: ESGain.h:5
void setGain(const int gain)
Definition: ESShape.h:26
void setDetIds(const std::vector< DetId > &detIds)
tell the digitizer which cells exist; cannot change during a run
Definition: ESDigitizer.cc:53
void setEventTime(const edm::TimeValue_t &iTime)
bool inRegistry() const
Definition: MixCollection.h:27
const std::string m_hitsProducerTag
void setMIPs(const ESIntercalibConstants *mips)
void setMIPToGeV(const double MIPToGeV)
void setIntercalibConstants(const EcalIntercalibConstantsMC *ical)
Definition: EcalCoder.cc:61
ESOldDigitizer * m_ESOldDigitizer
virtual void run(MixCollection< PCaloHit > &input, DigiCollection &output)
turns hits into digis
Definition: ESDigitizer.cc:189
const std::string m_EEdigiCollection
ESElectronicsSimFast * m_ESElectronicsSimFast
ESDigitizer * m_ESDigitizer
const APDSimParameters * m_apdParameters
virtual const std::vector< DetId > & getValidDetIds(DetId::Detector det=DetId::Detector(0), int subdet=0) const
Get a list of valid detector ids (for the given subdetector)
void setPedestals(const ESPedestals *peds)
void setPedestals(const ESPedestals *peds)
CorrelatedNoisifier< EcalCorrMatrix > * m_EECorrNoise[3]
const unsigned int m_readoutFrameSize
void setLaserConstants(const EcalLaserDbService *laser, bool &useLCcorrection)
EcalElectronicsSim * m_ElectronicsSim
void setIntercal(const EcalIntercalibConstantsMC *ical)
EBHitResponse * m_APDResponse
Creates electronics signals from hits.
const double m_EBs25notCont
virtual void run(MixCollection< PCaloHit > &input, DigiCollection &output)
void setPedestals(const EcalPedestals *pedestals)
can be fetched every event from the EventSetup
Definition: EcalCoder.cc:49
void run(MixCollection< PCaloHit > &input, DigiCollection &output)
turns hits into digis
EBHitResponse * m_EBResponse
void setPhaseShift(double phaseShift)
void setGain(const int gain)
Definition: ESDigitizer.cc:61
ESElectronicsSim * m_ESElectronicsSim
EBDigitizer * m_BarrelDigitizer
float gain6Over1() const
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger but the state exists so we define the behavior If all triggers are the negative crieriion will lead to accepting the event(this again matches the behavior of"!*"before the partial wildcard feature was incorporated).The per-event"cost"of each negative criterion with multiple relevant triggers is about the same as!*was in the past
math::ErrorD< CaloSamples::MAXSAMPLES >::type EcalCorrMatrix
bool isValid() const
Definition: HandleBase.h:76
unsigned long long TimeValue_t
Definition: Timestamp.h:27
const CaloGeometry * m_Geometry
void checkCalibrations(const edm::Event &event, const edm::EventSetup &eventSetup)
EcalCoder * m_APDCoder
void checkGeometry(const edm::EventSetup &eventSetup)
ESHitResponse * m_ESResponse
void setGeometry(const CaloSubdetectorGeometry *geometry)
void setGainRatios(const EcalGainRatios *gainRatios)
Definition: EcalCoder.cc:55
const bool m_doFastES
virtual void cacheEBDigis(const EBDigiCollection *ebDigiPtr) const
void setFullScaleEnergy(double EBscale, double EEscale)
Definition: EcalCoder.cc:40
EcalTDigitizer< EBDigitizerTraits > EBDigitizer
const T & get() const
Definition: EventSetup.h:55
T const * product() const
Definition: ESHandle.h:62
float gain12Over6() const
T const * product() const
Definition: Handle.h:74
EBDigitizer * m_APDDigitizer
const bool m_apdSeparateDigi
const std::string m_apdDigiTag
void setDetIds(const std::vector< DetId > &detIds)
virtual void produce(edm::Event &event, const edm::EventSetup &eventSetup)
void setMIPs(const ESIntercalibConstants *mips)
virtual void cacheEEDigis(const EEDigiCollection *eeDigiPtr) const
const std::string m_EBdigiCollection
EcalElectronicsSim * m_APDElectronicsSim
const double m_EEs25notCont
EEHitResponse * m_EEResponse