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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiVariableTausInduct:
Collaboration diagram for ZDCFitExpFermiVariableTausInduct:

Public Member Functions

 ZDCFitExpFermiVariableTausInduct (const std::string &tag, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
 ZDCFitExpFermiVariableTausInduct (const std::string &tag, const std::string &paramSet, float tmin, float tmax, bool fixTau1, bool fixTau2, float tau1, float tau2)
virtual void DoInitialize (float initialAmp, float initialT0, float ampMin, float ampMax) override
virtual void SetT0FitLimits (float tMin, float tMax) override
void FixDelta (float value)
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 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
virtual void doConstrainFit () override
virtual void doUnconstrainFit () 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

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

Protected Attributes

bool m_fixTau1 {false}
bool m_fixTau2 {false}
bool m_fixDelta {false}
float m_tau1 {0}
float m_tau2 {0}
float m_tFuncMax {-999}
float m_funcMax {-999}

Private Attributes

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 393 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiVariableTausInduct() [1/2]

ZDCFitExpFermiVariableTausInduct::ZDCFitExpFermiVariableTausInduct ( const std::string & tag,
float tmin,
float tmax,
bool fixTau1,
bool fixTau2,
float tau1,
float tau2 )

Definition at line 481 of file ZDCFitWrapper.cxx.

481 :
482 ZDCFitWrapper(std::make_shared<TF1>(("ExpFermiVariableTausInduct" + tag).c_str(), ZDCFermiExpFitInduct, tmin, tmax, 10)),
483 m_fixTau1(fixTau1), m_fixTau2(fixTau2), m_tau1(tau1), m_tau2(tau2)
484{
485 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
486
487 theTF1->SetParName(0, "Amp");
488 theTF1->SetParName(1, "T0");
489 theTF1->SetParName(2, "tau1");
490 theTF1->SetParName(3, "tau2");
491 theTF1->SetParName(4, "C");
492 theTF1->SetParName(5, "period");
493 theTF1->SetParName(6, "IndA");
494 theTF1->SetParName(7, "IndB");
495 theTF1->SetParName(8, "tauI");
496 theTF1->SetParName(9, "delta");
497
498 theTF1->SetParLimits(1, tmin, tmax);
499 theTF1->SetParLimits(4, -50, 50);
500 theTF1->SetParLimits(5, 10, 50);
501 theTF1->SetParLimits(6, 0, 2);
502 theTF1->SetParLimits(7, 0, 2);
503 // theTF1->SetParLimits(8, 1, 6);
504 theTF1->FixParameter(8, 5.5);
505 theTF1->FixParameter(5, 16);
506 // theTF1->SetParLimits(9, 0, 0.05);
507
508
509 FixDelta(0.015);
510
511 if (m_fixTau1) theTF1->FixParameter(2, m_tau1);
512 else theTF1->SetParLimits(2, 0.5, 3);
513
514 if (m_fixTau2) theTF1->FixParameter(3, m_tau2);
515 else theTF1->SetParLimits(3, 3.5, 8);
516}
double ZDCFermiExpFitInduct(const double *xvec, const double *pvec)
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCFitWrapper()=delete

◆ ZDCFitExpFermiVariableTausInduct() [2/2]

ZDCFitExpFermiVariableTausInduct::ZDCFitExpFermiVariableTausInduct ( const std::string & tag,
const std::string & paramSet,
float tmin,
float tmax,
bool fixTau1,
bool fixTau2,
float tau1,
float tau2 )

Definition at line 519 of file ZDCFitWrapper.cxx.

519 :
520 ZDCFitWrapper(std::make_shared<TF1>(("ExpFermiVariableTausInduct" + tag).c_str(), ZDCFermiExpFitInduct, tmin, tmax, 10),
521 s_ConfigParamMap.at("default"))
522{
523
524 auto iter = s_ConfigParamMap.find(paramSet);
525 if (iter == s_ConfigParamMap.end()) throw std::runtime_error("ZDCFitExpFermiVariableTausInduct:: invalid parameter set identifier: " + paramSet);
526
527 std::vector<ZDCFitWrapper::FitParameter> overRideParams = iter->second;
528
529 // Handle the JSON-based tau settings (this is ugly and temporary until we get the more general parameter overriding implemented)
530 //
531 auto tau1Iter = std::find_if(overRideParams.begin(), overRideParams.end(), [](const FitParameter& parDesc){return parDesc.name() == "tau1";});
532 if (tau1Iter != overRideParams.end()) {
533 if (fixTau1) tau1Iter->setFixed(tau1);
534 else tau1Iter->setDefaultValue(tau1);
535 }
536 else {
537 FitParameter tau1Descr = GetParameterDescr("tau1");
538 if (fixTau1) tau1Descr.setFixed(tau1);
539 else tau1Descr.setDefaultValue(tau1);
540 overRideParams.push_back(std::move(tau1Descr));
541 }
542
543 auto tau2Iter = std::find_if(overRideParams.begin(), overRideParams.end(), [](const FitParameter& parDesc){return parDesc.name() == "tau2";});
544 if (tau2Iter != overRideParams.end()) {
545 if (fixTau2) tau2Iter->setFixed(tau2);
546 else tau2Iter->setDefaultValue(tau2);
547 }
548 else {
549 FitParameter tau2Descr = GetParameterDescr("tau2");
550 if (fixTau2) tau2Descr.setFixed(tau2);
551 else tau2Descr.setDefaultValue(std::move(tau2));
552 overRideParams.push_back(tau2Descr);
553 }
554
555 OverrideParameterSet(overRideParams);
556}
static const std::map< std::string, std::vector< ZDCFitWrapper::FitParameter > > s_ConfigParamMap
void OverrideParameterSet(const std::vector< FitParameter > &parameterSet)
const FitParameter & GetParameterDescr(const std::string &name)

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

Implements ZDCFitWrapper.

Definition at line 603 of file ZDCFitWrapper.cxx.

604{
605 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
606 theTF1->FixParameter(6, 0.25);
607 theTF1->FixParameter(4, 0);
608 // theTF1->FixParameter(7, 0.1);
609}

◆ DoFinalize()

virtual void ZDCFitExpFermiVariableTausInduct::DoFinalize ( )
inlineoverrideprotectedvirtual

Reimplemented from ZDCFitWrapper.

Definition at line 408 of file ZDCFitWrapper.h.

409 {
410 TF1* theTF1 = GetWrapperTF1RawPtr();
411 theTF1->SetNpx(20);
414 theTF1->SetNpx(1000);
415 }
double getInductFuncTimeMax(const TF1 *theTF1)
virtual TF1 * GetWrapperTF1RawPtr() const

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 558 of file ZDCFitWrapper.cxx.

559{
560 // Note: if we use parameter sets, this code never gets called as the base class executes the initialize
561 //
562 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
563
564 theTF1->SetParameter(0, initialAmp);
565 theTF1->SetParLimits(0, ampMin, ampMax);
566
567 float t0 = initialT0;
568 if (t0 < GetT0Min()) t0 = GetT0Min()*1.1;
569 if (t0 > GetT0Max()) t0 = GetT0Max()/1.1;
570 theTF1->SetParameter(1, t0);
571
572 theTF1->SetParameter(6, 0.25);
573 theTF1->SetParameter(7, 0.8);
574 if (!m_fixDelta) theTF1->SetParameter(9, 0.);
575
576 if (!m_fixTau1) theTF1->SetParameter(2, m_tau1);
577 if (!m_fixTau2) theTF1->SetParameter(3, m_tau2);
578
579 // Set the parameter errors which ROOT now uses <<<to set the initial step sizes>>>
580 //
581 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
582
583 theTF1->SetParError(0, ampStep);
584 theTF1->SetParError(1, 1.0);
585
586 if (!m_fixTau1) theTF1->SetParError(2, 0.05);
587 if (!m_fixTau2) theTF1->SetParError(3, 0.25);
588
589 theTF1->SetParError(4, 1);
590 theTF1->SetParError(5, 5);
591 theTF1->SetParError(6, 0.1);
592 theTF1->SetParError(7, 0.1);
593}
static Double_t t0
float GetT0Max() const
float GetT0Min() const

◆ doUnconstrainFit()

void ZDCFitExpFermiVariableTausInduct::doUnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 611 of file ZDCFitWrapper.cxx.

612{
613 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
614 theTF1->ReleaseParameter(6);
615 theTF1->ReleaseParameter(4);
616 theTF1->SetParLimits(6, 0, 2);
617 theTF1->SetParLimits(4, -50, 50);
618
619}

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

◆ FixDelta()

void ZDCFitExpFermiVariableTausInduct::FixDelta ( float value)
inline

Definition at line 426 of file ZDCFitWrapper.h.

427 {
428 m_fixDelta = true;
429 ZDCFitWrapper::GetWrapperTF1()->FixParameter(9, value);
430 }

◆ GetAmpError()

virtual float ZDCFitExpFermiVariableTausInduct::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 439 of file ZDCFitWrapper.h.

439 {
440 return GetWrapperTF1()->GetParError(0);
441 }

◆ GetAmplitude()

virtual float ZDCFitExpFermiVariableTausInduct::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 432 of file ZDCFitWrapper.h.

432 {
433 if (finalized()) return m_funcMax;
435 if (std::isnan(time)) return 0;
436 return GetWrapperTF1()->Eval(time);
437 }
bool finalized() const
time(flags, cells_name, *args, **kw)

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiVariableTausInduct::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 459 of file ZDCFitWrapper.h.

460 {
461
462 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
463 double amp = GetAmplitude();
464 double constant = theTF1->GetParameter(4);
465
466 if (amp > 1e-6) return constant / amp;
467 else return -1;
468 }
virtual float GetAmplitude() const override

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

Implements ZDCFitWrapper.

Definition at line 451 of file ZDCFitWrapper.h.

451{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}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 453 of file ZDCFitWrapper.h.

454 {
455 if (index < 5) return GetWrapperTF1()->GetParameter(4+index);
456 else throw std::runtime_error("Fit parameter does not exist.");
457 }

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

Implements ZDCFitWrapper.

Definition at line 443 of file ZDCFitWrapper.h.

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

◆ GetTau2()

virtual float ZDCFitExpFermiVariableTausInduct::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 444 of file ZDCFitWrapper.h.

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

◆ GetTime()

virtual float ZDCFitExpFermiVariableTausInduct::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 446 of file ZDCFitWrapper.h.

446 {
447 if (finalized()) return m_tFuncMax;
448 else return getInductFuncTimeMax(GetWrapperTF1());
449 }

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

Implements ZDCFitWrapper.

Definition at line 470 of file ZDCFitWrapper.h.

470 {
471 return ZDCFermiExpFitInduct(x, p);
472 }
#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 }

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 595 of file ZDCFitWrapper.cxx.

596{
597 // Set the parameter limits accordingly on the TF1
598 //
599 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
600 theTF1->SetParLimits(1, t0Min, t0Max);
601}

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

bool ZDCFitWrapper::m_finalized {false}
privateinherited

Definition at line 82 of file ZDCFitWrapper.h.

82{false};

◆ m_fixDelta

bool ZDCFitExpFermiVariableTausInduct::m_fixDelta {false}
protected

Definition at line 400 of file ZDCFitWrapper.h.

400{false};

◆ m_fixTau1

bool ZDCFitExpFermiVariableTausInduct::m_fixTau1 {false}
protected

Definition at line 398 of file ZDCFitWrapper.h.

398{false};

◆ m_fixTau2

bool ZDCFitExpFermiVariableTausInduct::m_fixTau2 {false}
protected

Definition at line 399 of file ZDCFitWrapper.h.

399{false};

◆ m_funcMax

float ZDCFitExpFermiVariableTausInduct::m_funcMax {-999}
protected

Definition at line 406 of file ZDCFitWrapper.h.

406{-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 ZDCFitExpFermiVariableTausInduct::m_tau1 {0}
protected

Definition at line 402 of file ZDCFitWrapper.h.

402{0};

◆ m_tau2

float ZDCFitExpFermiVariableTausInduct::m_tau2 {0}
protected

Definition at line 403 of file ZDCFitWrapper.h.

403{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 ZDCFitExpFermiVariableTausInduct::m_tFuncMax {-999}
protected

Definition at line 405 of file ZDCFitWrapper.h.

405{-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 > > ZDCFitExpFermiVariableTausInduct::s_ConfigParamMap
staticprivate

Definition at line 9 of file ZDCFitWrapper.h.

24{
25public:
26 class FitParameter {
27 public:
28 //
29 // name, default value, fixed, lower limit, upper limit, step size, constrain fixed?, constrain value
30 //
31 using ParameterDescriptor = std::tuple<std::string, float, bool, float, float, float, bool, float>;
32
34
35 public:
36
37 FitParameter(const ParameterDescriptor& inData) :
38 m_parData(inData)
39 {}
40
41 void setFixed(float fixedValue)
42 {
43 std::get<2>(m_parData) = true;
44 std::get<1>(m_parData) = fixedValue;
45 }
46
47 void setDefaultValue(float value) {
48 std::get<1>(m_parData) = value;
49 }
50
51 std::string name() const {return std::get<0>(m_parData);}
52 float defaultValue() const {return std::get<1>(m_parData);}
53 bool fixed() const {return std::get<2>(m_parData);}
54 float lowerLimit() const {return std::get<3>(m_parData);}
55 float upperLimit() const {return std::get<4>(m_parData);}
void setDefaultValue(float value)
std::tuple< std::string, float, bool, float, float, float, bool, float > ParameterDescriptor
FitParameter(const ParameterDescriptor &inData)
ParameterDescriptor m_parData
std::string name() const
void setFixed(float fixedValue)

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