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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiInductPrePulse:
Collaboration diagram for ZDCFitExpFermiInductPrePulse:

Public Member Functions

 ZDCFitExpFermiInductPrePulse (const std::string &tag, float tmin, float tmax, float tau1, float tau2)
 ZDCFitExpFermiInductPrePulse (const std::string &tag, const std::string &overRideParams, float tmin, float tmax, float tau1, float tau2)
 ~ZDCFitExpFermiInductPrePulse ()
virtual void DoInitialize (float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void SetT0FitLimits (float tMin, float tMax) override
virtual void SetInitialPrePulse (float amp, float t0, float, bool) override
virtual void SetPrePulseT0Range (float tmin, float tmax) override
virtual void SetPostPulseT0Range (float, float, float) override
virtual void doConstrainFit () override
virtual void doUnconstrainFit () override
virtual unsigned int GetPreT0ParIndex () const override
virtual float GetAmplitude () const override
virtual float GetAmpError () const override
virtual float GetTau1 () const override
virtual float GetTau2 () const override
virtual float GetPreT0 () const override
virtual float GetPreAmp () const override
virtual float GetPostT0 () const override
virtual float GetPostAmp () const override
virtual float GetExpAmp () const override
virtual float GetTime () 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 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_preT0Min
float m_preT0Max

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}
double m_preNorm {1.}
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 1105 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiInductPrePulse() [1/2]

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

Definition at line 1208 of file ZDCFitWrapper.cxx.

1208 :
1209 ZDCPrePulseFitWrapper(std::make_shared<TF1>(("ExpFermiInductPrePulse" + tag).c_str(), this, tmin, tmax, 9)),
1210 m_tau1(tau1), m_tau2(tau2)
1211{
1212 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
1213 //
1214 std::string funcNameRefFunc = "ExpFermiInductPrePulseRefFunc" + tag;
1215 std::string funcNamePreFunc = "ExpFermiInductPrePulsePreFunc" + tag;
1216
1217 m_expFermiInductFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitInduct, tmin, tmax, 9);
1218 m_expFermiInductFunc->SetParameter(0, 1);
1219 m_expFermiInductFunc->SetParameter(1, 0);
1220 m_expFermiInductFunc->SetParameter(2, m_tau1);
1221 m_expFermiInductFunc->SetParameter(3, m_tau2);
1222 m_expFermiInductFunc->SetParameter(4, 0);
1223 m_expFermiInductFunc->SetParameter(5, 14);
1224 m_expFermiInductFunc->SetParameter(6, 0.25);
1225 m_expFermiInductFunc->SetParameter(7, 0.15);
1226 m_expFermiInductFunc->SetParameter(8, 0.18);
1227 m_expFermiInductFunc->SetParameter(9, 0.015);
1228
1229 m_expFermiPreFunc = std::make_shared<TF1>(funcNamePreFunc.c_str(), ZDCFermiExpFit, tmin, tmax, 5);
1230
1231 m_expFermiPreFunc->SetParameter(0, 1);
1232 m_expFermiPreFunc->SetParameter(1, 0);
1233 m_expFermiPreFunc->SetParameter(2, m_tau1);
1234 m_expFermiPreFunc->SetParameter(3, m_tau2);
1235 m_expFermiPreFunc->SetParameter(4, 0);
1236 m_preNorm = 1. / m_expFermiPreFunc->GetMaximum();
1237
1238 // Now set up the actual TF1
1239 //
1240 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
1241
1242 // The actual paerameters we fit
1243 //
1244 theTF1->SetParName(0, "Amp");
1245 theTF1->SetParName(1, "T0");
1246 theTF1->SetParName(2, "Apre");
1247 theTF1->SetParName(3, "T0pre");
1248 theTF1->SetParName(4, "C");
1249 theTF1->SetParName(5, "Period");
1250 theTF1->SetParName(6, "IndA");
1251 theTF1->SetParName(7, "IndB");
1252 theTF1->SetParName(8, "bI");
1253
1254 // BAC, parameter 0 limits now is set in DoInitialize
1255 theTF1->SetParLimits(1, tmin, tmax);
1256 theTF1->SetParLimits(2, 0, 5000);
1257 theTF1->SetParLimits(3, 0, 30);
1258 theTF1->SetParLimits(4, 0, 2);
1259 theTF1->SetParLimits(3, 4, 12);
1260 theTF1->SetParLimits(4, -50, 50);
1261 theTF1->SetParLimits(5, 10, 20);
1262 theTF1->SetParLimits(6, -0.1, 1);
1263 theTF1->SetParLimits(7, -0.1, 1);
1264 theTF1->SetParLimits(9, -0.2, 0.2);
1265
1266 GetWrapperTF1()->FixParameter(5, 14);
1267 GetWrapperTF1()->FixParameter(8, 0.02);
1268}
double ZDCFermiExpFit(const double *xvec, const double *pvec)
double ZDCFermiExpFitInduct(const double *xvec, const double *pvec)
std::shared_ptr< TF1 > m_expFermiPreFunc
std::shared_ptr< TF1 > m_expFermiInductFunc
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCPrePulseFitWrapper(std::shared_ptr< TF1 > wrapperTF1)

◆ ZDCFitExpFermiInductPrePulse() [2/2]

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

Definition at line 1270 of file ZDCFitWrapper.cxx.

1270 :
1271 ZDCPrePulseFitWrapper(std::make_shared<TF1>(("ExpFermiInductPrePulse" + tag).c_str(), this, tmin, tmax, 9), s_ConfigParamMap.at("default")),
1272 m_tau1(tau1), m_tau2(tau2)
1273{
1274 auto iter = s_ConfigParamMap.find(paramSet);
1275 if (iter == s_ConfigParamMap.end()) throw std::runtime_error("ZDCFitExpFermiVariableTausInduct:: invalid parameter set identifier: " + paramSet);
1276
1277 std::vector<ZDCFitWrapper::FitParameter> overRideParams = iter->second;
1278
1279 OverrideParameterSet(overRideParams);
1280
1281 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
1282 //
1283 std::string funcNameRefFunc = "ExpFermiInductPrePulseRefFunc" + tag;
1284 std::string funcNamePreFunc = "ExpFermiInductPrePulsePreFunc" + tag;
1285
1286 m_expFermiPreFunc = std::make_shared<TF1>(funcNamePreFunc.c_str(), ZDCFermiExpFit, tmin, tmax, 5);
1287
1288 m_expFermiPreFunc->SetParameter(0, 1);
1289 m_expFermiPreFunc->SetParameter(1, 0);
1290 m_expFermiPreFunc->SetParameter(2, m_tau1);
1291 m_expFermiPreFunc->SetParameter(3, m_tau2);
1292 m_expFermiPreFunc->SetParameter(4, 0);
1293
1294 // Make the base function that we use
1295 //
1296 m_expFermiInductFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFitInduct, tmin, tmax, 9);
1297 m_expFermiInductFunc->SetParameter(0, 1);
1298 m_expFermiInductFunc->SetParameter(1, 0);
1299 m_expFermiInductFunc->SetParameter(2, m_tau1);
1300 m_expFermiInductFunc->SetParameter(3, m_tau2);
1301 m_expFermiInductFunc->SetParameter(4, 0);
1302 m_expFermiInductFunc->SetParameter(5, 14);
1303 m_expFermiInductFunc->SetParameter(6, 0.25);
1304 m_expFermiInductFunc->SetParameter(7, 0.15);
1305 m_expFermiInductFunc->SetParameter(8, 0.18);
1306 m_expFermiInductFunc->SetParameter(9, 0.015);
1307
1308}
static const std::map< std::string, std::vector< ZDCFitWrapper::FitParameter > > s_ConfigParamMap
void OverrideParameterSet(const std::vector< FitParameter > &parameterSet)

◆ ~ZDCFitExpFermiInductPrePulse()

ZDCFitExpFermiInductPrePulse::~ZDCFitExpFermiInductPrePulse ( )
inline

Definition at line 1135 of file ZDCFitWrapper.h.

1135{}

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

Implements ZDCFitWrapper.

Definition at line 1310 of file ZDCFitWrapper.cxx.

1311{
1312 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1313 theTF1->FixParameter(4, 0);
1314 theTF1->FixParameter(5, 0);
1315 theTF1->FixParameter(7, 0);
1316}

◆ DoFinalize()

virtual void ZDCFitExpFermiInductPrePulse::DoFinalize ( )
inlineoverrideprivatevirtual

Reimplemented from ZDCFitWrapper.

Definition at line 1120 of file ZDCFitWrapper.h.

1121 {
1122 m_expFermiInductFunc->SetNpx(20);
1123 double t0 = GetWrapperTF1()->GetParameter(1);
1124 double tsubtr = getInductFuncTimeMax(m_expFermiInductFunc.get());
1125
1126 m_tFuncMax = tsubtr + t0;
1127 m_funcMax = m_expFermiInductFunc->Eval(tsubtr);
1128 }
static Double_t t0
double getInductFuncTimeMax(const TF1 *theTF1)

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 1341 of file ZDCFitWrapper.cxx.

1342{
1343 GetWrapperTF1()->SetParameter(0, initialAmp);
1344 GetWrapperTF1()->SetParameter(1, initialT0);
1345 GetWrapperTF1()->SetParameter(2, 5);
1346 GetWrapperTF1()->SetParameter(3, 10);
1347 GetWrapperTF1()->SetParameter(4, 0);
1348 GetWrapperTF1()->SetParameter(5, 0);
1349 GetWrapperTF1()->SetParameter(6, 0.1);
1350 GetWrapperTF1()->SetParameter(7, 0.1);
1351
1352 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
1353 // Set parameter errors for fit step size
1354 //
1355 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
1356 GetWrapperTF1()->SetParError(0, ampStep);
1357 GetWrapperTF1()->SetParError(1, 1.0);
1358 GetWrapperTF1()->SetParError(2, 0.05);
1359 GetWrapperTF1()->SetParError(3, 1);
1360 GetWrapperTF1()->SetParError(4, 5.0);
1361 GetWrapperTF1()->SetParError(5, 5);
1362 GetWrapperTF1()->SetParError(6, 0.05);
1363 GetWrapperTF1()->SetParError(7, 0.05);
1364}

◆ doUnconstrainFit()

void ZDCFitExpFermiInductPrePulse::doUnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 1317 of file ZDCFitWrapper.cxx.

1318{
1319 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1320 theTF1->ReleaseParameter(5);
1321 theTF1->ReleaseParameter(7);
1322 theTF1->SetParLimits(4, -0.001, 0.001);
1323 theTF1->SetParLimits(5, -10, 10);
1324 theTF1->SetParLimits(7, -0.1, 2);
1325}

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

◆ GetAmpError()

virtual float ZDCFitExpFermiInductPrePulse::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1165 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiInductPrePulse::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1160 of file ZDCFitWrapper.h.

1160 {
1161 if (finalized()) return m_funcMax;
1163 }
bool finalized() const

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiInductPrePulse::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1193 of file ZDCFitWrapper.h.

1194 {
1195 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
1196
1197 double maxTime = GetTime();
1198
1199 double amp = theTF1->GetParameter(0);
1200 if (amp < 1e-6) return -1;
1201
1202 double preAmp = theTF1->GetParameter(2);
1203 double preT0 = theTF1->GetParameter(3);
1204
1205 double deltaTPre = maxTime - preT0;
1206 double background = preAmp * m_preNorm * m_expFermiInductFunc->operator()(deltaTPre);
1207
1208 return background / (amp + background);
1209 }
virtual float GetTime() const override

◆ GetExpAmp()

virtual float ZDCFitExpFermiInductPrePulse::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1176 of file ZDCFitWrapper.h.

1176{return 0;}

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

Implements ZDCFitWrapper.

Definition at line 1183 of file ZDCFitWrapper.h.

1183{return 5;}

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

◆ GetPostAmp()

virtual float ZDCFitExpFermiInductPrePulse::GetPostAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1174 of file ZDCFitWrapper.h.

1174{return 0;}

◆ GetPostT0()

virtual float ZDCFitExpFermiInductPrePulse::GetPostT0 ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1173 of file ZDCFitWrapper.h.

1173{return 0;}

◆ GetPreAmp()

virtual float ZDCFitExpFermiInductPrePulse::GetPreAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1171 of file ZDCFitWrapper.h.

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

◆ GetPreT0()

virtual float ZDCFitExpFermiInductPrePulse::GetPreT0 ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1170 of file ZDCFitWrapper.h.

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

◆ GetPreT0ParIndex()

virtual unsigned int ZDCFitExpFermiInductPrePulse::GetPreT0ParIndex ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1158 of file ZDCFitWrapper.h.

1158{return 3;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 1185 of file ZDCFitWrapper.h.

1186 {
1187 if (index < 5) {
1188 return GetWrapperTF1()->GetParameter(index + 4);
1189 }
1190 throw std::runtime_error("Fit parameter does not exist.");
1191 }

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

Implements ZDCFitWrapper.

Definition at line 1167 of file ZDCFitWrapper.h.

1167{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiInductPrePulse::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1168 of file ZDCFitWrapper.h.

1168{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiInductPrePulse::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 1178 of file ZDCFitWrapper.h.

1178 {
1179 if (finalized()) return m_tFuncMax;
1180 return getInductFuncTimeMax(m_expFermiInductFunc.get()) + GetWrapperTF1()->GetParameter(1);
1181 }

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

Implements ZDCFitWrapper.

Definition at line 1211 of file ZDCFitWrapper.h.

1212 {
1213 double t = x[0];
1214
1215 double amp = p[0];
1216 double t0 = p[1];
1217 double preAmp = p[2];
1218 double preT0 = p[3];
1219 double C = p[4];
1220 double period = p[5];
1221 double indA = p[6];
1222 double indB = p[7];
1223 double bI = p[8];
1224
1225 m_expFermiInductFunc->SetParameter(0, amp);
1226 m_expFermiInductFunc->SetParameter(5, period);
1227 m_expFermiInductFunc->SetParameter(6, indA);
1228 m_expFermiInductFunc->SetParameter(7, indB);
1229 m_expFermiInductFunc->SetParameter(8, bI);
1230
1231 double deltaT = t - t0;
1232 double deltaTPre = t - preT0;
1233
1234 // We subtract off the value of the pre-pulse at the minimum time (nominally 0,
1235 // but can change if we exclude early samples) to account for the subtraction of the pre-sample
1236 //
1237 double deltaPresamp = GetTMinAdjust() - preT0;
1238
1239 double pulse1 = m_expFermiInductFunc->operator()(deltaT);
1240 double pulse2 = preAmp * m_preNorm * (m_expFermiPreFunc->operator()(deltaTPre) -
1241 m_expFermiPreFunc->operator()(deltaPresamp));
1242
1243 return C + pulse1 + pulse2;
1244 }
#define x
float GetTMinAdjust() const
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 }

◆ SetInitialPrePulse()

virtual void ZDCFitExpFermiInductPrePulse::SetInitialPrePulse ( float amp,
float t0,
float ,
bool  )
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1141 of file ZDCFitWrapper.h.

1142 {
1143 double ampMin, ampMax;
1144
1145 GetWrapperTF1()->GetParLimits(2, ampMin, ampMax);
1146 double initialAmp = std::min<double>(std::max<double>(amp, ampMin), ampMax);
1147
1148 GetWrapperTF1()->SetParameter(2, initialAmp);
1149 GetWrapperTF1()->SetParameter(3, t0);
1150 }

◆ SetPostPulseT0Range()

virtual void ZDCFitExpFermiInductPrePulse::SetPostPulseT0Range ( float ,
float ,
float  )
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1153 of file ZDCFitWrapper.h.

1153{return;}

◆ SetPrePulseT0Range()

void ZDCFitExpFermiInductPrePulse::SetPrePulseT0Range ( float tmin,
float tmax )
overridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 1327 of file ZDCFitWrapper.cxx.

1328{
1329 if (tmin > GetTMin()) {
1330 m_preT0Min = tmin;
1331 GetWrapperTF1()->ReleaseParameter(3);
1332 GetWrapperTF1()->SetParLimits(3, tmin, tmax);
1333 }
1334 else {
1335 m_preT0Min = -25;
1336 GetWrapperTF1()->SetParLimits(3, -25, tmax);
1337 }
1338 m_preT0Max = tmax;
1339}
float GetTMin() const

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 1366 of file ZDCFitWrapper.cxx.

1367{
1368 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
1369 theTF1->SetParLimits(1, t0Min, t0Max);
1370}

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

std::shared_ptr<TF1> ZDCFitExpFermiInductPrePulse::m_expFermiInductFunc = 0
private

Definition at line 1117 of file ZDCFitWrapper.h.

◆ m_expFermiPreFunc

std::shared_ptr<TF1> ZDCFitExpFermiInductPrePulse::m_expFermiPreFunc = 0
private

Definition at line 1118 of file ZDCFitWrapper.h.

◆ m_finalized

bool ZDCFitWrapper::m_finalized {false}
privateinherited

Definition at line 82 of file ZDCFitWrapper.h.

82{false};

◆ m_funcMax

float ZDCFitExpFermiInductPrePulse::m_funcMax {-999}
private

Definition at line 1113 of file ZDCFitWrapper.h.

1113{-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_preNorm

double ZDCFitExpFermiInductPrePulse::m_preNorm {1.}
private

Definition at line 1115 of file ZDCFitWrapper.h.

1115{1.};

◆ m_preT0Max

float ZDCPrePulseFitWrapper::m_preT0Max
protectedinherited

Definition at line 205 of file ZDCFitWrapper.h.

◆ m_preT0Min

float ZDCPrePulseFitWrapper::m_preT0Min
protectedinherited

Definition at line 204 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 ZDCFitExpFermiInductPrePulse::m_tau1 {0}
private

Definition at line 1109 of file ZDCFitWrapper.h.

1109{0};

◆ m_tau2

float ZDCFitExpFermiInductPrePulse::m_tau2 {0}
private

Definition at line 1110 of file ZDCFitWrapper.h.

1110{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 ZDCFitExpFermiInductPrePulse::m_tFuncMax {-999}
private

Definition at line 1112 of file ZDCFitWrapper.h.

1112{-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 > > ZDCFitExpFermiInductPrePulse::s_ConfigParamMap
staticprivate
Initial value:
=
{
{"default",
{{{"A", 1000, false, 2, 5000, 50, false, 0}},
{{"T0", 40, false, 0, 100, 1, false, 0}},
{{"Apre", 0, false, 0.5, 3, 0.05, false, 0}},
{{"T0pre", 0, false, 3.5, 8, 0.25, false, 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 88 of file ZDCFitWrapper.h.

94 :
95
96 ZDCFitWrapper() = delete;
97
98 ZDCFitWrapper(const std::shared_ptr<TF1>& wrapperTF1) : m_wrapperTF1(wrapperTF1),
99 m_ampMin(0),
100 m_adjTLimitsEvent(true) // true here forces a setting of T0 par limits on first event
101 {
102 m_tmin = m_wrapperTF1->GetXmin();
103 m_tmax = m_wrapperTF1->GetXmax();
104
105 m_t0Min = m_tmin;
106 m_t0Max = m_tmax;
107 }
108
109 // Constructor used to provide parameter set
110 //
111 ZDCFitWrapper(const std::shared_ptr<TF1>& wrapperTF1, const std::vector<FitParameter>& defaultParamSet) :
112 m_wrapperTF1(wrapperTF1),
113 m_ampMin(0),
114 m_adjTLimitsEvent(true) // true here forces a setting of T0 par limits on first event
115 {
116 m_tmin = m_wrapperTF1->GetXmin();
ZDCFitWrapper()=delete

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