MpdFemtoTriplet.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. /**
  2. * \class MpdFemtoTriplet
  3. * \brief The class allows to perform three-particle analysis
  4. *
  5. * The MpdFemtoTriplet class allows to perform three-particle
  6. * analysis and calculate quantities like: qInv, mInv, etc...
  7. *
  8. * \author Grigory Nigmatkulov (NRNU MEPhI)
  9. * \date May 18, 2019
  10. * \email nigmatkulov@gmail.com
  11. */
  12. #ifndef MpdFemtoTriplet_h
  13. #define MpdFemtoTriplet_h
  14. // C++ headers
  15. #include <utility>
  16. // MpdFemtoMaker headers
  17. #include "MpdFemtoParticle.h"
  18. #include "MpdFemtoTypes.h"
  19. // ROOT headers
  20. #include "TLorentzVector.h"
  21. //_________________
  22. class MpdFemtoTriplet {
  23. public:
  24. /// Default constructor
  25. MpdFemtoTriplet();
  26. /// Constructor with three particles
  27. MpdFemtoTriplet(MpdFemtoParticle*, MpdFemtoParticle*, MpdFemtoParticle*);
  28. /// Copy constructor
  29. MpdFemtoTriplet(const MpdFemtoTriplet&);
  30. /// Default destructor
  31. virtual ~MpdFemtoTriplet();
  32. /// Retrieve the first track
  33. MpdFemtoParticle* track1() const {
  34. return mTrack1;
  35. }
  36. /// Retrieve the second track
  37. MpdFemtoParticle* track2() const {
  38. return mTrack2;
  39. }
  40. /// Retrieve the third track
  41. MpdFemtoParticle* track3() const {
  42. return mTrack3;
  43. }
  44. /// Set first track
  45. void setTrack1(const MpdFemtoParticle* trkPtr) {
  46. mTrack1 = (MpdFemtoParticle*) trkPtr;
  47. }
  48. /// Set second track
  49. void setTrack2(const MpdFemtoParticle* trkPtr) {
  50. mTrack2 = (MpdFemtoParticle*) trkPtr;
  51. }
  52. /// Set third track
  53. void setTrack3(const MpdFemtoParticle* trkPtr) {
  54. mTrack3 = (MpdFemtoParticle*) trkPtr;
  55. }
  56. /// Four-momentum of three particles
  57. TLorentzVector fourMomentum() const;
  58. /// Relative momentum of three particles
  59. double qInv() const;
  60. /// Relative momentum the first and second particles
  61. double qInv12() const;
  62. /// Relative momentum the third and second particles
  63. double qInv23() const;
  64. /// Relative momentum the first and third particles
  65. double qInv31() const;
  66. /// Half of transverse momentum of three particles
  67. double kT() const;
  68. /// Invariant mass of three particles
  69. double mInv() const;
  70. /// Track-splitting quantity of three particles
  71. double quality() const;
  72. /// Track-splitting quantity of three particles
  73. double splittinLevel() const {
  74. return quality();
  75. }
  76. // the following two methods calculate the "nominal" separation of the tracks
  77. // at the inner field cage (EntranceSeparation) and when they exit the TPC,
  78. // which may be at the outer field cage, or at the endcaps.
  79. // "nominal" means that the tracks are assumed to start at (0,0,0). Making this
  80. // assumption is important for the Event Mixing-- it is not a mistake
  81. /// Nominal TPC exit separation
  82. double nominalTpcExitSeparation() const;
  83. /// Nominal TPC entrance separation
  84. double nominalTpcEntranceSeparation() const;
  85. /// Nominal TPC average separation
  86. double nominalTpcAverageSeparation() const;
  87. private:
  88. /// The first particle from triplet
  89. MpdFemtoParticle* mTrack1;
  90. /// The second particle from triplet
  91. MpdFemtoParticle* mTrack2;
  92. /// The third particle from triplet
  93. MpdFemtoParticle* mTrack3;
  94. ClassDef(MpdFemtoTriplet, 1)
  95. };
  96. #endif // MpdFemtoTriplet_h