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 if (amp <= 0)
return -1;
343 double C = theTF1->GetParameter(2);
347 virtual double operator() (
const double *
x,
const double *p)
override
353 double deltaT =
x[0] -
t0;
376 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
381 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
385 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
399 virtual float GetPreT0()
const override {
return 0;}
416 else throw std::runtime_error(
"Fit parameter does not exist.");
425 double amp = theTF1->GetParameter(0);
426 if (amp <= 0)
return -1;
428 double preAmp = theTF1->GetParameter(2);
429 double preT0 = theTF1->GetParameter(3);
431 double deltaTPre = maxTime - preT0;
434 return background / (amp + background);
437 virtual double operator() (
const double *
x,
const double *p)
override
443 double preAmp = p[2];
447 double deltaT = t -
t0;
448 double deltaTPre = t - preT0;
461 return C + pulse1 + pulse2;
481 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
487 double ampMin, ampMax;
490 double initialAmp = std::min<double>(std::max<double>(amp, ampMin), ampMax);
496 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
527 else throw std::runtime_error(
"Fit parameter does not exist.");
536 double amp = theTF1->GetParameter(0);
537 if (amp <= 0)
return -1;
539 double preAmp = theTF1->GetParameter(2);
540 double preT0 = theTF1->GetParameter(3);
542 double deltaTPre = maxTime - preT0;
545 return background / (amp + background);
548 virtual double operator() (
const double *
x,
const double *p)
override
556 double preAmp = p[4];
565 double deltaT = t -
t0;
566 double deltaTPre = t - preT0;
577 return C + pulse1 + pulse2;
594 float defExpTau,
float fixExpTau);
597 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
602 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 0.5));
626 else throw std::runtime_error(
"Fit parameter does not exist.");
634 double amp = theTF1->GetParameter(0);
635 if (amp <= 0)
return -1;
637 double preAmp = theTF1->GetParameter(2);
638 double preT0 = theTF1->GetParameter(3);
640 double deltaTPre = maxTime - preT0;
643 return background / (amp + background);
646 virtual double operator() (
const double *
x,
const double *p)
override
652 double expAmp = p[2];
653 double expTau = p[3];
654 double expSqrtTau = p[4];
657 double deltaT = t -
t0;
665 if (t > 0 && std::abs(expSqrtTau)>1e-6) expPre = expAmp * (std::exp(-t/expTau-expSqrtTau*std::sqrt(t)) - std::exp(-tRef/expTau));
666 else expPre = expAmp * (std::exp(-t/expTau) - std::exp(-tRef/expTau));
668 return C + pulse + expPre;
684 float defExpTau,
float fixExpTau);
687 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
692 GetWrapperTF1()->SetParameter(4, std::max(amp, (
float) 0.5));
707 float fitT0 = theTF1->GetParameter(1);
709 float tau1 = theTF1->GetParameter(2);
710 float tau2 = theTF1->GetParameter(3);
714 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
726 else throw std::runtime_error(
"Fit parameter does not exist.");
732 double amp = theTF1->GetParameter(0);
733 if (amp <= 0)
return -1;
737 double expAmp = theTF1->GetParameter(4);
738 double expTau = theTF1->GetParameter(5);
739 double bexpSqrt = theTF1->GetParameter(6);
742 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
744 return expPre / (amp + expPre);
747 virtual double operator() (
const double *
x,
const double *p)
override
757 double expAmp = p[4];
758 double expTau = p[5];
759 double bexpSqrt = p[6];
760 double reflFrac = p[7];
769 double deltaT = t -
t0;
778 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
780 return pulse + expPre;
802 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
822 else throw std::runtime_error(
"Fit parameter does not exist.");
828 double amp = theTF1->GetParameter(0);
829 if (amp <= 0)
return -1;
831 double slope = theTF1->GetParameter(2);
833 double background = slope *
GetTime();
834 return background / amp;
837 virtual double operator() (
const double *
x,
const double *p)
override
841 double deltaT =
x[0] -
t0;
843 double bckgd = p[2] *
x[0] + p[3];
847 return expFermi + bckgd;
865 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
872 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
876 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
912 else throw std::runtime_error(
"Fit parameter does not exist.");
921 double amp = theTF1->GetParameter(0);
922 if (amp <= 0)
return -1;
924 double preAmp = theTF1->GetParameter(2);
925 double preT0 = theTF1->GetParameter(3);
926 double slope = theTF1->GetParameter(4);
928 double deltaTPre = maxTime - preT0;
930 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
933 return background / amp;
936 virtual double operator() (
const double *
x,
const double *p)
override
942 double preAmp = p[2];
944 double linSlope = p[4];
946 double deltaT = t -
t0;
947 double deltaTPre = t - preT0;
958 double bckgd = linSlope * (t - deltaPresamp) + p[5];
960 return pulse1 + pulse2 + bckgd;
980 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
984 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
986 GetWrapperTF1()->SetParameter(6, std::max(std::abs(expamp), (
float) 1.5));
992 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
1028 else throw std::runtime_error(
"Fit parameter does not exist.");
1037 double amp = theTF1->GetParameter(0);
1038 if (amp <= 0)
return -1;
1040 double preAmp = theTF1->GetParameter(2);
1041 double preT0 = theTF1->GetParameter(3);
1042 double slope = theTF1->GetParameter(4);
1044 double deltaTPre = maxTime - preT0;
1046 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
1049 return background / amp;
1058 double preAmp = p[2];
1059 double preT0 = p[3];
1060 double linSlope = p[4];
1061 double linConst = p[5];
1062 double expamp = p[6];
1064 double deltaT = t -
t0;
1065 double deltaTPre = t - preT0;
1075 double linBG = linSlope * (t - deltaPresamp) + linConst;
1076 double expBG = expamp * std::exp(-(t) /
m_tau2) - expamp;
1078 return pulse1 + pulse2 + linBG + expBG;
1094 ZDCFitGeneralPulse(
const std::string& tag,
float tmin,
float tmax,
float tau1,
float tau2);
1097 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
1103 GetWrapperTF1()->SetParameter(2, std::max(amp, (
float) 1.5));
1105 GetWrapperTF1()->SetParameter(6, std::max(std::abs(expamp), (
float) 1.5));
1107 if (fixPrePulseToZero) {
1116 virtual void SetPrePulseT0Range(
float tmin,
float tmax)
override;
1117 virtual void SetPostPulseT0Range(
float tmin,
float tmax,
float initialPostT0)
override;
1160 else throw std::runtime_error(
"Fit parameter does not exist.");
1169 double amp = theTF1->GetParameter(0);
1170 if (amp <= 0)
return -1;
1171 double preAmp = theTF1->GetParameter(2);
1172 double preT0 = theTF1->GetParameter(3);
1173 double slope = theTF1->GetParameter(4);
1175 double deltaTPre = maxTime - preT0;
1177 double background = slope * maxTime + preAmp *
m_norm * (
m_expFermiFunc->operator()(deltaTPre) -
1180 return background / amp;
1189 double preAmp = p[2];
1190 double preT0 = p[3];
1191 double linSlope = p[4];
1192 double linConst = p[5];
1193 double expamp = p[6];
1194 double postAmp = p[7];
1195 double postT0 = p[8];
1197 double deltaT = t -
t0;
1198 double deltaTPre = t - preT0;
1199 double deltaTPost = t - postT0;
1210 double linBG = linSlope * t + linConst;
1213 return pulse1 + pulse2 + pulse3 + linBG + expBG;
1221 double amp =
pvec[0];
1223 double tau1 =
pvec[2];
1224 double tau2 =
pvec[3];
1227 double tauRatio = tau2 / tau1;
1228 double tauRatioMinunsOne = tauRatio - 1;
1230 double norm = (std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1231 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))));
1233 double deltaT = t -
t0;
1234 if (deltaT < 0) deltaT = 0;
1236 double expTerm = std::exp(-deltaT / tau2);
1237 double fermiTerm = 1. / (1. + std::exp(-(t -
t0) / tau1));
1239 return amp * expTerm * fermiTerm / norm +
C;
1246 double amp =
pvec[0];
1248 double tau1 =
pvec[2];
1249 double tau2 =
pvec[3];
1252 double refldelay =
pvec[5];
1253 double reflFrac =
pvec[6];
1254 double reflwidth =
pvec[7];
1255 double delta =
pvec[8];
1257 double tauRatio = tau2 / tau1;
1258 double tauRatioMinunsOne = tauRatio - 1;
1260 double norm = std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1261 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) ;
1263 double deltaT = t -
t0;
1264 if (deltaT < 0) deltaT = 0;
1269 double expTerm = delta + std::exp(-deltaT / tau2);
1270 double fermiTerm = 1. / (1. + std::exp(-(t -
t0) / tau1));
1272 double deltaTRefl = deltaT - refldelay;
1273 double reflTerm = -reflFrac*amp*std::exp(-0.5*deltaTRefl*deltaTRefl/reflwidth/reflwidth);
1275 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