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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiLHCfPreExp:
Collaboration diagram for ZDCFitExpFermiLHCfPreExp:

Public Member Functions

 ZDCFitExpFermiLHCfPreExp (const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
 ~ZDCFitExpFermiLHCfPreExp ()
virtual void DoInitialize (float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void SetT0FitLimits (float tMin, float tMax) override
virtual void SetInitialExpPulse (float amp) 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 float GetExpAmp () const override
virtual float GetExpTau () 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
bool fixExpTau () const
float getDefaultExpTau () const
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

Protected Attributes

float m_defaultTau
bool m_fixTau

Private Attributes

float m_tau1 {0}
float m_tau2 {0}
float m_timeCorr {0}
std::shared_ptr< TF1 > m_expFermiLHCfFunc {}
std::shared_ptr< TF1 > m_expFermiLHCfPreFunc {}
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 671 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiLHCfPreExp()

ZDCFitExpFermiLHCfPreExp::ZDCFitExpFermiLHCfPreExp ( const std::string & tag,
float tmin,
float tmax,
float tau1,
float tau2,
float defExpTau,
float fixExpTau )

Definition at line 456 of file ZDCFitWrapper.cxx.

457 :
458 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiLHCfPreExp" + tag).c_str(), this, tmin, tmax, 8), defExpTau, fixExpTau),
459 m_tau1(tau1), m_tau2(tau2)
460{
461 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
462 //
463 std::string funcNameRefFunc = "ExpFermiLHCfPreExpRefFunc" + tag;
464
465 m_expFermiLHCfFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitRefl, tmin, tmax, 9);
466
467 // The parameters for the FermiExpRefl
468 //
469 m_expFermiLHCfFunc->SetParameter(0, 1);
470 m_expFermiLHCfFunc->SetParameter(1, 0);
471 m_expFermiLHCfFunc->SetParameter(2, m_tau1);
472 m_expFermiLHCfFunc->SetParameter(3, m_tau2);
473 m_expFermiLHCfFunc->SetParameter(4, 0);
474 m_expFermiLHCfFunc->SetParameter(5, 6.5);
475 m_expFermiLHCfFunc->SetParameter(6, 0.1);
476 m_expFermiLHCfFunc->SetParameter(7, 1.5);
477 m_expFermiLHCfFunc->SetParameter(8, 0.01);
478
479 // Now set up the actual TF1
480 //
481 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
482 theTF1->SetParName(0, "Amp");
483 theTF1->SetParName(1, "T0");
484 theTF1->SetParName(2, "Tau1");
485 theTF1->SetParName(3, "Tau2");
486 theTF1->SetParName(4, "Amp_{pre}");
487 theTF1->SetParName(5, "tau_{pre}");
488 theTF1->SetParName(6, "bsqrt_{pre}");
489 theTF1->SetParName(7, "ReflFrac");
490
491 theTF1->SetParLimits(1, tmin, tmax);
492 theTF1->SetParLimits(2, 1.0, 2);
493 theTF1->SetParLimits(3, 3.5, 5.5);
494 theTF1->SetParLimits(4, -1, 8196); // Increase the upper range to 2 times of ADC range to deal with large exponential tail case of pre-pulse.
495 theTF1->SetParLimits(5, 4, 12);
496 theTF1->SetParLimits(6, -0.001, 0.001);
497 theTF1->SetParLimits(7, -1.0e-4, 0.3);
498}
double ZDCFermiExpFitRefl(const double *xvec, const double *pvec)
std::shared_ptr< TF1 > m_expFermiLHCfFunc
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCPreExpFitWrapper(std::shared_ptr< TF1 > wrapperTF1, float defaultExpTau, bool fixTau)
bool fixExpTau() const

◆ ~ZDCFitExpFermiLHCfPreExp()

ZDCFitExpFermiLHCfPreExp::~ZDCFitExpFermiLHCfPreExp ( )
inline

Definition at line 684 of file ZDCFitWrapper.h.

684{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiLHCfPreExp::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 531 of file ZDCFitWrapper.cxx.

532{
533 // We force the constant term and per-pulse amplitude to zero
534 //
535 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
536
537 theTF1->FixParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
538 theTF1->FixParameter(6, 0);
539 theTF1->FixParameter(7, 0.20);
540}
float getDefaultExpTau() const

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 500 of file ZDCFitWrapper.cxx.

501{
502 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
503
504 float t0 = initialT0;
505 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
506 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
507 GetWrapperTF1()->SetParameter(1, t0);
508
509 GetWrapperTF1()->SetParameter(2, std::max(m_tau1, (float) 1.01));
510 GetWrapperTF1()->SetParameter(3, m_tau2);
511 GetWrapperTF1()->SetParameter(4, 0.);
512 GetWrapperTF1()->SetParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
513 GetWrapperTF1()->SetParameter(6, 0);
514 GetWrapperTF1()->SetParameter(7, 0.2);
515
516 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
517
518 // Set parameter errors for fit step size
519 //
520 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
521 GetWrapperTF1()->SetParError(0, ampStep);
522 GetWrapperTF1()->SetParError(1, 1.0);
523 GetWrapperTF1()->SetParError(2, 0.1);
524 GetWrapperTF1()->SetParError(3, 0.1);
525 GetWrapperTF1()->SetParError(4, 1.0);
526 GetWrapperTF1()->SetParError(5, 0.5);
527 GetWrapperTF1()->SetParError(6, 0.001);
528 GetWrapperTF1()->SetParError(7, 0.01);
529}
static Double_t t0
float GetT0Max() const
float GetT0Min() const

◆ fixExpTau()

bool ZDCPreExpFitWrapper::fixExpTau ( ) const
inlineinherited

Definition at line 156 of file ZDCFitWrapper.h.

156{return m_fixTau;}

◆ GetAmpError()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 698 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 697 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiLHCfPreExp::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 728 of file ZDCFitWrapper.h.

729 {
730 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
731 double amp = theTF1->GetParameter(0);
732 if (amp <= 0) return 1;
733
734 double maxTime = GetTime();
735
736 double expAmp = theTF1->GetParameter(4);
737 double expTau = theTF1->GetParameter(5);
738 double bexpSqrt = theTF1->GetParameter(6);
739
740 double tRef = GetTMinAdjust();
741 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
742
743 return expPre / (amp + expPre);
744 }
virtual float GetTime() const override
float GetTMinAdjust() const

◆ getDefaultExpTau()

float ZDCPreExpFitWrapper::getDefaultExpTau ( ) const
inlineinherited

Definition at line 157 of file ZDCFitWrapper.h.

157{return m_defaultTau;}

◆ GetExpAmp()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 717 of file ZDCFitWrapper.h.

717{return GetWrapperTF1()->GetParameter(4);}

◆ GetExpTau()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpTau ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 718 of file ZDCFitWrapper.h.

718{return GetWrapperTF1()->GetParameter(5);}

◆ GetMaxAmp()

float ZDCFitWrapper::GetMaxAmp ( ) const
inlineinherited

Definition at line 87 of file ZDCFitWrapper.h.

87{return m_ampMax;}

◆ GetMinAmp()

float ZDCFitWrapper::GetMinAmp ( ) const
inlineinherited

Definition at line 86 of file ZDCFitWrapper.h.

86{return m_ampMin;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 720 of file ZDCFitWrapper.h.

721 {
722 if (index == 0) return m_tau1;
723 else if (index == 1) return m_tau2;
724 else if (index < 5) return GetWrapperTF1()->GetParameter(index);
725 else throw std::runtime_error("Fit parameter does not exist.");
726 }

◆ GetT0Max()

float ZDCFitWrapper::GetT0Max ( ) const
inlineinherited

Definition at line 97 of file ZDCFitWrapper.h.

97 {
98 if (m_adjTLimitsEvent) return m_tempTmax;
99 else return m_t0Max;
100 }

◆ GetT0Min()

float ZDCFitWrapper::GetT0Min ( ) const
inlineinherited

Definition at line 92 of file ZDCFitWrapper.h.

92 {
93 if (m_adjTLimitsEvent) return m_tempTmin;
94 else return m_t0Min;
95 }

◆ GetTau1()

virtual float ZDCFitExpFermiLHCfPreExp::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 700 of file ZDCFitWrapper.h.

700{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiLHCfPreExp::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 701 of file ZDCFitWrapper.h.

701{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiLHCfPreExp::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 703 of file ZDCFitWrapper.h.

703 {
704 const TF1* theTF1 = GetWrapperTF1();
705
706 float fitT0 = theTF1->GetParameter(1);
707
708 float tau1 = theTF1->GetParameter(2);
709 float tau2 = theTF1->GetParameter(3);
710
711 // Correct the time to the maximum
712 //
713 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
714 return fitT0;
715 }

◆ GetTMax()

float ZDCFitWrapper::GetTMax ( ) const
inlineinherited

Definition at line 90 of file ZDCFitWrapper.h.

90{return m_tmax;}

◆ GetTMin()

float ZDCFitWrapper::GetTMin ( ) const
inlineinherited

Definition at line 89 of file ZDCFitWrapper.h.

89{return m_tmin;}

◆ GetTMinAdjust()

float ZDCFitWrapper::GetTMinAdjust ( ) const
inlineinherited

Definition at line 102 of file ZDCFitWrapper.h.

102{return m_tminAdjust;}

◆ GetWrapperTF1() [1/2]

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

Definition at line 110 of file ZDCFitWrapper.h.

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

◆ GetWrapperTF1() [2/2]

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

Definition at line 111 of file ZDCFitWrapper.h.

111{return m_wrapperTF1.get();}

◆ GetWrapperTF1RawPtr()

virtual TF1 * ZDCFitWrapper::GetWrapperTF1RawPtr ( ) const
inlinevirtualinherited

Definition at line 112 of file ZDCFitWrapper.h.

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

Implements ZDCFitWrapper.

Definition at line 746 of file ZDCFitWrapper.h.

747 {
748 double t = x[0];
749
750 double amp = p[0];
751 double t0 = p[1];
752
753 double tau1 = p[2];
754 double tau2 = p[3];
755
756 double expAmp = p[4];
757 double expTau = p[5];
758 double bexpSqrt = p[6];
759 double reflFrac = p[7];
760
761 m_expFermiLHCfFunc->SetParameter(0, amp);
762 m_expFermiLHCfFunc->SetParameter(2, tau1);
763 m_expFermiLHCfFunc->SetParameter(3, tau2);
764 m_expFermiLHCfFunc->SetParameter(6, reflFrac);
765
766 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
767
768 double deltaT = t - t0;
769 double pulse = m_expFermiLHCfFunc->operator()(deltaT);
770
771 // We subtract off the value of the exponential pulse at the minimum time (nominally 0),
772 // because it would have been included in the baseline subtraction
773 //
774 double tRef = GetTMinAdjust();
775 double expPre = 0;
776
777 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
778
779 return pulse + expPre;
780 }
#define x

◆ SetAmpMinMax()

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

Definition at line 63 of file ZDCFitWrapper.h.

64 {
65 m_ampMin = minAmp;
66 m_ampMax = maxAmp;
67 }

◆ SetInitialExpPulse()

virtual void ZDCFitExpFermiLHCfPreExp::SetInitialExpPulse ( float amp)
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 689 of file ZDCFitWrapper.h.

690 {
691 GetWrapperTF1()->SetParameter(4, std::max(amp, (float) 0.5)); //0.5 here ensures that we're above lower limit (0)
692 }

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 558 of file ZDCFitWrapper.cxx.

559{
560 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
561 theTF1->SetParLimits(1, t0Min, t0Max);
562}

◆ SetT0Range()

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

Definition at line 69 of file ZDCFitWrapper.h.

70 {
71 m_t0Min = t0Min;
72 m_t0Max = t0Max;
73
74 SetT0FitLimits(t0Min, t0Max);
75 }

◆ UnconstrainFit()

void ZDCFitExpFermiLHCfPreExp::UnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 541 of file ZDCFitWrapper.cxx.

542{
543 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
544
545 theTF1->ReleaseParameter(5);
546 theTF1->SetParLimits(5, 6, 12);
547
548 theTF1->ReleaseParameter(6);
549 theTF1->SetParLimits(6, -0.001, 0.001);
550 GetWrapperTF1()->SetParameter(6, 0);
551
552 theTF1->ReleaseParameter(7);
553 theTF1->SetParLimits(7, -1.0e-4, 0.3);
554 GetWrapperTF1()->SetParameter(7, 0.2);
555
556}

Member Data Documentation

◆ m_adjTLimitsEvent

bool ZDCFitWrapper::m_adjTLimitsEvent {false}
privateinherited

Definition at line 32 of file ZDCFitWrapper.h.

32{false};

◆ m_ampMax

float ZDCFitWrapper::m_ampMax {0}
privateinherited

Definition at line 27 of file ZDCFitWrapper.h.

27{0};

◆ m_ampMin

float ZDCFitWrapper::m_ampMin {0}
privateinherited

Definition at line 26 of file ZDCFitWrapper.h.

26{0};

◆ m_defaultTau

float ZDCPreExpFitWrapper::m_defaultTau
protectedinherited

Definition at line 146 of file ZDCFitWrapper.h.

◆ m_expFermiLHCfFunc

std::shared_ptr<TF1> ZDCFitExpFermiLHCfPreExp::m_expFermiLHCfFunc {}
private

Definition at line 678 of file ZDCFitWrapper.h.

678{};

◆ m_expFermiLHCfPreFunc

std::shared_ptr<TF1> ZDCFitExpFermiLHCfPreExp::m_expFermiLHCfPreFunc {}
private

Definition at line 679 of file ZDCFitWrapper.h.

679{};

◆ m_fixTau

bool ZDCPreExpFitWrapper::m_fixTau
protectedinherited

Definition at line 147 of file ZDCFitWrapper.h.

◆ m_t0Max

float ZDCFitWrapper::m_t0Max {0}
privateinherited

Definition at line 30 of file ZDCFitWrapper.h.

30{0};

◆ m_t0Min

float ZDCFitWrapper::m_t0Min {0}
privateinherited

Definition at line 29 of file ZDCFitWrapper.h.

29{0};

◆ m_tau1

float ZDCFitExpFermiLHCfPreExp::m_tau1 {0}
private

Definition at line 674 of file ZDCFitWrapper.h.

674{0};

◆ m_tau2

float ZDCFitExpFermiLHCfPreExp::m_tau2 {0}
private

Definition at line 675 of file ZDCFitWrapper.h.

675{0};

◆ m_tempTmax

float ZDCFitWrapper::m_tempTmax {0}
privateinherited

Definition at line 35 of file ZDCFitWrapper.h.

35{0};

◆ m_tempTmin

float ZDCFitWrapper::m_tempTmin {0}
privateinherited

Definition at line 34 of file ZDCFitWrapper.h.

34{0};

◆ m_timeCorr

float ZDCFitExpFermiLHCfPreExp::m_timeCorr {0}
private

Definition at line 676 of file ZDCFitWrapper.h.

676{0};

◆ m_tmax

float ZDCFitWrapper::m_tmax {0}
privateinherited

Definition at line 24 of file ZDCFitWrapper.h.

24{0};

◆ m_tmin

float ZDCFitWrapper::m_tmin {0}
privateinherited

Definition at line 23 of file ZDCFitWrapper.h.

23{0};

◆ m_tminAdjust

float ZDCFitWrapper::m_tminAdjust {0}
privateinherited

Definition at line 33 of file ZDCFitWrapper.h.

33{0};

◆ m_wrapperTF1

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

Definition at line 21 of file ZDCFitWrapper.h.

21{};

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