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 (const std::string &tag, const std::string &overRideParams, float tmin, float tmax, float tau1, float tau2)
 ~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 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 ()
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 Member Functions

virtual void DoFinalize () override

Private Attributes

float m_tau1 {0}
float m_tau2 {0}
float m_tFuncMax {-999}
float m_funcMax {-999}
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}
bool m_haveParameterSet {false}
std::vector< FitParameter > m_parameterSet
bool m_finalized {false}

Static Private Attributes

static const std::map< std::string, std::vector< ZDCFitWrapper::FitParameter > > s_ConfigParamMap

Detailed Description

Definition at line 972 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiInductPreExp() [1/2]

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

Definition at line 1081 of file ZDCFitWrapper.cxx.

1082 :
1083 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiInductPreExp" + tag).c_str(), this, tmin, tmax, 10), defExpTau, fixExpTau),
1084 m_tau1(tau1), m_tau2(tau2)
1085{
1086 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
1087 //
1088 std::string funcNameRefFunc = "ExpFermiInductPreExpRefFunc" + tag;
1089
1090 m_expFermiInductFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitInduct, tmin, tmax, 10);
1091
1092 // The parameters for the FermiExpInduct
1093 //
1094 m_expFermiInductFunc->SetParameter(0, 1);
1095 m_expFermiInductFunc->SetParameter(1, 0);
1096 m_expFermiInductFunc->SetParameter(2, m_tau1); // tau1 is fixed
1097 m_expFermiInductFunc->SetParameter(3, m_tau2); // tau2 is fixed
1098 m_expFermiInductFunc->SetParameter(4, 0); // the constant term will be handled directly not here
1099 m_expFermiInductFunc->SetParameter(5, 14); // the period will be fixed
1100 m_expFermiInductFunc->SetParameter(6, 0.25); // A will be varied as part of the fit
1101 m_expFermiInductFunc->SetParameter(7, 0.5); // B will be varied as part of the fit
1102 m_expFermiInductFunc->SetParameter(8, 0.18);
1103 m_expFermiInductFunc->SetParameter(9, 0.015);
1104
1105 // Now set up the actual TF1
1106 //
1107 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
1108 theTF1->SetParName(0, "Amp");
1109 theTF1->SetParName(1, "T0");
1110 theTF1->SetParName(2, "Aexp");
1111 theTF1->SetParName(3, "tauexp");
1112 theTF1->SetParName(4, "bsqrtexp");
1113 theTF1->SetParName(5, "C");
1114 theTF1->SetParName(6, "Period");
1115 theTF1->SetParName(7, "IndA");
1116 theTF1->SetParName(8, "IndB");
1117 theTF1->SetParName(9, "bI");
1118
1119 theTF1->SetParLimits(1, tmin, tmax);
1120 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.
1121 theTF1->SetParLimits(3, 4, 12);
1122 theTF1->SetParLimits(4, -0.001, 0.001);
1123 theTF1->SetParLimits(5, -10, 10);
1124 theTF1->FixParameter(6, 13);
1125 theTF1->SetParLimits(7, -0.1, 2);
1126 theTF1->SetParLimits(8, -0.1, 2);
1127 theTF1->SetParLimits(9, -0.05, 0.5);
1128
1129}
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() [2/2]

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

Definition at line 1131 of file ZDCFitWrapper.cxx.

1131 :
1132 ZDCPreExpFitWrapper(std::make_shared<TF1>(("ExpFermiInductPreExp" + tag).c_str(), this, tmin, tmax, 10), s_ConfigParamMap.at("default")),
1133 m_tau1(tau1), m_tau2(tau2)
1134{
1135 auto iter = s_ConfigParamMap.find(paramSet);
1136 if (iter == s_ConfigParamMap.end()) throw std::runtime_error("ZDCFitExpFermiVariableTausInduct:: invalid parameter set identifier: " + paramSet);
1137
1138 std::vector<ZDCFitWrapper::FitParameter> overRideParams = iter->second;
1139
1140 OverrideParameterSet(overRideParams);
1141
1142 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
1143 //
1144 std::string funcNameRefFunc = "ExpFermiInductPreExpRefFunc" + tag;
1145
1146 m_expFermiInductFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitInduct, tmin, tmax, 10);
1147
1148 // The parameters for the FermiExpInduct
1149 //
1150 m_expFermiInductFunc->SetParameter(0, 1);
1151 m_expFermiInductFunc->SetParameter(1, 0);
1152 m_expFermiInductFunc->SetParameter(2, m_tau1); // tau1 is fixed
1153 m_expFermiInductFunc->SetParameter(3, m_tau2); // tau2 is fixed
1154 m_expFermiInductFunc->SetParameter(4, 0); // the constant term will be handled directly not here
1155 m_expFermiInductFunc->SetParameter(5, 14); // the period will be fixed
1156 m_expFermiInductFunc->SetParameter(6, 0.25); // A will be varied as part of the fit
1157 m_expFermiInductFunc->SetParameter(7, 0.5); // B will be varied as part of the fit
1158 m_expFermiInductFunc->SetParameter(8, 0.18);
1159 m_expFermiInductFunc->SetParameter(9, 0.015);
1160}
static const std::map< std::string, std::vector< ZDCFitWrapper::FitParameter > > s_ConfigParamMap
void OverrideParameterSet(const std::vector< FitParameter > &parameterSet)

◆ ~ZDCFitExpFermiInductPreExp()

ZDCFitExpFermiInductPreExp::~ZDCFitExpFermiInductPreExp ( )
inline

Definition at line 1005 of file ZDCFitWrapper.h.

1005{}

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

Implements ZDCFitWrapper.

Definition at line 1195 of file ZDCFitWrapper.cxx.

1196{
1197}

◆ DoFinalize()

virtual void ZDCFitExpFermiInductPreExp::DoFinalize ( )
inlineoverrideprivatevirtual

Reimplemented from ZDCFitWrapper.

Definition at line 985 of file ZDCFitWrapper.h.

986 {
987 m_expFermiInductFunc->SetNpx(20);
988 double t0 = GetWrapperTF1()->GetParameter(1);
989 double tsubtr = getInductFuncTimeMax(m_expFermiInductFunc.get());
990 if (std::isnan(tsubtr)) {
991 m_tFuncMax = -100;
992 m_funcMax = 0;
993 }
994 else {
995 m_tFuncMax = tsubtr + t0;
996 m_funcMax = m_expFermiInductFunc->Eval(tsubtr);
997 }
998 }
static Double_t t0
double getInductFuncTimeMax(const TF1 *theTF1)

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 1162 of file ZDCFitWrapper.cxx.

1163{
1164 GetWrapperTF1()->SetParameter(0, std::max(initialAmp, ampMin));
1165
1166 float t0 = initialT0;
1167 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
1168 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
1169 GetWrapperTF1()->SetParameter(1, t0);
1170
1171 GetWrapperTF1()->SetParameter(2, 1);
1172 GetWrapperTF1()->SetParameter(3, std::max(getDefaultExpTau(), (float) 6.01));
1173 GetWrapperTF1()->SetParameter(6, 14);
1174 GetWrapperTF1()->SetParameter(7, 0.2);
1175 GetWrapperTF1()->SetParameter(8, 0.2);
1176 GetWrapperTF1()->SetParameter(9, 0.01);
1177
1178 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
1179
1180 // Set parameter errors for fit step size
1181 //
1182 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
1183 GetWrapperTF1()->SetParError(0, ampStep);
1184 GetWrapperTF1()->SetParError(1, 1.0);
1185 GetWrapperTF1()->SetParError(2, 5.0);
1186 GetWrapperTF1()->SetParError(3, 0.5);
1187 GetWrapperTF1()->SetParError(4, 0.01);
1188 GetWrapperTF1()->SetParError(5, 1);
1189 GetWrapperTF1()->SetParError(6, 1);
1190 GetWrapperTF1()->SetParError(7, 0.05);
1191 GetWrapperTF1()->SetParError(8, 0.05);
1192 GetWrapperTF1()->SetParError(9, 0.01);
1193}
float GetT0Max() const
float GetT0Min() const
float getDefaultExpTau() const

◆ doUnconstrainFit()

void ZDCFitExpFermiInductPreExp::doUnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 1198 of file ZDCFitWrapper.cxx.

1199{
1200}

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

Implements ZDCFitWrapper.

Definition at line 1023 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiInductPreExp::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1018 of file ZDCFitWrapper.h.

1018 {
1019 if (finalized()) return m_funcMax;
1021 }
bool finalized() const

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiInductPreExp::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1050 of file ZDCFitWrapper.h.

1051 {
1052 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
1053 double amp = theTF1->GetParameter(0);
1054 if (amp < 1e-6) return -1;
1055
1056 double maxTime = GetTime();
1057
1058 double expAmp = theTF1->GetParameter(2);
1059 double expTau = theTF1->GetParameter(3);
1060 double bexpSqrt = theTF1->GetParameter(4);
1061
1062 double tRef = GetTMinAdjust();
1063 double expPre = expAmp * (std::exp(-maxTime/expTau - bexpSqrt*maxTime*maxTime) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
1064
1065 return expPre / (amp + expPre);
1066 }
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 ZDCFitExpFermiInductPreExp::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 1035 of file ZDCFitWrapper.h.

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

◆ GetExpTau()

virtual float ZDCFitExpFermiInductPreExp::GetExpTau ( ) const
inlineoverridevirtual

Implements ZDCPreExpFitWrapper.

Definition at line 1036 of file ZDCFitWrapper.h.

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

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

Implements ZDCFitWrapper.

Definition at line 1038 of file ZDCFitWrapper.h.

1038{return 3;}

◆ 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 ZDCFitExpFermiInductPreExp::GetShapeParameter ( size_t index) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1040 of file ZDCFitWrapper.h.

1041 {
1042 if (index < 3) {
1043 if (index == 0) return GetWrapperTF1()->GetParameter(4);
1044 if (index == 1) return GetWrapperTF1()->GetParameter(6);
1045 if (index == 2) return GetWrapperTF1()->GetParameter(7);
1046 }
1047 throw std::runtime_error("Fit parameter does not exist.");
1048 }

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

Implements ZDCFitWrapper.

Definition at line 1025 of file ZDCFitWrapper.h.

1025{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiInductPreExp::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1026 of file ZDCFitWrapper.h.

1026{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiInductPreExp::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1028 of file ZDCFitWrapper.h.

1028 {
1029 if (finalized()) return m_tFuncMax;
1030 double timeMax = getInductFuncTimeMax(m_expFermiInductFunc.get());
1031 if (std::isnan(timeMax)) return -100;
1032 else return + GetWrapperTF1()->GetParameter(1);
1033 }

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

Implements ZDCFitWrapper.

Definition at line 1068 of file ZDCFitWrapper.h.

1069 {
1070 double t = x[0];
1071
1072 double amp = p[0];
1073 double t0 = p[1];
1074
1075 double expAmp = p[2];
1076 double expTau = p[3];
1077 double bexpSqrt = p[4];
1078 double C = p[5];
1079 double period = p[6];
1080 double inductA = p[7];
1081 double inductB = p[8];
1082 double bI = p[9];
1083
1084 m_expFermiInductFunc->SetParameter(0, amp);
1085 m_expFermiInductFunc->SetParameter(5, period);
1086 m_expFermiInductFunc->SetParameter(6, inductA);
1087 m_expFermiInductFunc->SetParameter(7, inductB);
1088 m_expFermiInductFunc->SetParameter(8, bI);
1089
1090 double deltaT = t - t0;
1091 double pulse = m_expFermiInductFunc->operator()(deltaT);
1092
1093 // We subtract off the value of the exponential pulse at the minimum time (nominally 0),
1094 // because it would have been included in the baseline subtraction
1095 //
1096 double tRef = GetTMinAdjust();
1097 double expPre = 0;
1098
1099 expPre = expAmp * (std::exp(-t/expTau - bexpSqrt*t*t) - std::exp(-tRef/expTau - bexpSqrt*tRef*tRef));
1100
1101 return pulse + C + expPre;
1102 }
#define x
struct color C

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

Implements ZDCPreExpFitWrapper.

Definition at line 1010 of file ZDCFitWrapper.h.

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

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 1202 of file ZDCFitWrapper.cxx.

1203{
1204 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1205 theTF1->SetParLimits(1, t0Min, t0Max);
1206}

◆ 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_expFermiInductFunc

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

Definition at line 982 of file ZDCFitWrapper.h.

982{0};

◆ m_expFermiPreFunc

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

Definition at line 983 of file ZDCFitWrapper.h.

983{0};

◆ 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_funcMax

float ZDCFitExpFermiInductPreExp::m_funcMax {-999}
private

Definition at line 980 of file ZDCFitWrapper.h.

980{-999};

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

Definition at line 976 of file ZDCFitWrapper.h.

976{0};

◆ m_tau2

float ZDCFitExpFermiInductPreExp::m_tau2 {0}
private

Definition at line 977 of file ZDCFitWrapper.h.

977{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_tFuncMax

float ZDCFitExpFermiInductPreExp::m_tFuncMax {-999}
private

Definition at line 979 of file ZDCFitWrapper.h.

979{-999};

◆ 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{};

◆ s_ConfigParamMap

const std::map< std::string, std::vector< ZDCFitWrapper::FitParameter > > ZDCFitExpFermiInductPreExp::s_ConfigParamMap
staticprivate
Initial value:
=
{
{"default",
{{{"A", 1000, false, 2, 5000, 50, false, 0}},
{{"T0", 40, false, 0, 100, 1, false, 0}},
{{"Aexp", 0, false, 0.5, 3, 0.05, false, 0}},
{{"tauexp", 0, false, 3.5, 8, 0.25, false, 0}},
{{"bsqrtexp", 0, false, -50, 50, 1, true, 0}},
{{"C", 0, false, -50, 50, 1, true, 0}},
{{"period", 13.5, true, 0, 0, 0, false, 0}},
{{"IndA", 0.2, false, -2, 2, 0.1, false, 0}},
{{"IndB", 0.2, false, -2, 2, 0.1, false, 0}},
{{"bI", -0.02, true, -0.5, 0.5, 0.025, true, -0.02}}
}
},
{"PbPb2025",
{{{"period", 13.5, true, 0, 0, 0, false, 0}},
{{"IndA", 0.1, false, -0.5, 2, 0.1, true, 0}},
{{"IndB", 0.2, false, -0.5, 2, 0.1, false, 0}},
{{"bI", -0.02, true, -0.5, 0.5, 0.025, true, -0.02}},
}
},
{"PbPb2025FreeInduct",
{{{"period", 13, false, 10, 30, 1, true, 13}},
{{"IndA", 0.25, false, -1, 2, 0.1, true, 0}},
{{"IndB", 0.8, false, -1, 2, 0.1, false, 0}},
{{"bI", -0.025, false, -0.5, 0.5, 0, false, 0}},
}
}
}

Definition at line 57 of file ZDCFitWrapper.h.

57 {return std::get<6>(m_parData);}
58 float constrainValue() const {return std::get<7>(m_parData);}
59 };
60
61
62private:
63 std::shared_ptr<TF1> m_wrapperTF1{};
64
65 float m_tmin{0};
66 float m_tmax{0};
67
68 float m_ampMin{0};
69 float m_ampMax{0};
70
71 float m_t0Min{0};
72 float m_t0Max{0};
73
74 bool m_adjTLimitsEvent{false};
75 float m_tminAdjust{0};
76 float m_tempTmin{0};
77 float m_tempTmax{0};
78
79 bool m_haveParameterSet{false};
80 std::vector<FitParameter> m_parameterSet;
81
82 bool m_finalized{false};
83
84protected:
85 // Actually sets the t0 parameter limits in the fit function
86 //

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