CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
EcalUncalibRecHitWorkerGlobal.cc
Go to the documentation of this file.
2 
7 
13 
16 {
17  // ratio method parameters
18  EBtimeFitParameters_ = ps.getParameter<std::vector<double> >("EBtimeFitParameters");
19  EEtimeFitParameters_ = ps.getParameter<std::vector<double> >("EEtimeFitParameters");
20  EBamplitudeFitParameters_ = ps.getParameter<std::vector<double> >("EBamplitudeFitParameters");
21  EEamplitudeFitParameters_ = ps.getParameter<std::vector<double> >("EEamplitudeFitParameters");
22  EBtimeFitLimits_.first = ps.getParameter<double>("EBtimeFitLimits_Lower");
23  EBtimeFitLimits_.second = ps.getParameter<double>("EBtimeFitLimits_Upper");
24  EEtimeFitLimits_.first = ps.getParameter<double>("EEtimeFitLimits_Lower");
25  EEtimeFitLimits_.second = ps.getParameter<double>("EEtimeFitLimits_Upper");
26  EBtimeConstantTerm_=ps.getParameter<double>("EBtimeConstantTerm");
27  EBtimeNconst_=ps.getParameter<double>("EBtimeNconst");
28  EEtimeConstantTerm_=ps.getParameter<double>("EEtimeConstantTerm");
29  EEtimeNconst_=ps.getParameter<double>("EEtimeNconst");
30  outOfTimeThreshG12pEB_ = ps.getParameter<double>("outOfTimeThresholdGain12pEB");
31  outOfTimeThreshG12mEB_ = ps.getParameter<double>("outOfTimeThresholdGain12mEB");
32  outOfTimeThreshG61pEB_ = ps.getParameter<double>("outOfTimeThresholdGain61pEB");
33  outOfTimeThreshG61mEB_ = ps.getParameter<double>("outOfTimeThresholdGain61mEB");
34  outOfTimeThreshG12pEE_ = ps.getParameter<double>("outOfTimeThresholdGain12pEE");
35  outOfTimeThreshG12mEE_ = ps.getParameter<double>("outOfTimeThresholdGain12mEE");
36  outOfTimeThreshG61pEE_ = ps.getParameter<double>("outOfTimeThresholdGain61pEE");
37  outOfTimeThreshG61mEE_ = ps.getParameter<double>("outOfTimeThresholdGain61mEE");
38  amplitudeThreshEB_ = ps.getParameter<double>("amplitudeThresholdEB");
39  amplitudeThreshEE_ = ps.getParameter<double>("amplitudeThresholdEE");
40  // amplitude-dependent correction of time
41  doEBtimeCorrection_ = ps.getParameter<bool>("doEBtimeCorrection");
42  doEEtimeCorrection_ = ps.getParameter<bool>("doEEtimeCorrection");
43  EBtimeCorrAmplitudeBins_ = ps.getParameter<std::vector<double> >("EBtimeCorrAmplitudeBins");
44  EBtimeCorrShiftBins_ = ps.getParameter<std::vector<double> >("EBtimeCorrShiftBins");
45  EEtimeCorrAmplitudeBins_ = ps.getParameter<std::vector<double> >("EEtimeCorrAmplitudeBins");
46  EEtimeCorrShiftBins_ = ps.getParameter<std::vector<double> >("EEtimeCorrShiftBins");
47  if(EBtimeCorrAmplitudeBins_.size() != EBtimeCorrShiftBins_.size()) {
48  doEBtimeCorrection_ = false;
49  edm::LogError("EcalRecHitError") << "Size of EBtimeCorrAmplitudeBins different from EBtimeCorrShiftBins. Forcing no time corrections for EB. ";
50  }
51  if(EEtimeCorrAmplitudeBins_.size() != EEtimeCorrShiftBins_.size()) {
52  doEEtimeCorrection_ = false;
53  edm::LogError("EcalRecHitError") << "Size of EEtimeCorrAmplitudeBins different from EEtimeCorrShiftBins. Forcing no time corrections for EE. ";
54  }
55 
56  // spike threshold
57  ebSpikeThresh_ = ps.getParameter<double>("ebSpikeThreshold");
58  // leading edge parameters
59  ebPulseShape_ = ps.getParameter<std::vector<double> >("ebPulseShape");
60  eePulseShape_ = ps.getParameter<std::vector<double> >("eePulseShape");
61  // chi2 parameters
62  kPoorRecoFlagEB_ = ps.getParameter<bool>("kPoorRecoFlagEB");
63  kPoorRecoFlagEE_ = ps.getParameter<bool>("kPoorRecoFlagEE");;
64  chi2ThreshEB_=ps.getParameter<double>("chi2ThreshEB_");
65  chi2ThreshEE_=ps.getParameter<double>("chi2ThreshEE_");
66  EBchi2Parameters_ = ps.getParameter<std::vector<double> >("EBchi2Parameters");
67  EEchi2Parameters_ = ps.getParameter<std::vector<double> >("EEchi2Parameters");
68 }
69 
70 void
72 {
73  // common setup
74  es.get<EcalGainRatiosRcd>().get(gains);
75  es.get<EcalPedestalsRcd>().get(peds);
76 
77  // for the weights method
78  es.get<EcalWeightXtalGroupsRcd>().get(grps);
79  es.get<EcalTBWeightsRcd>().get(wgts);
80 
81  // for the ratio method
82 
83  // for the leading edge method
85 }
86 
87 
88 // check saturation: 5 samples with gainId = 0
89 template < class C >
91 {
92  //bool saturated_ = 0;
93  int cnt;
94  for (int j = 0; j < C::MAXSAMPLES - 5; ++j) {
95  cnt = 0;
96  for (int i = j; i < (j + 5) && i < C::MAXSAMPLES; ++i) {
97  if ( dataFrame.sample(i).gainId() == 0 ) ++cnt;
98  }
99  if ( cnt == 5 ) return j-1 ; // the last unsaturated sample
100  }
101  return -1; // no saturation found
102 }
103 
104 
106  // computed initially in ns. Than turned in the BX's, as EcalUncalibratedRecHit need be.
107  double theCorrection=0;
108 
109 
110  int myBin = -1;
111  for (int bin=0; bin<(int)EBtimeCorrAmplitudeBins_.size(); bin++ ){
112  if(ampliEB > EBtimeCorrAmplitudeBins_.at(bin)) {
113  myBin = bin; }
114  else break;
115  }
116 
117  if (myBin == -1)
118  {
119  theCorrection = EBtimeCorrShiftBins_.at(0);
120  }
121  else if ( myBin == ((int)(EBtimeCorrAmplitudeBins_.size()-1)) )
122  {
123  theCorrection = EBtimeCorrShiftBins_.at( myBin );
124  }
125  else if ( -1 < myBin && myBin < ((int)EBtimeCorrAmplitudeBins_.size()-1) )
126  {
127  // interpolate linearly between two assingned points
128  theCorrection = ( EBtimeCorrShiftBins_.at(myBin+1) - EBtimeCorrShiftBins_.at(myBin) );
129  theCorrection *= ( ((double)ampliEB) - EBtimeCorrAmplitudeBins_.at(myBin) ) / ( EBtimeCorrAmplitudeBins_.at(myBin+1) - EBtimeCorrAmplitudeBins_.at(myBin) );
130  theCorrection += EBtimeCorrShiftBins_.at(myBin);
131  }
132  else
133  {
134  edm::LogError("EcalRecHitError") << "Assigning time correction impossible. Setting it to 0 ";
135  theCorrection = 0.;
136  }
137 
138  // convert ns into clocks
139  return theCorrection/25.;
140 }
141 
142 
144  // computed initially in ns. Than turned in the BX's, as EcalUncalibratedRecHit need be.
145  double theCorrection=0;
146 
147  int myBin = -1;
148  for (int bin=0; bin<(int)EEtimeCorrAmplitudeBins_.size(); bin++ ){
149  if(ampliEE > EEtimeCorrAmplitudeBins_.at(bin)) {
150  myBin = bin; }
151  else break;
152  }
153 
154  if (myBin == -1)
155  {
156  theCorrection = EEtimeCorrShiftBins_.at(0);
157  }
158  else if ( myBin == ((int)(EEtimeCorrAmplitudeBins_.size()-1)) )
159  {
160  theCorrection = EEtimeCorrShiftBins_.at( myBin );
161  }
162  else if ( -1 < myBin && myBin < ((int)EEtimeCorrAmplitudeBins_.size()-1) )
163  {
164  // interpolate linearly between two assingned points
165  theCorrection = ( EEtimeCorrShiftBins_.at(myBin+1) - EEtimeCorrShiftBins_.at(myBin) );
166  theCorrection *= ( ((double)ampliEE) - EEtimeCorrAmplitudeBins_.at(myBin) ) / ( EEtimeCorrAmplitudeBins_.at(myBin+1) - EEtimeCorrAmplitudeBins_.at(myBin) );
167  theCorrection += EEtimeCorrShiftBins_.at(myBin);
168  }
169  else
170  {
171  edm::LogError("EcalRecHitError") << "Assigning time correction impossible. Setting it to 0 ";
172  theCorrection = 0.;
173  }
174 
175  // convert ns into clocks
176  return theCorrection/25.;
177 }
178 
179 
180 
181 
182 bool
186 {
187  DetId detid(itdg->id());
188 
189  // intelligence for recHit computation
190  EcalUncalibratedRecHit uncalibRecHit;
191 
192 
193  const EcalPedestals::Item * aped = 0;
194  const EcalMGPAGainRatio * aGain = 0;
195  const EcalXtalGroupId * gid = 0;
196 
197  if (detid.subdetId()==EcalEndcap) {
198  unsigned int hashedIndex = EEDetId(detid).hashedIndex();
199  aped = &peds->endcap(hashedIndex);
200  aGain = &gains->endcap(hashedIndex);
201  gid = &grps->endcap(hashedIndex);
202  } else {
203  unsigned int hashedIndex = EBDetId(detid).hashedIndex();
204  aped = &peds->barrel(hashedIndex);
205  aGain = &gains->barrel(hashedIndex);
206  gid = &grps->barrel(hashedIndex);
207  }
208 
209  pedVec[0] = aped->mean_x12;
210  pedVec[1] = aped->mean_x6;
211  pedVec[2] = aped->mean_x1;
212  pedRMSVec[0] = aped->rms_x12;
213  pedRMSVec[1] = aped->rms_x6;
214  pedRMSVec[2] = aped->rms_x1;
215  gainRatios[0] = 1.;
216  gainRatios[1] = aGain->gain12Over6();
217  gainRatios[2] = aGain->gain6Over1()*aGain->gain12Over6();
218 
219  // compute the right bin of the pulse shape using time calibration constants
221  EcalTimeCalibConstant itimeconst = 0;
222  if( it != itime->end() ) {
223  itimeconst = (*it);
224  } else {
225  edm::LogError("EcalRecHitError") << "No time intercalib const found for xtal "
226  << detid.rawId()
227  << "! something wrong with EcalTimeCalibConstants in your DB? ";
228  }
229 
230 
231  // === amplitude computation ===
232  int leadingSample = -1;
233  if (detid.subdetId()==EcalEndcap) {
234  leadingSample = ((EcalDataFrame)(*itdg)).lastUnsaturatedSample();
235  } else {
236  leadingSample = ((EcalDataFrame)(*itdg)).lastUnsaturatedSample();
237  }
238 
239  if ( leadingSample >= 0 ) { // saturation
240  if ( leadingSample != 4 ) {
241  // all samples different from the fifth are not reliable for the amplitude estimation
242  // put by default the energy at the saturation threshold and flag as saturated
243  float sratio = 1;
244  if ( detid.subdetId()==EcalBarrel) {
245  sratio = ebPulseShape_[5] / ebPulseShape_[4];
246  } else {
247  sratio = eePulseShape_[5] / eePulseShape_[4];
248  }
249  uncalibRecHit = EcalUncalibratedRecHit( (*itdg).id(), 4095*12*sratio, 0, 0, 0);
251  } else {
252  // float clockToNsConstant = 25.;
253  // reconstruct the rechit
254  if (detid.subdetId()==EcalEndcap) {
256  // float mult = (float)eePulseShape_.size() / (float)(*itdg).size();
257  // bin (or some analogous mapping) will be used instead of the leadingSample
258  //int bin = (int)(( (mult * leadingSample + mult/2) * clockToNsConstant + itimeconst ) / clockToNsConstant);
259  // bin is not uset for the moment
261  uncalibRecHit = leadingEdgeMethod_endcap_.makeRecHit(*itdg, pedVec, gainRatios, 0, 0);
264  } else {
266  // float mult = (float)ebPulseShape_.size() / (float)(*itdg).size();
267  // bin (or some analogous mapping) will be used instead of the leadingSample
268  //int bin = (int)(( (mult * leadingSample + mult/2) * clockToNsConstant + itimeconst ) / clockToNsConstant);
269  // bin is not uset for the moment
271  uncalibRecHit = leadingEdgeMethod_barrel_.makeRecHit(*itdg, pedVec, gainRatios, 0, 0);
274  }
275  }
276 
277  uncalibRecHit.setChi2(0); // do not propagate the default chi2 = -1 value to the calib rechit (mapped to 64), set it to 0 when saturation
278  uncalibRecHit.setOutOfTimeChi2(0);
279  } else {
280  // weights method
281  EcalTBWeights::EcalTDCId tdcid(1);
282  EcalTBWeights::EcalTBWeightMap const & wgtsMap = wgts->getMap();
283  EcalTBWeights::EcalTBWeightMap::const_iterator wit;
284  wit = wgtsMap.find( std::make_pair(*gid,tdcid) );
285  if( wit == wgtsMap.end() ) {
286  edm::LogError("EcalUncalibRecHitError") << "No weights found for EcalGroupId: "
287  << gid->id() << " and EcalTDCId: " << tdcid
288  << "\n skipping digi with id: " << detid.rawId();
289 
290  return false;
291  }
292  const EcalWeightSet& wset = wit->second; // this is the EcalWeightSet
293 
296 
297  weights[0] = &mat1;
298  weights[1] = &mat2;
299 
300  // get uncalibrated recHit from weights
301  if (detid.subdetId()==EcalEndcap) {
303  } else {
305  }
306 
307  // === time computation ===
308  // ratio method
309  float const clockToNsConstant = 25.;
310  if (detid.subdetId()==EcalEndcap) {
315  double theTimeCorrectionEE=0;
316  if(doEEtimeCorrection_) theTimeCorrectionEE = timeCorrectionEE( uncalibRecHit.amplitude() );
317  uncalibRecHit.setJitter( crh.timeMax - 5 + theTimeCorrectionEE);
318  uncalibRecHit.setJitterError( std::sqrt(pow(crh.timeError,2) + std::pow(EEtimeConstantTerm_,2)/std::pow(clockToNsConstant,2)) );
319  uncalibRecHit.setOutOfTimeEnergy( crh.amplitudeMax );
320  // consider flagging as kOutOfTime only if above noise
321  if (uncalibRecHit.amplitude() > pedRMSVec[0] * amplitudeThreshEE_){
322  float outOfTimeThreshP = outOfTimeThreshG12pEE_;
323  float outOfTimeThreshM = outOfTimeThreshG12mEE_;
324  // determine if gain has switched away from gainId==1 (x12 gain)
325  // and determine cuts (number of 'sigmas') to ose for kOutOfTime
326  // >3k ADC is necessasry condition for gain switch to occur
327  if (uncalibRecHit.amplitude() > 3000.){
328  for (int iSample = 0; iSample < EEDataFrame::MAXSAMPLES; iSample++) {
329  int GainId = ((EcalDataFrame)(*itdg)).sample(iSample).gainId();
330  if (GainId!=1) {
331  outOfTimeThreshP = outOfTimeThreshG61pEE_;
332  outOfTimeThreshM = outOfTimeThreshG61mEE_;
333  break;}
334  }}
335  float correctedTime = (crh.timeMax-5) * clockToNsConstant + itimeconst;
336  float cterm = EEtimeConstantTerm_;
337  float sigmaped = pedRMSVec[0]; // approx for lower gains
338  float nterm = EEtimeNconst_*sigmaped/uncalibRecHit.amplitude();
339  float sigmat = std::sqrt( nterm*nterm + cterm*cterm );
340  if ( ( correctedTime > sigmat*outOfTimeThreshP ) ||
341  ( correctedTime < (-1.*sigmat*outOfTimeThreshM) ))
342  { uncalibRecHit.setRecoFlag( EcalUncalibratedRecHit::kOutOfTime ); }
343  }
344 
345  } else {
351  double theTimeCorrectionEB=0;
352  if(doEBtimeCorrection_) theTimeCorrectionEB = timeCorrectionEB( uncalibRecHit.amplitude() );
353  // the correction for gain switch (when the sample before is ignored in ratioAlgo) is now included in the configurable correction
354  // bool gainSwitch = ratioMethod_barrel_.fixMGPAslew(*itdg);
355  // if(gainSwitch){
356  // uncalibRecHit.setJitter( crh.timeMax - 5 - 0.04 + theTimeCorrectionEB); // introduce additional 1ns shift
357  // }else{
358  // uncalibRecHit.setJitter( crh.timeMax - 5 + theTimeCorrectionEB);
359  // }
360  uncalibRecHit.setJitter( crh.timeMax - 5 + theTimeCorrectionEB);
361 
362  uncalibRecHit.setJitterError( std::sqrt(std::pow(crh.timeError,2) + std::pow(EBtimeConstantTerm_,2)/std::pow(clockToNsConstant,2)) );
363  uncalibRecHit.setOutOfTimeEnergy( crh.amplitudeMax );
364  // consider flagging as kOutOfTime only if above noise
365  if (uncalibRecHit.amplitude() > pedRMSVec[0] * amplitudeThreshEB_){
366  float outOfTimeThreshP = outOfTimeThreshG12pEB_;
367  float outOfTimeThreshM = outOfTimeThreshG12mEB_;
368  // determine if gain has switched away from gainId==1 (x12 gain)
369  // and determine cuts (number of 'sigmas') to ose for kOutOfTime
370  // >3k ADC is necessasry condition for gain switch to occur
371  if (uncalibRecHit.amplitude() > 3000.){
372  for (int iSample = 0; iSample < EBDataFrame::MAXSAMPLES; iSample++) {
373  int GainId = ((EcalDataFrame)(*itdg)).sample(iSample).gainId();
374  if (GainId!=1) {
375  outOfTimeThreshP = outOfTimeThreshG61pEB_;
376  outOfTimeThreshM = outOfTimeThreshG61mEB_;
377  break;}
378  } }
379  float correctedTime = (crh.timeMax-5) * clockToNsConstant + itimeconst;
380  float cterm = EBtimeConstantTerm_;
381  float sigmaped = pedRMSVec[0]; // approx for lower gains
382  float nterm = EBtimeNconst_*sigmaped/uncalibRecHit.amplitude();
383  float sigmat = std::sqrt( nterm*nterm + cterm*cterm );
384  if ( ( correctedTime > sigmat*outOfTimeThreshP ) ||
385  ( correctedTime < (-1.*sigmat*outOfTimeThreshM) ))
386  { uncalibRecHit.setRecoFlag( EcalUncalibratedRecHit::kOutOfTime ); }
387  }
388  }
389 
390  // === chi2express ===
391  if (detid.subdetId()==EcalEndcap) {
392 
393  double amplitude = uncalibRecHit.amplitude();
394  double amplitudeOutOfTime = uncalibRecHit.outOfTimeEnergy();
395  double jitter= uncalibRecHit.jitter();
396 
397 
398 
400  *itdg,
401  amplitude,
402  itimeconst,
403  amplitudeOutOfTime,
404  jitter,
405  pedVec,
406  pedRMSVec,
407  gainRatios,
410  );
411  double chi2 = chi2expressEE_.chi2();
412  uncalibRecHit.setChi2(chi2);
413  double chi2OutOfTime = chi2expressEE_.chi2OutOfTime();
414  uncalibRecHit.setOutOfTimeChi2(chi2OutOfTime);
415 
416  if(kPoorRecoFlagEE_)
417  {
418  if(chi2>chi2ThreshEE_)uncalibRecHit.setRecoFlag(EcalUncalibratedRecHit::kPoorReco);
419  }
420 
421  } else {
422  double amplitude = uncalibRecHit.amplitude();
423  double amplitudeOutOfTime = uncalibRecHit.outOfTimeEnergy();
424  double jitter= uncalibRecHit.jitter();
425 
427  *itdg,
428  amplitude,
429  itimeconst,
430  amplitudeOutOfTime,
431  jitter,
432  pedVec,
433  pedRMSVec,
434  gainRatios,
437  );
438  double chi2 = chi2expressEB_.chi2();
439  uncalibRecHit.setChi2(chi2);
440  double chi2OutOfTime = chi2expressEB_.chi2OutOfTime();
441  uncalibRecHit.setOutOfTimeChi2(chi2OutOfTime);
442 
443  if(kPoorRecoFlagEB_)
444  {
445  if(chi2>chi2ThreshEB_)uncalibRecHit.setRecoFlag(EcalUncalibratedRecHit::kPoorReco);
446  }
447  }
448  }
449 
450  // remove setting of kFake, which can be misleading for the time being
451  //if ( detid.subdetId()==EcalBarrel ) {
452  // if ( uncalibRecHit.jitter()*25. > -5 ) {
453  // EBDataFrame dt(*itdg);
454  // if ( dt.spikeEstimator() < ebSpikeThresh_ ) uncalibRecHit.setRecoFlag( EcalUncalibratedRecHit::kFake );
455  // }
456  //}
457 
458 
459  // put the recHit in the collection
460  if (detid.subdetId()==EcalEndcap) {
461  result.push_back( uncalibRecHit );
462  } else {
463  result.push_back( uncalibRecHit );
464  }
465  return true;
466 }
467 
std::map< std::pair< EcalXtalGroupId, EcalTDCId >, EcalWeightSet > EcalTBWeightMap
Definition: EcalTBWeights.h:19
T getParameter(std::string const &) const
int i
Definition: DBlmapReader.cc:9
bool run(const edm::Event &evt, const EcalDigiCollection::const_iterator &digi, EcalUncalibratedRecHitCollection &result)
int hashedIndex() const
get a compact index for arrays
Definition: EBDetId.h:73
void computeAmplitude(std::vector< double > &amplitudeFitParameters)
boost::transform_iterator< IterHelp, boost::counting_iterator< int > > const_iterator
EcalUncalibRecHitWorkerGlobal(const edm::ParameterSet &)
void setRecoFlag(uint32_t flags)
std::pair< double, double > EBtimeFitLimits_
void computeTime(std::vector< double > &timeFitParameters, std::pair< double, double > &timeFitLimits, std::vector< double > &amplitudeFitParameters)
void push_back(T const &t)
EcalUncalibRecHitRecWeightsAlgo< EBDataFrame > weightsMethod_barrel_
std::pair< double, double > EEtimeFitLimits_
void setPulseShape(std::vector< double > &shape)
EcalUncalibRecHitRatioMethodAlgo< EEDataFrame > ratioMethod_endcap_
const unsigned int id() const
EcalUncalibRecHitLeadingEdgeAlgo< EBDataFrame > leadingEdgeMethod_barrel_
int hashedIndex(int ieta, int iphi)
Definition: EcalPyUtils.cc:42
EcalUncalibRecHitRatioMethodAlgo< EBDataFrame > ratioMethod_barrel_
edm::ESHandle< EcalGainRatios > gains
EcalUncalibRecHitLeadingEdgeAlgo< EEDataFrame > leadingEdgeMethod_endcap_
T sqrt(T t)
Definition: SSEVec.h:28
edm::ESHandle< EcalPedestals > peds
tuple result
Definition: query.py:137
virtual EcalUncalibratedRecHit makeRecHit(const C &dataFrame, const double *pedestals, const double *pedestalsRMS, const double *gainRatios, const EcalWeightSet::EcalWeightMatrix **weights, const EcalShapeBase &testbeamPulseShape)
Compute parameters.
int j
Definition: DBlmapReader.cc:9
edm::ESHandle< EcalTBWeights > wgts
float gain6Over1() const
edm::ESHandle< EcalWeightXtalGroups > grps
EcalWeightMatrix & getWeightsAfterGainSwitch()
Definition: EcalWeightSet.h:28
virtual EcalUncalibratedRecHit makeRecHit(const C &dataFrame, const double *pedestals, const double *gainRatios, const EcalWeightSet::EcalWeightMatrix **weights, const EcalWeightSet::EcalChi2WeightMatrix **chi2Matrix)
Compute parameters.
Definition: DetId.h:20
int hashedIndex() const
Definition: EEDetId.h:177
EcalWeightMatrix & getWeightsBeforeGainSwitch()
Definition: EcalWeightSet.h:27
const T & get() const
Definition: EventSetup.h:55
void init(const C &dataFrame, const double *pedestals, const double *pedestalRMSes, const double *gainRatios)
std::vector< Item >::const_iterator const_iterator
float gain12Over6() const
const EcalWeightSet::EcalWeightMatrix * weights[2]
float EcalTimeCalibConstant
void set(const edm::EventSetup &es)
edm::ESHandle< EcalTimeCalibConstants > itime
EcalUncalibRecHitRecWeightsAlgo< EEDataFrame > weightsMethod_endcap_
math::Matrix< 3, 10 >::type EcalWeightMatrix
Definition: EcalWeightSet.h:20
#define DEFINE_EDM_PLUGIN(factory, type, name)
static const int MAXSAMPLES
Definition: EcalDataFrame.h:44
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40