15 #include <TDatabasePDG.h>
35 , fType(pair.GetType())
36 , fCharge(pair.Charge())
37 , fLabel(pair.GetLabel())
38 , fWeight(pair.GetWeight())
39 , fPdgCode(pair.PdgCode())
40 , fRefD1(pair.GetFirstDaughter())
41 , fRefD2(pair.GetSecondDaughter())
42 , fPid1(pair.GetFirstDaughterPid())
43 , fPid2(pair.GetSecondDaughterPid())
44 , fKFUsage(pair.GetKFUsage()) {
52 : fType(type), fRefD1(), fRefD2() {
67 TLorentzVector& p1Mom,
68 TLorentzVector& p2Mom,
72 Double_t& phiCS)
const {
77 const Double_t proMass = TDatabasePDG::Instance()->GetParticle(2212)->Mass();
78 TLorentzVector projMom(
83 TLorentzVector targMom(0., 0., 0., TMath::Sqrt(0. * 0 + proMass * proMass));
86 TVector3 beta = (-1.0 / motherMom.E()) * motherMom.Vect();
93 TVector3 zAxisHE = (motherMom.Vect()).Unit();
94 TVector3 zAxisCS = ((projMom.Vect()).Unit() - (targMom.Vect()).Unit()).Unit();
95 TVector3 yAxis = ((projMom.Vect()).Cross(targMom.Vect())).Unit();
96 TVector3 xAxisHE = (yAxis.Cross(zAxisHE)).Unit();
97 TVector3 xAxisCS = (yAxis.Cross(zAxisCS)).Unit();
101 thetaHE = zAxisHE.Dot((p1Mom.Vect()).Unit());
102 thetaCS = zAxisCS.Dot((p1Mom.Vect()).Unit());
104 TMath::ATan2((p1Mom.Vect()).Dot(yAxis), (p1Mom.Vect()).Dot(xAxisHE));
106 TMath::ATan2((p1Mom.Vect()).Dot(yAxis), (p1Mom.Vect()).Dot(xAxisCS));
108 thetaHE = zAxisHE.Dot((p2Mom.Vect()).Unit());
109 thetaCS = zAxisCS.Dot((p2Mom.Vect()).Unit());
111 TMath::ATan2((p2Mom.Vect()).Dot(yAxis), (p2Mom.Vect()).Dot(xAxisHE));
113 TMath::ATan2((p2Mom.Vect()).Dot(yAxis), (p2Mom.Vect()).Dot(xAxisCS));
122 if (!primVtx)
return -1.;
124 TVector3 pairPos(
Xv(),
Yv(),
Zv());
129 TVector3 pairMom(
Px(),
Py(),
Pz());
130 Double_t pointingAngle = pairMom.Angle(pairPos);
131 return TMath::Abs(TMath::Cos(pointingAngle));
136 Double_t d0z0[2])
const {
140 if (!primVtx)
return;
142 d0z0[0] = TMath::Sqrt(TMath::Power(
Xv() - primVtx->
GetX(), 2)
143 + TMath::Power(
Yv() - primVtx->
GetY(), 2));
145 d0z0[1] =
Zv() - primVtx->
GetZ();