26 std::unique_ptr<PulseShapeFitOOTPileupCorrection> m2,
27 std::unique_ptr<HcalDeterministicFit> detFit,
28 std::unique_ptr<MahiFit> mahi)
30 firstSampleShift_(firstSampleShift),
31 samplesToAdd_(samplesToAdd),
33 timeShift_(timeShift),
35 corrFPC_(correctForPhaseContainment),
37 hltOOTpuCorr_(
std::
move(detFit)),
69 float m0t = 0.f, m0E = 0.f;
75 const double fc_ampl = info.
chargeInWindow(ibeg, ibeg + nSamplesToAdd);
78 m0E =
m0Energy(info, fc_ampl, applyContainment, phasens, nSamplesToAdd);
80 m0t =
m0Time(info, fc_ampl, calibs, nSamplesToAdd);
84 float m2t = 0.f, m2E = 0.f,
chi2 = -1.f;
85 bool useTriple =
false;
98 float m3t = 0.f, m3E = 0.f;
108 float m4E = 0.f, m4chi2 = -1.f;
110 bool m4UseTriple=
false;
116 mahi->
phase1Apply(info,m4E,m4T,m4UseTriple,m4chi2);
144 rh =
HBHERecHit(channelId, rhE, rht, tdcTime);
153 if (useTriple || m4UseTriple)
161 const bool isRealData)
const 167 const int ieta = cell.
ieta();
168 const int iphi = cell.
iphi();
175 const double fc_ampl,
176 const bool applyContainmentCorrection,
177 const double phaseNs,
178 const int nSamplesToAdd)
187 double corrFactor = 1.0;
188 if (applyContainmentCorrection)
189 corrFactor =
pulseCorr_.
get(info.
id(), nSamplesToAdd, phaseNs)->getCorrection(fc_ampl);
197 const double fc_ampl,
199 const int nSamplesToExamine)
const 201 float time = -9999.f;
206 const int soi = info.
soi();
210 const int iend = ibeg + nSamplesToExamine;
216 else if (maxI >= nSamples - 1
U)
217 maxI = nSamples - 2
U;
223 float t2 = info.
tsEnergy(maxI + 1U);
227 if (maxA < minA) minA = maxA;
228 if (t2 < minA) minA=t2;
229 if (minA < 0.
f) { maxA-=minA; t0-=minA; t2-=minA; }
230 float wpksamp = (t0 + maxA + t2);
231 if (wpksamp) wpksamp = (maxA + 2.f*t2) / wpksamp;
const Shape & getShape(int shapeType) const
HBHERecHit reconstruct(const HBHEChannelInfo &info, const HcalRecoParam *params, const HcalCalibrations &calibs, bool isRealData) override
const HcalTimeSlew * hcalTimeSlew_delay_
constexpr unsigned int samplesToAdd() const
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, bool &useTriple, float &chi2) const
float timeshift_ns_hbheho(float wpksamp)
HcalSubdetector subdet() const
get the subdetector
const HcalPulseContainmentCorrection * get(const HcalDetId &detId, int toAdd, float fixedphase_ns)
std::unique_ptr< HcalDeterministicFit > hltOOTpuCorr_
void beginRun(const edm::Run &, const edm::EventSetup &) override
float PulseContainmentFractionalError
double delay(double fC, BiasSetting bias=Medium) const
Returns the amount (ns) by which a pulse of the given number of fC will be delayed by the timeslew ef...
HcalPulseContainmentManager pulseCorr_
float hbminus_special_ecorr(int ieta, int iphi, double energy, int runnum)
Special energy correction for some HB- cells.
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, bool &useTriple, float &chi2) const
constexpr void setFlagField(uint32_t value, int base, int width=1)
static const unsigned MAXSAMPLES
constexpr float correctionPhaseNS() const
float m0Time(const HBHEChannelInfo &info, double reconstructedCharge, const HcalCalibrations &calibs, int nSamplesToExamine) const
float soiRiseTime() const
int ieta() const
get the cell ieta
double energyInWindow(const unsigned begin, const unsigned end) const
double chargeInWindow(const unsigned begin, const unsigned end) const
constexpr bool isSpecial(const float t)
SimpleHBHEPhase1Algo(int firstSampleShift, int samplesToAdd, float phaseNS, float timeShift, bool correctForPhaseContainment, std::unique_ptr< PulseShapeFitOOTPileupCorrection > m2, std::unique_ptr< HcalDeterministicFit > detFit, std::unique_ptr< MahiFit > mahi)
float hbminusCorrectionFactor(const HcalDetId &cell, float energy, bool isRealData) const
constexpr size_t nSamples
std::unique_ptr< MahiFit > mahiOOTpuCorr_
int iphi() const
get the cell iphi
constexpr bool correctForPhaseContainment() const
HcalPulseShapes theHcalPulseShapes_
double tsEnergy(const unsigned ts) const
correctForPhaseContainment
void beginRun(edm::EventSetup const &es)
constexpr double timecorr() const
get time correction factor
float m0Energy(const HBHEChannelInfo &info, double reconstructedCharge, bool applyContainmentCorrection, double phaseNS, int nSamplesToAdd)
static void setAux(const HBHEChannelInfo &info, HBHERecHit *rechit)
void setAuxEnergy(const float en)
void setChiSquared(const float chi2)
unsigned nSamples() const
std::unique_ptr< PulseShapeFitOOTPileupCorrection > psFitOOTpuCorr_
void setRawEnergy(const float en)
unsigned peakEnergyTS(const unsigned begin, const unsigned end) const
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, const HcalTimeSlew *hcalTimeSlew_delay) const