CMS 3D CMS Logo

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

#include <PulseShapeFitOOTPileupCorrection.h>

Public Member Functions

void phase1Apply (const HBHEChannelInfo &channelData, float &reconstructedEnergy, float &reconstructedTime, bool &useTriple, float &chi2) const
 
 PulseShapeFitOOTPileupCorrection ()
 
void resetPulseShapeTemplate (const HcalPulseShapes::Shape &ps, unsigned nSamples)
 
void setPulseShapeTemplate (const HcalPulseShapes::Shape &ps, bool isHPD, unsigned nSamples, const HcalTimeSlew *hcalTimeSlewDelay)
 
void setPUParams (bool iPedestalConstraint, bool iTimeConstraint, bool iAddPulseJitter, bool iApplyTimeSlew, double iTS4Min, const std::vector< double > &iTS4Max, double iPulseJitter, double iTimeMean, double iTimeSigHPD, double iTimeSigSiPM, double iPedMean, double iTMin, double iTMax, const std::vector< double > &its4Chi2, HcalTimeSlew::BiasSetting slewFlavor, int iFitTimes)
 
 ~PulseShapeFitOOTPileupCorrection ()
 

Public Attributes

const HcalPulseShapes::ShapecurrentPulseShape_ = 0
 
const HcalTimeSlewhcalTimeSlewDelay_ = 0
 
double tsDelay1GeV_ =0
 

Private Member Functions

void fit (int iFit, float &timevalfit, float &chargevalfit, float &pedvalfit, float &chi2, bool &fitStatus, double &iTSMax, const double &iTSTOTen, double *iEnArr, unsigned(&iBX)[3]) const
 
int pulseShapeFit (const double *energyArr, const double *pedenArr, const double *chargeArr, const double *pedArr, const double *gainArr, const double tsTOTen, std::vector< float > &fitParsVec, const double *ADCnoise, unsigned int soi) const
 

Private Attributes

bool addPulseJitter_
 
bool applyTimeSlew_
 
double chargeThreshold_
 
int cntsetPulseShape
 
std::unique_ptr< ROOT::Math::Functor > dpfunctor_
 
int fitTimes_
 
PSFitter::HybridMinimizerhybridfitter
 
std::array< double, HcalConst::maxSamplesiniTimesArr
 
bool isCurrentChannelHPD_
 
bool pedestalConstraint_
 
double pedMean_
 
double pedSig_
 
std::unique_ptr< FitterFuncs::PulseShapeFunctorpsfPtr_
 
double pulseJitter_
 
HcalTimeSlew::BiasSetting slewFlavor_
 
std::unique_ptr< ROOT::Math::Functor > spfunctor_
 
bool timeConstraint_
 
double timeMean_
 
double timeSig_
 
double timeSigHPD_
 
double timeSigSiPM_
 
std::unique_ptr< ROOT::Math::Functor > tpfunctor_
 
double ts4Chi2_
 
double ts4Max_
 
double ts4Min_
 
int TSMax_
 
int TSMin_
 
bool unConstrainedFit_
 
std::vector< double > vts4Chi2_
 
std::vector< double > vts4Max_
 

Detailed Description

Definition at line 23 of file PulseShapeFitOOTPileupCorrection.h.

Constructor & Destructor Documentation

PulseShapeFitOOTPileupCorrection::PulseShapeFitOOTPileupCorrection ( )

Definition at line 8 of file PulseShapeFitOOTPileupCorrection.cc.

References hybridfitter, iniTimesArr, and PSFitter::HybridMinimizer::kMigrad.

8  : cntsetPulseShape(0),
9  psfPtr_(nullptr), spfunctor_(nullptr), dpfunctor_(nullptr), tpfunctor_(nullptr),
10  TSMin_(0), TSMax_(0), vts4Chi2_(0), pedestalConstraint_(false),
11  timeConstraint_(false), addPulseJitter_(false), applyTimeSlew_(false),
13  {
15  iniTimesArr = { {-100,-75,-50,-25,0,25,50,75,100,125} };
16 }
std::array< double, HcalConst::maxSamples > iniTimesArr
std::unique_ptr< ROOT::Math::Functor > tpfunctor_
std::unique_ptr< ROOT::Math::Functor > dpfunctor_
std::unique_ptr< ROOT::Math::Functor > spfunctor_
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
PulseShapeFitOOTPileupCorrection::~PulseShapeFitOOTPileupCorrection ( )

Definition at line 18 of file PulseShapeFitOOTPileupCorrection.cc.

References hybridfitter.

18  {
19  if(hybridfitter) delete hybridfitter;
20 }

Member Function Documentation

void PulseShapeFitOOTPileupCorrection::fit ( int  iFit,
float &  timevalfit,
float &  chargevalfit,
float &  pedvalfit,
float &  chi2,
bool &  fitStatus,
double &  iTSMax,
const double &  iTSTOTen,
double *  iEnArr,
unsigned(&)  iBX[3] 
) const
private

Definition at line 154 of file PulseShapeFitOOTPileupCorrection.cc.

References funct::abs(), PSFitter::HybridMinimizer::Clear(), dpfunctor_, fitTimes_, hybridfitter, mps_fire::i, iniTimesArr, createfilelist::int, PSFitter::HybridMinimizer::kMigrad, PSFitter::HybridMinimizer::kScan, PSFitter::HybridMinimizer::Minimize(), PSFitter::HybridMinimizer::MinValue(), gen::n, pedMean_, pedSig_, mps_update::results, PSFitter::HybridMinimizer::SetFixedVariable(), PSFitter::HybridMinimizer::SetFunction(), PSFitter::HybridMinimizer::SetLimitedVariable(), PSFitter::HybridMinimizer::SetMinimizerType(), spfunctor_, timeMean_, timeSig_, tpfunctor_, TSMax_, TSMin_, varNames, and PSFitter::HybridMinimizer::X().

Referenced by trackingPlots.Iteration::modules(), and pulseShapeFit().

154  {
155  int n = 3;
156  if(iFit == 2) n = 5; //Two Pulse Fit
157  if(iFit == 3) n = 7; //Three Pulse Fit
158  //Step 1 Single Pulse fit
159  float pedMax = iTSMax; //=> max timeslice
160  float tMin = TSMin_; //Fitting Time Min
161  float tMax = TSMax_; //Fitting Time Max
162  //Checks to make sure fitting happens
163  if(pedMax < 1.) pedMax = 1.;
164  // Set starting values andf step sizes for parameters
165  double vstart[n];
166  for(int i = 0; i < int((n-1)/2); i++) {
167  vstart[2*i+0] = iniTimesArr[iBX[i]]+timeMean_;
168  vstart[2*i+1] = iEnArr[iBX[i]];
169  }
170  vstart[n-1] = pedMean_;
171 
172  double step[n];
173  for(int i = 0; i < n; i++) step[i] = 0.1;
174 
175  if(iFit == 1) hybridfitter->SetFunction(*spfunctor_);
176  if(iFit == 2) hybridfitter->SetFunction(*dpfunctor_);
177  if(iFit == 3) hybridfitter->SetFunction(*tpfunctor_);
178  hybridfitter->Clear();
179  //Times and amplitudes
180  for(int i = 0; i < int((n-1)/2); i++) {
181  hybridfitter->SetLimitedVariable(0+i*2, varNames[2*i+0] , vstart[0+i*2], step[0+i*2],iniTimesArr[iBX[i]]+tMin, iniTimesArr[ iBX[i] ]+tMax);
182  hybridfitter->SetLimitedVariable(1+i*2, varNames[2*i+1] , vstart[1+i*2], step[1+i*2], 0, 1.2*iTSTOTEn);
183  //Secret Option to fix the time
184  if(timeSig_ < 0) hybridfitter->SetFixedVariable(0+i*2, varNames[2*i+0],vstart[0+i*2]);
185  }
186  //Pedestal
187  if(vstart[n-1] > std::abs(pedMax)) vstart[n-1] = pedMax;
188  hybridfitter->SetLimitedVariable(n-1, varNames[n-1], vstart[n-1], step[n-1],-pedMax,pedMax);
189  //Secret Option to fix the pedestal
190  if(pedSig_ < 0) hybridfitter->SetFixedVariable(n-1,varNames[n-1],vstart[n-1]);
191  //a special number to label the initial condition
192  chi2=-1;
193  //3 fits why?!
194  const double *results = nullptr;
195  for(int tries=0; tries<=3;++tries){
196  if( fitTimes_ != 2 || tries !=1 ){
198  fitStatus = hybridfitter->Minimize();
199  }
200  double chi2valfit = hybridfitter->MinValue();
201  const double *newresults = hybridfitter->X();
202  if(chi2 == -1 || chi2>chi2valfit+0.01) {
203  results=newresults;
204  chi2=chi2valfit;
205  if( tries == 0 && fitTimes_ == 1 ) break;
206  if( tries == 1 && (fitTimes_ == 2 || fitTimes_ ==3 ) ) break;
207  if( tries == 2 && fitTimes_ == 4 ) break;
208  if( tries == 3 && fitTimes_ == 5 ) break;
209  //Secret option to speed up the fit => perhaps we should drop this
210  if(timeSig_ < 0 || pedSig_ < 0) break;
211  if(tries==0){
213  fitStatus = hybridfitter->Minimize();
214  } else if(tries==1){
215  hybridfitter->SetStrategy(1);
216  } else if(tries==2){
217  hybridfitter->SetStrategy(2);
218  }
219  } else {
220  break;
221  }
222  }
223  assert(results);
224 
225  timevalfit = results[0];
226  chargevalfit = results[1];
227  pedvalfit = results[n-1];
228 
229 }
double MinValue() const override
return minimum function value
void SetFunction(const ROOT::Math::IMultiGenFunction &func) override
set the function to minimize
void SetMinimizerType(EMinimizerType type)
std::array< double, HcalConst::maxSamples > iniTimesArr
bool SetFixedVariable(unsigned int, const std::string &, double) override
set fixed variable (override if minimizer supports them )
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
std::unique_ptr< ROOT::Math::Functor > tpfunctor_
std::unique_ptr< ROOT::Math::Functor > dpfunctor_
std::unique_ptr< ROOT::Math::Functor > spfunctor_
char const * varNames[]
const double * X() const override
return pointer to X values at the minimum
bool SetLimitedVariable(unsigned int ivar, const std::string &name, double val, double step, double, double) override
set upper/lower limited variable (override if minimizer supports them )
step
void PulseShapeFitOOTPileupCorrection::phase1Apply ( const HBHEChannelInfo channelData,
float &  reconstructedEnergy,
float &  reconstructedTime,
bool &  useTriple,
float &  chi2 
) const

Definition at line 231 of file PulseShapeFitOOTPileupCorrection.cc.

References ALCARECOTkAlJpsiMuMu_cff::charge, HcalDetId::depth(), HBHEChannelInfo::fcByPE(), muonCSCDigis_cfi::gain, HBHEChannelInfo::hasTimeInfo(), HBHEChannelInfo::id(), HcalConst::maxSamples, HBHEChannelInfo::nSamples(), psfPtr_, pulseShapeFit(), HBHEChannelInfo::soi(), mathSSE::sqrt(), ts4Chi2_, ts4Max_, ts4Min_, HBHEChannelInfo::tsDFcPerADC(), HBHEChannelInfo::tsGain(), HBHEChannelInfo::tsPedestal(), HBHEChannelInfo::tsPedestalWidth(), HBHEChannelInfo::tsRawCharge(), vts4Chi2_, and vts4Max_.

Referenced by SimpleHBHEPhase1Algo::reconstruct().

236 {
237 
238  psfPtr_->setDefaultcntNANinfit();
239 
240  const unsigned cssize = channelData.nSamples();
241  const unsigned int soi = channelData.soi();
242 
243  // initialize arrays to be zero
244  double chargeArr[HcalConst::maxSamples]={}, pedArr[HcalConst::maxSamples]={}, gainArr[HcalConst::maxSamples]={};
245  double energyArr[HcalConst::maxSamples]={}, pedenArr[HcalConst::maxSamples]={};
246  double noiseADCArr[HcalConst::maxSamples]={};
247  double noiseArrSq[HcalConst::maxSamples]={};
248  double noisePHArr[HcalConst::maxSamples]={};
249  double tsTOT = 0, tstrig = 0; // in fC
250  double tsTOTen = 0; // in GeV
251 
252 
253  // go over the time slices
254  for(unsigned int ip=0; ip<cssize; ++ip){
255  if( ip >= (unsigned) HcalConst::maxSamples ) continue; // Too many samples than what we wanna fit (10 is enough...) -> skip them
256 
257  // const int capid = channelData.capid(); // not needed
258  double charge = channelData.tsRawCharge(ip);
259  double ped = channelData.tsPedestal(ip);
260  double gain = channelData.tsGain(ip);
261 
262  double energy = charge*gain;
263  double peden = ped*gain;
264 
265  chargeArr[ip] = charge; pedArr[ip] = ped; gainArr[ip] = gain;
266  energyArr[ip] = energy; pedenArr[ip] = peden;
267 
268  // quantization noise from the ADC (QIE8 or QIE10/11)
269  noiseADCArr[ip] = (1./sqrt(12))*channelData.tsDFcPerADC(ip);
270 
271  // Photo statistics uncertainties
272  // sigmaFC/FC = 1/sqrt(Ne);
273  // Note2. (from kPedro): the output number of photoelectrons after smearing is treated very differently for SiPMs: *each* pe is assigned a different time based on a random generation from the Y11 pulse plus the SimHit time. In HPDs, the overall pulse is shaped all at once using just the SimHit time.
274 
275  noisePHArr[ip] = 0;
276  if((charge-ped)>channelData.tsPedestalWidth(ip)) {
277  noisePHArr[ip] = sqrt((charge-ped)*channelData.fcByPE());
278  }
279 
280  // sum all in quadrature
281  noiseArrSq[ip]= noiseADCArr[ip]*noiseADCArr[ip] + channelData.tsPedestalWidth(ip)*channelData.tsPedestalWidth(ip) + noisePHArr[ip]*noisePHArr[ip];
282 
283  tsTOT += charge - ped;
284  tsTOTen += energy - peden;
285  if( ip == soi || ip == soi+1 ){
286  tstrig += charge - ped;
287  }
288  }
289 
290  double averagePedSig2GeV=0.25*(channelData.tsPedestalWidth(0)*channelData.tsPedestalWidth(0)*channelData.tsGain(0)*channelData.tsGain(0) +
291  channelData.tsPedestalWidth(1)*channelData.tsPedestalWidth(1)*channelData.tsGain(1)*channelData.tsGain(1) +
292  channelData.tsPedestalWidth(2)*channelData.tsPedestalWidth(2)*channelData.tsGain(2)*channelData.tsGain(2) +
293  channelData.tsPedestalWidth(3)*channelData.tsPedestalWidth(3)*channelData.tsGain(3)*channelData.tsGain(3));
294 
295  // redefine the invertpedSig2
296  psfPtr_->setinvertpedSig2(1./(averagePedSig2GeV));
297 
298  if(channelData.hasTimeInfo()) {
299 
300  ts4Chi2_=vts4Chi2_[1];
301  if(channelData.id().depth()==1) ts4Max_=vts4Max_[1];
302  else ts4Max_=vts4Max_[2];
303 
304  } else {
306  }
307 
308  std::vector<float> fitParsVec;
309  if(tstrig >= ts4Min_ && tsTOTen > 0.) { //Two sigma from 0
310  pulseShapeFit(energyArr, pedenArr, chargeArr, pedArr, gainArr, tsTOTen, fitParsVec, noiseArrSq, channelData.soi());
311  } else {
312  fitParsVec.clear();
313  fitParsVec.push_back(0.); //charge
314  fitParsVec.push_back(-9999); // time
315  fitParsVec.push_back(0.); // ped
316  fitParsVec.push_back(-9999); // chi2
317  fitParsVec.push_back(false); // triple
318  }
319 
320 
321  reconstructedEnergy = fitParsVec[0];
322  reconstructedTime = fitParsVec[1];
323  chi2 = fitParsVec[3];
324  useTriple = fitParsVec[4];
325 
326 }
bool hasTimeInfo() const
double tsGain(const unsigned ts) const
unsigned soi() const
HcalDetId id() const
double tsPedestal(const unsigned ts) const
int depth() const
get the tower depth
Definition: HcalDetId.h:166
double tsRawCharge(const unsigned ts) const
T sqrt(T t)
Definition: SSEVec.h:18
double fcByPE() const
double tsPedestalWidth(const unsigned ts) const
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
unsigned nSamples() const
int pulseShapeFit(const double *energyArr, const double *pedenArr, const double *chargeArr, const double *pedArr, const double *gainArr, const double tsTOTen, std::vector< float > &fitParsVec, const double *ADCnoise, unsigned int soi) const
float tsDFcPerADC(const unsigned ts) const
int PulseShapeFitOOTPileupCorrection::pulseShapeFit ( const double *  energyArr,
const double *  pedenArr,
const double *  chargeArr,
const double *  pedArr,
const double *  gainArr,
const double  tsTOTen,
std::vector< float > &  fitParsVec,
const double *  ADCnoise,
unsigned int  soi 
) const
private

Definition at line 84 of file PulseShapeFitOOTPileupCorrection.cc.

References funct::abs(), applyTimeSlew_, rpcdqm::BX, vertices_cff::chi2, HcalTimeSlew::delay(), fit(), hcalTimeSlewDelay_, mps_fire::i, createfilelist::int, HcalConst::maxSamples, HcalConst::nsPerBX, psfPtr_, HcalConst::shiftTS, slewFlavor_, mathSSE::sqrt(), ts4Chi2_, ts4Max_, and tsDelay1GeV_.

Referenced by phase1Apply().

84  {
85  double tsMAX=0;
87  double tstrig = 0; // in fC
88  for(unsigned int i=0;i<HcalConst::maxSamples;++i){
89  tmpx[i]=i;
90  tmpy[i]=energyArr[i]-pedenArr[i];
91  //Add Time Slew !!! does this need to be pedestal subtracted
92  tmpslew[i] = 0;
93  if(applyTimeSlew_) {
94  if(chargeArr[i]<=1.0) tmpslew[i] = tsDelay1GeV_;
95  else tmpslew[i] = hcalTimeSlewDelay_->delay(chargeArr[i],slewFlavor_);
96  }
97 
98  // add the noise components
99  tmperry2[i]=noiseArrSq[i];
100 
101  //Propagate it through
102  tmperry2[i]*=(gainArr[i]*gainArr[i]); //Convert from fC to GeV
103  tmperry [i]=sqrt(tmperry2[i]);
104 
105  if(std::abs(energyArr[i])>tsMAX) tsMAX=std::abs(tmpy[i]);
106  if( i ==soi || i ==(soi+1) ){
107  tstrig += chargeArr[i] - pedArr[i];
108  }
109  }
110  psfPtr_->setpsFitx (tmpx);
111  psfPtr_->setpsFity (tmpy);
112  psfPtr_->setpsFiterry (tmperry);
113  psfPtr_->setpsFiterry2(tmperry2);
114  psfPtr_->setpsFitslew (tmpslew);
115 
116  //Fit 1 single pulse
117  float timevalfit = 0;
118  float chargevalfit= 0;
119  float pedvalfit = 0;
120  float chi2 = 999; //cannot be zero
121  bool fitStatus = false;
122  bool useTriple = false;
123 
124  unsigned BX[3] = {soi,soi+1,soi-1};
125  if(ts4Chi2_ != 0) fit(1,timevalfit,chargevalfit,pedvalfit,chi2,fitStatus,tsMAX,tsTOTen,tmpy,BX);
126 // Based on the pulse shape ( 2. likely gives the same performance )
127  if(tmpy[soi-2] > 3.*tmpy[soi-1]) BX[2] = soi-2;
128 // Only do three-pulse fit when tstrig < ts4Max_, otherwise one-pulse fit is used (above)
129  if(chi2 > ts4Chi2_ && tstrig < ts4Max_) { //fails chi2 cut goes straight to 3 Pulse fit
130  fit(3,timevalfit,chargevalfit,pedvalfit,chi2,fitStatus,tsMAX,tsTOTen,tmpy,BX);
131  useTriple=true;
132  }
133 
134  timevalfit -= (int(soi)-HcalConst::shiftTS)*HcalConst::nsPerBX;
135 
136  /*
137  if(chi2 > ts345Chi2_) { //fails do two pulse chi2 for TS5
138  BX[1] = 5;
139  fit(3,timevalfit,chargevalfit,pedvalfit,chi2,fitStatus,tsMAX,tsTOTen,BX);
140  }
141  */
142  //Fix back the timeslew
143  //if(applyTimeSlew_) timevalfit+=HcalTimeSlew::delay(std::max(1.0,chargeArr[4]),slewFlavor_);
144  int outfitStatus = (fitStatus ? 1: 0 );
145  fitParsVec.clear();
146  fitParsVec.push_back(chargevalfit);
147  fitParsVec.push_back(timevalfit);
148  fitParsVec.push_back(pedvalfit);
149  fitParsVec.push_back(chi2);
150  fitParsVec.push_back(useTriple);
151  return outfitStatus;
152 }
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...
Definition: HcalTimeSlew.cc:14
T sqrt(T t)
Definition: SSEVec.h:18
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
void fit(int iFit, float &timevalfit, float &chargevalfit, float &pedvalfit, float &chi2, bool &fitStatus, double &iTSMax, const double &iTSTOTen, double *iEnArr, unsigned(&iBX)[3]) const
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
void PulseShapeFitOOTPileupCorrection::resetPulseShapeTemplate ( const HcalPulseShapes::Shape ps,
unsigned  nSamples 
)

Definition at line 72 of file PulseShapeFitOOTPileupCorrection.cc.

References addPulseJitter_, cntsetPulseShape, FitterFuncs::PulseShapeFunctor::doublePulseShapeFunc(), dpfunctor_, pedestalConstraint_, pedMean_, psfPtr_, pulseJitter_, FitterFuncs::PulseShapeFunctor::singlePulseShapeFunc(), spfunctor_, timeConstraint_, timeMean_, tpfunctor_, and FitterFuncs::PulseShapeFunctor::triplePulseShapeFunc().

Referenced by setPulseShapeTemplate().

72  {
76  spfunctor_ = std::unique_ptr<ROOT::Math::Functor>( new ROOT::Math::Functor(psfPtr_.get(),&FitterFuncs::PulseShapeFunctor::singlePulseShapeFunc, 3) );
77  dpfunctor_ = std::unique_ptr<ROOT::Math::Functor>( new ROOT::Math::Functor(psfPtr_.get(),&FitterFuncs::PulseShapeFunctor::doublePulseShapeFunc, 5) );
78  tpfunctor_ = std::unique_ptr<ROOT::Math::Functor>( new ROOT::Math::Functor(psfPtr_.get(),&FitterFuncs::PulseShapeFunctor::triplePulseShapeFunc, 7) );
79 
80 }
double singlePulseShapeFunc(const double *x)
std::unique_ptr< ROOT::Math::Functor > tpfunctor_
constexpr size_t nSamples
std::unique_ptr< ROOT::Math::Functor > dpfunctor_
double triplePulseShapeFunc(const double *x)
std::unique_ptr< ROOT::Math::Functor > spfunctor_
double doublePulseShapeFunc(const double *x)
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
void PulseShapeFitOOTPileupCorrection::setPulseShapeTemplate ( const HcalPulseShapes::Shape ps,
bool  isHPD,
unsigned  nSamples,
const HcalTimeSlew hcalTimeSlewDelay 
)

Definition at line 52 of file PulseShapeFitOOTPileupCorrection.cc.

References currentPulseShape_, HcalTimeSlew::delay(), hcalTimeSlewDelay_, isCurrentChannelHPD_, psfPtr_, resetPulseShapeTemplate(), slewFlavor_, timeSigHPD_, timeSigSiPM_, and tsDelay1GeV_.

52  {
53  // initialize for every different channel types (HPD vs SiPM)
54 
55  if (!(&ps == currentPulseShape_ && isHPD == isCurrentChannelHPD_))
56  {
58 
59  // redefine the inverttimeSig2
60  if(!isHPD) psfPtr_->setinverttimeSig2(1./(timeSigSiPM_*timeSigSiPM_));
61  else psfPtr_->setinverttimeSig2(1./(timeSigHPD_*timeSigHPD_));
62 
63  currentPulseShape_ = &ps;
64  isCurrentChannelHPD_ = isHPD;
65 
66  hcalTimeSlewDelay_ = hcalTimeSlewDelay;
67  tsDelay1GeV_= hcalTimeSlewDelay->delay(1.0, slewFlavor_);
68 
69  }
70 }
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...
Definition: HcalTimeSlew.cc:14
constexpr size_t nSamples
std::unique_ptr< FitterFuncs::PulseShapeFunctor > psfPtr_
void resetPulseShapeTemplate(const HcalPulseShapes::Shape &ps, unsigned nSamples)
const HcalPulseShapes::Shape * currentPulseShape_
void PulseShapeFitOOTPileupCorrection::setPUParams ( bool  iPedestalConstraint,
bool  iTimeConstraint,
bool  iAddPulseJitter,
bool  iApplyTimeSlew,
double  iTS4Min,
const std::vector< double > &  iTS4Max,
double  iPulseJitter,
double  iTimeMean,
double  iTimeSigHPD,
double  iTimeSigSiPM,
double  iPedMean,
double  iTMin,
double  iTMax,
const std::vector< double > &  its4Chi2,
HcalTimeSlew::BiasSetting  slewFlavor,
int  iFitTimes 
)

Definition at line 22 of file PulseShapeFitOOTPileupCorrection.cc.

References addPulseJitter_, applyTimeSlew_, fitTimes_, pedestalConstraint_, pedMean_, pulseJitter_, slewFlavor_, timeConstraint_, timeMean_, timeSigHPD_, timeSigSiPM_, ts4Min_, TSMax_, TSMin_, vts4Chi2_, and vts4Max_.

28  {
29 
30  TSMin_ = iTMin;
31  TSMax_ = iTMax;
32  // ts4Chi2_ = its4Chi2;
33  vts4Chi2_ = its4Chi2;
34  pedestalConstraint_ = iPedestalConstraint;
35  timeConstraint_ = iTimeConstraint;
36  addPulseJitter_ = iAddPulseJitter;
37  applyTimeSlew_ = iApplyTimeSlew;
38  ts4Min_ = iTS4Min;
39  // ts4Max_ = iTS4Max;
40  vts4Max_ = iTS4Max;
41  pulseJitter_ = iPulseJitter*iPulseJitter;
42  timeMean_ = iTimeMean;
43  // timeSig_ = iTimeSig;
44  timeSigHPD_ = iTimeSigHPD;
45  timeSigSiPM_ = iTimeSigSiPM;
46  pedMean_ = iPedMean;
47  slewFlavor_ = slewFlavor;
48  fitTimes_ = iFitTimes;
49 
50 }

Member Data Documentation

bool PulseShapeFitOOTPileupCorrection::addPulseJitter_
private

Definition at line 73 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by resetPulseShapeTemplate(), and setPUParams().

bool PulseShapeFitOOTPileupCorrection::applyTimeSlew_
private

Definition at line 75 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by pulseShapeFit(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::chargeThreshold_
private

Definition at line 60 of file PulseShapeFitOOTPileupCorrection.h.

int PulseShapeFitOOTPileupCorrection::cntsetPulseShape
private

Definition at line 58 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by resetPulseShapeTemplate().

const HcalPulseShapes::Shape* PulseShapeFitOOTPileupCorrection::currentPulseShape_ = 0

Definition at line 43 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by setPulseShapeTemplate().

std::unique_ptr<ROOT::Math::Functor> PulseShapeFitOOTPileupCorrection::dpfunctor_
private

Definition at line 65 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and resetPulseShapeTemplate().

int PulseShapeFitOOTPileupCorrection::fitTimes_
private

Definition at line 61 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and setPUParams().

const HcalTimeSlew* PulseShapeFitOOTPileupCorrection::hcalTimeSlewDelay_ = 0

Definition at line 44 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by pulseShapeFit(), and setPulseShapeTemplate().

PSFitter::HybridMinimizer* PulseShapeFitOOTPileupCorrection::hybridfitter
private
std::array<double,HcalConst::maxSamples> PulseShapeFitOOTPileupCorrection::iniTimesArr
private

Definition at line 59 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and PulseShapeFitOOTPileupCorrection().

bool PulseShapeFitOOTPileupCorrection::isCurrentChannelHPD_
private

Definition at line 88 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by setPulseShapeTemplate().

bool PulseShapeFitOOTPileupCorrection::pedestalConstraint_
private

Definition at line 71 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by resetPulseShapeTemplate(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::pedMean_
private

Definition at line 84 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), resetPulseShapeTemplate(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::pedSig_
private

Definition at line 85 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit().

std::unique_ptr<FitterFuncs::PulseShapeFunctor> PulseShapeFitOOTPileupCorrection::psfPtr_
private
double PulseShapeFitOOTPileupCorrection::pulseJitter_
private

Definition at line 79 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by resetPulseShapeTemplate(), and setPUParams().

HcalTimeSlew::BiasSetting PulseShapeFitOOTPileupCorrection::slewFlavor_
private
std::unique_ptr<ROOT::Math::Functor> PulseShapeFitOOTPileupCorrection::spfunctor_
private

Definition at line 64 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and resetPulseShapeTemplate().

bool PulseShapeFitOOTPileupCorrection::timeConstraint_
private

Definition at line 72 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by resetPulseShapeTemplate(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::timeMean_
private

Definition at line 80 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), resetPulseShapeTemplate(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::timeSig_
private

Definition at line 81 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit().

double PulseShapeFitOOTPileupCorrection::timeSigHPD_
private

Definition at line 82 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by setPulseShapeTemplate(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::timeSigSiPM_
private

Definition at line 83 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by setPulseShapeTemplate(), and setPUParams().

std::unique_ptr<ROOT::Math::Functor> PulseShapeFitOOTPileupCorrection::tpfunctor_
private

Definition at line 66 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and resetPulseShapeTemplate().

double PulseShapeFitOOTPileupCorrection::ts4Chi2_
mutableprivate

Definition at line 69 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by phase1Apply(), and pulseShapeFit().

double PulseShapeFitOOTPileupCorrection::ts4Max_
mutableprivate

Definition at line 77 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by phase1Apply(), and pulseShapeFit().

double PulseShapeFitOOTPileupCorrection::ts4Min_
private

Definition at line 76 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by phase1Apply(), and setPUParams().

double PulseShapeFitOOTPileupCorrection::tsDelay1GeV_ =0

Definition at line 45 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by pulseShapeFit(), and setPulseShapeTemplate().

int PulseShapeFitOOTPileupCorrection::TSMax_
private

Definition at line 68 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and setPUParams().

int PulseShapeFitOOTPileupCorrection::TSMin_
private

Definition at line 67 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by fit(), and setPUParams().

bool PulseShapeFitOOTPileupCorrection::unConstrainedFit_
private

Definition at line 74 of file PulseShapeFitOOTPileupCorrection.h.

std::vector<double> PulseShapeFitOOTPileupCorrection::vts4Chi2_
private

Definition at line 70 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by phase1Apply(), and setPUParams().

std::vector<double> PulseShapeFitOOTPileupCorrection::vts4Max_
private

Definition at line 78 of file PulseShapeFitOOTPileupCorrection.h.

Referenced by phase1Apply(), and setPUParams().