CMS 3D CMS Logo

List of all members | Public Member Functions | Public Attributes | Protected Member Functions | Private Attributes
SimpleHBHEPhase1Algo Class Reference

#include <SimpleHBHEPhase1Algo.h>

Inheritance diagram for SimpleHBHEPhase1Algo:
AbsHBHEPhase1Algo

Public Member Functions

void beginRun (const edm::Run &, const edm::EventSetup &) override
 
void endRun () override
 
int getFirstSampleShift () const
 
float getPhaseNS () const
 
int getRunNumber () const
 
int getSamplesToAdd () const
 
float getTimeShift () const
 
bool isConfigurable () const override
 
bool isCorrectingForPhaseContainment () const
 
HBHERecHit reconstruct (const HBHEChannelInfo &info, const HcalRecoParam *params, const HcalCalibrations &calibs, bool isRealData) override
 
 SimpleHBHEPhase1Algo (int firstSampleShift, int samplesToAdd, float phaseNS, float timeShift, bool correctForPhaseContainment, bool applyLegacyHBMCorrection, std::unique_ptr< PulseShapeFitOOTPileupCorrection > m2, std::unique_ptr< HcalDeterministicFit > detFit, std::unique_ptr< MahiFit > mahi)
 
 ~SimpleHBHEPhase1Algo () override
 
- Public Member Functions inherited from AbsHBHEPhase1Algo
virtual bool configure (const AbsHcalAlgoData *)
 
virtual ~AbsHBHEPhase1Algo ()
 

Public Attributes

const HcalTimeSlewhcalTimeSlew_delay_
 

Protected Member Functions

float hbminusCorrectionFactor (const HcalDetId &cell, float energy, bool isRealData) const
 
float m0Energy (const HBHEChannelInfo &info, double reconstructedCharge, bool applyContainmentCorrection, double phaseNS, int nSamplesToAdd)
 
float m0Time (const HBHEChannelInfo &info, double reconstructedCharge, int nSamplesToExamine) const
 

Private Attributes

bool applyLegacyHBMCorrection_
 
bool corrFPC_
 
int firstSampleShift_
 
std::unique_ptr< HcalDeterministicFithltOOTpuCorr_
 
std::unique_ptr< MahiFitmahiOOTpuCorr_
 
float phaseNS_
 
std::unique_ptr< PulseShapeFitOOTPileupCorrectionpsFitOOTpuCorr_
 
HcalPulseContainmentManager pulseCorr_
 
int runnum_
 
int samplesToAdd_
 
HcalPulseShapes theHcalPulseShapes_
 
float timeShift_
 

Detailed Description

Definition at line 18 of file SimpleHBHEPhase1Algo.h.

Constructor & Destructor Documentation

SimpleHBHEPhase1Algo::SimpleHBHEPhase1Algo ( int  firstSampleShift,
int  samplesToAdd,
float  phaseNS,
float  timeShift,
bool  correctForPhaseContainment,
bool  applyLegacyHBMCorrection,
std::unique_ptr< PulseShapeFitOOTPileupCorrection m2,
std::unique_ptr< HcalDeterministicFit detFit,
std::unique_ptr< MahiFit mahi 
)

Definition at line 20 of file SimpleHBHEPhase1Algo.cc.

References hcalTimeSlew_delay_.

32  phaseNS_(phaseNS),
34  runnum_(0),
38  hltOOTpuCorr_(std::move(detFit)),
39  mahiOOTpuCorr_(std::move(mahi)) {
40  hcalTimeSlew_delay_ = nullptr;
41 }
const HcalTimeSlew * hcalTimeSlew_delay_
std::unique_ptr< HcalDeterministicFit > hltOOTpuCorr_
float PulseContainmentFractionalError
HcalPulseContainmentManager pulseCorr_
std::unique_ptr< MahiFit > mahiOOTpuCorr_
std::unique_ptr< PulseShapeFitOOTPileupCorrection > psFitOOTpuCorr_
def move(src, dest)
Definition: eostools.py:511
SimpleHBHEPhase1Algo::~SimpleHBHEPhase1Algo ( )
inlineoverride

Definition at line 52 of file SimpleHBHEPhase1Algo.h.

References beginRun(), and endRun().

52 {}

Member Function Documentation

void SimpleHBHEPhase1Algo::beginRun ( const edm::Run r,
const edm::EventSetup es 
)
overridevirtual

Reimplemented from AbsHBHEPhase1Algo.

Definition at line 43 of file SimpleHBHEPhase1Algo.cc.

References HcalPulseContainmentManager::beginRun(), edm::EventSetup::get(), hcalTimeSlew_delay_, pulseCorr_, edm::RunBase::run(), and runnum_.

Referenced by ~SimpleHBHEPhase1Algo().

43  {
45  es.get<HcalTimeSlewRecord>().get("HBHE", delay);
46  hcalTimeSlew_delay_ = &*delay;
47 
48  runnum_ = r.run();
49  pulseCorr_.beginRun(es);
50 }
const HcalTimeSlew * hcalTimeSlew_delay_
RunNumber_t run() const
Definition: RunBase.h:40
HcalPulseContainmentManager pulseCorr_
void beginRun(edm::EventSetup const &es)
T get() const
Definition: EventSetup.h:73
void SimpleHBHEPhase1Algo::endRun ( )
overridevirtual

Reimplemented from AbsHBHEPhase1Algo.

Definition at line 52 of file SimpleHBHEPhase1Algo.cc.

References runnum_.

Referenced by ~SimpleHBHEPhase1Algo().

int SimpleHBHEPhase1Algo::getFirstSampleShift ( ) const
inline

Definition at line 65 of file SimpleHBHEPhase1Algo.h.

References firstSampleShift_.

float SimpleHBHEPhase1Algo::getPhaseNS ( ) const
inline

Definition at line 67 of file SimpleHBHEPhase1Algo.h.

References phaseNS_.

67 { return phaseNS_; }
int SimpleHBHEPhase1Algo::getRunNumber ( ) const
inline

Definition at line 70 of file SimpleHBHEPhase1Algo.h.

References runnum_.

70 { return runnum_; }
int SimpleHBHEPhase1Algo::getSamplesToAdd ( ) const
inline

Definition at line 66 of file SimpleHBHEPhase1Algo.h.

References samplesToAdd_.

float SimpleHBHEPhase1Algo::getTimeShift ( ) const
inline

Definition at line 68 of file SimpleHBHEPhase1Algo.h.

References timeShift_.

68 { return timeShift_; }
float SimpleHBHEPhase1Algo::hbminusCorrectionFactor ( const HcalDetId cell,
float  energy,
bool  isRealData 
) const
protected

Definition at line 147 of file SimpleHBHEPhase1Algo.cc.

References applyLegacyHBMCorrection_, corr, hbminus_special_ecorr(), HcalBarrel, LEDCalibrationChannels::ieta, HcalDetId::ieta(), LEDCalibrationChannels::iphi, HcalDetId::iphi(), runnum_, and HcalDetId::subdet().

Referenced by reconstruct().

149  {
150  float corr = 1.f;
151  if (applyLegacyHBMCorrection_ && isRealData && runnum_ > 0)
152  if (cell.subdet() == HcalBarrel) {
153  const int ieta = cell.ieta();
154  const int iphi = cell.iphi();
155  corr = hbminus_special_ecorr(ieta, iphi, energy, runnum_);
156  }
157  return corr;
158 }
HcalSubdetector subdet() const
get the subdetector
Definition: HcalDetId.h:138
float hbminus_special_ecorr(int ieta, int iphi, double energy, int runnum)
Special energy correction for some HB- cells.
int ieta() const
get the cell ieta
Definition: HcalDetId.h:155
JetCorrectorParameters corr
Definition: classes.h:5
int iphi() const
get the cell iphi
Definition: HcalDetId.h:157
bool SimpleHBHEPhase1Algo::isConfigurable ( ) const
inlineoverridevirtual

Implements AbsHBHEPhase1Algo.

Definition at line 58 of file SimpleHBHEPhase1Algo.h.

References info(), CalibrationSummaryClient_cfi::params, and reconstruct().

58 { return false; }
bool SimpleHBHEPhase1Algo::isCorrectingForPhaseContainment ( ) const
inline

Definition at line 69 of file SimpleHBHEPhase1Algo.h.

References corrFPC_.

69 { return corrFPC_; }
float SimpleHBHEPhase1Algo::m0Energy ( const HBHEChannelInfo info,
double  reconstructedCharge,
bool  applyContainmentCorrection,
double  phaseNS,
int  nSamplesToAdd 
)
protected

Definition at line 160 of file SimpleHBHEPhase1Algo.cc.

References MillePedeFileConverter_cfg::e, HBHEChannelInfo::energyInWindow(), firstSampleShift_, HcalPulseContainmentManager::get(), HBHEChannelInfo::id(), pulseCorr_, and HBHEChannelInfo::soi().

Referenced by reconstruct().

164  {
165  int ibeg = static_cast<int>(info.soi()) + firstSampleShift_;
166  if (ibeg < 0)
167  ibeg = 0;
168  double e = info.energyInWindow(ibeg, ibeg + nSamplesToAdd);
169 
170  // Pulse containment correction
171  {
172  double corrFactor = 1.0;
173  if (applyContainmentCorrection)
174  corrFactor = pulseCorr_.get(info.id(), nSamplesToAdd, phaseNs)->getCorrection(fc_ampl);
175  e *= corrFactor;
176  }
177 
178  return e;
179 }
const HcalPulseContainmentCorrection * get(const HcalDetId &detId, int toAdd, float fixedphase_ns)
unsigned soi() const
HcalPulseContainmentManager pulseCorr_
HcalDetId id() const
double energyInWindow(const unsigned begin, const unsigned end) const
float SimpleHBHEPhase1Algo::m0Time ( const HBHEChannelInfo info,
double  reconstructedCharge,
int  nSamplesToExamine 
) const
protected

Definition at line 181 of file SimpleHBHEPhase1Algo.cc.

References HcalTimeSlew::delay(), f, firstSampleShift_, dqmMemoryStats::float, hcalTimeSlew_delay_, createfilelist::int, SiStripPI::max, findQualityFiles::maxI, HBHEChannelInfo::MAXSAMPLES, HcalTimeSlew::Medium, min(), PresampleTask_cfi::nSamples, HBHEChannelInfo::nSamples(), HBHEChannelInfo::peakEnergyTS(), position, HBHEChannelInfo::soi(), ntuplemaker::time, HBHEChannelInfo::tsEnergy(), and mitigatedMETSequence_cff::U.

Referenced by reconstruct().

183  {
184  float time = -9999.f; // historic value
185 
186  const unsigned nSamples = info.nSamples();
187  if (nSamples > 2U) {
188  const int soi = info.soi();
189  int ibeg = soi + firstSampleShift_;
190  if (ibeg < 0)
191  ibeg = 0;
192  const int iend = std::min(ibeg + nSamplesToExamine, (int)nSamples - 1); // actual array
193 
194  unsigned maxI = info.peakEnergyTS((unsigned)ibeg, (unsigned)iend); // requires unsigned params
195  if (maxI < HBHEChannelInfo::MAXSAMPLES) {
196  if (maxI >= nSamples)
197  maxI = nSamples - 1U; // just in case
198 
199  // Simplified evaluation for Phase1
200  float emax0 = info.tsEnergy(maxI);
201  float emax1 = 0.f;
202  if (maxI < (nSamples - 1U))
203  emax1 = info.tsEnergy(maxI + 1U);
204 
205  // consider soi reference for collisions
206  int position = (int)maxI;
207  if (nSamplesToExamine < (int)nSamples)
208  position -= soi;
209 
210  time = 25.f * (float)position;
211  if (emax0 > 0.f && emax1 > 0.f)
212  time += 25.f * emax1 / (emax0 + emax1); // 1st order corr.
213 
214  // TimeSlew correction
215  time -= hcalTimeSlew_delay_->delay(std::max(1.0, fc_ampl), HcalTimeSlew::Medium);
216  }
217  }
218  return time;
219 }
const HcalTimeSlew * hcalTimeSlew_delay_
unsigned soi() const
static const unsigned MAXSAMPLES
double f[11][100]
T min(T a, T b)
Definition: MathUtil.h:58
double tsEnergy(const unsigned ts) const
static int position[264][3]
Definition: ReadPGInfo.cc:289
float delay(float 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...
Definition: HcalTimeSlew.cc:20
unsigned nSamples() const
unsigned peakEnergyTS(const unsigned begin, const unsigned end) const
HBHERecHit SimpleHBHEPhase1Algo::reconstruct ( const HBHEChannelInfo info,
const HcalRecoParam params,
const HcalCalibrations calibs,
bool  isRealData 
)
overridevirtual

Implements AbsHBHEPhase1Algo.

Definition at line 54 of file SimpleHBHEPhase1Algo.cc.

References HBHEChannelInfo::chargeInWindow(), hltPixelTracks_cff::chi2, HcalRecoParam::correctForPhaseContainment(), HcalRecoParam::correctionPhaseNS(), corrFPC_, firstSampleShift_, HcalPulseShapes::getShape(), HBHEChannelInfo::hasTimeInfo(), HcalPhase1FlagLabels::HBHEPulseFitBit, hbminusCorrectionFactor(), hcalTimeSlew_delay_, hltOOTpuCorr_, HBHEChannelInfo::id(), HcalSpecialTimes::isSpecial(), m0Energy(), m0Time(), mahiOOTpuCorr_, HBHEChannelInfo::nSamples(), HcalDeterministicFit::phase1Apply(), PulseShapeFitOOTPileupCorrection::phase1Apply(), MahiFit::phase1Apply(), phaseNS_, psFitOOTpuCorr_, HBHEChannelInfo::recoShape(), HcalRecoParam::samplesToAdd(), samplesToAdd_, HBHERecHitAuxSetter::setAux(), HBHERecHit::setAuxEnergy(), HBHERecHit::setChiSquared(), CaloRecHit::setFlagField(), HBHERecHit::setRawEnergy(), HBHEChannelInfo::soi(), HBHEChannelInfo::soiRiseTime(), theHcalPulseShapes_, and timeShift_.

Referenced by isConfigurable().

57  {
58  const HcalDetId channelId(info.id());
59 
60  // Calculate "Method 0" quantities
61  float m0t = 0.f, m0E = 0.f;
62  {
63  int ibeg = static_cast<int>(info.soi()) + firstSampleShift_;
64  if (ibeg < 0)
65  ibeg = 0;
66  const int nSamplesToAdd = params ? params->samplesToAdd() : samplesToAdd_;
67  const double fc_ampl = info.chargeInWindow(ibeg, ibeg + nSamplesToAdd);
68  const bool applyContainment = params ? params->correctForPhaseContainment() : corrFPC_;
69  const float phasens = params ? params->correctionPhaseNS() : phaseNS_;
70  m0E = m0Energy(info, fc_ampl, applyContainment, phasens, nSamplesToAdd);
71  m0E *= hbminusCorrectionFactor(channelId, m0E, isData);
72  m0t = m0Time(info, fc_ampl, nSamplesToAdd);
73  }
74 
75  // Run "Method 2"
76  float m2t = 0.f, m2E = 0.f, chi2 = -1.f;
77  bool useTriple = false;
79  if (method2) {
80  psFitOOTpuCorr_->setPulseShapeTemplate(
82  // "phase1Apply" call below sets m2E, m2t, useTriple, and chi2.
83  // These parameters are pased by non-const reference.
84  method2->phase1Apply(info, m2E, m2t, useTriple, chi2);
85  m2E *= hbminusCorrectionFactor(channelId, m2E, isData);
86  }
87 
88  // Run "Method 3"
89  float m3t = 0.f, m3E = 0.f;
90  const HcalDeterministicFit* method3 = hltOOTpuCorr_.get();
91  if (method3) {
92  // "phase1Apply" sets m3E and m3t (pased by non-const reference)
93  method3->phase1Apply(info, m3E, m3t, hcalTimeSlew_delay_);
94  m3E *= hbminusCorrectionFactor(channelId, m3E, isData);
95  }
96 
97  // Run Mahi
98  float m4E = 0.f, m4chi2 = -1.f;
99  float m4T = 0.f;
100  bool m4UseTriple = false;
101 
102  const MahiFit* mahi = mahiOOTpuCorr_.get();
103 
104  if (mahi) {
105  mahiOOTpuCorr_->setPulseShapeTemplate(
107  mahi->phase1Apply(info, m4E, m4T, m4UseTriple, m4chi2);
108  m4E *= hbminusCorrectionFactor(channelId, m4E, isData);
109  }
110 
111  // Finally, construct the rechit
112  HBHERecHit rh;
113 
114  float rhE = m0E;
115  float rht = m0t;
116  float rhX = -1.f;
117  if (mahi) {
118  rhE = m4E;
119  rht = m4T;
120  rhX = m4chi2;
121  } else if (method2) {
122  rhE = m2E;
123  rht = m2t;
124  rhX = chi2;
125  } else if (method3) {
126  rhE = m3E;
127  rht = m3t;
128  }
129  float tdcTime = info.soiRiseTime();
130  if (!HcalSpecialTimes::isSpecial(tdcTime))
131  tdcTime += timeShift_;
132  rh = HBHERecHit(channelId, rhE, rht, tdcTime);
133  rh.setRawEnergy(m0E);
134  rh.setAuxEnergy(m3E);
135  rh.setChiSquared(rhX);
136 
137  // Set rechit aux words
138  HBHERecHitAuxSetter::setAux(info, &rh);
139 
140  // Set some rechit flags (here, for Method 2/Mahi)
141  if (useTriple || m4UseTriple)
143 
144  return rh;
145 }
const Shape & getShape(int shapeType) const
const HcalTimeSlew * hcalTimeSlew_delay_
constexpr unsigned int samplesToAdd() const
Definition: HcalRecoParam.h:32
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, bool &useTriple, float &chi2) const
Definition: MahiFit.cc:46
bool hasTimeInfo() const
std::unique_ptr< HcalDeterministicFit > hltOOTpuCorr_
unsigned soi() const
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, bool &useTriple, float &chi2) const
HcalDetId id() const
constexpr void setFlagField(uint32_t value, int base, int width=1)
Definition: CaloRecHit.h:36
constexpr float correctionPhaseNS() const
Definition: HcalRecoParam.h:30
float soiRiseTime() const
double chargeInWindow(const unsigned begin, const unsigned end) const
constexpr bool isSpecial(const float t)
int recoShape() const
float hbminusCorrectionFactor(const HcalDetId &cell, float energy, bool isRealData) const
std::unique_ptr< MahiFit > mahiOOTpuCorr_
constexpr bool correctForPhaseContainment() const
Definition: HcalRecoParam.h:28
HcalPulseShapes theHcalPulseShapes_
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)
Definition: HBHERecHit.h:47
void setChiSquared(const float chi2)
Definition: HBHERecHit.h:41
float m0Time(const HBHEChannelInfo &info, double reconstructedCharge, int nSamplesToExamine) const
unsigned nSamples() const
std::unique_ptr< PulseShapeFitOOTPileupCorrection > psFitOOTpuCorr_
void setRawEnergy(const float en)
Definition: HBHERecHit.h:44
void phase1Apply(const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, const HcalTimeSlew *hcalTimeSlew_delay) const

Member Data Documentation

bool SimpleHBHEPhase1Algo::applyLegacyHBMCorrection_
private

Definition at line 99 of file SimpleHBHEPhase1Algo.h.

Referenced by hbminusCorrectionFactor().

bool SimpleHBHEPhase1Algo::corrFPC_
private

Definition at line 98 of file SimpleHBHEPhase1Algo.h.

Referenced by isCorrectingForPhaseContainment(), and reconstruct().

int SimpleHBHEPhase1Algo::firstSampleShift_
private

Definition at line 93 of file SimpleHBHEPhase1Algo.h.

Referenced by getFirstSampleShift(), m0Energy(), m0Time(), and reconstruct().

const HcalTimeSlew* SimpleHBHEPhase1Algo::hcalTimeSlew_delay_

Definition at line 72 of file SimpleHBHEPhase1Algo.h.

Referenced by beginRun(), m0Time(), reconstruct(), and SimpleHBHEPhase1Algo().

std::unique_ptr<HcalDeterministicFit> SimpleHBHEPhase1Algo::hltOOTpuCorr_
private

Definition at line 105 of file SimpleHBHEPhase1Algo.h.

Referenced by reconstruct().

std::unique_ptr<MahiFit> SimpleHBHEPhase1Algo::mahiOOTpuCorr_
private

Definition at line 108 of file SimpleHBHEPhase1Algo.h.

Referenced by reconstruct().

float SimpleHBHEPhase1Algo::phaseNS_
private

Definition at line 95 of file SimpleHBHEPhase1Algo.h.

Referenced by getPhaseNS(), and reconstruct().

std::unique_ptr<PulseShapeFitOOTPileupCorrection> SimpleHBHEPhase1Algo::psFitOOTpuCorr_
private

Definition at line 102 of file SimpleHBHEPhase1Algo.h.

Referenced by reconstruct().

HcalPulseContainmentManager SimpleHBHEPhase1Algo::pulseCorr_
private

Definition at line 91 of file SimpleHBHEPhase1Algo.h.

Referenced by beginRun(), and m0Energy().

int SimpleHBHEPhase1Algo::runnum_
private

Definition at line 97 of file SimpleHBHEPhase1Algo.h.

Referenced by beginRun(), endRun(), getRunNumber(), and hbminusCorrectionFactor().

int SimpleHBHEPhase1Algo::samplesToAdd_
private

Definition at line 94 of file SimpleHBHEPhase1Algo.h.

Referenced by getSamplesToAdd(), and reconstruct().

HcalPulseShapes SimpleHBHEPhase1Algo::theHcalPulseShapes_
private

Definition at line 110 of file SimpleHBHEPhase1Algo.h.

Referenced by reconstruct().

float SimpleHBHEPhase1Algo::timeShift_
private

Definition at line 96 of file SimpleHBHEPhase1Algo.h.

Referenced by getTimeShift(), and reconstruct().