|
ATLAS Offline Software
|
Go to the documentation of this file.
5 #ifndef ZDCANALYSIS_ZDCFITWRAPPER_H
6 #define ZDCANALYSIS_ZDCFITWRAPPER_H
21 std::shared_ptr<TF1> m_wrapperTF1{};
32 bool m_adjTLimitsEvent{
false};
33 float m_tminAdjust{0};
43 ZDCFitWrapper(
const std::shared_ptr<TF1>& wrapperTF1) : m_wrapperTF1(wrapperTF1),
45 m_adjTLimitsEvent(true)
47 m_tmin = m_wrapperTF1->GetXmin();
48 m_tmax = m_wrapperTF1->GetXmax();
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;
74 SetT0FitLimits(t0Min, t0Max);
93 if (m_adjTLimitsEvent)
return m_tempTmin;
98 if (m_adjTLimitsEvent)
return m_tempTmax;
151 ZDCFitWrapper(wrapperTF1), m_defaultTau(defaultExpTau), m_fixTau(fixTau)
166 bool m_fixTau1{
false};
167 bool m_fixTau2{
false};
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);
233 bool m_fixTau1{
false};
234 bool m_fixTau2{
false};
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);
306 std::shared_ptr<TF1> m_expFermiFunc{};
314 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
323 virtual float GetTau1()
const override {
return m_tau1;}
324 virtual float GetTau2()
const override {
return m_tau2;}
332 if (
index == 0)
return m_tau1;
333 else if (
index == 1)
return m_tau2;
334 else throw std::runtime_error(
"Fit parameter does not exist.");
340 double amp = theTF1->GetParameter(0);
341 double C = theTF1->GetParameter(2);
352 double deltaT =
x[0] -
t0;
354 double expFermi = amp * m_norm * m_expFermiFunc->operator()(deltaT);
367 std::shared_ptr<TF1> m_expFermiFunc = 0;
373 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
393 virtual float GetTau1()
const override {
return m_tau1;}
394 virtual float GetTau2()
const override {
return m_tau2;}
396 virtual float GetPreT0()
const override {
return 0;}
410 if (
index == 0)
return m_tau1;
411 else if (
index == 1)
return m_tau2;
413 else throw std::runtime_error(
"Fit parameter does not exist.");
422 double amp = theTF1->GetParameter(0);
423 if (amp <= 0)
return -1;
425 double preAmp = theTF1->GetParameter(2);
426 double preT0 = theTF1->GetParameter(3);
428 double deltaTPre = maxTime - preT0;
429 double background = preAmp * m_norm * m_expFermiFunc->operator()(deltaTPre);
431 return background / (amp + background);
440 double preAmp =
p[2];
444 double deltaT =
t -
t0;
445 double deltaTPre =
t - preT0;
454 double pulse1 = amp * m_norm * m_expFermiFunc->operator()(deltaT);
455 double pulse2 = preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
456 m_expFermiFunc->operator()(deltaPresamp));
458 return C + pulse1 + pulse2;
469 std::shared_ptr<TF1> m_expFermiLHCfFunc = 0;
475 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
495 virtual float GetTau1()
const override {
return m_tau1;}
496 virtual float GetTau2()
const override {
return m_tau2;}
512 if (
index == 0)
return m_tau1;
513 else if (
index == 1)
return m_tau2;
515 else throw std::runtime_error(
"Fit parameter does not exist.");
524 double amp = theTF1->GetParameter(0);
525 if (amp <= 0)
return 1;
527 double preAmp = theTF1->GetParameter(2);
528 double preT0 = theTF1->GetParameter(3);
530 double deltaTPre = maxTime - preT0;
531 double background = preAmp * m_norm * m_expFermiLHCfFunc->operator()(deltaTPre);
533 return background / (amp + background);
542 double preAmp =
p[2];
546 double deltaT =
t -
t0;
547 double deltaTPre =
t - preT0;
554 double pulse1 = amp * m_norm * m_expFermiLHCfFunc->operator()(deltaT);
555 double pulse2 = preAmp * m_norm * (m_expFermiLHCfFunc->operator()(deltaTPre) -
556 m_expFermiLHCfFunc->operator()(deltaPresamp));
558 return C + pulse1 + pulse2;
570 std::shared_ptr<TF1> m_expFermiFunc{0};
574 float defExpTau,
float fixExpTau);
577 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
591 virtual float GetTau1()
const override {
return m_tau1;}
592 virtual float GetTau2()
const override {
return m_tau2;}
603 if (
index == 0)
return m_tau1;
604 else if (
index == 1)
return m_tau2;
606 else throw std::runtime_error(
"Fit parameter does not exist.");
614 double amp = theTF1->GetParameter(0);
615 if (amp <= 0)
return -1;
617 double preAmp = theTF1->GetParameter(2);
618 double preT0 = theTF1->GetParameter(3);
620 double deltaTPre = maxTime - preT0;
621 double background = preAmp * m_norm * m_expFermiFunc->operator()(deltaTPre);
623 return background / (amp + background);
632 double expAmp =
p[2];
633 double expTau =
p[3];
634 double expSqrtTau =
p[4];
637 double deltaT =
t -
t0;
638 double pulse = amp * m_norm * m_expFermiFunc->operator()(deltaT);
645 if (
t > 0 && std::abs(expSqrtTau)>1
e-6) expPre = expAmp * (
std::exp(-
t/expTau-expSqrtTau*std::sqrt(
t)) -
std::exp(-tRef/expTau));
648 return C + pulse + expPre;
660 std::shared_ptr<TF1> m_expFermiLHCfFunc{};
664 float defExpTau,
float fixExpTau);
667 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
681 virtual float GetTau1()
const override {
return m_tau1;}
682 virtual float GetTau2()
const override {
return m_tau2;}
693 if (
index == 0)
return m_tau1;
694 else if (
index == 1)
return m_tau2;
696 else throw std::runtime_error(
"Fit parameter does not exist.");
702 double amp = theTF1->GetParameter(0);
703 if (amp <= 0)
return 1;
707 double expAmp = theTF1->GetParameter(4);
708 double expTau = theTF1->GetParameter(5);
709 double bexpSqrt = theTF1->GetParameter(6);
712 double expPre = expAmp * (
std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) -
std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
714 return expPre / (amp + expPre);
727 double expAmp =
p[4];
728 double expTau =
p[5];
729 double bexpSqrt =
p[6];
730 double reflFrac =
p[7];
732 m_expFermiLHCfFunc->SetParameter(0, amp);
733 m_expFermiLHCfFunc->SetParameter(2, tau1);
734 m_expFermiLHCfFunc->SetParameter(3, tau2);
735 m_expFermiLHCfFunc->SetParameter(6, reflFrac);
737 m_timeCorr = m_tau1 *
std::log(m_tau2 / m_tau1 - 1.0);
739 double deltaT =
t -
t0;
740 double pulse = m_expFermiLHCfFunc->operator()(deltaT);
748 expPre = expAmp * (
std::exp(-
t/expTau - bexpSqrt*
t*
t) -
std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
750 return pulse + expPre;
772 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
781 virtual float GetTau1()
const override {
return m_tau1;}
782 virtual float GetTau2()
const override {
return m_tau2;}
790 if (
index == 0)
return m_tau1;
791 else if (
index == 1)
return m_tau2;
792 else throw std::runtime_error(
"Fit parameter does not exist.");
798 double amp = theTF1->GetParameter(0);
799 double slope = theTF1->GetParameter(2);
801 double background = slope *
GetTime();
802 return background / amp;
809 double deltaT =
x[0] -
t0;
811 double bckgd =
p[2] *
x[0] +
p[3];
813 double expFermi = amp * m_norm * m_expFermiFunc->operator()(deltaT);
815 return expFermi + bckgd;
833 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
852 virtual float GetTau1()
const override {
return m_tau1;}
853 virtual float GetTau2()
const override {
return m_tau2;}
860 fitPreT0 += m_timeCorr;
877 if (
index == 0)
return m_tau1;
878 else if (
index == 1)
return m_tau2;
880 else throw std::runtime_error(
"Fit parameter does not exist.");
889 double amp = theTF1->GetParameter(0);
890 double preAmp = theTF1->GetParameter(2);
891 double preT0 = theTF1->GetParameter(3);
892 double slope = theTF1->GetParameter(4);
894 double deltaTPre = maxTime - preT0;
896 double background = slope * maxTime + preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
897 m_expFermiFunc->operator()(-preT0));
899 return background / amp;
908 double preAmp =
p[2];
910 double linSlope =
p[4];
912 double deltaT =
t -
t0;
913 double deltaTPre =
t - preT0;
920 double pulse1 = amp * m_norm * m_expFermiFunc->operator()(deltaT);
921 double pulse2 = preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
922 m_expFermiFunc->operator()(deltaPresamp));
924 double bckgd = linSlope * (
t - deltaPresamp) +
p[5];
926 return pulse1 + pulse2 + bckgd;
946 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
966 virtual float GetTau1()
const override {
return m_tau1;}
967 virtual float GetTau2()
const override {
return m_tau2;}
974 fitPreT0 += m_timeCorr;
991 if (
index == 0)
return m_tau1;
992 else if (
index == 1)
return m_tau2;
994 else throw std::runtime_error(
"Fit parameter does not exist.");
1003 double amp = theTF1->GetParameter(0);
1004 double preAmp = theTF1->GetParameter(2);
1005 double preT0 = theTF1->GetParameter(3);
1006 double slope = theTF1->GetParameter(4);
1008 double deltaTPre = maxTime - preT0;
1010 double background = slope * maxTime + preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
1011 m_expFermiFunc->operator()(-preT0));
1013 return background / amp;
1022 double preAmp =
p[2];
1023 double preT0 =
p[3];
1024 double linSlope =
p[4];
1025 double linConst =
p[5];
1026 double expamp =
p[6];
1028 double deltaT =
t -
t0;
1029 double deltaTPre =
t - preT0;
1036 double pulse1 = amp * m_norm * m_expFermiFunc->operator()(deltaT);
1037 double pulse2 = preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) - m_expFermiFunc->operator()(deltaPresamp));
1039 double linBG = linSlope * (
t - deltaPresamp) + linConst;
1040 double expBG = expamp *
std::exp(-(
t) / m_tau2) - expamp;
1042 return pulse1 + pulse2 + linBG + expBG;
1061 virtual void DoInitialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax)
override;
1071 if (fixPrePulseToZero) {
1088 virtual float GetTau1()
const override {
return m_tau1;}
1089 virtual float GetTau2()
const override {
return m_tau2;}
1096 fitPreT0 += m_timeCorr;
1107 fitPostT0 += m_timeCorr;
1121 if (
index == 0)
return m_tau1;
1122 else if (
index == 1)
return m_tau2;
1124 else throw std::runtime_error(
"Fit parameter does not exist.");
1133 double amp = theTF1->GetParameter(0);
1134 double preAmp = theTF1->GetParameter(2);
1135 double preT0 = theTF1->GetParameter(3);
1136 double slope = theTF1->GetParameter(4);
1138 double deltaTPre = maxTime - preT0;
1140 double background = slope * maxTime + preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
1141 m_expFermiFunc->operator()(-preT0));
1143 return background / amp;
1152 double preAmp =
p[2];
1153 double preT0 =
p[3];
1154 double linSlope =
p[4];
1155 double linConst =
p[5];
1156 double expamp =
p[6];
1157 double postAmp =
p[7];
1158 double postT0 =
p[8];
1160 double deltaT =
t -
t0;
1161 double deltaTPre =
t - preT0;
1162 double deltaTPost =
t - postT0;
1169 double pulse1 = amp * m_norm * m_expFermiFunc->operator()(deltaT);
1170 double pulse2 = preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) - m_expFermiFunc->operator()(deltaPresamp));
1171 double pulse3 = postAmp * m_norm * m_expFermiFunc->operator()(deltaTPost);
1173 double linBG = linSlope *
t + linConst;
1176 return pulse1 + pulse2 + pulse3 + linBG + expBG;
ZDCFitWrapper(const std::shared_ptr< TF1 > &wrapperTF1)
virtual float GetAmplitude() const =0
float GetTMinAdjust() const
virtual float GetAmpError() const override
virtual float GetTau1() const override
virtual void SetT0FitLimits(float tMin, float tMax)=0
virtual float GetTau1() const override
virtual float GetPostT0() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetExpAmp() const override
virtual float GetShapeParameter(size_t index) const override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax)=0
virtual double operator()(const double *x, const double *p) override
virtual float GetPreAmp() const override
virtual float GetBkgdMaxFraction() const override
virtual void SetInitialExpPulse(float amp) override
virtual float GetPostAmp() const =0
virtual float GetShapeParameter(size_t index) const override
virtual float GetExpAmp() const override
virtual float GetShapeParameter(size_t index) const =0
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
#define ATLAS_NOT_THREAD_SAFE
getNoisyStrip() Find noisy strips from hitmaps and write out into xml/db formats
float getDefaultExpTau() const
virtual float GetPostT0() const override
virtual float GetExpAmp() const =0
virtual float GetBkgdMaxFraction() const override
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool fixPrePulseToZero)=0
virtual float GetTime() const override
virtual float GetPreAmp() const override
virtual float GetAmpError() const override
~ZDCFitExpFermiLinearFixedTaus()
unsigned int GetPreT0ParIndex() const override
virtual void ConstrainFit()=0
virtual float GetTime() const override
virtual float GetTime() const =0
virtual float GetTau2() const override
virtual float GetTime() const override
unsigned int GetPreT0ParIndex() const override
std::vector< ALFA_RawData_p1 > t0
virtual float GetExpAmp() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetShapeParameter(size_t index) const override
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool fixPrePulseToZero) override
virtual float GetShapeParameter(size_t index) const override
virtual float GetPostAmp() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetAmplitude() const override
virtual float GetBkgdMaxFraction() const override
virtual std::shared_ptr< TF1 > GetWrapperTF1()
virtual float GetShapeParameter(size_t index) const override
unsigned int GetPreT0ParIndex() const override
virtual float GetPreT0() const override
virtual float GetTime() const override
virtual float GetPreAmp() const override
virtual float GetTau1() const override
virtual float GetTime() const override
virtual float GetTau2() const =0
virtual float GetAmplitude() const override
virtual float GetExpTau() const =0
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetShapeParameter(size_t index) const override
virtual float GetPreT0() const =0
ZDCPreExpFitWrapper(std::shared_ptr< TF1 > wrapperTF1, float defaultExpTau, bool fixTau)
virtual float GetBkgdMaxFraction() const override
virtual float GetPreAmp() const override
virtual float GetAmplitude() const override
virtual float GetPreAmp() const override
virtual float GetTau2() const override
~ZDCFitExpFermiLinearPrePulse()
virtual float GetTau2() const override
virtual float GetTau1() const override
virtual float GetExpAmp() const override
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
virtual float GetTau1() const override
virtual float GetTau1() const override
~ZDCFitExpFermiLHCfPrePulse()
virtual float GetPreT0() const override
virtual float GetTau2() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetTime() const override
virtual void UnconstrainFit()=0
virtual float GetAmpError() const =0
virtual float GetTau1() const override
void SetT0Range(float t0Min, float t0Max)
double ZDCFermiExpFitRefl(const double *xvec, const double *pvec)
virtual float GetBkgdMaxFraction() const override
virtual TF1 * GetWrapperTF1RawPtr() const
virtual float GetTime() const override
virtual float GetTau1() const override
virtual float GetPostT0() const override
~ZDCFitExpFermiLHCfPreExp()
virtual float GetExpAmp() const =0
virtual float GetTau2() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetAmpError() const override
virtual float GetTime() const override
virtual void SetInitialExpPulse(float expamp)=0
virtual float GetPreT0() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetAmpError() const override
virtual float GetBkgdMaxFraction() const =0
virtual float GetAmplitude() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetTau2() const override
virtual float GetTau2() const override
virtual float GetExpTau() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetAmpError() const override
virtual float GetPostAmp() const override
virtual float GetExpAmp() const override
virtual float GetShapeParameter(size_t index) const override
virtual float GetAmplitude() const override
virtual float GetAmplitude() const override
virtual float GetAmpError() const override
virtual float GetPostAmp() const override
virtual float GetPostAmp() const override
virtual float GetPreT0() const override
virtual float GetTau1() const =0
virtual float GetTime() const override
virtual float GetAmplitude() const override
virtual float GetExpTau() const override
virtual unsigned int GetPreT0ParIndex() const =0
std::shared_ptr< TF1 > m_expFermiFunc
virtual float GetTau2() const override
virtual float GetAmpError() const override
virtual float GetShapeParameter(size_t index) const override
virtual void SetInitialPrePulse(float amp, float t0, float, bool) override
virtual float GetExpAmp() const override
virtual float GetAmpError() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetAmpError() const override
virtual float GetAmplitude() const override
virtual float GetExpAmp() const override
void SetAmpMinMax(float minAmp, float maxAmp)
virtual float GetTau1() const override
virtual float GetTau2() const override
virtual float GetBkgdMaxFraction() const override
virtual float GetAmplitude() const override
virtual float GetTime() const override
virtual float GetPostT0() const =0
virtual void SetPrePulseT0Range(float tmin, float tmax)=0
virtual float GetAmplitude() const override
ZDCPrePulseFitWrapper(std::shared_ptr< TF1 > wrapperTF1)
virtual void SetPostPulseT0Range(float tmin, float tmax, float initialPostT0)=0
virtual float GetAmpError() const override
virtual float GetAmpError() const override
virtual float GetTau1() const override
std::shared_ptr< TF1 > m_expFermiFunc
virtual unsigned int GetPreT0ParIndex() const override
virtual float GetPreT0() const override
virtual const TF1 * GetWrapperTF1() const
virtual double operator()(const double *x, const double *p)=0
virtual void SetInitialPrePulse(float amp, float t0, float expamp, bool) override
virtual float GetTau1() const override
virtual float GetAmplitude() const override
virtual float GetTau2() const override
virtual double operator()(const double *x, const double *p) override
Define macros for attributes used to control the static checker.
~ZDCFitExpFermiPrePulse()
virtual float GetPreAmp() const =0
virtual float GetPostAmp() const override
virtual float GetTime() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual float GetTau2() const override
~ZDCFitExpFermiFixedTaus()
virtual float GetPostT0() const override
virtual void SetPostPulseT0Range(float, float, float) override
virtual void SetInitialExpPulse(float amp) override
double ZDCFermiExpFit(const double *xvec, const double *pvec)
virtual unsigned int GetPreT0ParIndex() const override
virtual float GetPostT0() const override