ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCFitExpFermiLinearFixedTaus Class Reference

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiLinearFixedTaus:
Collaboration diagram for ZDCFitExpFermiLinearFixedTaus:

Public Member Functions

 ZDCFitExpFermiLinearFixedTaus (const std::string &tag, float tmin, float tmax, float tau1, float tau2)
 ~ZDCFitExpFermiLinearFixedTaus ()
virtual void DoInitialize (float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void SetT0FitLimits (float tMin, float tMax) override
virtual void ConstrainFit () override
virtual void UnconstrainFit () override
virtual float GetAmplitude () const override
virtual float GetAmpError () const override
virtual float GetTau1 () const override
virtual float GetTau2 () const override
virtual float GetTime () const override
virtual unsigned int GetNumShapeParameters () const override
virtual float GetShapeParameter (size_t index) const override
virtual float GetBkgdMaxFraction () const override
virtual double operator() (const double *x, const double *p) override
void Initialize (float initialAmp, float initialT0, float ampMin, float ampMax)
void Initialize (float initialAmp, float initialT0, float ampMin, float ampMax, float fitTmin, float fitTmax, float fitTRef)
bool finalized () const
virtual void Finalize ()
virtual void DoFinalize ()
void SetAmpMinMax (float minAmp, float maxAmp)
void SetT0Range (float t0Min, float t0Max)
float GetMinAmp () const
float GetMaxAmp () const
float GetTMin () const
float GetTMax () const
float GetT0Min () const
float GetT0Max () const
float GetTMinAdjust () const
virtual std::shared_ptr< TF1 > GetWrapperTF1 ()
virtual const TF1 * GetWrapperTF1 () const
virtual TF1 * GetWrapperTF1RawPtr () const

Private Attributes

float m_tau1 {}
float m_tau2 {}
float m_norm {}
float m_timeCorr {}
std::shared_ptr< TF1 > m_expFermiFunc
std::shared_ptr< TF1 > m_wrapperTF1 {}
float m_tmin {0}
float m_tmax {0}
float m_ampMin {0}
float m_ampMax {0}
float m_t0Min {0}
float m_t0Max {0}
bool m_adjTLimitsEvent {false}
float m_tminAdjust {0}
float m_tempTmin {0}
float m_tempTmax {0}
bool m_finalized {false}

Detailed Description

Definition at line 1142 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiLinearFixedTaus()

ZDCFitExpFermiLinearFixedTaus::ZDCFitExpFermiLinearFixedTaus ( const std::string & tag,
float tmin,
float tmax,
float tau1,
float tau2 )

Definition at line 969 of file ZDCFitWrapper.cxx.

969 :
970 ZDCFitWrapper(std::make_shared<TF1>(("ExpFermiFixedTaus" + tag).c_str(), this, tmin, tmax, 4)),
971 m_tau1(tau1), m_tau2(tau2)
972{
973 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
974
975 // BAC, parameter 0 limits now is set in DoInitialize
976 theTF1->SetParLimits(1, tmin, tmax);
977
978 theTF1->SetParName(0, "Amp");
979 theTF1->SetParName(1, "T0");
980 theTF1->SetParName(2, "s_{b}");
981 theTF1->SetParName(3, "c_{b}");
982
983 // Now create the reference function that we use to evaluate ExpFermiFit more efficiently
984 //
985 std::string funcNameRefFunc = "ExpFermiFixedTausRefFunc" + tag;
986
987 m_expFermiFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFit, -50, 100, 5);
988
989 m_expFermiFunc->SetParameter(0, 1);
990 m_expFermiFunc->SetParameter(1, 0);
991 m_expFermiFunc->SetParameter(2, m_tau1);
992 m_expFermiFunc->SetParameter(3, m_tau2);
993 m_expFermiFunc->FixParameter(4, 0);
994
995 m_norm = 1. / m_expFermiFunc->GetMaximum();
996 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
997}
double ZDCFermiExpFit(const double *xvec, const double *pvec)
std::shared_ptr< TF1 > m_expFermiFunc
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCFitWrapper(const std::shared_ptr< TF1 > &wrapperTF1)

◆ ~ZDCFitExpFermiLinearFixedTaus()

ZDCFitExpFermiLinearFixedTaus::~ZDCFitExpFermiLinearFixedTaus ( )
inline

Definition at line 1157 of file ZDCFitWrapper.h.

1157{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiLinearFixedTaus::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 999 of file ZDCFitWrapper.cxx.

1000{
1001 // We force the linear terms to zero
1002 //
1003 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1004
1005 theTF1->FixParameter(2, 0);
1006 theTF1->FixParameter(3, 0);
1007}

◆ DoFinalize()

virtual void ZDCFitWrapper::DoFinalize ( )
inlinevirtualinherited

◆ DoInitialize()

void ZDCFitExpFermiLinearFixedTaus::DoInitialize ( float initialAmp,
float initialT0,
float ampMin,
float ampMax )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 1016 of file ZDCFitWrapper.cxx.

1017{
1018 float slope = std::abs(0.1 * initialAmp / initialT0);
1019 float intercept = std::abs(0.1 * initialAmp);
1020 GetWrapperTF1()->SetParLimits(2, -slope , slope );
1021 GetWrapperTF1()->SetParLimits(3, -intercept, intercept);
1022
1023 GetWrapperTF1()->SetParameter(0, initialAmp);
1024 GetWrapperTF1()->SetParameter(1, initialT0);
1025 GetWrapperTF1()->SetParameter(2, 0);
1026 GetWrapperTF1()->SetParameter(3, 0);
1027
1028 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
1029
1030 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
1031
1032 GetWrapperTF1()->SetParError(0, ampStep);
1033 GetWrapperTF1()->SetParError(1, 1);
1034 GetWrapperTF1()->SetParError(2, 1);
1035 GetWrapperTF1()->SetParError(3, 0.5);
1036}

◆ Finalize()

virtual void ZDCFitWrapper::Finalize ( )
inlinevirtualinherited

Definition at line 68 of file ZDCFitWrapper.h.

69 {
70 DoFinalize();
71 m_finalized = true;
72 }
virtual void DoFinalize()

◆ finalized()

bool ZDCFitWrapper::finalized ( ) const
inlineinherited

Definition at line 66 of file ZDCFitWrapper.h.

66{return m_finalized;}

◆ GetAmpError()

virtual float ZDCFitExpFermiLinearFixedTaus::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1166 of file ZDCFitWrapper.h.

1166{return GetWrapperTF1()->GetParError(0); }

◆ GetAmplitude()

virtual float ZDCFitExpFermiLinearFixedTaus::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1165 of file ZDCFitWrapper.h.

1165{return GetWrapperTF1()->GetParameter(0); }

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiLinearFixedTaus::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1182 of file ZDCFitWrapper.h.

1183 {
1184 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
1185 double amp = theTF1->GetParameter(0);
1186 if (amp <= 0) return -1;
1187
1188 double slope = theTF1->GetParameter(2);
1189
1190 double background = slope * GetTime();
1191 return background / amp;
1192 }
virtual float GetTime() const override

◆ GetMaxAmp()

float ZDCFitWrapper::GetMaxAmp ( ) const
inlineinherited

Definition at line 104 of file ZDCFitWrapper.h.

104{return m_ampMax;}

◆ GetMinAmp()

float ZDCFitWrapper::GetMinAmp ( ) const
inlineinherited

Definition at line 103 of file ZDCFitWrapper.h.

103{return m_ampMin;}

◆ GetNumShapeParameters()

virtual unsigned int ZDCFitExpFermiLinearFixedTaus::GetNumShapeParameters ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1175 of file ZDCFitWrapper.h.

1175{return 2;}

◆ GetShapeParameter()

virtual float ZDCFitExpFermiLinearFixedTaus::GetShapeParameter ( size_t index) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1176 of file ZDCFitWrapper.h.

1177 {
1178 if (index < 2) return GetWrapperTF1()->GetParameter(index + 2);
1179 else throw std::runtime_error("Fit parameter does not exist.");
1180 }

◆ GetT0Max()

float ZDCFitWrapper::GetT0Max ( ) const
inlineinherited

Definition at line 114 of file ZDCFitWrapper.h.

114 {
115 if (m_adjTLimitsEvent) return m_tempTmax;
116 else return m_t0Max;
117 }

◆ GetT0Min()

float ZDCFitWrapper::GetT0Min ( ) const
inlineinherited

Definition at line 109 of file ZDCFitWrapper.h.

109 {
110 if (m_adjTLimitsEvent) return m_tempTmin;
111 else return m_t0Min;
112 }

◆ GetTau1()

virtual float ZDCFitExpFermiLinearFixedTaus::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1168 of file ZDCFitWrapper.h.

1168{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiLinearFixedTaus::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1169 of file ZDCFitWrapper.h.

1169{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiLinearFixedTaus::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1171 of file ZDCFitWrapper.h.

1171 {
1172 return GetWrapperTF1()->GetParameter(1) + m_timeCorr; // Correct the time to the maximum
1173 }

◆ GetTMax()

float ZDCFitWrapper::GetTMax ( ) const
inlineinherited

Definition at line 107 of file ZDCFitWrapper.h.

107{return m_tmax;}

◆ GetTMin()

float ZDCFitWrapper::GetTMin ( ) const
inlineinherited

Definition at line 106 of file ZDCFitWrapper.h.

106{return m_tmin;}

◆ GetTMinAdjust()

float ZDCFitWrapper::GetTMinAdjust ( ) const
inlineinherited

Definition at line 119 of file ZDCFitWrapper.h.

119{return m_tminAdjust;}

◆ GetWrapperTF1() [1/2]

virtual std::shared_ptr< TF1 > ZDCFitWrapper::GetWrapperTF1 ( )
inlinevirtualinherited

Definition at line 128 of file ZDCFitWrapper.h.

128{return m_wrapperTF1;}
std::shared_ptr< TF1 > m_wrapperTF1

◆ GetWrapperTF1() [2/2]

virtual const TF1 * ZDCFitWrapper::GetWrapperTF1 ( ) const
inlinevirtualinherited

Definition at line 129 of file ZDCFitWrapper.h.

129{return m_wrapperTF1.get();}

◆ GetWrapperTF1RawPtr()

virtual TF1 * ZDCFitWrapper::GetWrapperTF1RawPtr ( ) const
inlinevirtualinherited

Definition at line 130 of file ZDCFitWrapper.h.

130{return m_wrapperTF1.get();}

◆ Initialize() [1/2]

void ZDCFitWrapper::Initialize ( float initialAmp,
float initialT0,
float ampMin,
float ampMax )
inherited

Definition at line 9 of file ZDCFitWrapper.cxx.

10{
11 // Clear the errors on the TF1 because retaining the errors seems to affect
12 // the convergence of fits
13 //
14 unsigned int npar = GetWrapperTF1()->GetNpar();
15 std::vector<double> zeroVec(npar, 0.0);
16 GetWrapperTF1()->SetParErrors(&zeroVec[0]);
17
18 // If we adjusted the time range on the previous event, restore to default
19 //
22
23 m_adjTLimitsEvent = false;
24 m_tminAdjust = 0;
25 }
26
27 SetAmpMinMax(ampMin, ampMax);
28
29 DoInitialize(initialAmp, initialT0, ampMin, ampMax);
30}
virtual void SetT0FitLimits(float tMin, float tMax)=0
void SetAmpMinMax(float minAmp, float maxAmp)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax)=0

◆ Initialize() [2/2]

void ZDCFitWrapper::Initialize ( float initialAmp,
float initialT0,
float ampMin,
float ampMax,
float fitTmin,
float fitTmax,
float fitTRef )
inherited

Definition at line 32 of file ZDCFitWrapper.cxx.

33{
34 // Clear the errors on the TF1 because retaining the errors seems to affect
35 // the convergence of fits
36 //
37 unsigned int npar = GetWrapperTF1()->GetNpar();
38 std::vector<double> zeroVec(npar, 0.0);
39 GetWrapperTF1()->SetParErrors(&zeroVec[0]);
40
41 m_adjTLimitsEvent = true;
42
43 m_tminAdjust = fitTRef; // Note: this is the time corresponding to the sample used for presample subtraction
44
45 m_tempTmin = std::max(m_t0Min, fitTmin);
46 m_tempTmax = std::min(m_t0Max, fitTmax);
47
48 SetAmpMinMax(ampMin, ampMax);
50
51 DoInitialize(initialAmp, initialT0, ampMin, ampMax);
52}

◆ operator()()

virtual double ZDCFitExpFermiLinearFixedTaus::operator() ( const double * x,
const double * p )
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1194 of file ZDCFitWrapper.h.

1195 {
1196 double amp = p[0];
1197 double t0 = p[1];
1198 double deltaT = x[0] - t0;
1199
1200 double bckgd = p[2] * x[0] + p[3];
1201
1202 double expFermi = amp * m_norm * m_expFermiFunc->operator()(deltaT);
1203
1204 return expFermi + bckgd;
1205 }
static Double_t t0
#define x

◆ SetAmpMinMax()

void ZDCFitWrapper::SetAmpMinMax ( float minAmp,
float maxAmp )
inlineinherited

Definition at line 79 of file ZDCFitWrapper.h.

80 {
81 m_ampMin = minAmp;
82 m_ampMax = maxAmp;
83 }

◆ SetT0FitLimits()

void ZDCFitExpFermiLinearFixedTaus::SetT0FitLimits ( float tMin,
float tMax )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 1038 of file ZDCFitWrapper.cxx.

1039{
1040 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1041 theTF1->SetParLimits(1, t0Min, t0Max);
1042}

◆ SetT0Range()

void ZDCFitWrapper::SetT0Range ( float t0Min,
float t0Max )
inlineinherited

Definition at line 85 of file ZDCFitWrapper.h.

86 {
87 m_t0Min = t0Min;
88 m_t0Max = t0Max;
89
90 SetT0FitLimits(t0Min, t0Max);
91 }

◆ UnconstrainFit()

void ZDCFitExpFermiLinearFixedTaus::UnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 1009 of file ZDCFitWrapper.cxx.

1010{
1011 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1012 theTF1->ReleaseParameter(2);
1013 theTF1->ReleaseParameter(3);
1014}

Member Data Documentation

◆ m_adjTLimitsEvent

bool ZDCFitWrapper::m_adjTLimitsEvent {false}
privateinherited

Definition at line 37 of file ZDCFitWrapper.h.

37{false};

◆ m_ampMax

float ZDCFitWrapper::m_ampMax {0}
privateinherited

Definition at line 32 of file ZDCFitWrapper.h.

32{0};

◆ m_ampMin

float ZDCFitWrapper::m_ampMin {0}
privateinherited

Definition at line 31 of file ZDCFitWrapper.h.

31{0};

◆ m_expFermiFunc

std::shared_ptr<TF1> ZDCFitExpFermiLinearFixedTaus::m_expFermiFunc
private

Definition at line 1151 of file ZDCFitWrapper.h.

◆ m_finalized

bool ZDCFitWrapper::m_finalized {false}
privateinherited

Definition at line 42 of file ZDCFitWrapper.h.

42{false};

◆ m_norm

float ZDCFitExpFermiLinearFixedTaus::m_norm {}
private

Definition at line 1148 of file ZDCFitWrapper.h.

1148{};

◆ m_t0Max

float ZDCFitWrapper::m_t0Max {0}
privateinherited

Definition at line 35 of file ZDCFitWrapper.h.

35{0};

◆ m_t0Min

float ZDCFitWrapper::m_t0Min {0}
privateinherited

Definition at line 34 of file ZDCFitWrapper.h.

34{0};

◆ m_tau1

float ZDCFitExpFermiLinearFixedTaus::m_tau1 {}
private

Definition at line 1145 of file ZDCFitWrapper.h.

1145{};

◆ m_tau2

float ZDCFitExpFermiLinearFixedTaus::m_tau2 {}
private

Definition at line 1146 of file ZDCFitWrapper.h.

1146{};

◆ m_tempTmax

float ZDCFitWrapper::m_tempTmax {0}
privateinherited

Definition at line 40 of file ZDCFitWrapper.h.

40{0};

◆ m_tempTmin

float ZDCFitWrapper::m_tempTmin {0}
privateinherited

Definition at line 39 of file ZDCFitWrapper.h.

39{0};

◆ m_timeCorr

float ZDCFitExpFermiLinearFixedTaus::m_timeCorr {}
private

Definition at line 1149 of file ZDCFitWrapper.h.

1149{};

◆ m_tmax

float ZDCFitWrapper::m_tmax {0}
privateinherited

Definition at line 29 of file ZDCFitWrapper.h.

29{0};

◆ m_tmin

float ZDCFitWrapper::m_tmin {0}
privateinherited

Definition at line 28 of file ZDCFitWrapper.h.

28{0};

◆ m_tminAdjust

float ZDCFitWrapper::m_tminAdjust {0}
privateinherited

Definition at line 38 of file ZDCFitWrapper.h.

38{0};

◆ m_wrapperTF1

std::shared_ptr<TF1> ZDCFitWrapper::m_wrapperTF1 {}
privateinherited

Definition at line 26 of file ZDCFitWrapper.h.

26{};

The documentation for this class was generated from the following files: