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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiFixedTaus:
Collaboration diagram for ZDCFitExpFermiFixedTaus:

Public Member Functions

 ZDCFitExpFermiFixedTaus (const std::string &tag, float tmin, float tmax, float tau1, float tau2)
 ~ZDCFitExpFermiFixedTaus ()
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)
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 {0}
float m_tau2 {0}
float m_norm {0}
float m_timeCorr {0}
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}

Detailed Description

Definition at line 366 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiFixedTaus()

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

Definition at line 302 of file ZDCFitWrapper.cxx.

302 :
303 ZDCFitWrapper(std::make_shared<TF1>(("ExpFermiFixedTaus" + tag).c_str(), this, tmin, tmax, 3)),
304 m_tau1(tau1), m_tau2(tau2)
305{
306 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
307
308 // BAC, parameter 0 limits now is set in DoInitialize
309 theTF1->SetParLimits(1, tmin, tmax);
310
311 theTF1->SetParName(0, "Amp");
312 theTF1->SetParName(1, "T0");
313 theTF1->SetParName(2, "C");
314
315 // Now create the reference function that we use to evaluate ExpFermiFit more efficiently
316 //
317 std::string funcNameRefFunc = "ExpFermiFixedTausRefFunc" + tag;
318 m_expFermiFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFit, -50, 100, 5);
319
320 m_expFermiFunc->SetParameter(0, 1);
321 m_expFermiFunc->SetParameter(1, 0);
322 m_expFermiFunc->SetParameter(2, m_tau1);
323 m_expFermiFunc->SetParameter(3, m_tau2);
324 m_expFermiFunc->SetParameter(4, 0);
325
326 m_norm = 1. / m_expFermiFunc->GetMaximum();
327 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
328}
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)

◆ ~ZDCFitExpFermiFixedTaus()

ZDCFitExpFermiFixedTaus::~ZDCFitExpFermiFixedTaus ( )
inline

Definition at line 381 of file ZDCFitWrapper.h.

381{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiFixedTaus::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 337 of file ZDCFitWrapper.cxx.

338{
339 // We force the constant tersm to zero
340 //
341 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
342
343 theTF1->FixParameter(2, 0);
344}

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 330 of file ZDCFitWrapper.cxx.

331{
332 GetWrapperTF1()->SetParameter(0, initialAmp);
333 GetWrapperTF1()->SetParameter(1, initialT0);
334
335 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
336}

◆ GetAmpError()

virtual float ZDCFitExpFermiFixedTaus::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 390 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiFixedTaus::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 389 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiFixedTaus::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 408 of file ZDCFitWrapper.h.

409 {
410 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
411 double amp = theTF1->GetParameter(0);
412 if (amp <= 0) return -1;
413
414 double C = theTF1->GetParameter(2);
415 return C / amp;
416 }
struct color C

◆ GetMaxAmp()

float ZDCFitWrapper::GetMaxAmp ( ) const
inlineinherited

Definition at line 91 of file ZDCFitWrapper.h.

91{return m_ampMax;}

◆ GetMinAmp()

float ZDCFitWrapper::GetMinAmp ( ) const
inlineinherited

Definition at line 90 of file ZDCFitWrapper.h.

90{return m_ampMin;}

◆ GetNumShapeParameters()

virtual unsigned int ZDCFitExpFermiFixedTaus::GetNumShapeParameters ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 399 of file ZDCFitWrapper.h.

399{return 2;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 401 of file ZDCFitWrapper.h.

402 {
403 if (index == 0) return m_tau1;
404 else if (index == 1) return m_tau2;
405 else throw std::runtime_error("Fit parameter does not exist.");
406 }

◆ GetT0Max()

float ZDCFitWrapper::GetT0Max ( ) const
inlineinherited

Definition at line 101 of file ZDCFitWrapper.h.

101 {
102 if (m_adjTLimitsEvent) return m_tempTmax;
103 else return m_t0Max;
104 }

◆ GetT0Min()

float ZDCFitWrapper::GetT0Min ( ) const
inlineinherited

Definition at line 96 of file ZDCFitWrapper.h.

96 {
97 if (m_adjTLimitsEvent) return m_tempTmin;
98 else return m_t0Min;
99 }

◆ GetTau1()

virtual float ZDCFitExpFermiFixedTaus::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 392 of file ZDCFitWrapper.h.

392{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiFixedTaus::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 393 of file ZDCFitWrapper.h.

393{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiFixedTaus::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 395 of file ZDCFitWrapper.h.

395 {
396 return GetWrapperTF1()->GetParameter(1) + m_timeCorr; // Correct the time to the maximum
397 }

◆ GetTMax()

float ZDCFitWrapper::GetTMax ( ) const
inlineinherited

Definition at line 94 of file ZDCFitWrapper.h.

94{return m_tmax;}

◆ GetTMin()

float ZDCFitWrapper::GetTMin ( ) const
inlineinherited

Definition at line 93 of file ZDCFitWrapper.h.

93{return m_tmin;}

◆ GetTMinAdjust()

float ZDCFitWrapper::GetTMinAdjust ( ) const
inlineinherited

Definition at line 106 of file ZDCFitWrapper.h.

106{return m_tminAdjust;}

◆ GetWrapperTF1() [1/2]

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

Definition at line 115 of file ZDCFitWrapper.h.

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

◆ GetWrapperTF1() [2/2]

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

Definition at line 116 of file ZDCFitWrapper.h.

116{return m_wrapperTF1.get();}

◆ GetWrapperTF1RawPtr()

virtual TF1 * ZDCFitWrapper::GetWrapperTF1RawPtr ( ) const
inlinevirtualinherited

Definition at line 117 of file ZDCFitWrapper.h.

117{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 ZDCFitExpFermiFixedTaus::operator() ( const double * x,
const double * p )
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 418 of file ZDCFitWrapper.h.

419 {
420 double amp = p[0];
421 double t0 = p[1];
422 double C = p[2];
423
424 double deltaT = x[0] - t0;
425
426 double expFermi = amp * m_norm * m_expFermiFunc->operator()(deltaT);
427
428 return expFermi + C; // + bckgd;
429 }
static Double_t t0
#define x

◆ SetAmpMinMax()

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

Definition at line 67 of file ZDCFitWrapper.h.

68 {
69 m_ampMin = minAmp;
70 m_ampMax = maxAmp;
71 }

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 351 of file ZDCFitWrapper.cxx.

352{
353 GetWrapperTF1()->SetParLimits(1, t0Min, t0Max);
354}

◆ SetT0Range()

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

Definition at line 73 of file ZDCFitWrapper.h.

74 {
75 m_t0Min = t0Min;
76 m_t0Max = t0Max;
77
78 SetT0FitLimits(t0Min, t0Max);
79 }

◆ UnconstrainFit()

void ZDCFitExpFermiFixedTaus::UnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 345 of file ZDCFitWrapper.cxx.

346{
347 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
348 theTF1->ReleaseParameter(2);
349}

Member Data Documentation

◆ m_adjTLimitsEvent

bool ZDCFitWrapper::m_adjTLimitsEvent {false}
privateinherited

Definition at line 36 of file ZDCFitWrapper.h.

36{false};

◆ m_ampMax

float ZDCFitWrapper::m_ampMax {0}
privateinherited

Definition at line 31 of file ZDCFitWrapper.h.

31{0};

◆ m_ampMin

float ZDCFitWrapper::m_ampMin {0}
privateinherited

Definition at line 30 of file ZDCFitWrapper.h.

30{0};

◆ m_expFermiFunc

std::shared_ptr<TF1> ZDCFitExpFermiFixedTaus::m_expFermiFunc {}
private

Definition at line 375 of file ZDCFitWrapper.h.

375{};

◆ m_norm

float ZDCFitExpFermiFixedTaus::m_norm {0}
private

Definition at line 372 of file ZDCFitWrapper.h.

372{0};

◆ m_t0Max

float ZDCFitWrapper::m_t0Max {0}
privateinherited

Definition at line 34 of file ZDCFitWrapper.h.

34{0};

◆ m_t0Min

float ZDCFitWrapper::m_t0Min {0}
privateinherited

Definition at line 33 of file ZDCFitWrapper.h.

33{0};

◆ m_tau1

float ZDCFitExpFermiFixedTaus::m_tau1 {0}
private

Definition at line 369 of file ZDCFitWrapper.h.

369{0};

◆ m_tau2

float ZDCFitExpFermiFixedTaus::m_tau2 {0}
private

Definition at line 370 of file ZDCFitWrapper.h.

370{0};

◆ m_tempTmax

float ZDCFitWrapper::m_tempTmax {0}
privateinherited

Definition at line 39 of file ZDCFitWrapper.h.

39{0};

◆ m_tempTmin

float ZDCFitWrapper::m_tempTmin {0}
privateinherited

Definition at line 38 of file ZDCFitWrapper.h.

38{0};

◆ m_timeCorr

float ZDCFitExpFermiFixedTaus::m_timeCorr {0}
private

Definition at line 373 of file ZDCFitWrapper.h.

373{0};

◆ m_tmax

float ZDCFitWrapper::m_tmax {0}
privateinherited

Definition at line 28 of file ZDCFitWrapper.h.

28{0};

◆ m_tmin

float ZDCFitWrapper::m_tmin {0}
privateinherited

Definition at line 27 of file ZDCFitWrapper.h.

27{0};

◆ m_tminAdjust

float ZDCFitWrapper::m_tminAdjust {0}
privateinherited

Definition at line 37 of file ZDCFitWrapper.h.

37{0};

◆ m_wrapperTF1

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

Definition at line 25 of file ZDCFitWrapper.h.

25{};

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