FairRoot/PandaRoot
PndGiBuuJPsiEE.cxx
Go to the documentation of this file.
1 /*
2  * PndGiBuuJPsiEE.cxx
3  *
4  * Created on: Aug 9, 2012
5  * Author: stockman
6  */
7 
8 #include "PndGiBuuJPsiEE.h"
9 #include "PndGiBuuTrack.h"
10 
11 #include "TDatabasePDG.h"
12 #include "TParticlePDG.h"
13 
14 #include "TVector3.h"
15 #include "TLorentzVector.h"
16 #include "TRandom.h"
17 
18 #include <iostream>
19 
21 
23 }
24 
26 }
27 
28 std::vector<PndGiBuuTrack> PndGiBuuJPsiEE::DecayTrack(PndGiBuuTrack track)
29 {
30 
31  std::vector<PndGiBuuTrack> result;
32 
33  if (443 != track.GetPdgId()){
34  std::cout << "-E- Particle is not a J/Psi! Given pdgCode is: " << track.GetPdgId() << std::endl;
35  result.push_back(track);
36  return result;
37  }
38 
39  TDatabasePDG* pdgBase = TDatabasePDG::Instance();
40  if ( ! pdgBase ) Fatal("FairPrimaryGenerator", "No TDatabasePDG instantiated");
41 
42  TParticlePDG* JPsi = pdgBase->GetParticle(track.GetPdgId());
43 
44  TVector3 JPsiP3;
45  TLorentzVector JPsiP4;
46 
47  JPsiP3 = track.GetMomentum();
48 
49  Double_t JPsiMass = JPsi->Mass();
50 
51  JPsiP4.SetXYZM(JPsiP3.X(),JPsiP3.Y(),JPsiP3.Z(),JPsiMass);
52 
53  TParticlePDG* eplusPDG = pdgBase->GetParticle(-11);
54  //TParticlePDG* eminusPDG = pdgBase->GetParticle(11); //[R.K. 01/2017] unused variable?
55 
56  Double_t eMass = eplusPDG->Mass();
57 
58  Double_t pee = sqrt(JPsiMass*JPsiMass/4.-eMass*eMass);
59 
60  Double_t ctheta = gRandom->Rndm();
61  ctheta = 2.*ctheta - 1.;
62  Double_t stheta = sqrt(1.-ctheta*ctheta);
63 
64  Double_t pi = 3.141592654;
65  Double_t phi = gRandom->Rndm();
66  phi = 2.*pi*phi;
67 
68  TVector3 epP3(pee*cos(phi)*stheta,pee*sin(phi)*stheta,pee*ctheta);
69  TVector3 emP3 = -epP3;
70  TLorentzVector epP4(epP3,sqrt(pee*pee+eMass*eMass));
71  TLorentzVector emP4(emP3,sqrt(pee*pee+eMass*eMass));
72 
73  TVector3 vJPsi = JPsiP4.BoostVector();
74 
75  epP4.Boost(vJPsi);
76  emP4.Boost(vJPsi);
77 
78 
79  PndGiBuuTrack eplus(-11, epP4.Px(),epP4.Py(),epP4.Pz(), 0,0,0);
80  PndGiBuuTrack eminus(11, emP4.Px(),emP4.Py(),emP4.Pz(), 0,0,0);
81 
82  result.push_back(eplus);
83  result.push_back(eminus);
84 
85  return result;
86 }
87 
friend F32vec4 cos(const F32vec4 &a)
Definition: P4_F32vec4.h:112
friend F32vec4 sqrt(const F32vec4 &a)
Definition: P4_F32vec4.h:29
PndRiemannTrack track
Definition: RiemannTest.C:33
friend F32vec4 sin(const F32vec4 &a)
Definition: P4_F32vec4.h:111
Int_t GetPdgId()
Definition: PndGiBuuTrack.h:19
#define pi
Definition: createSTT.C:60
CandList eplus
virtual std::vector< PndGiBuuTrack > DecayTrack(PndGiBuuTrack track)
Double_t
TVector3 GetMomentum()
Definition: PndGiBuuTrack.h:20
ClassImp(PndGiBuuJPsiEE)
virtual ~PndGiBuuJPsiEE()
CandList eminus