MpdMCTrack.cxx 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. // -------------------------------------------------------------------------
  2. // ----- FairMCTrack source file -----
  3. // ----- Created 03/08/04 by V. Friese -----
  4. // ----- adopted for NICA/MPD 29/03/10 (litvin) -----
  5. // ----- adopted for NICA/MPD 20/12/19 (ABychkov) -----
  6. // -------------------------------------------------------------------------
  7. #include "MpdMCTrack.h"
  8. #include <iostream>
  9. using std::cout;
  10. using std::endl;
  11. // ----- Default constructor -------------------------------------------
  12. MpdMCTrack::MpdMCTrack()// {
  13. // fPdgCode = fNPoints = 0;
  14. // fMotherId = -1;
  15. // fPx = fPy = fPz = 0.;
  16. // fStartX = fStartY = fStartZ = fStartT = 0.;
  17. // }
  18. : TObject(),
  19. fPdgCode(0),
  20. fMotherId(-1),
  21. fPx(0.),
  22. fPy(0.),
  23. fPz(0.),
  24. fStartX(0.),
  25. fStartY(0.),
  26. fStartZ(0.),
  27. fStartT(0.),
  28. fNPoints(0)
  29. {
  30. fPolar[0] = fPolar[1] = fPolar[2] = 0.0;
  31. }
  32. // -------------------------------------------------------------------------
  33. // ----- Standard constructor ------------------------------------------
  34. MpdMCTrack::MpdMCTrack(Int_t pdgCode, Int_t motherId, Double_t px,
  35. Double_t py, Double_t pz, Double_t x, Double_t y,
  36. Double_t z, Double_t t, Int_t nPoints = 0)
  37. : TObject() {
  38. fPdgCode = pdgCode;
  39. fMotherId = motherId;
  40. fPx = px;
  41. fPy = py;
  42. fPz = pz;
  43. fStartX = x;
  44. fStartY = y;
  45. fStartZ = z;
  46. fStartT = t;
  47. // if (nPoints >= 0) fNPoints = nPoints;
  48. // else fNPoints = 0;
  49. fNPoints = nPoints;
  50. fPolar[0] = fPolar[1] = fPolar[2] = 0.0;
  51. }
  52. // -------------------------------------------------------------------------
  53. // ----- Copy constructor ----------------------------------------------
  54. MpdMCTrack::MpdMCTrack(const MpdMCTrack& track) // {
  55. // *this = track;
  56. // }
  57. : TObject(track),
  58. fPdgCode(track.fPdgCode),
  59. fMotherId(track.fMotherId),
  60. fPx(track.fPx),
  61. fPy(track.fPy),
  62. fPz(track.fPz),
  63. fStartX(track.fStartX),
  64. fStartY(track.fStartY),
  65. fStartZ(track.fStartZ),
  66. fStartT(track.fStartT),
  67. fNPoints(track.fNPoints)
  68. {
  69. for (Int_t i = 0; i < 3; ++i) fPolar[i] = track.fPolar[i];
  70. }
  71. // -------------------------------------------------------------------------
  72. // ----- Constructor from TParticle ------------------------------------
  73. MpdMCTrack::MpdMCTrack(TParticle* part)
  74. : TObject(){
  75. fPdgCode = part->GetPdgCode();
  76. fMotherId = part->GetMother(0);
  77. fPx = part->Px();
  78. fPy = part->Py();
  79. fPz = part->Pz();
  80. fStartX = part->Vx();
  81. fStartY = part->Vy();
  82. fStartZ = part->Vz();
  83. fStartT = part->T()*1e09;
  84. fNPoints = 0;
  85. TVector3 polar3;
  86. part->GetPolarisation(polar3);
  87. for (Int_t i = 0; i < 3; ++i) fPolar[i] = polar3[i];
  88. fWeight = part->GetWeight();
  89. }
  90. // -------------------------------------------------------------------------
  91. // ----- Destructor ----------------------------------------------------
  92. MpdMCTrack::~MpdMCTrack() { }
  93. // -------------------------------------------------------------------------
  94. // ----- Public method Print -------------------------------------------
  95. void MpdMCTrack::Print(Int_t trackId) const {
  96. cout << "Track " << trackId << ", mother : " << fMotherId << ", Type "
  97. << fPdgCode << ", momentum (" << fPx << ", " << fPy << ", " << fPz
  98. << ") GeV" << endl;
  99. cout << " STS " << GetNPoints(kSTS) << ", TPC " << GetNPoints(kTPC)
  100. << ", TOF " << GetNPoints(kTOF) << ", ETOF " << GetNPoints(kETOF)
  101. << ", FFD " << GetNPoints(kFFD) << ", ECT " << GetNPoints(kECT)
  102. << ", ECAL " << GetNPoints(kECAL) << ", NDET " << GetNPoints(kNDET)
  103. << ", CPC " << GetNPoints(kCPC) << ", BBC " << GetNPoints(kBBC)
  104. << ", ZDC " << GetNPoints(kZDC) << ", FSA " << GetNPoints(kFSA)
  105. << ", BMD " << GetNPoints(kBMD) << ", MCORD " << GetNPoints(kMCORD) << endl;
  106. }
  107. // -------------------------------------------------------------------------
  108. // ----- Public method GetMass -----------------------------------------
  109. Double_t MpdMCTrack::GetMass() const {
  110. if ( TDatabasePDG::Instance() ) {
  111. TParticlePDG* particle = TDatabasePDG::Instance()->GetParticle(fPdgCode);
  112. if ( particle ) return particle->Mass();
  113. else return 0.;
  114. }
  115. return 0.;
  116. }
  117. // -------------------------------------------------------------------------
  118. // ----- Public method GetRapidity -------------------------------------
  119. Double_t MpdMCTrack::GetRapidity() const {
  120. Double_t e = GetEnergy();
  121. Double_t y = 0.5 * TMath::Log( (e+fPz) / (e-fPz) );
  122. return y;
  123. }
  124. // -------------------------------------------------------------------------
  125. // ----- Public method GetNPoints --------------------------------------
  126. Int_t MpdMCTrack::GetNPoints(DetectorIdMPD detId) const {
  127. //kSTS, kTPC, kTOF, kETOF, kFD, kECT, kECAL, kNDET, kCPC, kBBC, kZDC, kFSA, kBMD,KMCORD
  128. if (( detId <= kMCORD ) && ( detId >= kSTS ))
  129. return ( fNPoints & (1 << detId));
  130. else {
  131. cout << "-E- FairMCTrack::GetNPoints: Unknown detector ID "
  132. << detId << endl;
  133. return 0;
  134. }
  135. }
  136. // -------------------------------------------------------------------------
  137. // ----- Public method SetNPoints --------------------------------------
  138. void MpdMCTrack::SetNPoints(Int_t iDet, Int_t nPoints) {
  139. //kSTS, kTPC, kTOF, kETOF, kFD, kECT, kECAL, kNDET, kCPC, kBBC, kZDC, kFSA, kBMD,KMCORD
  140. Int_t mpd_nPoints = (nPoints>0)*(1 << iDet);
  141. if (( iDet <= kMCORD ) && ( iDet >= kSTS )) {
  142. fNPoints = ( fNPoints & ( ~ (1 << iDet) ) ) | mpd_nPoints;
  143. }
  144. else cout << "-E- FairMCTrack::SetNPoints: Unknown detector ID "
  145. << iDet << endl;
  146. }
  147. // -------------------------------------------------------------------------
  148. ClassImp(MpdMCTrack)