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 doConstrainFit () override
virtual void doUnconstrainFit () 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
bool HaveParameterSet () const
void OverrideParameterSet (const std::vector< FitParameter > &parameterSet)
const FitParameter & GetParameterDescr (const std::string &name)
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)
void ConstrainFit ()
void UnconstrainFit ()
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 Member Functions

void LoadDefaultParameterSet (const std::vector< FitParameter > &parameterSet)

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}
bool m_haveParameterSet {false}
std::vector< FitParameter > m_parameterSet
bool m_finalized {false}

Detailed Description

Definition at line 861 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 858 of file ZDCFitWrapper.cxx.

859 :
860 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiLHCfPreExp" + tag).c_str(), this, tmin, tmax, 8), defExpTau, fixExpTau),
861 m_tau1(tau1), m_tau2(tau2)
862{
863 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
864 //
865 std::string funcNameRefFunc = "ExpFermiLHCfPreExpRefFunc" + tag;
866
867 m_expFermiLHCfFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitRefl, tmin, tmax, 9);
868
869 // The parameters for the FermiExpRefl
870 //
871 m_expFermiLHCfFunc->SetParameter(0, 1);
872 m_expFermiLHCfFunc->SetParameter(1, 0);
873 m_expFermiLHCfFunc->SetParameter(2, m_tau1);
874 m_expFermiLHCfFunc->SetParameter(3, m_tau2);
875 m_expFermiLHCfFunc->SetParameter(4, 0);
876 m_expFermiLHCfFunc->SetParameter(5, 6.5);
877 m_expFermiLHCfFunc->SetParameter(6, 0.1);
878 m_expFermiLHCfFunc->SetParameter(7, 1.5);
879 m_expFermiLHCfFunc->SetParameter(8, 0.01);
880
881 // Now set up the actual TF1
882 //
883 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
884 theTF1->SetParName(0, "Amp");
885 theTF1->SetParName(1, "T0");
886 theTF1->SetParName(2, "Tau1");
887 theTF1->SetParName(3, "Tau2");
888 theTF1->SetParName(4, "Amp_{pre}");
889 theTF1->SetParName(5, "tau_{pre}");
890 theTF1->SetParName(6, "bsqrt_{pre}");
891 theTF1->SetParName(7, "ReflFrac");
892
893 theTF1->SetParLimits(1, tmin, tmax);
894 theTF1->SetParLimits(2, 1.0, 2);
895 theTF1->SetParLimits(3, 3.5, 5.5);
896 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.
897 theTF1->SetParLimits(5, 4, 12);
898 theTF1->SetParLimits(6, -0.001, 0.001);
899 theTF1->SetParLimits(7, -1.0e-4, 0.3);
900}
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 874 of file ZDCFitWrapper.h.

874{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitWrapper::ConstrainFit ( )
inherited

Definition at line 277 of file ZDCFitWrapper.cxx.

278{
279 if (m_haveParameterSet) {
280 auto tf1_p = GetWrapperTF1();
281
282 for (unsigned int ipar = 2; ipar < m_parameterSet.size(); ipar++) {
283 const auto & fitparDescr = m_parameterSet[ipar];
284
285 if (!fitparDescr.fixed() && fitparDescr.constrainFixed()) {
286 tf1_p->FixParameter(ipar, fitparDescr.constrainValue());
287 }
288 }
289 }
290 else doConstrainFit();
291}
std::vector< FitParameter > m_parameterSet
bool m_haveParameterSet
virtual void doConstrainFit()=0

◆ doConstrainFit()

void ZDCFitExpFermiLHCfPreExp::doConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 933 of file ZDCFitWrapper.cxx.

934{
935 // We force the constant term and per-pulse amplitude to zero
936 //
937 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
938
939 theTF1->FixParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
940 theTF1->FixParameter(6, 0);
941 theTF1->FixParameter(7, 0.20);
942}
float getDefaultExpTau() const

◆ DoFinalize()

virtual void ZDCFitWrapper::DoFinalize ( )
inlinevirtualinherited

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 902 of file ZDCFitWrapper.cxx.

903{
904 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
905
906 float t0 = initialT0;
907 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
908 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
909 GetWrapperTF1()->SetParameter(1, t0);
910
911 GetWrapperTF1()->SetParameter(2, std::max(m_tau1, (float) 1.01));
912 GetWrapperTF1()->SetParameter(3, m_tau2);
913 GetWrapperTF1()->SetParameter(4, 0.);
914 GetWrapperTF1()->SetParameter(5, std::max(getDefaultExpTau(), (float) 6.01));
915 GetWrapperTF1()->SetParameter(6, 0);
916 GetWrapperTF1()->SetParameter(7, 0.2);
917
918 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
919
920 // Set parameter errors for fit step size
921 //
922 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
923 GetWrapperTF1()->SetParError(0, ampStep);
924 GetWrapperTF1()->SetParError(1, 1.0);
925 GetWrapperTF1()->SetParError(2, 0.1);
926 GetWrapperTF1()->SetParError(3, 0.1);
927 GetWrapperTF1()->SetParError(4, 1.0);
928 GetWrapperTF1()->SetParError(5, 0.5);
929 GetWrapperTF1()->SetParError(6, 0.001);
930 GetWrapperTF1()->SetParError(7, 0.01);
931}
static Double_t t0
float GetT0Max() const
float GetT0Min() const

◆ doUnconstrainFit()

void ZDCFitExpFermiLHCfPreExp::doUnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 943 of file ZDCFitWrapper.cxx.

944{
945 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
946
947 theTF1->ReleaseParameter(5);
948 theTF1->SetParLimits(5, 6, 12);
949
950 theTF1->ReleaseParameter(6);
951 theTF1->SetParLimits(6, -0.001, 0.001);
952 GetWrapperTF1()->SetParameter(6, 0);
953
954 theTF1->ReleaseParameter(7);
955 theTF1->SetParLimits(7, -1.0e-4, 0.3);
956 GetWrapperTF1()->SetParameter(7, 0.2);
957
958}

◆ Finalize()

virtual void ZDCFitWrapper::Finalize ( )
inlinevirtualinherited

Definition at line 136 of file ZDCFitWrapper.h.

137 {
138 DoFinalize();
139 m_finalized = true;
140 }
virtual void DoFinalize()

◆ finalized()

bool ZDCFitWrapper::finalized ( ) const
inlineinherited

Definition at line 134 of file ZDCFitWrapper.h.

134{return m_finalized;}

◆ fixExpTau()

bool ZDCPreExpFitWrapper::fixExpTau ( ) const
inlineinherited

Definition at line 256 of file ZDCFitWrapper.h.

256{return m_fixTau;}

◆ GetAmpError()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 888 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiLHCfPreExp::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 887 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiLHCfPreExp::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 917 of file ZDCFitWrapper.h.

918 {
919 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
920 double amp = theTF1->GetParameter(0);
921 if (amp <= 0) return -1;
922
923 double maxTime = GetTime();
924
925 double expAmp = theTF1->GetParameter(4);
926 double expTau = theTF1->GetParameter(5);
927 double bexpSqrt = theTF1->GetParameter(6);
928
929 double tRef = GetTMinAdjust();
930 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
931
932 return expPre / (amp + expPre);
933 }
virtual float GetTime() const override
float GetTMinAdjust() const

◆ getDefaultExpTau()

float ZDCPreExpFitWrapper::getDefaultExpTau ( ) const
inlineinherited

Definition at line 257 of file ZDCFitWrapper.h.

257{return m_defaultTau;}

◆ GetExpAmp()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 907 of file ZDCFitWrapper.h.

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

◆ GetExpTau()

virtual float ZDCFitExpFermiLHCfPreExp::GetExpTau ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 908 of file ZDCFitWrapper.h.

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

◆ GetMaxAmp()

float ZDCFitWrapper::GetMaxAmp ( ) const
inlineinherited

Definition at line 172 of file ZDCFitWrapper.h.

172{return m_ampMax;}

◆ GetMinAmp()

float ZDCFitWrapper::GetMinAmp ( ) const
inlineinherited

Definition at line 171 of file ZDCFitWrapper.h.

171{return m_ampMin;}

◆ GetNumShapeParameters()

virtual unsigned int ZDCFitExpFermiLHCfPreExp::GetNumShapeParameters ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 910 of file ZDCFitWrapper.h.

910{return 1;}

◆ GetParameterDescr()

const ZDCFitWrapper::FitParameter & ZDCFitWrapper::GetParameterDescr ( const std::string & name)
inherited

Definition at line 118 of file ZDCFitWrapper.cxx.

119{
120 auto iter = std::find_if(m_parameterSet.begin(), m_parameterSet.end(),
121 [name](const FitParameter& parDesc){return parDesc.name() == name;});
122 if (iter == m_parameterSet.end()) throw std::logic_error("ZDCFitWrapper::GetParameterDescr: invalid parameter name: " + name );
123 return *iter;
124}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 911 of file ZDCFitWrapper.h.

912 {
913 if (index < 1) return GetWrapperTF1()->GetParameter(5);
914 else throw std::runtime_error("Fit parameter does not exist.");
915 }

◆ GetT0Max()

float ZDCFitWrapper::GetT0Max ( ) const
inlineinherited

Definition at line 182 of file ZDCFitWrapper.h.

182 {
183 if (m_adjTLimitsEvent) return m_tempTmax;
184 else return m_t0Max;
185 }

◆ GetT0Min()

float ZDCFitWrapper::GetT0Min ( ) const
inlineinherited

Definition at line 177 of file ZDCFitWrapper.h.

177 {
178 if (m_adjTLimitsEvent) return m_tempTmin;
179 else return m_t0Min;
180 }

◆ GetTau1()

virtual float ZDCFitExpFermiLHCfPreExp::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 890 of file ZDCFitWrapper.h.

890{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiLHCfPreExp::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 891 of file ZDCFitWrapper.h.

891{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiLHCfPreExp::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 893 of file ZDCFitWrapper.h.

893 {
894 const TF1* theTF1 = GetWrapperTF1();
895
896 float fitT0 = theTF1->GetParameter(1);
897
898 float tau1 = theTF1->GetParameter(2);
899 float tau2 = theTF1->GetParameter(3);
900
901 // Correct the time to the maximum
902 //
903 if (tau2 > tau1) fitT0 += tau1 * std::log(tau2 / tau1 - 1.0);
904 return fitT0;
905 }

◆ GetTMax()

float ZDCFitWrapper::GetTMax ( ) const
inlineinherited

Definition at line 175 of file ZDCFitWrapper.h.

175{return m_tmax;}

◆ GetTMin()

float ZDCFitWrapper::GetTMin ( ) const
inlineinherited

Definition at line 174 of file ZDCFitWrapper.h.

174{return m_tmin;}

◆ GetTMinAdjust()

float ZDCFitWrapper::GetTMinAdjust ( ) const
inlineinherited

Definition at line 187 of file ZDCFitWrapper.h.

187{return m_tminAdjust;}

◆ GetWrapperTF1() [1/2]

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

Definition at line 196 of file ZDCFitWrapper.h.

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

◆ GetWrapperTF1() [2/2]

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

Definition at line 197 of file ZDCFitWrapper.h.

197{return m_wrapperTF1.get();}

◆ GetWrapperTF1RawPtr()

virtual TF1 * ZDCFitWrapper::GetWrapperTF1RawPtr ( ) const
inlinevirtualinherited

Definition at line 198 of file ZDCFitWrapper.h.

198{return m_wrapperTF1.get();}

◆ HaveParameterSet()

bool ZDCFitWrapper::HaveParameterSet ( ) const
inlineinherited

Definition at line 127 of file ZDCFitWrapper.h.

127{return m_haveParameterSet;}

◆ Initialize() [1/2]

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

Definition at line 199 of file ZDCFitWrapper.cxx.

200{
201 // Clear the errors on the TF1 because retaining the errors seems to affect
202 // the convergence of fits
203 //
204 auto tf1_p = GetWrapperTF1();
205 unsigned int npar = tf1_p->GetNpar();
206 std::vector<double> zeroVec(npar, 0.0);
207 GetWrapperTF1()->SetParErrors(&zeroVec[0]);
208
209 // If we adjusted the time range on the previous event, restore to default
210 //
211 if (m_adjTLimitsEvent) {
213
214 m_adjTLimitsEvent = false;
215 m_tminAdjust = 0;
216 }
217
218 SetAmpMinMax(ampMin, ampMax);
219
220 //
221 // Do we have parameter sets?
222 //
223 if (m_haveParameterSet) {
224 for (unsigned int ipar = 0; ipar < m_parameterSet.size(); ipar++) {
225 //
226 // Yes, use parameter descriptors to initialize the TF1
227 //
228 const auto & fitparDescr = m_parameterSet[ipar];
229
230 if (!fitparDescr.fixed()) {
231 tf1_p->SetParameter(ipar, fitparDescr.defaultValue());
232 tf1_p->SetParError(ipar, fitparDescr.stepSize());
233 }
234 }
235
236 tf1_p->SetParameter(0, initialAmp);
237 tf1_p->SetParameter(1, initialT0);
238 }
239 else {
240 //
241 // No, perform the wrapper-implemented initialize
242 //
243 DoInitialize(initialAmp, initialT0, ampMin, ampMax);
244
245 // Clear the errors on the TF1 because retaining the errors seems to affect
246 // the convergence of fits
247 //
248 unsigned int npar = GetWrapperTF1()->GetNpar();
249 std::vector<double> zeroVec(npar, 0.0);
250 tf1_p->SetParErrors(&zeroVec[0]);
251
252 }
253}
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 255 of file ZDCFitWrapper.cxx.

256{
257
258 // First do the nominal initializatioon
259 //
260 Initialize(initialAmp, initialT0, ampMin, ampMax);
261
262 // Now account for the modified time range
263 //
264 m_adjTLimitsEvent = true;
265
266 // Handle the specific limits on T0
267 //
268 m_tminAdjust = fitTRef; // Note: this is the time corresponding to the sample used for presample subtraction
269
270 m_tempTmin = std::max(m_t0Min, fitTmin);
271 m_tempTmax = std::min(m_t0Max, fitTmax);
272
273 SetAmpMinMax(ampMin, ampMax);
275}
void Initialize(float initialAmp, float initialT0, float ampMin, float ampMax)

◆ LoadDefaultParameterSet()

void ZDCFitWrapper::LoadDefaultParameterSet ( const std::vector< FitParameter > & parameterSet)
protectedinherited

Definition at line 126 of file ZDCFitWrapper.cxx.

127{
128 // First step is to check consistency with number of parameters in TF1
129 //
130 if (int(parameterSet.size()) != m_wrapperTF1->GetNpar()) throw std::logic_error("ZDCFitWrapper::LoadDefaultParameterSet:: Incorrect number of parameters in default parameter set");
131
132 m_parameterSet = parameterSet;
133 m_haveParameterSet = true;
134
135 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
136
137 // Loop over passed descriptors
138 //
139 unsigned parIndex = 0;
140 for (const auto & parDescr : parameterSet) {
141 //
142 // Load the settings for this parameter in the TF1
143 //
144 std::string name = parDescr.name();
145 theTF1->SetParName(parIndex, name.c_str());
146
147 bool fixed = parDescr.fixed();
148
149 if (fixed) {
150 float fixedValue = parDescr.defaultValue();
151 theTF1->FixParameter(parIndex, fixedValue);
152 }
153 else {
154 float lowerLimit = parDescr.lowerLimit();
155 float upperLimit = parDescr.upperLimit();
156 theTF1->SetParLimits(parIndex, lowerLimit, upperLimit);
157 }
158
159 parIndex++;
160 }
161}

◆ operator()()

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

Implements ZDCFitWrapper.

Definition at line 935 of file ZDCFitWrapper.h.

936 {
937 double t = x[0];
938
939 double amp = p[0];
940 double t0 = p[1];
941
942 double tau1 = p[2];
943 double tau2 = p[3];
944
945 double expAmp = p[4];
946 double expTau = p[5];
947 double bexpSqrt = p[6];
948 double reflFrac = p[7];
949
950 m_expFermiLHCfFunc->SetParameter(0, amp);
951 m_expFermiLHCfFunc->SetParameter(2, tau1);
952 m_expFermiLHCfFunc->SetParameter(3, tau2);
953 m_expFermiLHCfFunc->SetParameter(6, reflFrac);
954
955 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
956
957 double deltaT = t - t0;
958 double pulse = m_expFermiLHCfFunc->operator()(deltaT);
959
960 // We subtract off the value of the exponential pulse at the minimum time (nominally 0),
961 // because it would have been included in the baseline subtraction
962 //
963 double tRef = GetTMinAdjust();
964 double expPre = 0;
965
966 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
967
968 return pulse + expPre;
969 }
#define x

◆ OverrideParameterSet()

void ZDCFitWrapper::OverrideParameterSet ( const std::vector< FitParameter > & parameterSet)
inherited

Definition at line 163 of file ZDCFitWrapper.cxx.

164{
165 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
166
167 // Loop over the provided parameter descriptors
168 //
169 for (const auto & parDescr : overParamSet) {
170 std::string inputName = parDescr.name();
171
172 // Fit the parameter name in the current list
173 //
174 auto iter = std::find_if(m_parameterSet.begin(), m_parameterSet.end(),
175 [inputName](const FitParameter& parDesc){return parDesc.name() == inputName;});
176 if (iter == m_parameterSet.end()) throw std::logic_error("ZDCFitWrapper::OverrideParameterSet: invalid parameter name: " +inputName );
177
178 // Update the descriptor for this parameter
179 //
180 (*iter) = parDescr;
181
182 // Update the settings in the TF!
183 //
184 unsigned int parIndex = std::distance(m_parameterSet.begin(), iter);
185 bool fixed = parDescr.fixed();
186
187 if (fixed) {
188 float fixedValue = parDescr.defaultValue();
189 theTF1->FixParameter(parIndex, fixedValue);
190 }
191 else {
192 float lowerLimit = parDescr.lowerLimit();
193 float upperLimit = parDescr.upperLimit();
194 theTF1->SetParLimits(parIndex, lowerLimit, upperLimit);
195 }
196 }
197}

◆ SetAmpMinMax()

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

Definition at line 147 of file ZDCFitWrapper.h.

148 {
149 m_ampMin = minAmp;
150 m_ampMax = maxAmp;
151 }

◆ SetInitialExpPulse()

virtual void ZDCFitExpFermiLHCfPreExp::SetInitialExpPulse ( float amp)
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 879 of file ZDCFitWrapper.h.

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

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 960 of file ZDCFitWrapper.cxx.

961{
962 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
963 theTF1->SetParLimits(1, t0Min, t0Max);
964}

◆ SetT0Range()

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

Definition at line 153 of file ZDCFitWrapper.h.

154 {
155 m_t0Min = t0Min;
156 m_t0Max = t0Max;
157
158 SetT0FitLimits(t0Min, t0Max);
159 }

◆ UnconstrainFit()

void ZDCFitWrapper::UnconstrainFit ( )
inherited

Definition at line 293 of file ZDCFitWrapper.cxx.

294{
295 if (m_haveParameterSet) {
296 auto tf1_p = GetWrapperTF1();
297
298 for (unsigned int ipar = 2; ipar < m_parameterSet.size(); ipar++) {
299 const auto & fitparDescr = m_parameterSet[ipar];
300
301 if (!fitparDescr.fixed() && fitparDescr.constrainFixed()) {
302 tf1_p->ReleaseParameter(ipar);
303 tf1_p->SetParameter(ipar, fitparDescr.defaultValue());
304
305 float lowerLimit = fitparDescr.lowerLimit();
306 float upperLimit = fitparDescr.upperLimit();
307 tf1_p->SetParLimits(ipar, lowerLimit, upperLimit);
308
309 tf1_p->SetParError(ipar, fitparDescr.stepSize());
310 }
311 }
312 }
313 else doUnconstrainFit();
314}
virtual void doUnconstrainFit()=0

Member Data Documentation

◆ m_adjTLimitsEvent

bool ZDCFitWrapper::m_adjTLimitsEvent {false}
privateinherited

Definition at line 74 of file ZDCFitWrapper.h.

74{false};

◆ m_ampMax

float ZDCFitWrapper::m_ampMax {0}
privateinherited

Definition at line 69 of file ZDCFitWrapper.h.

69{0};

◆ m_ampMin

float ZDCFitWrapper::m_ampMin {0}
privateinherited

Definition at line 68 of file ZDCFitWrapper.h.

68{0};

◆ m_defaultTau

float ZDCPreExpFitWrapper::m_defaultTau
protectedinherited

Definition at line 238 of file ZDCFitWrapper.h.

◆ m_expFermiLHCfFunc

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

Definition at line 868 of file ZDCFitWrapper.h.

868{};

◆ m_expFermiLHCfPreFunc

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

Definition at line 869 of file ZDCFitWrapper.h.

869{};

◆ m_finalized

bool ZDCFitWrapper::m_finalized {false}
privateinherited

Definition at line 82 of file ZDCFitWrapper.h.

82{false};

◆ m_fixTau

bool ZDCPreExpFitWrapper::m_fixTau
protectedinherited

Definition at line 239 of file ZDCFitWrapper.h.

◆ m_haveParameterSet

bool ZDCFitWrapper::m_haveParameterSet {false}
privateinherited

Definition at line 79 of file ZDCFitWrapper.h.

79{false};

◆ m_parameterSet

std::vector<FitParameter> ZDCFitWrapper::m_parameterSet
privateinherited

Definition at line 80 of file ZDCFitWrapper.h.

◆ m_t0Max

float ZDCFitWrapper::m_t0Max {0}
privateinherited

Definition at line 72 of file ZDCFitWrapper.h.

72{0};

◆ m_t0Min

float ZDCFitWrapper::m_t0Min {0}
privateinherited

Definition at line 71 of file ZDCFitWrapper.h.

71{0};

◆ m_tau1

float ZDCFitExpFermiLHCfPreExp::m_tau1 {0}
private

Definition at line 864 of file ZDCFitWrapper.h.

864{0};

◆ m_tau2

float ZDCFitExpFermiLHCfPreExp::m_tau2 {0}
private

Definition at line 865 of file ZDCFitWrapper.h.

865{0};

◆ m_tempTmax

float ZDCFitWrapper::m_tempTmax {0}
privateinherited

Definition at line 77 of file ZDCFitWrapper.h.

77{0};

◆ m_tempTmin

float ZDCFitWrapper::m_tempTmin {0}
privateinherited

Definition at line 76 of file ZDCFitWrapper.h.

76{0};

◆ m_timeCorr

float ZDCFitExpFermiLHCfPreExp::m_timeCorr {0}
private

Definition at line 866 of file ZDCFitWrapper.h.

866{0};

◆ m_tmax

float ZDCFitWrapper::m_tmax {0}
privateinherited

Definition at line 66 of file ZDCFitWrapper.h.

66{0};

◆ m_tmin

float ZDCFitWrapper::m_tmin {0}
privateinherited

Definition at line 65 of file ZDCFitWrapper.h.

65{0};

◆ m_tminAdjust

float ZDCFitWrapper::m_tminAdjust {0}
privateinherited

Definition at line 75 of file ZDCFitWrapper.h.

75{0};

◆ m_wrapperTF1

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

Definition at line 63 of file ZDCFitWrapper.h.

63{};

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