5#ifndef ZDCANALYSIS_ZDCFITWRAPPER_H
6#define ZDCANALYSIS_ZDCFITWRAPPER_H
56 void Initialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax);
57 void Initialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax,
float fitTmin,
float fitTmax,
float fitTRef);
61 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax) = 0;
174 ZDCFitExpFermiVariableTaus(
const std::string& tag,
float tmin,
float tmax,
bool fixTau1,
bool fixTau2,
float tau1,
float tau2);
176 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
188 float fitT0 = theTF1->GetParameter(1);
190 float tau1 = theTF1->GetParameter(2);
191 float tau2 = theTF1->GetParameter(3);
195 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
203 else throw std::runtime_error(
"Fit parameter does not exist.");
209 double amp = theTF1->GetParameter(0);
210 double constant = theTF1->GetParameter(4);
212 if (amp > 0)
return constant / amp;
216 virtual double operator()(
const double *
x,
const double *p)
override{
243 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
255 float fitT0 = theTF1->GetParameter(1);
257 float tau1 = theTF1->GetParameter(2);
258 float tau2 = theTF1->GetParameter(3);
262 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
270 else throw std::runtime_error(
"Fit parameter does not exist.");
276 double amp = theTF1->GetParameter(0);
277 double constant = theTF1->GetParameter(4);
279 if (amp > 0)
return constant / amp;
283 virtual double operator()(
const double *
x,
const double *p)
override{
314 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
334 else throw std::runtime_error(
"Fit parameter does not exist.");
340 double amp = theTF1->GetParameter(0);
341 double C = theTF1->GetParameter(2);
346 virtual double operator() (
const double *
x,
const double *p)
override
352 double deltaT =
x[0] -
t0;
375 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
380 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
384 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
398 virtual float GetPreT0()
const override {
return 0;}
415 else throw std::runtime_error(
"Fit parameter does not exist.");
424 double amp = theTF1->GetParameter(0);
425 if (amp <= 0)
return -1;
427 double preAmp = theTF1->GetParameter(2);
428 double preT0 = theTF1->GetParameter(3);
430 double deltaTPre = maxTime - preT0;
433 return background / (amp + background);
436 virtual double operator() (
const double *
x,
const double *p)
override
442 double preAmp = p[2];
446 double deltaT = t -
t0;
447 double deltaTPre = t - preT0;
460 return C + pulse1 + pulse2;
480 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
486 double ampMin, ampMax;
489 double initialAmp = std::min<double>(std::max<double>(amp, ampMin), ampMax);
495 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
526 else throw std::runtime_error(
"Fit parameter does not exist.");
535 double amp = theTF1->GetParameter(0);
536 if (amp <= 0)
return 1;
538 double preAmp = theTF1->GetParameter(2);
539 double preT0 = theTF1->GetParameter(3);
541 double deltaTPre = maxTime - preT0;
544 return background / (amp + background);
547 virtual double operator() (
const double *
x,
const double *p)
override
555 double preAmp = p[4];
564 double deltaT = t -
t0;
565 double deltaTPre = t - preT0;
576 return C + pulse1 + pulse2;
593 float defExpTau,
float fixExpTau);
596 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
601 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 0.5));
625 else throw std::runtime_error(
"Fit parameter does not exist.");
633 double amp = theTF1->GetParameter(0);
634 if (amp <= 0)
return -1;
636 double preAmp = theTF1->GetParameter(2);
637 double preT0 = theTF1->GetParameter(3);
639 double deltaTPre = maxTime - preT0;
642 return background / (amp + background);
645 virtual double operator() (
const double *
x,
const double *p)
override
651 double expAmp = p[2];
652 double expTau = p[3];
653 double expSqrtTau = p[4];
656 double deltaT = t -
t0;
664 if (t > 0 && std::abs(expSqrtTau)>1e-6) expPre = expAmp * (std::exp(-t/expTau-expSqrtTau*std::sqrt(t)) - std::exp(-tRef/expTau));
665 else expPre = expAmp * (std::exp(-t/expTau) - std::exp(-tRef/expTau));
667 return C + pulse + expPre;
683 float defExpTau,
float fixExpTau);
686 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
691 GetWrapperTF1()->SetParameter(4, std::max(amp, (
float) 0.5));
706 float fitT0 = theTF1->GetParameter(1);
708 float tau1 = theTF1->GetParameter(2);
709 float tau2 = theTF1->GetParameter(3);
713 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
725 else throw std::runtime_error(
"Fit parameter does not exist.");
731 double amp = theTF1->GetParameter(0);
732 if (amp <= 0)
return 1;
736 double expAmp = theTF1->GetParameter(4);
737 double expTau = theTF1->GetParameter(5);
738 double bexpSqrt = theTF1->GetParameter(6);
741 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
743 return expPre / (amp + expPre);
746 virtual double operator() (
const double *
x,
const double *p)
override
756 double expAmp = p[4];
757 double expTau = p[5];
758 double bexpSqrt = p[6];
759 double reflFrac = p[7];
768 double deltaT = t -
t0;
777 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
779 return pulse + expPre;
801 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
821 else throw std::runtime_error(
"Fit parameter does not exist.");
827 double amp = theTF1->GetParameter(0);
828 double slope = theTF1->GetParameter(2);
830 double background = slope *
GetTime();
831 return background / amp;
834 virtual double operator() (
const double *
x,
const double *p)
override
838 double deltaT =
x[0] -
t0;
840 double bckgd = p[2] *
x[0] + p[3];
844 return expFermi + bckgd;
862 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
869 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
873 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
909 else throw std::runtime_error(
"Fit parameter does not exist.");
918 double amp = theTF1->GetParameter(0);
919 double preAmp = theTF1->GetParameter(2);
920 double preT0 = theTF1->GetParameter(3);
921 double slope = theTF1->GetParameter(4);
923 double deltaTPre = maxTime - preT0;
925 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
928 return background / amp;
931 virtual double operator() (
const double *
x,
const double *p)
override
937 double preAmp = p[2];
939 double linSlope = p[4];
941 double deltaT = t -
t0;
942 double deltaTPre = t - preT0;
953 double bckgd = linSlope * (t - deltaPresamp) + p[5];
955 return pulse1 + pulse2 + bckgd;
975 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
979 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
981 GetWrapperTF1()->SetParameter(6, std::max(std::abs(expamp), (
float) 1.5));
987 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
1023 else throw std::runtime_error(
"Fit parameter does not exist.");
1032 double amp = theTF1->GetParameter(0);
1033 double preAmp = theTF1->GetParameter(2);
1034 double preT0 = theTF1->GetParameter(3);
1035 double slope = theTF1->GetParameter(4);
1037 double deltaTPre = maxTime - preT0;
1039 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
1042 return background / amp;
1051 double preAmp = p[2];
1052 double preT0 = p[3];
1053 double linSlope = p[4];
1054 double linConst = p[5];
1055 double expamp = p[6];
1057 double deltaT = t -
t0;
1058 double deltaTPre = t - preT0;
1068 double linBG = linSlope * (t - deltaPresamp) + linConst;
1069 double expBG = expamp * std::exp(-(t) /
m_tau2) - expamp;
1071 return pulse1 + pulse2 + linBG + expBG;
1087 ZDCFitGeneralPulse(
const std::string& tag,
float tmin,
float tmax,
float tau1,
float tau2);
1090 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
1096 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
1098 GetWrapperTF1()->SetParameter(6, std::max(std::abs(expamp), (
float) 1.5));
1100 if (fixPrePulseToZero) {
1109 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
1110 virtual void SetPostPulseT0Range(
float tmin,
float tmax,
float initialPostT0)
override;
1153 else throw std::runtime_error(
"Fit parameter does not exist.");
1162 double amp = theTF1->GetParameter(0);
1163 double preAmp = theTF1->GetParameter(2);
1164 double preT0 = theTF1->GetParameter(3);
1165 double slope = theTF1->GetParameter(4);
1167 double deltaTPre = maxTime - preT0;
1169 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
1172 return background / amp;
1181 double preAmp = p[2];
1182 double preT0 = p[3];
1183 double linSlope = p[4];
1184 double linConst = p[5];
1185 double expamp = p[6];
1186 double postAmp = p[7];
1187 double postT0 = p[8];
1189 double deltaT = t -
t0;
1190 double deltaTPre = t - preT0;
1191 double deltaTPost = t - postT0;
1202 double linBG = linSlope * t + linConst;
1205 return pulse1 + pulse2 + pulse3 + linBG + expBG;
1213 double amp =
pvec[0];
1215 double tau1 =
pvec[2];
1216 double tau2 =
pvec[3];
1219 double tauRatio = tau2 / tau1;
1220 double tauRatioMinunsOne = tauRatio - 1;
1222 double norm = (std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1223 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))));
1225 double deltaT = t -
t0;
1226 if (deltaT < 0) deltaT = 0;
1228 double expTerm = std::exp(-deltaT / tau2);
1229 double fermiTerm = 1. / (1. + std::exp(-(t -
t0) / tau1));
1231 return amp * expTerm * fermiTerm / norm +
C;
1238 double amp =
pvec[0];
1240 double tau1 =
pvec[2];
1241 double tau2 =
pvec[3];
1244 double refldelay =
pvec[5];
1245 double reflFrac =
pvec[6];
1246 double reflwidth =
pvec[7];
1247 double delta =
pvec[8];
1249 double tauRatio = tau2 / tau1;
1250 double tauRatioMinunsOne = tauRatio - 1;
1252 double norm = std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1253 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) ;
1255 double deltaT = t -
t0;
1256 if (deltaT < 0) deltaT = 0;
1261 double expTerm = delta + std::exp(-deltaT / tau2);
1262 double fermiTerm = 1. / (1. + std::exp(-(t -
t0) / tau1));
1264 double deltaTRefl = deltaT - refldelay;
1265 double reflTerm = -reflFrac*amp*std::exp(-0.5*deltaTRefl*deltaTRefl/reflwidth/reflwidth);
1267 return amp * expTerm * fermiTerm / norm +
C + reflTerm;
double ZDCFermiExpFit(const double *xvec, const double *pvec)
double ZDCFermiExpFitRefl(const double *xvec, const double *pvec)
Define macros for attributes used to control the static checker.
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
virtual float GetPreAmp() const override
virtual float GetTau1() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetBkgdMaxFraction() const override
virtual float GetPostAmp() const override
virtual float GetExpAmp() const override
virtual float GetTime() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetAmpError() const override
virtual float GetPreT0() const override
virtual float GetTau2() const override
virtual float GetPostT0() const override
ZDCFitComplexPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool) override
unsigned int GetPreT0ParIndex() const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetAmplitude() const override
ZDCFitExpFermiFixedTaus(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual float GetAmplitude() const override
virtual float GetBkgdMaxFraction() const override
~ZDCFitExpFermiFixedTaus()
virtual float GetTau1() const override
virtual float GetTime() const override
virtual float GetAmpError() const override
virtual float GetShapeParameter(size_t index) const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetTau2() const override
virtual float GetTau1() const override
~ZDCFitExpFermiLHCfPreExp()
virtual float GetExpTau() const override
virtual float GetTau2() const override
std::shared_ptr< TF1 > m_expFermiLHCfFunc
std::shared_ptr< TF1 > m_expFermiLHCfPreFunc
virtual float GetShapeParameter(size_t index) const override
virtual float GetTime() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetExpAmp() const override
ZDCFitExpFermiLHCfPreExp(const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
virtual float GetAmplitude() const override
virtual float GetAmpError() const override
virtual void SetInitialExpPulse(float amp) override
virtual unsigned int GetPreT0ParIndex() const override
std::shared_ptr< TF1 > m_expFermiPreFunc
virtual float GetBkgdMaxFraction() const override
virtual float GetAmpError() const override
~ZDCFitExpFermiLHCfPrePulse()
virtual float GetExpAmp() const override
virtual float GetTau2() const override
std::shared_ptr< TF1 > m_expFermiLHCfFunc
virtual float GetPreT0() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetPostT0() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetTime() const override
virtual float GetPreAmp() const override
ZDCFitExpFermiLHCfPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual float GetTau1() const override
virtual float GetPostAmp() const override
virtual float GetAmplitude() const override
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetBkgdMaxFraction() const override
~ZDCFitExpFermiLinearFixedTaus()
virtual float GetAmpError() const override
virtual float GetTime() const override
ZDCFitExpFermiLinearFixedTaus(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual float GetTau1() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetTau2() const override
virtual float GetAmplitude() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetPreT0() const override
virtual float GetPostAmp() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetAmplitude() const override
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
virtual float GetPostT0() const override
virtual float GetPreAmp() const override
virtual float GetTau1() const override
unsigned int GetPreT0ParIndex() const override
virtual float GetExpAmp() const override
virtual float GetTime() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetAmpError() const override
virtual float GetTau2() const override
ZDCFitExpFermiLinearPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
std::shared_ptr< TF1 > m_expFermiFunc
~ZDCFitExpFermiLinearPrePulse()
virtual float GetExpAmp() const override
virtual float GetTau1() const override
virtual float GetAmpError() const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetShapeParameter(size_t index) const override
std::shared_ptr< TF1 > m_expFermiPreFunc
virtual float GetBkgdMaxFraction() const override
virtual float GetAmplitude() const override
virtual void SetInitialExpPulse(float amp) override
virtual float GetExpTau() const override
ZDCFitExpFermiPreExp(const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
virtual float GetTime() const override
virtual float GetTau2() const override
~ZDCFitExpFermiPrePulse()
std::shared_ptr< TF1 > m_expFermiPreFunc
virtual float GetPostT0() const override
virtual float GetExpAmp() const override
virtual float GetTau1() const override
virtual float GetAmplitude() const override
virtual float GetAmpError() const override
virtual float GetBkgdMaxFraction() const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetPreT0() const override
virtual float GetPostAmp() const override
virtual unsigned int GetPreT0ParIndex() const override
ZDCFitExpFermiPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual float GetTime() const override
virtual float GetPreAmp() const override
virtual float GetTau2() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetTime() const override
virtual double operator()(const double *x, const double *p) override
virtual float GetAmplitude() const override
ZDCFitExpFermiVariableTausLHCf(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual float GetShapeParameter(size_t index) const override
virtual float GetBkgdMaxFraction() const override
virtual float GetTau1() const override
virtual float GetAmpError() const override
virtual float GetTau2() const override
ZDCFitExpFermiVariableTausRun3(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual float GetTime() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetTau2() const override
virtual float GetAmplitude() const override
virtual double operator()(const double *x, const double *p) override
virtual float GetTau1() const override
ZDCFitExpFermiVariableTaus(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual float GetBkgdMaxFraction() const override
virtual float GetAmpError() const override
virtual float GetPreAmp() const override
virtual float GetAmpError() const override
virtual float GetPostT0() const override
virtual float GetPreT0() const override
virtual float GetAmplitude() const override
virtual float GetTau2() const override
unsigned int GetPreT0ParIndex() const override
virtual float GetPostAmp() const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetShapeParameter(size_t index) const override
virtual float GetExpAmp() const override
virtual float GetTime() const override
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool fixPrePulseToZero) override
virtual float GetBkgdMaxFraction() const override
virtual float GetTau1() const override
ZDCFitGeneralPulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual float GetTau1() const =0
void Initialize(float initialAmp, float initialT0, float ampMin, float ampMax)
virtual float GetBkgdMaxFraction() const =0
virtual void ConstrainFit()=0
virtual TF1 * GetWrapperTF1RawPtr() const
virtual std::shared_ptr< TF1 > GetWrapperTF1()
virtual float GetAmpError() const =0
virtual void UnconstrainFit()=0
virtual float GetTime() const =0
virtual float GetShapeParameter(size_t index) const =0
virtual float GetTau2() const =0
virtual const TF1 * GetWrapperTF1() const
virtual void SetT0FitLimits(float tMin, float tMax)=0
ZDCFitWrapper(const std::shared_ptr< TF1 > &wrapperTF1)
virtual float GetAmplitude() const =0
void SetAmpMinMax(float minAmp, float maxAmp)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax)=0
virtual double operator()(const double *x, const double *p)=0
float GetTMinAdjust() const
void SetT0Range(float t0Min, float t0Max)
std::shared_ptr< TF1 > m_wrapperTF1
virtual float GetExpAmp() const =0
virtual float GetExpTau() const =0
virtual void SetInitialExpPulse(float expamp)=0
float getDefaultExpTau() const
ZDCPreExpFitWrapper(std::shared_ptr< TF1 > wrapperTF1, float defaultExpTau, bool fixTau)
virtual float GetPreAmp() const =0
virtual void SetPostPulseT0Range(float tmin, float tmax, float initialPostT0)=0
virtual unsigned int GetPreT0ParIndex() const =0
virtual float GetPreT0() const =0
virtual float GetPostT0() const =0
virtual float GetExpAmp() const =0
virtual void SetPrePulseT0Range(float tmin, float tmax)=0
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool fixPrePulseToZero)=0
ZDCPrePulseFitWrapper(std::shared_ptr< TF1 > wrapperTF1)
virtual float GetPostAmp() const =0