ATLAS Offline Software
MissingMassProb.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 // Class handling the probability calculation of the MissingMassCalculator
6 // author Michael Huebner <michael.huebner@no.spam.cern.ch>
7 
8 #ifndef DITAUMASSTOOLS_MISSINGMASSPROB_H
9 #define DITAUMASSTOOLS_MISSINGMASSPROB_H
10 
11 // Local include(s):
14 
15 // ROOT include(s):
16 #include <TFile.h>
17 #include <TF1.h>
18 #include <TGraphAsymmErrors.h>
19 #include <TLorentzVector.h>
20 
21 #include <string>
22 
23 namespace DiTauMassTools{
24 
25 class MissingMassCalculatorV2;
26 
28 
29  public:
32 
33  double apply(MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2, bool constant=false, bool oneTau=false, bool twoTau=false);
34 
35  void setParamAngle(const TLorentzVector & tauvec, int tau, int tautype);
36  void setParamRatio(int tau, int tautype);
37  void setParamNuMass();
43 
44  void SetAllowUseHT(bool allowUseHT) { m_allowUseHT=allowUseHT;}
45  bool GetAllowUseHT() { return m_allowUseHT;}
46 
47  void SetUseHT(bool val) { m_UseHT=val; }
48  bool GetUseHT() { return m_UseHT; } // if use HT
49 
52 
55 
56  void SetUseDphiLL(bool val) {m_fUseDphiLL = val;}
57  bool GetUseDphiLL() { return m_fUseDphiLL; }
58 
59  double MetProbability(MissingMassInput& preparedInput, const double & met1,const double & met2,const double & MetSigma1, const double & MetSigma2);
60  double dTheta3Dparam(const int & parInd, const int & tau_type, const double & P_tau,const double *par);
61 
62  double dTheta3d_probabilityFast(MissingMassInput& preparedInput, const int & tau_type,const double & dTheta3d,const double & P_tau);
63  double myDelThetaHadFunc(double *x, double *par);
64  double myDelThetaLepFunc(double *x, double *par);
65 
66  double MHtProbability(MissingMassInput& preparedInput, const double & d_mhtX, const double & d_mhtY, const double & mht,
67  const double & trueMetGuess, const double & mht_offset);
68  double MHtProbabilityHH(MissingMassInput& preparedInput, const double & d_mhtX, const double & d_mhtY, const double & mht,
69  const double & trueMetGuess, const double & mht_offset);
70 
71  void MET(MissingMassInput& preparedInput);
72  double mEtAndTauProbability(MissingMassInput& preparedInput);
73  double MnuProbability(MissingMassInput& preparedInput, double mnu, double binsize);
74  double MnuProbability(MissingMassInput& preparedInput, double mnu);
75  double TauProbability(MissingMassInput& preparedInput, const int & type1, const TLorentzVector & vis1, const TLorentzVector & nu1,
76  const int & type2, const TLorentzVector & vis2, const TLorentzVector & nu2);
77  double TauProbability(MissingMassInput& preparedInput, const int & type1, const TLorentzVector & vis1, const TLorentzVector & nu1,
78  const int & type2, const TLorentzVector & vis2, const TLorentzVector & nu2, const double & detmet);
79  double TauProbabilityLFV(MissingMassInput& preparedInput, const int & type1, const TLorentzVector & vis1, const TLorentzVector & nu1);
80 
81  static double MetProbabilityWrapper(MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2);
82  static double mEtAndTauProbabilityWrapper(MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2);
83  static double dTheta3d_probabilityFastWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
84  static double TauProbabilityWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
85  static double MnuProbabilityWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
86  static double MnuProbabilityNewWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
87 
88  static double dTheta3d_probabilityNewWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
89  static double TauProbabilityNewWrapper( MissingMassProb* prob, MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2 );
90 
91  std::list<std::function<double(MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2)>> m_probListConstant;
92  std::list<std::function<double(MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2)>> m_probListOneTau;
93  std::list<std::function<double(MissingMassInput& preparedInput, const int & tau_type1, const int & tau_type2, const TLorentzVector & tauvec1, const TLorentzVector & tauvec2, const TLorentzVector nuvec1, const TLorentzVector & nuvec2)>> m_probListTwoTau;
94  private:
95  //SpeedUp static array for efficient access
96  thread_local static double s_fit_param[2][3][6][5];
97  thread_local static double s_ter_sigma_par[2][10][3];
98  //cache quantities for efficient NuPSolution calculation
99 
100  TF1 *m_formulaAngle1 = new TF1("formulaAngle1", "[0]*exp(-[2]*(log((x+[3])/[1]))**2)");
101  TF1 *m_formulaAngle2 = new TF1("formulaAngle2", "[0]*exp(-[2]*(log((x+[3])/[1]))**2)");
104  TF1 *m_formulaRatioLep1 = new TF1("formulaRatio1", "gaus(0)+expo(3)");
105  TF1 *m_formulaRatioLep2 = new TF1("formulaRatio2", "gaus(0)+expo(3)");
106  TF1 *m_formulaRatioHad1 = new TF1("formulaRatio1", "gaus(0)");
107  TF1 *m_formulaRatioHad2 = new TF1("formulaRatio2", "gaus(0)");
108  TF1 *m_formulaNuMass = new TF1("formulaNuMass", "pol6");
109  std::vector<TF1*> m_paramVectorAngle;
110  std::vector<TF1*> m_paramVectorAngleLep;
111  std::vector<TF1*> m_paramVectorRatio;
112  std::vector<TF1*> m_paramVectorRatioLep;
113  std::vector<TF1*> m_paramVectorNuMass;
114 
115  std::string m_paramFilePath;
116  TFile *m_fParams;
118 
120  bool m_UseHT;
121  bool m_fUseTauProbability; // switch to apply TauProbability
122  bool m_fUseMnuProbability; // switch to apply MnuProbability
123  bool m_fUseDphiLL; //for leplep
124 
125  // comment by Sasha to keep this for the future
126  //inline double AngularProbability(TLorentzVector nu_vec, TLorentzVector vis_vec, int decayType);
127 
128  // to be tested if helpful
129  //inline double ResonanceProbability(TLorentzVector vec1, TLorentzVector vec2);
130 };
131 } // namespace DiTauMassTools
132 
133 #endif
DiTauMassTools::MissingMassProb::GetFormulaAngle1
TF1 * GetFormulaAngle1()
Definition: MissingMassProb.h:38
DiTauMassTools::MissingMassProb::m_paramVectorAngle
std::vector< TF1 * > m_paramVectorAngle
Definition: MissingMassProb.h:109
DiTauMassTools::MissingMassProb::GetAllowUseHT
bool GetAllowUseHT()
Definition: MissingMassProb.h:45
DiTauMassTools::MissingMassProb::SetUseDphiLL
void SetUseDphiLL(bool val)
Definition: MissingMassProb.h:56
DiTauMassTools::MissingMassProb::GetFormulaRatio1
TF1 * GetFormulaRatio1()
Definition: MissingMassProb.h:40
DiTauMassTools::MissingMassProb::MnuProbabilityNewWrapper
static double MnuProbabilityNewWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:128
DiTauMassTools::MissingMassProb::m_allowUseHT
bool m_allowUseHT
Definition: MissingMassProb.h:119
DiTauMassTools::MissingMassProb::TauProbability
double TauProbability(MissingMassInput &preparedInput, const int &type1, const TLorentzVector &vis1, const TLorentzVector &nu1, const int &type2, const TLorentzVector &vis2, const TLorentzVector &nu2)
Definition: MissingMassProb.cxx:649
DiTauMassTools::MissingMassProb::dTheta3d_probabilityFastWrapper
static double dTheta3d_probabilityFastWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:41
DiTauMassTools::MissingMassProb::MnuProbabilityWrapper
static double MnuProbabilityWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:70
DiTauMassTools::MissingMassProb::GetUseTauProbability
bool GetUseTauProbability()
Definition: MissingMassProb.h:51
DiTauMassTools::MissingMassProb::m_fUseTauProbability
bool m_fUseTauProbability
Definition: MissingMassProb.h:121
DiTauMassTools::MissingMassProb::m_formulaAngle1
TF1 * m_formulaAngle1
Definition: MissingMassProb.h:100
DiTauMassTools::MissingMassProb::TauProbabilityLFV
double TauProbabilityLFV(MissingMassInput &preparedInput, const int &type1, const TLorentzVector &vis1, const TLorentzVector &nu1)
Definition: MissingMassProb.cxx:612
DiTauMassTools::MissingMassProb::m_formulaAngle2
TF1 * m_formulaAngle2
Definition: MissingMassProb.h:101
DiTauMassTools::MissingMassProb::m_probListTwoTau
std::list< std::function< double(MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)> > m_probListTwoTau
Definition: MissingMassProb.h:93
DiTauMassTools::MissingMassProb::GetUseDphiLL
bool GetUseDphiLL()
Definition: MissingMassProb.h:57
DiTauMassTools::MissingMassProb::MET
void MET(MissingMassInput &preparedInput)
Definition: MissingMassProb.cxx:1247
DiTauMassTools::MissingMassProb::SetUseMnuProbability
void SetUseMnuProbability(bool val)
Definition: MissingMassProb.h:53
HelperFunctions.h
DiTauMassTools::MissingMassProb::m_fUseDphiLL
bool m_fUseDphiLL
Definition: MissingMassProb.h:123
DiTauMassTools::MissingMassProb::SetAllowUseHT
void SetAllowUseHT(bool allowUseHT)
Definition: MissingMassProb.h:44
DiTauMassTools::MissingMassProb::m_UseHT
bool m_UseHT
Definition: MissingMassProb.h:120
DiTauMassTools::MissingMassProb::m_fParams
TFile * m_fParams
Definition: MissingMassProb.h:116
DiTauMassTools::MissingMassProb::m_formulaNuMass
TF1 * m_formulaNuMass
Definition: MissingMassProb.h:108
covarianceTool.prob
prob
Definition: covarianceTool.py:678
DiTauMassTools::MissingMassProb::s_fit_param
static thread_local double s_fit_param[2][3][6][5]
Definition: MissingMassProb.h:96
x
#define x
DiTauMassTools::MissingMassProb::GetFormulaNuMass
TF1 * GetFormulaNuMass()
Definition: MissingMassProb.h:42
DiTauMassTools::MissingMassProb::apply
double apply(MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2, bool constant=false, bool oneTau=false, bool twoTau=false)
Definition: MissingMassProb.cxx:532
DiTauMassTools::MissingMassProb::dTheta3Dparam
double dTheta3Dparam(const int &parInd, const int &tau_type, const double &P_tau, const double *par)
Definition: MissingMassProb.cxx:1132
DiTauMassTools::MissingMassProb::TauProbabilityWrapper
static double TauProbabilityWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:62
DiTauMassTools::MissingMassProb::GetFormulaAngle2
TF1 * GetFormulaAngle2()
Definition: MissingMassProb.h:39
DiTauMassTools::MissingMassProb::s_ter_sigma_par
static thread_local double s_ter_sigma_par[2][10][3]
Definition: MissingMassProb.h:97
DiTauMassTools
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:22
DiTauMassTools::MissingMassProb::myDelThetaHadFunc
double myDelThetaHadFunc(double *x, double *par)
Definition: MissingMassProb.cxx:1082
DiTauMassTools::MissingMassProb::TauProbabilityNewWrapper
static double TauProbabilityNewWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:114
DiTauMassTools::MissingMassProb::MnuProbability
double MnuProbability(MissingMassInput &preparedInput, double mnu, double binsize)
Definition: MissingMassProb.cxx:937
DiTauMassTools::MissingMassProb::GetFormulaRatio2
TF1 * GetFormulaRatio2()
Definition: MissingMassProb.h:41
DiTauMassTools::MissingMassProb::m_mmcCalibrationSet
MMCCalibrationSetV2::e m_mmcCalibrationSet
Definition: MissingMassProb.h:117
DiTauMassTools::MissingMassProb::setParamAngle
void setParamAngle(const TLorentzVector &tauvec, int tau, int tautype)
Definition: MissingMassProb.cxx:153
DiTauMassTools::MissingMassProb::m_formulaRatioHad1
TF1 * m_formulaRatioHad1
Definition: MissingMassProb.h:106
DiTauMassTools::MissingMassProb::mEtAndTauProbabilityWrapper
static double mEtAndTauProbabilityWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:31
DiTauMassTools::MissingMassProb::dTheta3d_probabilityFast
double dTheta3d_probabilityFast(MissingMassInput &preparedInput, const int &tau_type, const double &dTheta3d, const double &P_tau)
Definition: MissingMassProb.cxx:1034
DiTauMassTools::MissingMassProb::GetUseHT
bool GetUseHT()
Definition: MissingMassProb.h:48
DiTauMassTools::MissingMassProb::m_formulaRatioLep2
TF1 * m_formulaRatioLep2
Definition: MissingMassProb.h:105
histSizes.list
def list(name, path='/')
Definition: histSizes.py:38
DiTauMassTools::MissingMassProb::GetUseMnuProbability
bool GetUseMnuProbability()
Definition: MissingMassProb.h:54
dumpNswErrorDb.constant
def constant
Definition: dumpNswErrorDb.py:22
xAOD::double
double
Definition: CompositeParticle_v1.cxx:159
DiTauMassTools::MissingMassProb::setParamRatio
void setParamRatio(int tau, int tautype)
Definition: MissingMassProb.cxx:182
DiTauMassTools::MissingMassProb::m_paramVectorRatio
std::vector< TF1 * > m_paramVectorRatio
Definition: MissingMassProb.h:111
DiTauMassTools::MissingMassProb::m_paramVectorRatioLep
std::vector< TF1 * > m_paramVectorRatioLep
Definition: MissingMassProb.h:112
DiTauMassTools::MissingMassProb::m_formulaRatioLep1
TF1 * m_formulaRatioLep1
Definition: MissingMassProb.h:104
DiTauMassTools::MissingMassProb::MetProbability
double MetProbability(MissingMassInput &preparedInput, const double &met1, const double &met2, const double &MetSigma1, const double &MetSigma2)
Definition: MissingMassProb.cxx:551
createCoolChannelIdFile.par
par
Definition: createCoolChannelIdFile.py:29
DiTauMassTools::MissingMassProb::MHtProbabilityHH
double MHtProbabilityHH(MissingMassInput &preparedInput, const double &d_mhtX, const double &d_mhtY, const double &mht, const double &trueMetGuess, const double &mht_offset)
Definition: MissingMassProb.cxx:1012
DiTauMassTools::MissingMassProb::SetUseTauProbability
void SetUseTauProbability(bool val)
Definition: MissingMassProb.h:50
DiTauMassTools::MissingMassProb::m_formulaRatio1
TF1 * m_formulaRatio1
Definition: MissingMassProb.h:102
MissingMassInput.h
DiTauMassTools::MMCCalibrationSetV2::e
e
Definition: PhysicsAnalysis/TauID/DiTauMassTools/DiTauMassTools/HelperFunctions.h:36
DiTauMassTools::MissingMassProb::m_formulaRatioHad2
TF1 * m_formulaRatioHad2
Definition: MissingMassProb.h:107
DiTauMassTools::MissingMassProb
Definition: MissingMassProb.h:27
DiTauMassTools::MissingMassProb::MetProbabilityWrapper
static double MetProbabilityWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:21
DiTauMassTools::MissingMassProb::m_fUseMnuProbability
bool m_fUseMnuProbability
Definition: MissingMassProb.h:122
DiTauMassTools::MissingMassProb::setParamNuMass
void setParamNuMass()
Definition: MissingMassProb.cxx:145
DiTauMassTools::MissingMassProb::myDelThetaLepFunc
double myDelThetaLepFunc(double *x, double *par)
Definition: MissingMassProb.cxx:1108
Pythia8_RapidityOrderMPI.val
val
Definition: Pythia8_RapidityOrderMPI.py:14
DiTauMassTools::MissingMassProb::m_probListConstant
std::list< std::function< double(MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)> > m_probListConstant
Definition: MissingMassProb.h:91
DiTauMassTools::MissingMassInput
Definition: MissingMassInput.h:19
DiTauMassTools::MissingMassProb::m_paramVectorAngleLep
std::vector< TF1 * > m_paramVectorAngleLep
Definition: MissingMassProb.h:110
DiTauMassTools::MissingMassProb::MissingMassProb
MissingMassProb(MMCCalibrationSetV2::e aset, std::string m_paramFilePath)
Definition: MissingMassProb.cxx:213
DiTauMassTools::MissingMassProb::SetUseHT
void SetUseHT(bool val)
Definition: MissingMassProb.h:47
DiTauMassTools::MissingMassProb::MHtProbability
double MHtProbability(MissingMassInput &preparedInput, const double &d_mhtX, const double &d_mhtY, const double &mht, const double &trueMetGuess, const double &mht_offset)
Definition: MissingMassProb.cxx:995
DiTauMassTools::MissingMassProb::m_formulaRatio2
TF1 * m_formulaRatio2
Definition: MissingMassProb.h:103
DiTauMassTools::MissingMassProb::~MissingMassProb
~MissingMassProb()
Definition: MissingMassProb.cxx:529
DiTauMassTools::MissingMassProb::dTheta3d_probabilityNewWrapper
static double dTheta3d_probabilityNewWrapper(MissingMassProb *prob, MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)
Definition: MissingMassProb.cxx:86
DiTauMassTools::MissingMassProb::m_paramFilePath
std::string m_paramFilePath
Definition: MissingMassProb.h:115
DiTauMassTools::MissingMassProb::m_probListOneTau
std::list< std::function< double(MissingMassInput &preparedInput, const int &tau_type1, const int &tau_type2, const TLorentzVector &tauvec1, const TLorentzVector &tauvec2, const TLorentzVector nuvec1, const TLorentzVector &nuvec2)> > m_probListOneTau
Definition: MissingMassProb.h:92
DiTauMassTools::MissingMassProb::m_paramVectorNuMass
std::vector< TF1 * > m_paramVectorNuMass
Definition: MissingMassProb.h:113
DiTauMassTools::MissingMassProb::mEtAndTauProbability
double mEtAndTauProbability(MissingMassInput &preparedInput)
Definition: MissingMassProb.cxx:572