Definition at line 72 of file HcalSimpleRecAlgo.cc.
References HcalCoder::adc2fC(), HcalTimeSlew::delay(), eCorr(), HcalPulseContainmentCorrection::getCorrection(), i, HcalDetId::ieta(), createXMLFile::iphi, leakCorr(), LogDebug, max(), findQualityFiles::maxI, HcalCalibrations::pedestal(), HcalCalibrations::respcorrgain(), CaloSamples::size(), cond::rpcobgas::time, HcalCalibrations::timecorr(), and timeshift_ns_hbheho().
{
CaloSamples tool;
coder.adc2fC(digi,tool);
double ampl=0; int maxI = -1; double maxA = -1e10; float ta=0;
double fc_ampl=0;
for (int i=ifirst; i<tool.size() && i<n+ifirst; i++) {
int capid=digi[i].capid();
ta = (tool[i]-calibs.pedestal(capid));
fc_ampl+=ta;
ta*= calibs.respcorrgain(capid) ;
ampl+=ta;
if(ta>maxA){
maxA=ta;
maxI=i;
}
}
float time = -9999;
if(maxI==0 || maxI==(tool.size()-1)) {
LogDebug("HCAL Pulse") << "HcalSimpleRecAlgo::reconstruct :"
<< " Invalid max amplitude position, "
<< " max Amplitude: "<< maxI
<< " first: "<<ifirst
<< " last: "<<(tool.size()-1)
<< std::endl;
} else {
int capid=digi[maxI-1].capid();
float t0 = ((tool[maxI-1]-calibs.pedestal(capid))*calibs.respcorrgain(capid) );
capid=digi[maxI+1].capid();
float t2 = ((tool[maxI+1]-calibs.pedestal(capid))*calibs.respcorrgain(capid) );
float minA=t0;
if (maxA<minA) minA=maxA;
if (t2<minA) minA=t2;
if (minA<0) { maxA-=minA; t0-=minA; t2-=minA; }
float wpksamp = (t0 + maxA + t2);
if (wpksamp!=0) wpksamp=(maxA + 2.0*t2) / wpksamp;
time = (maxI - digi.presamples())*25.0 + timeshift_ns_hbheho(wpksamp);
if (corr!=0 && pulseCorrect ) {
ampl *= corr->getCorrection(fc_ampl);
}
if (slewCorrect) time-=HcalTimeSlew::delay(std::max(1.0,fc_ampl),slewFlavor);
time=time-calibs.timecorr();
}
if(forData) {
HcalDetId cell(digi.id());
int ieta = cell.ieta();
int iphi = cell.iphi();
ampl *= eCorr(ieta,iphi,ampl);
}
if(useLeak) {
ampl *= leakCorr(ampl);
}
return RecHit(digi.id(),ampl,time);
}