13 recoMethod_(recoMethod),
14 correctForTimeslew_(correctForTimeslew),
15 correctForPulse_(correctForPulse) {
19 recoMethod_(recoMethod),
20 correctForTimeslew_(
false) {
29 namespace ZdcSimpleRecAlgoImpl {
30 template<
class Digi,
class RecHit>
35 int ifirst = mySignalTS[0];
36 int n = mySignalTS.size();
37 double ampl=0;
int maxI = -1;
double maxA = -1e10;
double ta=0;
39 for (
int i=ifirst;
i<tool.
size() &&
i<n+ifirst;
i++) {
40 int capid=digi[
i].capid();
53 if(maxI==0 || maxI==(tool.
size()-1)) {
54 LogDebug(
"HCAL Pulse") <<
"ZdcSimpleRecAlgo::reconstruct :"
55 <<
" Invalid max amplitude position, "
56 <<
" max Amplitude: "<< maxI
58 <<
" last: "<<(tool.
size()-1)
62 int capid=digi[maxI-1].capid();
64 capid=digi[maxI+1].capid();
66 double wpksamp = (t0 + maxA + t2);
67 if (wpksamp!=0) wpksamp=(maxA + 2.0*t2) / wpksamp;
78 return RecHit(digi.id(),ampl,
time);
82 namespace ZdcSimpleRecAlgoImpl {
83 template<
class Digi,
class RecHit>
89 int ifirst = mySignalTS[0];
91 double ampl=0;
int maxI = -1;
double maxA = -1e10;
double ta=0;
98 for(
unsigned int iv = 0; iv<myNoiseTS.size(); ++iv)
100 CurrentTS = myNoiseTS[iv];
101 Allnoise += tool[CurrentTS];
104 if(noiseslices != 0) {
105 noise = (Allnoise)/
double(noiseslices);
110 double noisefactor=1.;
111 for(
unsigned int ivs = 0; ivs<mySignalTS.size(); ++ivs)
118 CurrentTS = mySignalTS[ivs];
119 int capid=digi[CurrentTS].capid();
125 ta = tool[CurrentTS]-noisefactor*noise;
141 if(maxI==0 || maxI==(tool.
size()-1)) {
142 LogDebug(
"HCAL Pulse") <<
"ZdcSimpleRecAlgo::reco2 :"
143 <<
" Invalid max amplitude position, "
144 <<
" max Amplitude: "<< maxI
145 <<
" first: "<<ifirst
146 <<
" last: "<<(tool.
size()-1)
149 int capid=digi[maxI-1].capid();
150 double Energy0 = ((tool[maxI-1])*calibs.
respcorrgain(capid) );
153 if(Energy0<0){Energy0=0.;}
154 capid=digi[
maxI].capid();
156 if(Energy1<0){Energy1=0.;}
157 capid=digi[maxI+1].capid();
158 double Energy2 = ((tool[maxI+1])*calibs.
respcorrgain(capid) );
159 if(Energy2<0){Energy2=0.;}
161 double TSWeightEnergy = ((maxI-1)*Energy0 + maxI*Energy1 + (maxI+1)*Energy2);
162 double EnergySum=Energy0+Energy1+Energy2;
164 if (EnergySum!=0) AvgTSPos=TSWeightEnergy/ EnergySum;
170 time = (AvgTSPos*25.0);
177 return RecHit(digi.id(),ampl,
time);
184 return ZdcSimpleRecAlgoImpl::reco1<ZDCDataFrame,ZDCRecHit>(digi,coder,calibs,
185 myNoiseTS,mySignalTS,
false,
189 return ZdcSimpleRecAlgoImpl::reco2<ZDCDataFrame,ZDCRecHit>(digi,coder,calibs,
190 myNoiseTS,mySignalTS,
false,
193 edm::LogError(
"ZDCSimpleRecAlgoImpl::reconstruct, recoMethod was not declared");
307 int index = (int)flx;
320 yval = y1 + (y2-y1)*(flx-(
float)
index);
double respcorrgain(int fCapId) const
get response corrected gain for capid=0..3
static const float scale_zdc
static const float wpksamp0_zdc
double getCorrection(double fc_ampl) const
RecHit reco2(const Digi &digi, const HcalCoder &coder, const HcalCalibrations &calibs, const std::vector< unsigned int > &myNoiseTS, const std::vector< unsigned int > &mySignalTS, bool slewCorrect, const HcalPulseContainmentCorrection *corr, HcalTimeSlew::BiasSetting slewFlavor)
double pedestal(int fCapId) const
get pedestal for capid=0..3
ZdcSimpleRecAlgo(bool correctForTimeslew, bool correctForContainment, float fixedPhaseNs, int recoMethod)
ZDCRecHit reconstruct(const ZDCDataFrame &digi, const std::vector< unsigned int > &myNoiseTS, const std::vector< unsigned int > &mySignalTS, const HcalCoder &coder, const HcalCalibrations &calibs) const
RecHit reco1(const Digi &digi, const HcalCoder &coder, const HcalCalibrations &calibs, const std::vector< unsigned int > &myNoiseTS, const std::vector< unsigned int > &mySignalTS, bool slewCorrect, const HcalPulseContainmentCorrection *corr, HcalTimeSlew::BiasSetting slewFlavor)
std::auto_ptr< HcalPulseContainmentCorrection > pulseCorr_
static float timeshift_ns_zdc(float wpksamp)
void initPulseCorr(int toadd)
const T & max(const T &a, const T &b)
static double MaximumFractionalError
static const float actual_ns_zdc[num_bins_zdc]
int size() const
get the size
double timecorr() const
get time correction factor
virtual void adc2fC(const HBHEDataFrame &df, CaloSamples &lf) const =0
static const int num_bins_zdc
static double delay(double fC, BiasSetting bias=Medium)
Returns the amount (ns) by which a pulse of the given number of fC will be delayed by the timeslew ef...