#include <RecoLocalCalo/EcalRecAlgos/interface/EcalUncalibRecHitRecWeightsAlgo.h>
Public Member Functions | |
virtual EcalUncalibratedRecHit | makeRecHit (const C &dataFrame, const double *pedestals, const double *gainRatios, const EcalWeightSet::EcalWeightMatrix **weights, const EcalWeightSet::EcalChi2WeightMatrix **chi2Matrix) |
Compute parameters. | |
virtual | ~EcalUncalibRecHitRecWeightsAlgo () |
Definition at line 20 of file EcalUncalibRecHitRecWeightsAlgo.h.
virtual EcalUncalibRecHitRecWeightsAlgo< C >::~EcalUncalibRecHitRecWeightsAlgo | ( | ) | [inline, virtual] |
virtual EcalUncalibratedRecHit EcalUncalibRecHitRecWeightsAlgo< C >::makeRecHit | ( | const C & | dataFrame, | |
const double * | pedestals, | |||
const double * | gainRatios, | |||
const EcalWeightSet::EcalWeightMatrix ** | weights, | |||
const EcalWeightSet::EcalChi2WeightMatrix ** | chi2Matrix | |||
) | [inline, virtual] |
Compute parameters.
Implements EcalUncalibRecHitRecAbsAlgo< C >.
Definition at line 27 of file EcalUncalibRecHitRecWeightsAlgo.h.
Referenced by EcalTBWeightUncalibRecHitProducer::produce(), EcalWeightUncalibRecHitProducer::produce(), and EcalUnpackerWorker::work().
00030 { 00031 double amplitude_(-1.), pedestal_(-1.), jitter_(-1.), chi2_(-1.); 00032 00033 // Get time samples 00034 ROOT::Math::SVector<double,C::MAXSAMPLES> frame; 00035 int gainId0 = 1; 00036 int iGainSwitch = 0; 00037 for(int iSample = 0; iSample < C::MAXSAMPLES; iSample++) { 00038 int gainId = dataFrame.sample(iSample).gainId(); 00039 //Handling saturation (treating saturated gainId as maximum gain) 00040 if (gainId == 0 ) gainId = 3; 00041 if (gainId != gainId0) iGainSwitch = 1; 00042 if (!iGainSwitch) 00043 frame(iSample) = double(dataFrame.sample(iSample).adc()); 00044 else 00045 frame(iSample) = double(((double)(dataFrame.sample(iSample).adc()) - pedestals[gainId-1]) * gainRatios[gainId-1]); 00046 } 00047 00048 // Compute parameters 00049 ROOT::Math::SVector <double,3> param = (*(weights[iGainSwitch])) * frame; 00050 amplitude_ = param(EcalUncalibRecHitRecAbsAlgo<C>::iAmplitude); 00051 pedestal_ = param(EcalUncalibRecHitRecAbsAlgo<C>::iPedestal); 00052 if (amplitude_) jitter_ = param(EcalUncalibRecHitRecAbsAlgo<C>::iTime); 00053 // Compute chi2 = frame^T * chi2Matrix * frame 00054 chi2_ = ROOT::Math::Similarity((*(chi2Matrix[iGainSwitch])),frame); 00055 return EcalUncalibratedRecHit( dataFrame.id(), amplitude_, pedestal_, jitter_, chi2_); 00056 }