ATLAS Offline Software
Loading...
Searching...
No Matches
ZDCFitWrapper.h File Reference
#include "CxxUtils/checker_macros.h"
#include <TF1.h>
#include <memory>
#include <cmath>
#include <stdexcept>
#include <algorithm>
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  ZDCFitExpFermiVariableTausInduct
class  ZDCFitExpFermiVariableTausRun3
class  ZDCFitExpFermiFixedTaus
class  ZDCFitExpFermiPrePulse
class  ZDCFitExpFermiLHCfPrePulse
class  ZDCFitExpFermiPreExp
class  ZDCFitExpFermiLHCfPreExp
class  ZDCFitExpFermiInductPreExp
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)
double ZDCFermiExpFitInduct (const double *xvec, const double *pvec)

Function Documentation

◆ ZDCFermiExpFit()

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

Definition at line 1390 of file ZDCFitWrapper.h.

1391{
1392 double t = xvec[0];
1393
1394 double amp = pvec[0];
1395 double t0 = pvec[1];
1396 double tau1 = pvec[2];
1397 double tau2 = pvec[3];
1398 double C = pvec[4];
1399
1400 double tauRatio = tau2 / tau1;
1401 double tauRatioMinunsOne = tauRatio - 1;
1402
1403 double norm = (std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1404 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))));
1405
1406 double deltaT = t - t0;
1407 if (deltaT < 0) deltaT = 0;
1408
1409 double expTerm = std::exp(-deltaT / tau2);
1410 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1411
1412 return amp * expTerm * fermiTerm / norm + C;
1413}
std::array< fp_t, 2 > pvec
static Double_t t0
struct color C

◆ ZDCFermiExpFitInduct()

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

Definition at line 1451 of file ZDCFitWrapper.h.

1452{
1453 double t = xvec[0];
1454
1455 double amp = pvec[0];
1456 double t0 = pvec[1];
1457 double tau1 = pvec[2];
1458 double tau2 = pvec[3];
1459 double C = pvec[4];
1460
1461 double period = pvec[5];
1462 double Acos = pvec[6];
1463 double Bsin = pvec[7];
1464 double delta = pvec[8];
1465
1466 double tauRatio = tau2 / tau1;
1467 double tauRatioMinunsOne = tauRatio - 1;
1468
1469 double norm = std::pow(1. / tauRatioMinunsOne, 1. / (1.0 + tauRatio)) /
1470 ( 1.0 + std::pow(1. / tauRatioMinunsOne, 1. / (1.0 + 1.0 / tauRatio))) ;
1471
1472 double deltaT = t - t0;
1473 double deltaTInduct = deltaT - tau1 * std::log(tauRatioMinunsOne);
1474
1475 if (deltaT < 0) deltaT = 0;
1476 if (deltaTInduct < 0) deltaTInduct = 0;
1477
1478 // Note: the small constant added here accounts for the very long tail on the pulse
1479 // which doesn't go to zero over the time range that we sample
1480
1481 double twoPiOverPeriod = 2.0*M_PI/period;
1482 double inductTerm = (1.0 + Acos*std::cos(deltaTInduct*twoPiOverPeriod) +
1483 Bsin*std::sin(deltaTInduct*twoPiOverPeriod))/(1+Acos);
1484 double expTerm = delta + std::exp(-deltaT / tau2)*inductTerm;
1485 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1486
1487 return amp * expTerm * fermiTerm / norm + C;
1488}
#define M_PI

◆ ZDCFermiExpFitRefl()

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

Definition at line 1415 of file ZDCFitWrapper.h.

1416{
1417 double t = xvec[0];
1418
1419 double amp = pvec[0];
1420 double t0 = pvec[1];
1421 double tau1 = pvec[2];
1422 double tau2 = pvec[3];
1423 double C = pvec[4];
1424
1425 double refldelay = pvec[5];
1426 double reflFrac = pvec[6];
1427 double reflwidth = pvec[7];
1428 double delta = pvec[8];
1429
1430 double tauRatio = tau2 / tau1;
1431 double tauRatioMinunsOne = tauRatio - 1;
1432
1433 double norm = std::pow(1. / tauRatioMinunsOne, 1. / (1 + tauRatio)) /
1434 ( 1 + std::pow(1. / tauRatioMinunsOne, 1. / (1 + 1 / tauRatio))) ;
1435
1436 double deltaT = t - t0;
1437 if (deltaT < 0) deltaT = 0;
1438
1439 // Note: the small constant added here accounts for the very long tail on the pulse
1440 // which doesn't go to zero over the time range that we sample
1441 //
1442 double expTerm = delta + std::exp(-deltaT / tau2);
1443 double fermiTerm = 1. / (1. + std::exp(-(t - t0) / tau1));
1444
1445 double deltaTRefl = deltaT - refldelay;
1446 double reflTerm = -reflFrac*amp*std::exp(-0.5*deltaTRefl*deltaTRefl/reflwidth/reflwidth);
1447
1448 return amp * expTerm * fermiTerm / norm + C + reflTerm;
1449}