15 std::vector<double> zeroVec(npar, 0.0);
32void ZDCFitWrapper::Initialize(
float initialAmp,
float initialT0,
float ampMin,
float ampMax,
float fitTmin,
float fitTmax,
float fitTRef)
38 std::vector<double> zeroVec(npar, 0.0);
60 theTF1->SetParName(0,
"Amp");
61 theTF1->SetParName(1,
"T0");
62 theTF1->SetParName(2,
"#tau_{1}");
63 theTF1->SetParName(3,
"#tau_{2}");
64 theTF1->SetParName(4,
"C");
67 theTF1->SetParLimits(1, tmin, tmax);
68 theTF1->SetParLimits(2, 3, 6);
69 theTF1->SetParLimits(3, 10, 40);
79 theTF1->SetParameter(0, initialAmp);
80 theTF1->SetParameter(1, initialT0);
81 theTF1->SetParameter(4, 0);
83 theTF1->SetParLimits(0, ampMin, ampMax);
94 theTF1->SetParLimits(1, t0Min, t0Max);
103 theTF1->FixParameter(4, 0);
108 theTF1->ReleaseParameter(4);
115 theTF1->SetParLimits(2, 0.5, 3);
116 theTF1->SetParLimits(3, 4, 10);
131 theTF1->SetParName(0,
"Amp");
132 theTF1->SetParName(1,
"T0");
133 theTF1->SetParName(2,
"#tau_{1}");
134 theTF1->SetParName(3,
"#tau_{2}");
135 theTF1->SetParName(4,
"C");
136 theTF1->SetParName(5,
"refdelay");
137 theTF1->SetParName(6,
"reflAmpFrac");
138 theTF1->SetParName(7,
"reflWidth");
139 theTF1->SetParName(8,
"delta");
141 theTF1->SetParLimits(1, tmin, tmax);
142 theTF1->SetParLimits(4, -100, 100);
143 theTF1->SetParLimits(6, -1e-4, 0.35);
145 theTF1->FixParameter(5, 6.5);
146 theTF1->FixParameter(7, 1.5);
147 theTF1->FixParameter(8, 0.01);
150 else theTF1->SetParLimits(2, 1, 2);
153 else theTF1->SetParLimits(3, 3.5, 6);
160 theTF1->SetParameter(0, initialAmp);
162 float t0 = initialT0;
165 theTF1->SetParameter(1,
t0);
167 theTF1->SetParameter(1, initialT0);
168 theTF1->SetParameter(4, 0);
169 theTF1->SetParameter(6, 0.1);
171 theTF1->SetParLimits(0, ampMin, ampMax);
178 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
180 theTF1->SetParError(0, ampStep);
181 theTF1->SetParError(1, 1.0);
183 if (!
m_fixTau1) theTF1->SetParError(2, 0.05);
184 if (!
m_fixTau2) theTF1->SetParError(3, 0.25);
186 theTF1->SetParError(4, 2);
187 theTF1->SetParError(5, 0.25);
188 theTF1->SetParError(6, 0.05);
196 theTF1->SetParLimits(1, t0Min, t0Max);
205 theTF1->FixParameter(4, 0);
206 theTF1->FixParameter(6, 0);
211 theTF1->ReleaseParameter(4);
212 theTF1->SetParameter(4, 0);
214 theTF1->ReleaseParameter(6);
215 theTF1->SetParLimits(6, -1e-4, 0.35);
216 theTF1->SetParameter(6, 0.1);
225 theTF1->SetParName(0,
"Amp");
226 theTF1->SetParName(1,
"T0");
227 theTF1->SetParName(2,
"#tau_{1}");
228 theTF1->SetParName(3,
"#tau_{2}");
229 theTF1->SetParName(4,
"C");
230 theTF1->SetParName(5,
"period");
231 theTF1->SetParName(6,
"Acos");
232 theTF1->SetParName(7,
"Bsin");
233 theTF1->SetParName(8,
"delta");
235 theTF1->SetParLimits(1, tmin, tmax);
236 theTF1->SetParLimits(4, -50, 50);
237 theTF1->SetParLimits(5, 10, 50);
238 theTF1->SetParLimits(6, 0, 1);
239 theTF1->SetParLimits(7, -1, 1);
242 else theTF1->SetParLimits(2, 0.5, 3);
245 else theTF1->SetParLimits(3, 3.5, 8);
252 theTF1->SetParameter(0, initialAmp);
253 theTF1->SetParLimits(0, ampMin, ampMax);
255 float t0 = initialT0;
258 theTF1->SetParameter(1,
t0);
260 theTF1->SetParameter(1, initialT0);
261 theTF1->FixParameter(5, 13.5);
262 theTF1->SetParameter(6, 0.5);
263 theTF1->SetParameter(7, 0.5);
264 theTF1->FixParameter(8, 0);
273 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
275 theTF1->SetParError(0, ampStep);
276 theTF1->SetParError(1, 1.0);
278 if (!
m_fixTau1) theTF1->SetParError(2, 0.05);
279 if (!
m_fixTau2) theTF1->SetParError(3, 0.25);
281 theTF1->SetParError(4, 1);
282 theTF1->SetParError(5, 5);
283 theTF1->SetParError(6, 0.1);
284 theTF1->SetParError(7, 0.1);
292 theTF1->SetParLimits(1, t0Min, t0Max);
303 ZDCFitWrapper(
std::make_shared<TF1>((
"ExpFermiFixedTaus" + tag).c_str(), this, tmin, tmax, 3)),
309 theTF1->SetParLimits(1, tmin, tmax);
311 theTF1->SetParName(0,
"Amp");
312 theTF1->SetParName(1,
"T0");
313 theTF1->SetParName(2,
"C");
317 std::string funcNameRefFunc =
"ExpFermiFixedTausRefFunc" + tag;
343 theTF1->FixParameter(2, 0);
348 theTF1->ReleaseParameter(2);
362 std::string funcNameRefFunc =
"ExpFermiPrePulseRefFunc" + tag;
380 theTF1->SetParLimits(1, tmin, tmax);
381 theTF1->SetParLimits(2, 1, 8196);
382 theTF1->SetParLimits(3, -20, 10);
384 theTF1->SetParName(0,
"Amp");
385 theTF1->SetParName(1,
"T0");
386 theTF1->SetParName(2,
"Amp_{pre}");
387 theTF1->SetParName(3,
"T0_{pre}");
388 theTF1->SetParName(4,
"C");
397 theTF1->FixParameter(2, 0);
398 theTF1->FixParameter(4, 0);
403 theTF1->ReleaseParameter(2);
404 theTF1->ReleaseParameter(4);
406 theTF1->SetParLimits(2, 1, 8196);
432 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
443 theTF1->SetParLimits(1, t0Min, t0Max);
453 std::string funcNameRefFunc =
"ExpFermiPreExpRefFunc" + tag;
471 theTF1->SetParName(0,
"Amp");
472 theTF1->SetParName(1,
"T0");
473 theTF1->SetParName(2,
"Amp_{pre}");
474 theTF1->SetParName(3,
"tau_{pre}");
475 theTF1->SetParName(4,
"tausqrt_{pre}");
476 theTF1->SetParName(5,
"C");
478 theTF1->SetParLimits(1, tmin, tmax);
479 theTF1->SetParLimits(2, -1, 8196);
480 theTF1->SetParLimits(3, 6, 30);
481 theTF1->SetParLimits(4, -0.2, 0.2);
482 theTF1->SetParLimits(5, -50, 50);
491 theTF1->FixParameter(2, 0);
493 theTF1->FixParameter(5, 0);
499 theTF1->ReleaseParameter(2);
500 theTF1->SetParLimits(2, -1, 8196);
502 theTF1->ReleaseParameter(3);
503 theTF1->SetParLimits(3, 6, 30);
506 theTF1->ReleaseParameter(5);
507 theTF1->SetParLimits(5, -50, 50);
508 theTF1->SetParameter(5, 0);
524 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
536 theTF1->SetParLimits(1, t0Min, t0Max);
546 std::string funcNameRefFunc =
"ExpFermiLHCfPreExpRefFunc" + tag;
565 theTF1->SetParName(0,
"Amp");
566 theTF1->SetParName(1,
"T0");
567 theTF1->SetParName(2,
"Tau1");
568 theTF1->SetParName(3,
"Tau2");
569 theTF1->SetParName(4,
"Amp_{pre}");
570 theTF1->SetParName(5,
"tau_{pre}");
571 theTF1->SetParName(6,
"bsqrt_{pre}");
572 theTF1->SetParName(7,
"ReflFrac");
574 theTF1->SetParLimits(1, tmin, tmax);
575 theTF1->SetParLimits(2, 1.0, 2);
576 theTF1->SetParLimits(3, 3.5, 5.5);
577 theTF1->SetParLimits(4, -1, 8196);
578 theTF1->SetParLimits(5, 4, 12);
579 theTF1->SetParLimits(6, -0.001, 0.001);
580 theTF1->SetParLimits(7, -1.0e-4, 0.3);
585 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
587 float t0 = initialT0;
603 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
621 theTF1->FixParameter(6, 0);
622 theTF1->FixParameter(7, 0.20);
628 theTF1->ReleaseParameter(5);
629 theTF1->SetParLimits(5, 6, 12);
631 theTF1->ReleaseParameter(6);
632 theTF1->SetParLimits(6, -0.001, 0.001);
635 theTF1->ReleaseParameter(7);
636 theTF1->SetParLimits(7, -1.0e-4, 0.3);
644 theTF1->SetParLimits(1, t0Min, t0Max);
653 std::string funcNameRefFunc =
"ExpFermiLHCfPrePulseRefFunc" + tag;
654 std::string funcNamePreFunc =
"ExpFermiLHCfPrePulsePreFunc" + tag;
682 theTF1->SetParName(0,
"Amp");
683 theTF1->SetParName(1,
"T0");
684 theTF1->SetParName(2,
"tau1");
685 theTF1->SetParName(3,
"tau2");
686 theTF1->SetParName(4,
"Amp_{pre}");
687 theTF1->SetParName(5,
"T0_{pre}");
688 theTF1->SetParName(6,
"C");
691 theTF1->SetParLimits(1, tmin, tmax);
692 theTF1->SetParLimits(2, 1.0, 2);
693 theTF1->SetParLimits(3, 3.5, 5.5);
694 theTF1->SetParLimits(4, 1, 8196);
695 theTF1->SetParLimits(5, -20, 10);
696 theTF1->SetParLimits(6, -50, 50);
706 theTF1->FixParameter(4, 0);
707 theTF1->FixParameter(6, 0);
712 theTF1->ReleaseParameter(4);
713 theTF1->ReleaseParameter(6);
715 theTF1->SetParLimits(4, 1, 8196);
716 theTF1->SetParLimits(6, -50, 50);
746 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
759 theTF1->SetParLimits(1, t0Min, t0Max);
769 std::string funcNameRefFunc =
"ExpFermiInductPreExpRefFunc" + tag;
790 theTF1->SetParName(0,
"Amp");
791 theTF1->SetParName(1,
"T0");
792 theTF1->SetParName(2,
"Amp_{pre}");
793 theTF1->SetParName(3,
"tau_{pre}");
794 theTF1->SetParName(4,
"bsqrt_{pre}");
795 theTF1->SetParName(5,
"C");
796 theTF1->SetParName(6,
"IndA");
797 theTF1->SetParName(7,
"IndB");
799 theTF1->SetParLimits(1, tmin, tmax);
800 theTF1->SetParLimits(2, -1, 8196);
801 theTF1->SetParLimits(3, 4, 12);
802 theTF1->SetParLimits(4, -0.001, 0.001);
803 theTF1->SetParLimits(6, 0.05, 1);
804 theTF1->SetParLimits(7, -1, 1);
809 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
811 float t0 = initialT0;
825 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
846 theTF1->SetParLimits(1, t0Min, t0Max);
853 ZDCFitWrapper(
std::make_shared<TF1>((
"ExpFermiFixedTaus" + tag).c_str(), this, tmin, tmax, 4)),
859 theTF1->SetParLimits(1, tmin, tmax);
861 theTF1->SetParName(0,
"Amp");
862 theTF1->SetParName(1,
"T0");
863 theTF1->SetParName(2,
"s_{b}");
864 theTF1->SetParName(3,
"c_{b}");
868 std::string funcNameRefFunc =
"ExpFermiFixedTausRefFunc" + tag;
888 theTF1->FixParameter(2, 0);
889 theTF1->FixParameter(3, 0);
895 theTF1->ReleaseParameter(2);
896 theTF1->ReleaseParameter(3);
901 float slope = std::abs(0.1 * initialAmp / initialT0);
902 float intercept = std::abs(0.1 * initialAmp);
913 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
924 theTF1->SetParLimits(1, t0Min, t0Max);
935 std::string funcNameRefFunc =
"ExpFermiPerPulseRefFunc" + tag;
952 theTF1->SetParName(0,
"Amp");
953 theTF1->SetParName(1,
"T0");
954 theTF1->SetParName(2,
"Amp_{pre}");
955 theTF1->SetParName(3,
"T0_{pre}");
956 theTF1->SetParName(4,
"s_{b}");
957 theTF1->SetParName(5,
"c_{b}");
960 theTF1->SetParLimits(1, tmin, tmax);
961 theTF1->SetParLimits(2, 1, 4096);
962 theTF1->SetParLimits(3, -20, 10);
971 theTF1->FixParameter(4, 0);
972 theTF1->FixParameter(5, 0);
978 theTF1->ReleaseParameter(4);
979 theTF1->ReleaseParameter(5);
989 float slope = std::abs(initialAmp / initialT0);
990 float intercept = std::abs(0.5 * initialAmp);
1001 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
1025 std::string funcNameRefFunc =
"ExpFermiPerPulseRefFunc" + tag;
1042 theTF1->SetParLimits(1, tmin, tmax);
1043 theTF1->SetParLimits(2, 0, 2048);
1044 theTF1->SetParLimits(3, 0, 40);
1045 theTF1->SetParLimits(6, 0, 4096);
1047 theTF1->SetParName(0,
"Amp");
1048 theTF1->SetParName(1,
"T0");
1049 theTF1->SetParName(2,
"Amp_{pre}");
1050 theTF1->SetParName(3,
"T0_{pre}");
1051 theTF1->SetParName(4,
"s_{b}");
1052 theTF1->SetParName(5,
"c_{b}");
1053 theTF1->SetParName(6,
"Amp_{exp}");
1062 theTF1->FixParameter(2, 0);
1063 theTF1->FixParameter(4, 0);
1064 theTF1->FixParameter(5, 0);
1069 theTF1->ReleaseParameter(2);
1070 theTF1->ReleaseParameter(4);
1071 theTF1->ReleaseParameter(5);
1087 float slope = std::abs(initialAmp / initialT0);
1088 float intercept = std::abs(0.1 * initialAmp);
1118 std::string funcNameRefFunc =
"ExpFermiPerPulseRefFunc" + tag;
1135 theTF1->SetParLimits(1, tmin, tmax);
1136 theTF1->SetParLimits(2, 0, 2048);
1137 theTF1->SetParLimits(3, 0, 40);
1138 theTF1->SetParLimits(6, 0, 4096);
1139 theTF1->SetParLimits(7, 0, 2048);
1140 theTF1->SetParLimits(8, 100, 163);
1142 theTF1->SetParName(0,
"Amp");
1143 theTF1->SetParName(1,
"T0");
1144 theTF1->SetParName(2,
"Amp_{pre}");
1145 theTF1->SetParName(3,
"T0_{pre}");
1146 theTF1->SetParName(4,
"s_{b}");
1147 theTF1->SetParName(5,
"c_{b}");
1148 theTF1->SetParName(6,
"Amp_{exp}");
1149 theTF1->SetParName(7,
"Amp_{post}");
1150 theTF1->SetParName(8,
"T0_{post}");
1159 theTF1->FixParameter(2, 0);
1160 theTF1->FixParameter(4, 0);
1161 theTF1->FixParameter(5, 0);
1166 theTF1->ReleaseParameter(2);
1167 theTF1->ReleaseParameter(4);
1168 theTF1->ReleaseParameter(5);
1174 if (tmin < 0) tmin = 0;
1185 float iniPostT0 = initialPostT0;
1191 float slope = std::abs(initialAmp / initialT0);
1192 float intercept = std::abs(0.1 * initialAmp);
double ZDCFermiExpFit(const double *xvec, const double *pvec)
double ZDCFermiExpFitRefl(const double *xvec, const double *pvec)
double ZDCFermiExpFitInduct(const double *xvec, const double *pvec)
virtual void UnconstrainFit() override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void ConstrainFit() override
virtual void SetPrePulseT0Range(float tmin, float tmax) override
virtual void SetT0FitLimits(float tMin, float tMax) override
ZDCFitComplexPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
std::shared_ptr< TF1 > m_expFermiFunc
ZDCFitExpFermiFixedTaus(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual void ConstrainFit() override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void UnconstrainFit() override
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void UnconstrainFit() override
std::shared_ptr< TF1 > m_expFermiInductFunc
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void ConstrainFit() override
ZDCFitExpFermiInductPreExp(const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void ConstrainFit() override
virtual void SetT0FitLimits(float tMin, float tMax) override
std::shared_ptr< TF1 > m_expFermiLHCfFunc
ZDCFitExpFermiLHCfPreExp(const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
virtual void UnconstrainFit() override
std::shared_ptr< TF1 > m_expFermiPreFunc
std::shared_ptr< TF1 > m_expFermiLHCfFunc
virtual void ConstrainFit() override
virtual void SetPrePulseT0Range(float tmin, float tmax) override
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
ZDCFitExpFermiLHCfPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual void UnconstrainFit() override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetT0FitLimits(float tMin, float tMax) override
ZDCFitExpFermiLinearFixedTaus(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual void ConstrainFit() override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void UnconstrainFit() override
virtual void ConstrainFit() override
virtual void SetPrePulseT0Range(float tmin, float tmax) override
virtual void UnconstrainFit() override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
ZDCFitExpFermiLinearPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetT0FitLimits(float tMin, float tMax) override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void UnconstrainFit() override
virtual void ConstrainFit() override
virtual void SetT0FitLimits(float tMin, float tMax) override
ZDCFitExpFermiPreExp(const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void ConstrainFit() override
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetPrePulseT0Range(float tmin, float tmax) override
virtual void UnconstrainFit() override
ZDCFitExpFermiPrePulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
ZDCFitExpFermiVariableTausInduct(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual void ConstrainFit() override
virtual void UnconstrainFit() override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void UnconstrainFit() override
ZDCFitExpFermiVariableTausLHCf(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void ConstrainFit() override
ZDCFitExpFermiVariableTausRun3(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void ConstrainFit() override
ZDCFitExpFermiVariableTaus(const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual void UnconstrainFit() override
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void UnconstrainFit() override
virtual void ConstrainFit() override
std::shared_ptr< TF1 > m_expFermiFunc
virtual void SetT0FitLimits(float tMin, float tMax) override
virtual void SetPostPulseT0Range(float tmin, float tmax, float initialPostT0) override
ZDCFitGeneralPulse(const std::string &tag, float tmin, float tmax, float tau1, float tau2)
virtual void SetPrePulseT0Range(float tmin, float tmax) override
void Initialize(float initialAmp, float initialT0, float ampMin, float ampMax)
virtual std::shared_ptr< TF1 > GetWrapperTF1()
virtual void SetT0FitLimits(float tMin, float tMax)=0
ZDCFitWrapper(const std::shared_ptr< TF1 > &wrapperTF1)
void SetAmpMinMax(float minAmp, float maxAmp)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax)=0
float getDefaultExpTau() const
ZDCPreExpFitWrapper(std::shared_ptr< TF1 > wrapperTF1, float defaultExpTau, bool fixTau)
ZDCPrePulseFitWrapper(std::shared_ptr< TF1 > wrapperTF1)