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

#include <ZDCFitWrapper.h>

Inheritance diagram for ZDCFitExpFermiPrePulse:
Collaboration diagram for ZDCFitExpFermiPrePulse:

Public Member Functions

 ZDCFitExpFermiPrePulse (const std::string &tag, float tmin, float tmax, float tau1, float tau2)
 ~ZDCFitExpFermiPrePulse ()
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 ConstrainFit () override
virtual void UnconstrainFit () 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
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)
float GetMinAmp () const
float GetMaxAmp () const
float GetTMin () const
float GetTMax () const
float GetT0Min () const
float GetT0Max () const
float GetTMinAdjust () const
virtual std::shared_ptr< TF1 > GetWrapperTF1 ()
virtual const TF1 * GetWrapperTF1 () const
virtual TF1 * GetWrapperTF1RawPtr () const

Protected Attributes

float m_preT0Min
float m_preT0Max

Private Attributes

float m_tau1 {0}
float m_tau2 {0}
float m_norm {0}
float m_timeCorr {0}
std::shared_ptr< TF1 > m_expFermiFunc = 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_finalized {false}

Detailed Description

Definition at line 462 of file ZDCFitWrapper.h.

Constructor & Destructor Documentation

◆ ZDCFitExpFermiPrePulse()

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

Definition at line 371 of file ZDCFitWrapper.cxx.

371 :
372 ZDCPrePulseFitWrapper(std::make_shared<TF1>(("ExpFermiPrePulse" + tag).c_str(), this, tmin, tmax, 5)),
373 m_tau1(tau1), m_tau2(tau2)
374{
375 // Create the reference function that we use to evaluate ExpFermiFit more efficiently
376 //
377 std::string funcNameRefFunc = "ExpFermiPrePulseRefFunc" + tag;
378
379 m_expFermiFunc = std::make_shared<TF1>(funcNameRefFunc.c_str(), ZDCFermiExpFit, -50, 100, 5);
380
381 m_expFermiFunc->SetParameter(0, 1);
382 m_expFermiFunc->SetParameter(1, 0);
383 m_expFermiFunc->SetParameter(2, m_tau1);
384 m_expFermiFunc->SetParameter(3, m_tau2);
385 m_expFermiFunc->SetParameter(4, 0);
386
387 m_norm = 1. / m_expFermiFunc->GetMaximum();
388 m_timeCorr = m_tau1 * std::log(m_tau2 / m_tau1 - 1.0);
389
390 // Now set up the actual TF1
391 //
392 std::shared_ptr<TF1> theTF1 = ZDCFitWrapper::GetWrapperTF1();
393
394 // BAC, parameter 0 limits now is set in DoInitialize
395 theTF1->SetParLimits(1, tmin, tmax);
396 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.
397 theTF1->SetParLimits(3, -20, 10);
398
399 theTF1->SetParName(0, "Amp");
400 theTF1->SetParName(1, "T0");
401 theTF1->SetParName(2, "Amp_{pre}");
402 theTF1->SetParName(3, "T0_{pre}");
403 theTF1->SetParName(4, "C");
404}
double ZDCFermiExpFit(const double *xvec, const double *pvec)
std::shared_ptr< TF1 > m_expFermiFunc
virtual std::shared_ptr< TF1 > GetWrapperTF1()
ZDCPrePulseFitWrapper(std::shared_ptr< TF1 > wrapperTF1)

◆ ~ZDCFitExpFermiPrePulse()

ZDCFitExpFermiPrePulse::~ZDCFitExpFermiPrePulse ( )
inline

Definition at line 475 of file ZDCFitWrapper.h.

475{}

Member Function Documentation

◆ ConstrainFit()

void ZDCFitExpFermiPrePulse::ConstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 406 of file ZDCFitWrapper.cxx.

407{
408 // We force the constant term and per-pulse amplitude to zero
409 //
410 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
411
412 theTF1->FixParameter(2, 0);
413 theTF1->FixParameter(4, 0);
414}

◆ DoFinalize()

virtual void ZDCFitWrapper::DoFinalize ( )
inlinevirtualinherited

◆ DoInitialize()

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

Implements ZDCFitWrapper.

Definition at line 438 of file ZDCFitWrapper.cxx.

439{
440 GetWrapperTF1()->SetParameter(0, initialAmp);
441 GetWrapperTF1()->SetParameter(1, initialT0);
442 GetWrapperTF1()->SetParameter(2, 5);
443 GetWrapperTF1()->SetParLimits(0, ampMin, ampMax);
444
445 // Set parameter errors for fit step size
446 //
447 double ampStep = std::min(0.05*initialAmp, std::abs(ampMax - initialAmp)/2.);
448 GetWrapperTF1()->SetParError(0, ampStep);
449 GetWrapperTF1()->SetParError(1, 1.0);
450 GetWrapperTF1()->SetParError(2, 2);
451 GetWrapperTF1()->SetParError(3, 1.0);
452 GetWrapperTF1()->SetParError(4, 1.0);
453}

◆ Finalize()

virtual void ZDCFitWrapper::Finalize ( )
inlinevirtualinherited

Definition at line 68 of file ZDCFitWrapper.h.

69 {
70 DoFinalize();
71 m_finalized = true;
72 }
virtual void DoFinalize()

◆ finalized()

bool ZDCFitWrapper::finalized ( ) const
inlineinherited

Definition at line 66 of file ZDCFitWrapper.h.

66{return m_finalized;}

◆ GetAmpError()

virtual float ZDCFitExpFermiPrePulse::GetAmpError ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 495 of file ZDCFitWrapper.h.

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

◆ GetAmplitude()

virtual float ZDCFitExpFermiPrePulse::GetAmplitude ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 494 of file ZDCFitWrapper.h.

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

◆ GetBkgdMaxFraction()

virtual float ZDCFitExpFermiPrePulse::GetBkgdMaxFraction ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 520 of file ZDCFitWrapper.h.

521 {
522 const TF1* theTF1 = ZDCFitWrapper::GetWrapperTF1();
523
524 double maxTime = GetTime();
525
526 double amp = theTF1->GetParameter(0);
527 if (amp <= 0) return -1;
528
529 double preAmp = theTF1->GetParameter(2);
530 double preT0 = theTF1->GetParameter(3);
531
532 double deltaTPre = maxTime - preT0;
533 double background = preAmp * m_norm * m_expFermiFunc->operator()(deltaTPre);
534
535 return background / (amp + background);
536 }
virtual float GetTime() const override

◆ GetExpAmp()

virtual float ZDCFitExpFermiPrePulse::GetExpAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 506 of file ZDCFitWrapper.h.

506{return 0;}

◆ GetMaxAmp()

float ZDCFitWrapper::GetMaxAmp ( ) const
inlineinherited

Definition at line 104 of file ZDCFitWrapper.h.

104{return m_ampMax;}

◆ GetMinAmp()

float ZDCFitWrapper::GetMinAmp ( ) const
inlineinherited

Definition at line 103 of file ZDCFitWrapper.h.

103{return m_ampMin;}

◆ GetNumShapeParameters()

virtual unsigned int ZDCFitExpFermiPrePulse::GetNumShapeParameters ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 512 of file ZDCFitWrapper.h.

512{return 1;}

◆ GetPostAmp()

virtual float ZDCFitExpFermiPrePulse::GetPostAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 504 of file ZDCFitWrapper.h.

504{return 0;}

◆ GetPostT0()

virtual float ZDCFitExpFermiPrePulse::GetPostT0 ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 503 of file ZDCFitWrapper.h.

503{return 0;}

◆ GetPreAmp()

virtual float ZDCFitExpFermiPrePulse::GetPreAmp ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 501 of file ZDCFitWrapper.h.

501{return 0;}

◆ GetPreT0()

virtual float ZDCFitExpFermiPrePulse::GetPreT0 ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 500 of file ZDCFitWrapper.h.

500{return 0;}

◆ GetPreT0ParIndex()

virtual unsigned int ZDCFitExpFermiPrePulse::GetPreT0ParIndex ( ) const
inlineoverridevirtual

Implements ZDCPrePulseFitWrapper.

Definition at line 492 of file ZDCFitWrapper.h.

492{return 3;}

◆ GetShapeParameter()

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

Implements ZDCFitWrapper.

Definition at line 514 of file ZDCFitWrapper.h.

515 {
516 if (index < 1) return GetWrapperTF1()->GetParameter(4);
517 else throw std::runtime_error("Fit parameter does not exist.");
518 }

◆ GetT0Max()

float ZDCFitWrapper::GetT0Max ( ) const
inlineinherited

Definition at line 114 of file ZDCFitWrapper.h.

114 {
115 if (m_adjTLimitsEvent) return m_tempTmax;
116 else return m_t0Max;
117 }

◆ GetT0Min()

float ZDCFitWrapper::GetT0Min ( ) const
inlineinherited

Definition at line 109 of file ZDCFitWrapper.h.

109 {
110 if (m_adjTLimitsEvent) return m_tempTmin;
111 else return m_t0Min;
112 }

◆ GetTau1()

virtual float ZDCFitExpFermiPrePulse::GetTau1 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 497 of file ZDCFitWrapper.h.

497{return m_tau1;}

◆ GetTau2()

virtual float ZDCFitExpFermiPrePulse::GetTau2 ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 498 of file ZDCFitWrapper.h.

498{return m_tau2;}

◆ GetTime()

virtual float ZDCFitExpFermiPrePulse::GetTime ( ) const
inlineoverridevirtual

Implements ZDCFitWrapper.

Definition at line 508 of file ZDCFitWrapper.h.

508 {
509 return GetWrapperTF1()->GetParameter(1) + m_timeCorr; // Correct the time to the maximum
510 }

◆ GetTMax()

float ZDCFitWrapper::GetTMax ( ) const
inlineinherited

Definition at line 107 of file ZDCFitWrapper.h.

107{return m_tmax;}

◆ GetTMin()

float ZDCFitWrapper::GetTMin ( ) const
inlineinherited

Definition at line 106 of file ZDCFitWrapper.h.

106{return m_tmin;}

◆ GetTMinAdjust()

float ZDCFitWrapper::GetTMinAdjust ( ) const
inlineinherited

Definition at line 119 of file ZDCFitWrapper.h.

119{return m_tminAdjust;}

◆ GetWrapperTF1() [1/2]

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

Definition at line 128 of file ZDCFitWrapper.h.

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

◆ GetWrapperTF1() [2/2]

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

Definition at line 129 of file ZDCFitWrapper.h.

129{return m_wrapperTF1.get();}

◆ GetWrapperTF1RawPtr()

virtual TF1 * ZDCFitWrapper::GetWrapperTF1RawPtr ( ) const
inlinevirtualinherited

Definition at line 130 of file ZDCFitWrapper.h.

130{return m_wrapperTF1.get();}

◆ Initialize() [1/2]

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

Definition at line 9 of file ZDCFitWrapper.cxx.

10{
11 // Clear the errors on the TF1 because retaining the errors seems to affect
12 // the convergence of fits
13 //
14 unsigned int npar = GetWrapperTF1()->GetNpar();
15 std::vector<double> zeroVec(npar, 0.0);
16 GetWrapperTF1()->SetParErrors(&zeroVec[0]);
17
18 // If we adjusted the time range on the previous event, restore to default
19 //
22
23 m_adjTLimitsEvent = false;
24 m_tminAdjust = 0;
25 }
26
27 SetAmpMinMax(ampMin, ampMax);
28
29 DoInitialize(initialAmp, initialT0, ampMin, ampMax);
30}
virtual void SetT0FitLimits(float tMin, float tMax)=0
void SetAmpMinMax(float minAmp, float maxAmp)
virtual void DoInitialize(float initialAmp, float initialT0, float ampMin, float ampMax)=0

◆ Initialize() [2/2]

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

Definition at line 32 of file ZDCFitWrapper.cxx.

33{
34 // Clear the errors on the TF1 because retaining the errors seems to affect
35 // the convergence of fits
36 //
37 unsigned int npar = GetWrapperTF1()->GetNpar();
38 std::vector<double> zeroVec(npar, 0.0);
39 GetWrapperTF1()->SetParErrors(&zeroVec[0]);
40
41 m_adjTLimitsEvent = true;
42
43 m_tminAdjust = fitTRef; // Note: this is the time corresponding to the sample used for presample subtraction
44
45 m_tempTmin = std::max(m_t0Min, fitTmin);
46 m_tempTmax = std::min(m_t0Max, fitTmax);
47
48 SetAmpMinMax(ampMin, ampMax);
50
51 DoInitialize(initialAmp, initialT0, ampMin, ampMax);
52}

◆ operator()()

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

Implements ZDCFitWrapper.

Definition at line 538 of file ZDCFitWrapper.h.

539 {
540 double t = x[0];
541
542 double amp = p[0];
543 double t0 = p[1];
544 double preAmp = p[2];
545 double preT0 = p[3];
546 double C = p[4];
547
548 double deltaT = t - t0;
549 double deltaTPre = t - preT0;
550
551 // We subtract off the value of the pre-pulse at the minimum time (nominally 0,
552 // but can change if we exclude early samples) to account for the subtraction of the pre-sample
553 //
554 double deltaPresamp = GetTMinAdjust() - preT0;
555
556 // double bckgd = linSlope*t;
557
558 double pulse1 = amp*m_norm*m_expFermiFunc->operator()(deltaT);
559 double pulse2 = preAmp * m_norm * (m_expFermiFunc->operator()(deltaTPre) -
560 m_expFermiFunc->operator()(deltaPresamp));
561
562 return C + pulse1 + pulse2;// + bckgd;
563 }
static Double_t t0
#define x
float GetTMinAdjust() const
struct color C

◆ SetAmpMinMax()

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

Definition at line 79 of file ZDCFitWrapper.h.

80 {
81 m_ampMin = minAmp;
82 m_ampMax = maxAmp;
83 }

◆ SetInitialPrePulse()

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

Implements ZDCPrePulseFitWrapper.

Definition at line 481 of file ZDCFitWrapper.h.

481 {
482 GetWrapperTF1()->SetParameter(2, std::max(amp, (float) 1.5)); //1.5 here ensures that we're above lower limit
483 GetWrapperTF1()->SetParameter(3, t0);
484 }

◆ SetPostPulseT0Range()

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

Implements ZDCPrePulseFitWrapper.

Definition at line 487 of file ZDCFitWrapper.h.

487{return;}

◆ SetPrePulseT0Range()

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

Implements ZDCPrePulseFitWrapper.

Definition at line 424 of file ZDCFitWrapper.cxx.

425{
426 if (tmin > GetTMin()) {
427 m_preT0Min = tmin;
428 GetWrapperTF1()->ReleaseParameter(3);
429 GetWrapperTF1()->SetParLimits(3, tmin, tmax);
430 }
431 else {
432 m_preT0Min = -25;
433 GetWrapperTF1()->SetParLimits(3, -25, tmax);
434 }
435 m_preT0Max = tmax;
436}
float GetTMin() const

◆ SetT0FitLimits()

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

Implements ZDCFitWrapper.

Definition at line 455 of file ZDCFitWrapper.cxx.

456{
457 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
458 theTF1->SetParLimits(1, t0Min, t0Max);
459}

◆ SetT0Range()

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

Definition at line 85 of file ZDCFitWrapper.h.

86 {
87 m_t0Min = t0Min;
88 m_t0Max = t0Max;
89
90 SetT0FitLimits(t0Min, t0Max);
91 }

◆ UnconstrainFit()

void ZDCFitExpFermiPrePulse::UnconstrainFit ( )
overridevirtual

Implements ZDCFitWrapper.

Definition at line 415 of file ZDCFitWrapper.cxx.

416{
417 std::shared_ptr<TF1> theTF1 = GetWrapperTF1();
418 theTF1->ReleaseParameter(2);
419 theTF1->ReleaseParameter(4);
420
421 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.
422}

Member Data Documentation

◆ m_adjTLimitsEvent

bool ZDCFitWrapper::m_adjTLimitsEvent {false}
privateinherited

Definition at line 37 of file ZDCFitWrapper.h.

37{false};

◆ m_ampMax

float ZDCFitWrapper::m_ampMax {0}
privateinherited

Definition at line 32 of file ZDCFitWrapper.h.

32{0};

◆ m_ampMin

float ZDCFitWrapper::m_ampMin {0}
privateinherited

Definition at line 31 of file ZDCFitWrapper.h.

31{0};

◆ m_expFermiFunc

std::shared_ptr<TF1> ZDCFitExpFermiPrePulse::m_expFermiFunc = 0
private

Definition at line 470 of file ZDCFitWrapper.h.

◆ m_expFermiPreFunc

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

Definition at line 471 of file ZDCFitWrapper.h.

◆ m_finalized

bool ZDCFitWrapper::m_finalized {false}
privateinherited

Definition at line 42 of file ZDCFitWrapper.h.

42{false};

◆ m_norm

float ZDCFitExpFermiPrePulse::m_norm {0}
private

Definition at line 467 of file ZDCFitWrapper.h.

467{0};

◆ m_preT0Max

float ZDCPrePulseFitWrapper::m_preT0Max
protectedinherited

Definition at line 137 of file ZDCFitWrapper.h.

◆ m_preT0Min

float ZDCPrePulseFitWrapper::m_preT0Min
protectedinherited

Definition at line 136 of file ZDCFitWrapper.h.

◆ m_t0Max

float ZDCFitWrapper::m_t0Max {0}
privateinherited

Definition at line 35 of file ZDCFitWrapper.h.

35{0};

◆ m_t0Min

float ZDCFitWrapper::m_t0Min {0}
privateinherited

Definition at line 34 of file ZDCFitWrapper.h.

34{0};

◆ m_tau1

float ZDCFitExpFermiPrePulse::m_tau1 {0}
private

Definition at line 465 of file ZDCFitWrapper.h.

465{0};

◆ m_tau2

float ZDCFitExpFermiPrePulse::m_tau2 {0}
private

Definition at line 466 of file ZDCFitWrapper.h.

466{0};

◆ m_tempTmax

float ZDCFitWrapper::m_tempTmax {0}
privateinherited

Definition at line 40 of file ZDCFitWrapper.h.

40{0};

◆ m_tempTmin

float ZDCFitWrapper::m_tempTmin {0}
privateinherited

Definition at line 39 of file ZDCFitWrapper.h.

39{0};

◆ m_timeCorr

float ZDCFitExpFermiPrePulse::m_timeCorr {0}
private

Definition at line 468 of file ZDCFitWrapper.h.

468{0};

◆ m_tmax

float ZDCFitWrapper::m_tmax {0}
privateinherited

Definition at line 29 of file ZDCFitWrapper.h.

29{0};

◆ m_tmin

float ZDCFitWrapper::m_tmin {0}
privateinherited

Definition at line 28 of file ZDCFitWrapper.h.

28{0};

◆ m_tminAdjust

float ZDCFitWrapper::m_tminAdjust {0}
privateinherited

Definition at line 38 of file ZDCFitWrapper.h.

38{0};

◆ m_wrapperTF1

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

Definition at line 26 of file ZDCFitWrapper.h.

26{};

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