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 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
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 743 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 539 of file ZDCFitWrapper.cxx.

540 :
541 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiLHCfPreExp" + tag).c_str(), this, tmin, tmax, 8), defExpTau, fixExpTau),
542 m_tau1(tau1), m_tau2(tau2)
543{
544 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
545 //
546 std::string funcNameRefFunc = "ExpFermiLHCfPreExpRefFunc" + tag;
547
548 m_expFermiLHCfFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitRefl, tmin, tmax, 9);
549
550 // The parameters for the FermiExpRefl
551 //
552 m_expFermiLHCfFunc->SetParameter(0, 1);
553 m_expFermiLHCfFunc->SetParameter(1, 0);
554 m_expFermiLHCfFunc->SetParameter(2, m_tau1);
555 m_expFermiLHCfFunc->SetParameter(3, m_tau2);
556 m_expFermiLHCfFunc->SetParameter(4, 0);
557 m_expFermiLHCfFunc->SetParameter(5, 6.5);
558 m_expFermiLHCfFunc->SetParameter(6, 0.1);
559 m_expFermiLHCfFunc->SetParameter(7, 1.5);
560 m_expFermiLHCfFunc->SetParameter(8, 0.01);
561
562 // Now set up the actual TF1
563 //
564 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
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");
573
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); // Increase the upper range to 2 times of ADC range to deal with large exponential tail case of pre-pulse.
578 theTF1->SetParLimits(5, 4, 12);
579 theTF1->SetParLimits(6, -0.001, 0.001);
580 theTF1->SetParLimits(7, -1.0e-4, 0.3);
581}
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 756 of file ZDCFitWrapper.h.

756{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiLHCfPreExp::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 614 of file ZDCFitWrapper.cxx.

615{
616 // We force the constant term and per-pulse amplitude to zero
617 //
618 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
619
620 theTF1->FixParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
621 theTF1->FixParameter(6, 0);
622 theTF1->FixParameter(7, 0.20);
623}
float getDefaultExpTau() const

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 583 of file ZDCFitWrapper.cxx.

584{
585 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
586
587 float t0 = initialT0;
588 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
589 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
590 GetWrapperTF1()->SetParameter(1, t0);
591
592 GetWrapperTF1()->SetParameter(2, std::max(m_tau1, (float) 1.01));
593 GetWrapperTF1()->SetParameter(3, m_tau2);
594 GetWrapperTF1()->SetParameter(4, 0.);
595 GetWrapperTF1()->SetParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
596 GetWrapperTF1()->SetParameter(6, 0);
597 GetWrapperTF1()->SetParameter(7, 0.2);
598
599 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
600
601 // Set parameter errors for fit step size
602 //
603 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
604 GetWrapperTF1()->SetParError(0, ampStep);
605 GetWrapperTF1()->SetParError(1, 1.0);
606 GetWrapperTF1()->SetParError(2, 0.1);
607 GetWrapperTF1()->SetParError(3, 0.1);
608 GetWrapperTF1()->SetParError(4, 1.0);
609 GetWrapperTF1()->SetParError(5, 0.5);
610 GetWrapperTF1()->SetParError(6, 0.001);
611 GetWrapperTF1()->SetParError(7, 0.01);
612}
static Double_t t0
float GetT0Max() const
float GetT0Min() const

◆ fixExpTau()

bool ZDCPreExpFitWrapper::fixExpTau ( ) const
inlineinherited

Definition at line 161 of file ZDCFitWrapper.h.

161{return m_fixTau;}

◆ GetAmpError()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 770 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 769 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiLHCfPreExp::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 799 of file ZDCFitWrapper.h.

800 {
801 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
802 double amp = theTF1->GetParameter(0);
803 if (amp <= 0) return -1;
804
805 double maxTime = GetTime();
806
807 double expAmp = theTF1->GetParameter(4);
808 double expTau = theTF1->GetParameter(5);
809 double bexpSqrt = theTF1->GetParameter(6);
810
811 double tRef = GetTMinAdjust();
812 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
813
814 return expPre / (amp + expPre);
815 }
virtual float GetTime() const override
float GetTMinAdjust() const

◆ getDefaultExpTau()

float ZDCPreExpFitWrapper::getDefaultExpTau ( ) const
inlineinherited

Definition at line 162 of file ZDCFitWrapper.h.

162{return m_defaultTau;}

◆ GetExpAmp()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 789 of file ZDCFitWrapper.h.

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

◆ GetExpTau()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpTau ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 790 of file ZDCFitWrapper.h.

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

◆ 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 ZDCFitExpFermiLHCfPreExp::GetNumShapeParameters ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 792 of file ZDCFitWrapper.h.

792{return 1;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 793 of file ZDCFitWrapper.h.

794 {
795 if (index < 1) return GetWrapperTF1()->GetParameter(5);
796 else throw std::runtime_error("Fit parameter does not exist.");
797 }

◆ 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 ZDCFitExpFermiLHCfPreExp::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 772 of file ZDCFitWrapper.h.

772{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiLHCfPreExp::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 773 of file ZDCFitWrapper.h.

773{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiLHCfPreExp::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 775 of file ZDCFitWrapper.h.

775 {
776 const TF1* theTF1 = GetWrapperTF1();
777
778 float fitT0 = theTF1->GetParameter(1);
779
780 float tau1 = theTF1->GetParameter(2);
781 float tau2 = theTF1->GetParameter(3);
782
783 // Correct the time to the maximum
784 //
785 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
786 return fitT0;
787 }

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

Implements ZDCFitWrapper.

Definition at line 817 of file ZDCFitWrapper.h.

818 {
819 double t = x[0];
820
821 double amp = p[0];
822 double t0 = p[1];
823
824 double tau1 = p[2];
825 double tau2 = p[3];
826
827 double expAmp = p[4];
828 double expTau = p[5];
829 double bexpSqrt = p[6];
830 double reflFrac = p[7];
831
832 m_expFermiLHCfFunc->SetParameter(0, amp);
833 m_expFermiLHCfFunc->SetParameter(2, tau1);
834 m_expFermiLHCfFunc->SetParameter(3, tau2);
835 m_expFermiLHCfFunc->SetParameter(6, reflFrac);
836
837 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
838
839 double deltaT = t - t0;
840 double pulse = m_expFermiLHCfFunc->operator()(deltaT);
841
842 // We subtract off the value of the exponential pulse at the minimum time (nominally 0),
843 // because it would have been included in the baseline subtraction
844 //
845 double tRef = GetTMinAdjust();
846 double expPre = 0;
847
848 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
849
850 return pulse + expPre;
851 }
#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 }

◆ SetInitialExpPulse()

virtual void ZDCFitExpFermiLHCfPreExp::SetInitialExpPulse ( float amp)
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 761 of file ZDCFitWrapper.h.

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

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 641 of file ZDCFitWrapper.cxx.

642{
643 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
644 theTF1->SetParLimits(1, t0Min, t0Max);
645}

◆ 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 ZDCFitExpFermiLHCfPreExp::UnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 624 of file ZDCFitWrapper.cxx.

625{
626 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
627
628 theTF1->ReleaseParameter(5);
629 theTF1->SetParLimits(5, 6, 12);
630
631 theTF1->ReleaseParameter(6);
632 theTF1->SetParLimits(6, -0.001, 0.001);
633 GetWrapperTF1()->SetParameter(6, 0);
634
635 theTF1->ReleaseParameter(7);
636 theTF1->SetParLimits(7, -1.0e-4, 0.3);
637 GetWrapperTF1()->SetParameter(7, 0.2);
638
639}

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_defaultTau

float ZDCPreExpFitWrapper::m_defaultTau
protectedinherited

Definition at line 151 of file ZDCFitWrapper.h.

◆ m_expFermiLHCfFunc

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

Definition at line 750 of file ZDCFitWrapper.h.

750{};

◆ m_expFermiLHCfPreFunc

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

Definition at line 751 of file ZDCFitWrapper.h.

751{};

◆ m_fixTau

bool ZDCPreExpFitWrapper::m_fixTau
protectedinherited

Definition at line 152 of file ZDCFitWrapper.h.

◆ 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 ZDCFitExpFermiLHCfPreExp::m_tau1 {0}
private

Definition at line 746 of file ZDCFitWrapper.h.

746{0};

◆ m_tau2

float ZDCFitExpFermiLHCfPreExp::m_tau2 {0}
private

Definition at line 747 of file ZDCFitWrapper.h.

747{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 ZDCFitExpFermiLHCfPreExp::m_timeCorr {0}
private

Definition at line 748 of file ZDCFitWrapper.h.

748{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: