CbmRoot
Loading...
Searching...
No Matches
CbmAnaConversionKinematicParams.h
Go to the documentation of this file.
1/* Copyright (C) 2015-2016 Fakultaet fuer Mathematik und Naturwissenschaften, Bergische Universitaet Wuppertal, Wuppertal
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sascha Reinecke [committer] */
4
11#ifndef CBM_ANA_CONVERSION_KINEMATIC_PARAMS
12#define CBM_ANA_CONVERSION_KINEMATIC_PARAMS
13
14#include "CbmMCTrack.h"
15
16#include "TLorentzVector.h"
17#include "TMath.h"
18
19#define M2E 2.6112004954086e-7
20
22public:
23 Double_t fMomentumMag = 0; // Absolute value of momentum
24 Double_t fPt = 0; // Transverse momentum
25 Double_t fRapidity = 0; // Rapidity
26 Double_t fMinv = 0; // Invariant mass
27 Double_t fAngle = 0; // Opening angle
28 Double_t fRap2 = 0;
29 Double_t fPseudoRap2 = 0;
30
31 /*
32 * Calculate kinematic parameters for MC tracks.
33 */
35 const CbmMCTrack* mctrack2,
36 const CbmMCTrack* mctrack3,
37 const CbmMCTrack* mctrack4)
38 {
40
41 TLorentzVector lorVec1;
42 mctrack1->Get4Momentum(lorVec1);
43 TVector3 part1 = lorVec1.Vect();
44 Double_t energy1 = lorVec1.Energy();
45
46 TLorentzVector lorVec2;
47 mctrack2->Get4Momentum(lorVec2);
48 TVector3 part2 = lorVec2.Vect();
49 Double_t energy2 = lorVec2.Energy();
50
51 TLorentzVector lorVec3;
52 mctrack3->Get4Momentum(lorVec3);
53 TVector3 part3 = lorVec3.Vect();
54 Double_t energy3 = lorVec3.Energy();
55
56 TLorentzVector lorVec4;
57 mctrack4->Get4Momentum(lorVec4);
58 TVector3 part4 = lorVec4.Vect();
59 Double_t energy4 = lorVec4.Energy();
60
61 TLorentzVector sum;
62 sum = lorVec1 + lorVec2 + lorVec3 + lorVec4;
63
64 TVector3 momPair = part1 + part2 + part3 + part4;
65 Double_t energyPair = energy1 + energy2 + energy3 + energy4;
66 Double_t pzPair = momPair.Pz();
67 Double_t yPair = 0.5 * TMath::Log((energyPair + pzPair) / (energyPair - pzPair));
68
69 Double_t invmass = sum.Mag();
70
71 Double_t perp = sum.Perp();
72 //Double_t pt = TMath::Sqrt(sum.X() * sum.X() + sum.Y() * sum.Y() );
73
74
75 params.fMomentumMag = momPair.Mag();
76 params.fPt = perp;
77 params.fRapidity = yPair;
78 params.fMinv = invmass;
79 params.fRap2 = sum.Rapidity();
80 params.fPseudoRap2 = sum.PseudoRapidity();
81 return params;
82 }
83
84 /*
85 * Calculate kinematic parameters for reconstructed momenta
86 */
87 static CbmAnaConversionKinematicParams KinematicParams_4particles_Reco(const TVector3 part1, const TVector3 part2,
88 const TVector3 part3, const TVector3 part4)
89 {
91
92 Double_t energy1 = TMath::Sqrt(part1.Mag2() + M2E);
93 TLorentzVector lorVec1(part1, energy1);
94
95 Double_t energy2 = TMath::Sqrt(part2.Mag2() + M2E);
96 TLorentzVector lorVec2(part2, energy2);
97
98 Double_t energy3 = TMath::Sqrt(part3.Mag2() + M2E);
99 TLorentzVector lorVec3(part3, energy3);
100
101 Double_t energy4 = TMath::Sqrt(part4.Mag2() + M2E);
102 TLorentzVector lorVec4(part4, energy4);
103
104 TLorentzVector sum;
105 sum = lorVec1 + lorVec2 + lorVec3 + lorVec4;
106
107 TVector3 momPair = part1 + part2 + part3 + part4;
108 Double_t energyPair = energy1 + energy2 + energy3 + energy4;
109 Double_t pzPair = momPair.Pz();
110 Double_t yPair = 0.5 * TMath::Log((energyPair + pzPair) / (energyPair - pzPair));
111
112 Double_t invmass = sum.Mag();
113
114 Double_t perp = sum.Perp();
115 //Double_t pt = TMath::Sqrt(sum.X() * sum.X() + sum.Y() * sum.Y() );
116
117
118 params.fMomentumMag = momPair.Mag();
119 params.fPt = perp;
120 params.fRapidity = yPair;
121 params.fMinv = invmass;
122 params.fRap2 = sum.Rapidity();
123 params.fPseudoRap2 = sum.PseudoRapidity();
124 return params;
125 }
126
127
129 const TVector3 electron2)
130 {
132
133 Double_t energyP = TMath::Sqrt(electron1.Mag2() + M2E);
134 TLorentzVector lorVecP(electron1, energyP);
135
136 Double_t energyM = TMath::Sqrt(electron2.Mag2() + M2E);
137 TLorentzVector lorVecM(electron2, energyM);
138
139 TVector3 momPair = electron1 + electron2;
140 Double_t energyPair = energyP + energyM;
141 Double_t ptPair = momPair.Perp();
142 Double_t pzPair = momPair.Pz();
143 Double_t yPair = 0.5 * TMath::Log((energyPair + pzPair) / (energyPair - pzPair));
144 Double_t anglePair = lorVecM.Angle(lorVecP.Vect());
145 Double_t theta = 180. * anglePair / TMath::Pi();
146 Double_t minv = 2. * TMath::Sin(anglePair / 2.) * TMath::Sqrt(electron1.Mag() * electron2.Mag());
147
148 params.fMomentumMag = momPair.Mag();
149 params.fPt = ptPair;
150 params.fRapidity = yPair;
151 params.fMinv = minv;
152 params.fAngle = theta;
153 return params;
154 }
155};
156
157#endif
static CbmAnaConversionKinematicParams KinematicParams_2particles_Reco(const TVector3 electron1, const TVector3 electron2)
static CbmAnaConversionKinematicParams KinematicParams_4particles_MC(const CbmMCTrack *mctrack1, const CbmMCTrack *mctrack2, const CbmMCTrack *mctrack3, const CbmMCTrack *mctrack4)
static CbmAnaConversionKinematicParams KinematicParams_4particles_Reco(const TVector3 part1, const TVector3 part2, const TVector3 part3, const TVector3 part4)
void Get4Momentum(TLorentzVector &momentum) const
Definition CbmMCTrack.h:173