MpdVector.cxx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /// \class MpdVector
  2. ///
  3. /// Cellular automaton track object for the MPD inner tracking system
  4. /// \author Alexander Zinchenko, Maxim Strelchenko (LHEP, JINR, Dubna)
  5. #include "MpdVector.h"
  6. #include <map>
  7. //__________________________________________________________________________
  8. MpdVector::MpdVector()
  9. : TObject(),
  10. fDetectorID(0),
  11. fFlag(1),
  12. fIndex(0),
  13. fHitType(kFixedP),
  14. fNofDim(2),
  15. fLength(0.),
  16. fSignal(0.),
  17. fDist(0.),
  18. fCode(""),
  19. fTrackPointer(nullptr),
  20. fKalmanHit(nullptr)
  21. {
  22. /// Default constructor
  23. for (Int_t i = 0; i < 2; ++i) fMeas[i] = fErr[i] = fCosSin[i] = 0;
  24. // fCosSin[0] = 1.;
  25. }
  26. //__________________________________________________________________________
  27. MpdVector::MpdVector(Int_t detID, Int_t nDim, HitType hitType, TVector3 &meas, Double_t *err,
  28. Double_t *cossin, Double_t signal, Double_t dist,
  29. Int_t index, Int_t index1, Int_t trackNo, MpdVector* pointer, MpdKalmanHit* hit)
  30. : TObject(),
  31. fDetectorID(detID),
  32. fFlag(1),
  33. fHitType(hitType),
  34. fNofDim(nDim),
  35. fLength(0.),
  36. fSignal(signal),
  37. fDist(dist),
  38. fMeas(meas),
  39. fTrackNo(trackNo),
  40. fCode(""),
  41. fTrackPointer(pointer),
  42. fKalmanHit(hit)
  43. {
  44. /// Constructor
  45. for (Int_t i = 0; i < 2; ++i) {
  46. //fMeas[i] = meas[i];
  47. fErr[i] = err[i];
  48. fCosSin[i] = cossin[i];
  49. }
  50. SetIndex(index);
  51. SetIndex(index1);
  52. }
  53. //__________________________________________________________________________
  54. MpdVector::MpdVector (const MpdVector& track)
  55. : TObject(track),
  56. fDetectorID(track.fDetectorID),
  57. fFlag(track.fFlag),
  58. fLength(track.fLength),
  59. fIndex(track.fIndex),
  60. fHitType(track.fHitType),
  61. fNofDim(track.fNofDim),
  62. fSignal(track.fSignal),
  63. fDist(track.fDist),
  64. fMeas(track.fMeas),
  65. fTrackNo(track.fTrackNo),
  66. fCode(track.fCode),
  67. fTrackPointer(track.fTrackPointer),
  68. fKalmanHit(track.fKalmanHit)
  69. {
  70. ///copy constructor
  71. for (Int_t i = 0; i < 2; ++i) {
  72. //fMeas[i] = hit.fMeas[i];
  73. fErr[i] = track.fErr[i];
  74. fCosSin[i] = track.fCosSin[i];
  75. }
  76. }
  77. //__________________________________________________________________________
  78. MpdVector::~MpdVector()
  79. {
  80. /// Destructor
  81. }
  82. //__________________________________________________________________________
  83. Int_t MpdVector::Compare(const TObject* hit) const
  84. {
  85. /// "Compare" function to sort in descending order in fDist
  86. MpdVector *kHit = (MpdVector*) hit;
  87. if (kHit->GetType() == GetType()) {
  88. // Check layers
  89. if (GetLayer() < kHit->GetLayer()) return 1;
  90. else if (GetLayer() > kHit->GetLayer()) return -1;
  91. if (GetType() == kFixedP) {
  92. // Sort according to sector number
  93. if (GetDetectorID() % 1000000 < kHit->GetDetectorID() % 1000000) return -1;
  94. else if (GetDetectorID() % 1000000 > kHit->GetDetectorID() % 1000000) return 1;
  95. }
  96. }
  97. if (TMath::Abs(GetDist()) < TMath::Abs(kHit->GetDist())) return 1;
  98. else if (TMath::Abs(GetDist()) > TMath::Abs(kHit->GetDist())) return -1;
  99. return 0;
  100. }
  101. //__________________________________________________________________________
  102. void MpdVector::Print(Option_t *opt)
  103. {
  104. /// Print hit info
  105. }
  106. //__________________________________________________________________________
  107. Double_t MpdVector::GetPos() const
  108. {
  109. /// Distance to (0,0,0)
  110. /*
  111. if (fHitType != kFixedP) return fDist;
  112. printf(" !!! Not implemented for kFixedP hits. Exit. \n");
  113. exit(0);
  114. */
  115. return fDist;
  116. }
  117. //__________________________________________________________________________
  118. void MpdVector::SetIndex(Int_t indx)
  119. {
  120. /// Add point index
  121. Int_t size = fIndex.GetSize();
  122. fIndex.Set (size + 1);
  123. fIndex[size] = indx;
  124. }
  125. ClassImp(MpdVector);