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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiInductPreExp:
Collaboration diagram for ZDCFitExpFermiInductPreExp:

Public Member Functions

 ZDCFitExpFermiInductPreExp (const std::string &tag, float tmin, float tmax, float tau1, float tau2, float defExpTau, float fixExpTau)
 ~ZDCFitExpFermiInductPreExp ()
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_expFermiInductFunc {0}
std::shared_ptr< TF1 > m_expFermiPreFunc {0}
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 854 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiInductPreExp()

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

Definition at line 762 of file ZDCFitWrapper.cxx.

763 :
764 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiInductPreExp" + tag).c_str(), this, tmin, tmax, 8), defExpTau, fixExpTau),
765 m_tau1(tau1), m_tau2(tau2)
766{
767 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
768 //
769 std::string funcNameRefFunc = "ExpFermiInductPreExpRefFunc" + tag;
770
771 m_expFermiInductFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitInduct, tmin, tmax, 9);
772
773 // The parameters for the FermiExpInduct
774 //
775 m_expFermiInductFunc->SetParameter(0, 1);
776 m_expFermiInductFunc->SetParameter(1, 0);
777 m_expFermiInductFunc->SetParameter(2, m_tau1); // tau1 is fixed
778 m_expFermiInductFunc->SetParameter(3, m_tau2); // tau2 is fixed
779 m_expFermiInductFunc->SetParameter(4, 0); // the constant term will be handled directly not here
780 m_expFermiInductFunc->SetParameter(5, 13.5); // the period will be fixed
781 m_expFermiInductFunc->SetParameter(6, 0.5); // A will be varied as part of the fit
782 m_expFermiInductFunc->SetParameter(7, 0.5); // B will be varied as part of the fit
783 m_expFermiInductFunc->SetParameter(8, 0.);
784
785 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
786
787 // Now set up the actual TF1
788 //
789 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
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");
798
799 theTF1->SetParLimits(1, tmin, tmax);
800 theTF1->SetParLimits(2, -1, 8196); // Increase the upper range to 2 times of ADC range to deal with large exponential tail case of pre-pulse.
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);
805}
double ZDCFermiExpFitInduct(const double *xvec, const double *pvec)
std::shared_ptr< TF1 > m_expFermiInductFunc
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCPreExpFitWrapper(std::shared_ptr< TF1 > wrapperTF1, float defaultExpTau, bool fixTau)
bool fixExpTau() const

◆ ~ZDCFitExpFermiInductPreExp()

ZDCFitExpFermiInductPreExp::~ZDCFitExpFermiInductPreExp ( )
inline

Definition at line 867 of file ZDCFitWrapper.h.

867{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiInductPreExp::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 836 of file ZDCFitWrapper.cxx.

837{
838}

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 807 of file ZDCFitWrapper.cxx.

808{
809 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
810
811 float t0 = initialT0;
812 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
813 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
814 GetWrapperTF1()->SetParameter(1, t0);
815
816 GetWrapperTF1()->SetParameter(2, 1);
817 GetWrapperTF1()->SetParameter(3, std::max(getDefaultExpTau(), (float) 6.01));
818 GetWrapperTF1()->SetParameter(6, 0.2);
819 GetWrapperTF1()->SetParameter(7, 0.2);
820
821 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
822
823 // Set parameter errors for fit step size
824 //
825 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
826 GetWrapperTF1()->SetParError(0, ampStep);
827 GetWrapperTF1()->SetParError(1, 1.0);
828 GetWrapperTF1()->SetParError(2, 5.0);
829 GetWrapperTF1()->SetParError(3, 0.5);
830 GetWrapperTF1()->SetParError(4, 0.01);
831 GetWrapperTF1()->SetParError(5, 1);
832 GetWrapperTF1()->SetParError(6, 0.05);
833 GetWrapperTF1()->SetParError(7, 0.05);
834}
static Double_t t0
float GetT0Max() const
float GetT0Min() const
float getDefaultExpTau() const

◆ fixExpTau()

bool ZDCPreExpFitWrapper::fixExpTau ( ) const
inlineinherited

Definition at line 161 of file ZDCFitWrapper.h.

161{return m_fixTau;}

◆ GetAmpError()

virtual float ZDCFitExpFermiInductPreExp::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 881 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiInductPreExp::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 880 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiInductPreExp::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 905 of file ZDCFitWrapper.h.

906 {
907 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
908 double amp = theTF1->GetParameter(0);
909 if (amp <= 0) return -1;
910
911 double maxTime = GetTime();
912
913 double expAmp = theTF1->GetParameter(2);
914 double expTau = theTF1->GetParameter(3);
915 double bexpSqrt = theTF1->GetParameter(4);
916
917 double tRef = GetTMinAdjust();
918 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
919
920 return expPre / (amp + expPre);
921 }
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 ZDCFitExpFermiInductPreExp::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 890 of file ZDCFitWrapper.h.

890{return GetWrapperTF1()->GetParameter(2);}

◆ GetExpTau()

virtual float ZDCFitExpFermiInductPreExp::GetExpTau ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 891 of file ZDCFitWrapper.h.

891{return GetWrapperTF1()->GetParameter(3);}

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

Implements ZDCFitWrapper.

Definition at line 893 of file ZDCFitWrapper.h.

893{return 3;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 895 of file ZDCFitWrapper.h.

896 {
897 if (index < 3) {
898 if (index == 0) return GetWrapperTF1()->GetParameter(4);
899 if (index == 1) return GetWrapperTF1()->GetParameter(6);
900 if (index == 2) return GetWrapperTF1()->GetParameter(7);
901 }
902 throw std::runtime_error("Fit parameter does not exist.");
903 }

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

Implements ZDCFitWrapper.

Definition at line 883 of file ZDCFitWrapper.h.

883{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiInductPreExp::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 884 of file ZDCFitWrapper.h.

884{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiInductPreExp::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 886 of file ZDCFitWrapper.h.

886 {
887 return GetWrapperTF1()->GetParameter(1) + m_timeCorr; // Correct the time to the maximum
888 }

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

Implements ZDCFitWrapper.

Definition at line 923 of file ZDCFitWrapper.h.

924 {
925 double t = x[0];
926
927 double amp = p[0];
928 double t0 = p[1];
929
930 double expAmp = p[2];
931 double expTau = p[3];
932 double bexpSqrt = p[4];
933 double C = p[5];
934 double inductA = p[6];
935 double inductB = p[7];
936
937 m_expFermiInductFunc->SetParameter(0, amp);
938 m_expFermiInductFunc->SetParameter(6, inductA);
939 m_expFermiInductFunc->SetParameter(7, inductB);
940
941 double deltaT = t - t0;
942 double pulse = m_expFermiInductFunc->operator()(deltaT);
943
944 // We subtract off the value of the exponential pulse at the minimum time (nominally 0),
945 // because it would have been included in the baseline subtraction
946 //
947 double tRef = GetTMinAdjust();
948 double expPre = 0;
949
950 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
951
952 return pulse + C + expPre;
953 }
#define x
struct color C

◆ 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 ZDCFitExpFermiInductPreExp::SetInitialExpPulse ( float amp)
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 872 of file ZDCFitWrapper.h.

873 {
874 GetWrapperTF1()->SetParameter(2, std::max(amp, (float) 0.5)); //0.5 here ensures that we're above lower limit (0)
875 }

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 843 of file ZDCFitWrapper.cxx.

844{
845 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
846 theTF1->SetParLimits(1, t0Min, t0Max);
847}

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

Implements ZDCFitWrapper.

Definition at line 839 of file ZDCFitWrapper.cxx.

840{
841}

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_expFermiInductFunc

std::shared_ptr<TF1> ZDCFitExpFermiInductPreExp::m_expFermiInductFunc {0}
private

Definition at line 861 of file ZDCFitWrapper.h.

861{0};

◆ m_expFermiPreFunc

std::shared_ptr<TF1> ZDCFitExpFermiInductPreExp::m_expFermiPreFunc {0}
private

Definition at line 862 of file ZDCFitWrapper.h.

862{0};

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

Definition at line 857 of file ZDCFitWrapper.h.

857{0};

◆ m_tau2

float ZDCFitExpFermiInductPreExp::m_tau2 {0}
private

Definition at line 858 of file ZDCFitWrapper.h.

858{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 ZDCFitExpFermiInductPreExp::m_timeCorr {0}
private

Definition at line 859 of file ZDCFitWrapper.h.

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