9#ifndef IDPERFMON_EVENTANALYSIS_H
10#define IDPERFMON_EVENTANALYSIS_H
14#include "CLHEP/Vector/LorentzVector.h"
44 template<
class T>
static float EvalInvMass(
const T* pxP1,
const T* pxP2,
46 template<
class T>
static float EvalInvMass(
const T* pxP1,
const T* pxP2,
const T* pxp3,
const T* pxP4,
47 float fMass1,
float fMass2 = -999.9,
float fMass3 = -999.9,
float fMass4 =
invalidAnswer );
48 template<
class T>
static float EvalDiMuInvMass(
const T* pxP1,
const T* pxP2 );
49 template<
class T>
static float EvalFourMuInvMass(
const T* pxP1,
const T* pxP2,
const T* pxP3,
const T* pxP4);
50 template<
class T>
static float EvaluateAngle(
const T* pxP1,
const T* pxP2 );
51 template<
class T>
static float EvalPtDiff(
const T* pxP1,
const T* pxP2 );
52 template<
class T>
static float EvalPhiDiff(
const T* pxP1,
const T* pxP2 );
53 template<
class T>
static float EvalEtaDiff(
const T* pxP1,
const T* pxP2 );
55 template<
class T>
static float EvalPt(
const T* pxP1,
const T* pxP2 );
56 template<
class T>
static float EvalPhi(
const T* pxP1,
const T* pxP2 );
57 template<
class T>
static float EvalEta(
const T* pxP1,
const T* pxP2 );
58 template<
class T>
static float EvalCharge(
const T* pxP1,
const T* pxP2 );
60 template<
class T>
static float EvalTransverseMass(
const T* pxP1,
float fMETx,
float fMETy,
62 template<
class T>
static float EvalTransverseMass(
const T* pxP1,
float fMETx,
float fMETy );
65 float fMETx,
float fMETy,
68 float fMETx,
float fMETy );
91template<
class T> CLHEP::Hep3Vector
93 const auto & p4(pP->p4());
108 float fMass1,
float fMass2 )
114 fMass2 = ( fMass2 < 0.0f ) ? fMass1 : fMass2;
118 CLHEP::HepLorentzVector xLVec1; xLVec1.setVectM( xTmp1, fMass1 );
119 CLHEP::HepLorentzVector xLVec2; xLVec2.setVectM( xTmp2, fMass2 );
120 return static_cast<float>( xLVec1.invariantMass( xLVec2 ) );
134 float fMass1,
float fMass2,
float fMass3,
float fMass4 )
141 fMass2 = ( fMass2 < 0.0f ) ? fMass1 : fMass2;
142 fMass3 = ( fMass3 < 0.0f ) ? fMass1 : fMass3;
143 fMass4 = ( fMass4 < 0.0f ) ? fMass1 : fMass4;
151 CLHEP::HepLorentzVector xLVec; xLVec.setVectM ( xTmp1, fMass1 );
152 CLHEP::HepLorentzVector xLVec2; xLVec2.setVectM( xTmp2, fMass2 );
153 CLHEP::HepLorentzVector xLVec3; xLVec3.setVectM( xTmp3, fMass3 );
154 CLHEP::HepLorentzVector xLVec4; xLVec4.setVectM( xTmp4, fMass4 );
160 return static_cast<float>( xLVec.m() );
171 return static_cast<float>( xTmp1.angle(xTmp2) );
179 if ( pxP1->charge() > 0.5f )
198 return static_cast<float>( xTmp1.deltaPhi(xTmp2) );
209 return static_cast<float>( xTmp1.polarAngle(xTmp2) );
218 return static_cast<float>( (xTmp1 + xTmp2).perp() );
227 return static_cast<float>( (xTmp1 + xTmp2).phi() );
236 return static_cast<float>( (xTmp1 + xTmp2).pseudoRapidity() );
243 return static_cast<float>( pxP1->charge() + pxP2->charge() );
256 float fMass1,
float fMass2 )
262 fMass2 = ( fMass2 < 0.0f ) ? fMass1 : fMass2;
264 CLHEP::Hep3Vector xTmp1 = CLHEP::Hep3Vector( pxP1->p4().Px() *
EAna::CGeV, pxP1->p4().Py() *
EAna::CGeV, 0.0f );
265 CLHEP::Hep3Vector xTmp2 = CLHEP::Hep3Vector( fMETx, fMETy, 0.0f );
266 CLHEP::HepLorentzVector xLVec1; xLVec1.setVectM( xTmp1, fMass1 );
267 CLHEP::HepLorentzVector xLVec2; xLVec2.setVectM( xTmp2, 0.0f );
268 return static_cast<float>( xLVec1.invariantMass( xLVec2 ) );
281 float fMass1,
float fMass2 )
287 fMass2 = ( fMass2 < 0.0f ) ? fMass1 : fMass2;
289 CLHEP::Hep3Vector xTmp1 = CLHEP::Hep3Vector( pxP1->p4().Px() *
EAna::CGeV, pxP1->p4().Py() *
EAna::CGeV, 0.0f );
290 CLHEP::Hep3Vector xTmp2 = CLHEP::Hep3Vector( pxP2->p4().Px() *
EAna::CGeV, pxP2->p4().Py() *
EAna::CGeV, 0.0f );
291 CLHEP::Hep3Vector xTmp12 = xTmp1 + xTmp2;
292 CLHEP::Hep3Vector xTmp3 = CLHEP::Hep3Vector( fMETx, fMETy, 0.0f );
293 CLHEP::HepLorentzVector xLVec1; xLVec1.setVectM( xTmp12, fMass1 );
294 CLHEP::HepLorentzVector xLVec2; xLVec2.setVectM( xTmp3, 0.0f );
295 return static_cast<float>( xLVec1.invariantMass( xLVec2 ) );
A number of constexpr particle constants to avoid hardcoding them directly in various places.
static float EvaluateAngle(const T *pxP1, const T *pxP2)
std::map< unsigned int, TProfile2D * > m_x2DProfHistograms
std::map< unsigned int, TH2F * > m_x2DHistograms
static float EvalDiMuInvMass(const T *pxP1, const T *pxP2)
static float EvalCharge(const T *pxP1, const T *pxP2)
std::map< unsigned int, TH1F * > m_x1DHistograms
static float EvalPhi(const T *pxP1, const T *pxP2)
virtual void BookHistograms()
static float EvalPtDiff(const T *pxP1, const T *pxP2)
static float EvalTransverseMass(const T *pxP1, float fMETx, float fMETy, float fMass1, float fMass2=invalidAnswer)
std::map< unsigned int, TProfile * > m_x1DProfHistograms
static CLHEP::Hep3Vector calculateMomentum(const T *pP)
static constexpr float invalidAnswer
static float EvalPt(const T *pxP1, const T *pxP2)
static float EvalEtaDiff(const T *pxP1, const T *pxP2)
static float EvalFourMuInvMass(const T *pxP1, const T *pxP2, const T *pxP3, const T *pxP4)
unsigned int m_uPassedEvents
static float EvalPhiDiff(const T *pxP1, const T *pxP2)
static float EvalEta(const T *pxP1, const T *pxP2)
std::string m_xSampleName
static float EvalInvMass(const T *pxP1, const T *pxP2, float fMass1, float fMass2=invalidAnswer)
constexpr double muonMassInMeV
the mass of the muon (in MeV)
constexpr double electronMassInMeV
the mass of the electron (in MeV)
TH1F(name, title, nxbins, bins_par2, bins_par3=None, path='', **kwargs)