CbmRoot
Loading...
Searching...
No Matches
PairAnalysisPair.h
Go to the documentation of this file.
1/* Copyright (C) 2015-2016 Justus-Liebig-Universitaet Giessen, Giessen
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Julian Book [committer] */
4
5#ifndef PAIRANALYSISPAIR_H
6#define PAIRANALYSISPAIR_H
7
8//#############################################################
9//# #
10//# PairAnalysisPair #
11//# Interface class to handle pair information #
12//# #
13//# #
14//# Authors: #
15//# Julian Book, Uni Ffm / Julian.Book@cern.ch #
16//# #
17//#############################################################
18
19#include <TMath.h>
20#include <TRef.h>
21
22#include "PairAnalysisTrack.h"
24
25class TLorentzVector;
26class CbmVertex;
27class CbmMCTrack;
28
30public:
32 virtual ~PairAnalysisPair();
34
35 PairAnalysisPair(Char_t type);
36
37 virtual void SetTracks(PairAnalysisTrack* const particle1, Int_t pid1, PairAnalysisTrack* const particle2,
38 Int_t pid2) = 0;
39
40 virtual void SetMCTracks(const CbmMCTrack* const particle1, const CbmMCTrack* const particle2) = 0;
41
42 // kinematics
43 virtual Double_t Px() const { return -999.; }
44 virtual Double_t Py() const { return -999.; }
45 virtual Double_t Pz() const { return -999.; }
46 virtual Double_t Pt() const { return -999.; }
47 virtual Double_t P() const { return -999.; }
48 virtual Bool_t PxPyPz(Double_t p[3]) const
49 {
50 p[0] = Px();
51 p[1] = Py();
52 p[2] = Pz();
53 return kTRUE;
54 }
55
56 virtual Double_t Xv() const { return -999.; }
57 virtual Double_t Yv() const { return -999.; }
58 virtual Double_t Zv() const { return -999.; }
59 virtual Bool_t XvYvZv(Double_t x[3]) const
60 {
61 x[0] = Xv();
62 x[1] = Yv();
63 x[2] = Zv();
64 return kTRUE;
65 }
66
67 virtual Double_t OneOverPt() const { return Pt() > 0. ? 1. / Pt() : 0.; } //TODO: check
68 virtual Double_t Phi() const { return -999.; }
69 virtual Double_t Theta() const { return Pz() != 0 ? TMath::ATan(Pt() / Pz()) : 0.; } //TODO: check
70
71
72 virtual Double_t E() const { return -999.; }
73 virtual Double_t M() const { return -999.; }
74
75 // virtual Double_t Eta() const { return -999.; }
76 virtual Double_t Y() const { return -999.; }
77
78 Short_t Charge() const { return fCharge; }
79 Int_t GetLabel() const { return fLabel; }
80 Double_t GetWeight() const { return fWeight; }
81 // PID
82 const Double_t* PID() const { return 0; } //TODO: check
83
84 UChar_t GetType() const { return fType; }
85 void SetType(Char_t type) { fType = type; }
86
87 static void SetBeamEnergy(Double_t beamEbyHand = -1.);
88
89 // MC information
90 void SetLabel(Int_t label) { fLabel = label; }
91 void SetWeight(Double_t wght) { fWeight = wght; }
92 void SetPdgCode(Int_t pdgCode) { fPdgCode = pdgCode; }
93 Int_t PdgCode() const { return fPdgCode; }
94
95 //inter leg information
96 virtual Double_t GetChi2() const { return -999.; }
97 virtual Int_t GetNdf() const { return -999.; }
98 virtual Double_t GetDecayLength() const { return -999.; }
99 virtual Double_t GetR() const { return -999.; }
100 virtual Double_t OpeningAngle() const { return -999.; }
101 virtual Double_t OpeningAngleXY() const { return -999.; }
102 virtual Double_t OpeningAngleRZ() const { return -999.; }
103 virtual Double_t DistanceDaughters() const { return -999.; }
104 virtual Double_t DistanceDaughtersXY() const { return -999.; }
105 virtual Double_t DeviationDaughters() const { return -999.; }
106 virtual Double_t DeviationDaughtersXY() const { return -999.; }
107 virtual Double_t DeltaEta() const { return -999.; }
108 virtual Double_t DeltaPhi() const { return -999.; }
109 virtual Double_t DaughtersP() const { return -999.; }
110
111 // calculate cos(theta*) and phi* in HE and CS pictures
112 virtual void GetThetaPhiCM(Double_t& thetaHE, Double_t& phiHE, Double_t& thetaCS, Double_t& phiCS) const = 0;
113 void GetThetaPhiCM(TLorentzVector& motherMom, TLorentzVector& p1Mom, TLorentzVector& p2Mom, Double_t& thetaHE,
114 Double_t& phiHE, Double_t& thetaCS, Double_t& phiCS) const;
115
116 virtual Double_t PsiPair(Double_t MagField) const = 0; //Angle cut w.r.t. to magnetic field
117 virtual Double_t PhivPair(Double_t MagField) const = 0; //Angle of ee plane w.r.t. to magnetic field
118
119 virtual Double_t GetCosPointingAngle(const CbmVertex* primVtx) const /*= 0*/;
120
121 virtual Double_t GetArmAlpha() const = 0;
122 virtual Double_t GetArmPt() const = 0;
123 void GetDCA(const CbmVertex* primVtx, Double_t d0z0[2]) const; // TOCHECK
124
125 // daughter references
126 void SetRefFirstDaughter(PairAnalysisTrack* const track) { fRefD1 = track; }
127 void SetRefSecondDaughter(PairAnalysisTrack* const track) { fRefD2 = track; }
128
129 PairAnalysisTrack* GetFirstDaughter() const { return dynamic_cast<PairAnalysisTrack*>(fRefD1.GetObject()); }
130 PairAnalysisTrack* GetSecondDaughter() const { return dynamic_cast<PairAnalysisTrack*>(fRefD2.GetObject()); }
131 Int_t GetFirstDaughterPid() const { return fPid1; }
132 Int_t GetSecondDaughterPid() const { return fPid2; }
133
134 // rotations
135 virtual void RotateTrack(PairAnalysisTrackRotator* rot) = 0;
136
137 void SetKFUsage(Bool_t KFUsage) { fKFUsage = KFUsage; }
138 Bool_t GetKFUsage() const { return fKFUsage; }
139
140protected:
141 Char_t fType = -1; // type of the pair e.g. like sign SE, unlike sign SE, ... see PairAnalysis
142 Short_t fCharge = -1; // charge
143 Int_t fLabel = -1; // MC label
144 Double_t fWeight = 1.; // weighting factor
145 Int_t fPdgCode = 0; // pdg code in case it is a MC particle
146 static Double_t fBeamEnergy;
147
148 TRef fRefD1; // Reference to first daughter
149 TRef fRefD2; // Reference to second daughter
150 Int_t fPid1 = 0; // reference to first daughter pid
151 Int_t fPid2 = 0; // reference to second daughter pid
152
153 Bool_t fKFUsage = kFALSE; // Use KF for vertexing
154
155 ClassDef(PairAnalysisPair, 1) // Base class for pairs
156};
157
158#endif
virtual Double_t DeltaEta() const
static Double_t fBeamEnergy
Int_t GetLabel() const
static void SetBeamEnergy(Double_t beamEbyHand=-1.)
virtual void SetMCTracks(const CbmMCTrack *const particle1, const CbmMCTrack *const particle2)=0
virtual Double_t Theta() const
virtual Double_t M() const
Double_t GetWeight() const
Int_t GetSecondDaughterPid() const
virtual Double_t GetArmAlpha() const =0
void SetPdgCode(Int_t pdgCode)
virtual Double_t Zv() const
void SetType(Char_t type)
UChar_t GetType() const
virtual void GetThetaPhiCM(Double_t &thetaHE, Double_t &phiHE, Double_t &thetaCS, Double_t &phiCS) const =0
virtual Double_t DeviationDaughters() const
Int_t PdgCode() const
virtual Double_t GetDecayLength() const
virtual Double_t Py() const
virtual Double_t Xv() const
virtual Double_t Yv() const
virtual Double_t OpeningAngle() const
virtual Double_t PhivPair(Double_t MagField) const =0
Int_t GetFirstDaughterPid() const
TRef fRefD1
beam energy
virtual Double_t PsiPair(Double_t MagField) const =0
virtual Double_t Pt() const
virtual Int_t GetNdf() const
virtual Bool_t XvYvZv(Double_t x[3]) const
void SetRefSecondDaughter(PairAnalysisTrack *const track)
void SetWeight(Double_t wght)
virtual Double_t P() const
virtual void SetTracks(PairAnalysisTrack *const particle1, Int_t pid1, PairAnalysisTrack *const particle2, Int_t pid2)=0
virtual Double_t GetR() const
virtual Bool_t PxPyPz(Double_t p[3]) const
virtual Double_t OneOverPt() const
Short_t Charge() const
PairAnalysisTrack * GetFirstDaughter() const
virtual Double_t DaughtersP() const
virtual Double_t DeviationDaughtersXY() const
virtual void RotateTrack(PairAnalysisTrackRotator *rot)=0
virtual Double_t GetCosPointingAngle(const CbmVertex *primVtx) const
virtual Double_t DeltaPhi() const
Bool_t GetKFUsage() const
void SetLabel(Int_t label)
virtual Double_t E() const
virtual Double_t Y() const
virtual Double_t Px() const
virtual Double_t DistanceDaughtersXY() const
void GetDCA(const CbmVertex *primVtx, Double_t d0z0[2]) const
PairAnalysisTrack * GetSecondDaughter() const
virtual Double_t DistanceDaughters() const
void SetRefFirstDaughter(PairAnalysisTrack *const track)
virtual Double_t OpeningAngleRZ() const
virtual Double_t OpeningAngleXY() const
void SetKFUsage(Bool_t KFUsage)
virtual Double_t Phi() const
virtual Double_t GetArmPt() const =0
virtual Double_t Pz() const
const Double_t * PID() const
virtual Double_t GetChi2() const