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

1210{
1211 double t = xvec[0];
1212
1213 double amp = pvec[0];
1214 double t0 = pvec[1];
1215 double tau1 = pvec[2];
1216 double tau2 = pvec[3];
1217 double C = pvec[4];
1218
1219 double tauRatio = tau2 / tau1;
1220 double tauRatioMinunsOne = tauRatio - 1;
1221
1222 double norm = (std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1223 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))));
1224
1225 double deltaT = t - t0;
1226 if (deltaT < 0) deltaT = 0;
1227
1228 double expTerm = std::exp(-deltaT / tau2);
1229 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1230
1231 return amp * expTerm * fermiTerm / norm + C;
1232}
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 1234 of file ZDCFitWrapper.h.

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