ATLAS Offline Software
Functions
ZDCFitWrapper.cxx File Reference
#include "ZdcAnalysis/ZDCFitWrapper.h"
#include <numeric>
#include <memory>
Include dependency graph for ZDCFitWrapper.cxx:

Go to the source code of this file.

Functions

double ZDCFermiExpFit (const double *xvec, const double *pvec)
 
double ZDCFermiExpFitRefl (const double *xvec, const double *pvec)
 

Function Documentation

◆ ZDCFermiExpFit()

double ZDCFermiExpFit ( const double *  xvec,
const double *  pvec 
)

Definition at line 662 of file ZDCFitWrapper.cxx.

663 {
664  static const float offsetScale = 0;
665 
666  double t = xvec[0];
667 
668  double amp = pvec[0];
669  double t0 = pvec[1];
670  double tau1 = pvec[2];
671  double tau2 = pvec[3];
672  double C = pvec[4];
673 
674  double tauRatio = tau2 / tau1;
675  double tauRatioMinunsOne = tauRatio - 1;
676 
677  double norm = ( std::exp(-offsetScale / tauRatio) * std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
678  ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) );
679 
680  double deltaT = t - (t0 - offsetScale * tau1);
681  if (deltaT < 0) deltaT = 0;
682 
683  double expTerm = std::exp(-deltaT / tau2);
684  double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
685 
686  return amp * expTerm * fermiTerm / norm + C;
687 }

◆ ZDCFermiExpFitRefl()

double ZDCFermiExpFitRefl ( const double *  xvec,
const double *  pvec 
)

Definition at line 689 of file ZDCFitWrapper.cxx.

690 {
691  static const float offsetScale = 0;
692 
693  double t = xvec[0];
694 
695  double amp = pvec[0];
696  double t0 = pvec[1];
697  double tau1 = pvec[2];
698  double tau2 = pvec[3];
699  double C = pvec[4];
700 
701  double refldelay = pvec[5];
702  double reflFrac = pvec[6];
703  double reflwidth = pvec[7];
704  double delta = pvec[8];
705 
706  double tauRatio = tau2 / tau1;
707  double tauRatioMinunsOne = tauRatio - 1;
708 
709  double norm = ( std::exp(-offsetScale / tauRatio) * std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
710  ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) ) / (1 + delta);
711 
712  double deltaT = t - (t0 - offsetScale * tau1);
713  if (deltaT < 0) deltaT = 0;
714 
715  // Note: the small constant added here accounts for the very long tail on the pulse
716  // which doesn't go to zero over the time range that we sample
717  //
718  double expTerm = delta + std::exp(-deltaT / tau2);
719  double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
720 
721  double deltaTRefl = deltaT - refldelay;
722  double reflTerm = -reflFrac*amp*std::exp(-0.5*deltaTRefl*deltaTRefl/reflwidth/reflwidth);
723 
724  return amp * expTerm * fermiTerm / norm + C + reflTerm;
725 }
PlotCalibFromCool.norm
norm
Definition: PlotCalibFromCool.py:100
conifer::pow
constexpr int pow(int x)
Definition: conifer.h:20
DMTest::C
C_v1 C
Definition: C.h:26
ALFA_EventTPCnv_Dict::t0
std::vector< ALFA_RawData_p1 > t0
Definition: ALFA_EventTPCnvDict.h:42
read_hist_ntuple.t
t
Definition: read_hist_ntuple.py:5
drawFromPickle.exp
exp
Definition: drawFromPickle.py:36
pvec
std::array< fp_t, 2 > pvec
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:9