ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCFitWrapper.h File Reference
#include "CxxUtils/checker_macros.h"
#include <TF1.h>
#include <memory>
Include dependency graph for ZDCFitWrapper.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  ZDCFitWrapper
class  ZDCPrePulseFitWrapper
class  ZDCPreExpFitWrapper
class  ZDCFitExpFermiVariableTaus
class  ZDCFitExpFermiVariableTausLHCf
class  ZDCFitExpFermiVariableTausRun3
class  ZDCFitExpFermiFixedTaus
class  ZDCFitExpFermiPrePulse
class  ZDCFitExpFermiLHCfPrePulse
class  ZDCFitExpFermiPreExp
class  ZDCFitExpFermiLHCfPreExp
class  ZDCFitExpFermiLinearFixedTaus
class  ZDCFitExpFermiLinearPrePulse
class  ZDCFitComplexPrePulse
class  ZDCFitGeneralPulse

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 )
inline

Definition at line 1217 of file ZDCFitWrapper.h.

1218{
1219 double t = xvec[0];
1220
1221 double amp = pvec[0];
1222 double t0 = pvec[1];
1223 double tau1 = pvec[2];
1224 double tau2 = pvec[3];
1225 double C = pvec[4];
1226
1227 double tauRatio = tau2 / tau1;
1228 double tauRatioMinunsOne = tauRatio - 1;
1229
1230 double norm = (std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1231 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))));
1232
1233 double deltaT = t - t0;
1234 if (deltaT < 0) deltaT = 0;
1235
1236 double expTerm = std::exp(-deltaT / tau2);
1237 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1238
1239 return amp * expTerm * fermiTerm / norm + C;
1240}
std::array< fp_t, 2 > pvec
static Double_t t0
struct color C

◆ ZDCFermiExpFitRefl()

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

Definition at line 1242 of file ZDCFitWrapper.h.

1243{
1244 double t = xvec[0];
1245
1246 double amp = pvec[0];
1247 double t0 = pvec[1];
1248 double tau1 = pvec[2];
1249 double tau2 = pvec[3];
1250 double C = pvec[4];
1251
1252 double refldelay = pvec[5];
1253 double reflFrac = pvec[6];
1254 double reflwidth = pvec[7];
1255 double delta = pvec[8];
1256
1257 double tauRatio = tau2 / tau1;
1258 double tauRatioMinunsOne = tauRatio - 1;
1259
1260 double norm = std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1261 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) ;
1262
1263 double deltaT = t - t0;
1264 if (deltaT < 0) deltaT = 0;
1265
1266 // Note: the small constant added here accounts for the very long tail on the pulse
1267 // which doesn't go to zero over the time range that we sample
1268 //
1269 double expTerm = delta + std::exp(-deltaT / tau2);
1270 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1271
1272 double deltaTRefl = deltaT - refldelay;
1273 double reflTerm = -reflFrac*amp*std::exp(-0.5*deltaTRefl*deltaTRefl/reflwidth/reflwidth);
1274
1275 return amp * expTerm * fermiTerm / norm + C + reflTerm;
1276}