MpdVertex.cxx 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. // -------------------------------------------------------------------------
  2. // ----- MpdVertex source file -----
  3. // ----- Created 10/07/09 by A. Zinchenko -----
  4. // -------------------------------------------------------------------------
  5. #include "MpdVertex.h"
  6. #include <iostream>
  7. using std::cout;
  8. using std::endl;
  9. // ----- Default constructor -------------------------------------------
  10. MpdVertex::MpdVertex() : TNamed("Vertex", "Global") {
  11. fX = fY = fZ = fChi2 = 0.;
  12. fNDF = fNTracks = 0;
  13. for (Int_t i=0; i<6; i++) fCovMatrix[i] = 0;
  14. fCovMatrix[0] = fCovMatrix[3] = fCovMatrix[5] = 1.0;
  15. fTrInd = new TArrayI(1);
  16. }
  17. // -------------------------------------------------------------------------
  18. // ----- Constructor with name and title -------------------------------
  19. MpdVertex::MpdVertex(const char* name, const char* title)
  20. : TNamed(name, title) {
  21. fX = fY = fZ = fChi2 = 0.;
  22. fNDF = fNTracks = 0;
  23. for (Int_t i=0; i<6; i++) fCovMatrix[i] = 0;
  24. fCovMatrix[0] = fCovMatrix[3] = fCovMatrix[5] = 1.0;
  25. fTrInd = new TArrayI(1);
  26. }
  27. // -------------------------------------------------------------------------
  28. // ----- Constructor with all parameters -------------------------------
  29. MpdVertex::MpdVertex(const char* name, const char* title,
  30. Double_t x, Double_t y, Double_t z, Double_t chi2,
  31. Int_t ndf, Int_t nTracks,
  32. const TMatrixFSym& covMat)
  33. : TNamed(name, title) {
  34. fTitle = title;
  35. fX = x;
  36. fY = y;
  37. fZ = z;
  38. fChi2 = chi2;
  39. fNDF = ndf;
  40. fNTracks = nTracks;
  41. Int_t index = 0;
  42. for (Int_t i=0; i<3; i++) {
  43. for (Int_t j=i; j<3; j++) fCovMatrix[index++] = covMat[i][j];
  44. }
  45. fTrInd = new TArrayI(1);
  46. }
  47. // -------------------------------------------------------------------------
  48. MpdVertex::MpdVertex(const MpdVertex& vert)
  49. : TNamed(vert),
  50. fX(vert.fX), fY(vert.fY), fZ(vert.fZ), fChi2(vert.fChi2),
  51. fNDF(vert.fNDF), fNTracks(vert.fNTracks), fTrInd(new TArrayI(1))
  52. {
  53. ///copy constructor
  54. for (Int_t i = 0; i < 6; ++i) fCovMatrix[i] = vert.fCovMatrix[i];
  55. *fTrInd = *(vert.fTrInd);
  56. }
  57. //__________________________________________________________________________
  58. MpdVertex & MpdVertex::operator= (const MpdVertex& vert)
  59. {
  60. /// Asignment operator
  61. // check assignement to self
  62. if (this == &vert) return *this;
  63. // base class assignement
  64. TNamed::operator=(vert);
  65. fX = vert.fX;
  66. fY = vert.fY;
  67. fZ = vert.fZ;
  68. fChi2 = vert.fChi2;
  69. fNDF = vert.fNDF;
  70. fNTracks = vert.fNTracks;
  71. fTrInd = new TArrayI(1);
  72. for (Int_t i = 0; i < 6; ++i) fCovMatrix[i] = vert.fCovMatrix[i];
  73. *fTrInd = *(vert.fTrInd);
  74. return *this;
  75. }
  76. // ----- Destructor ----------------------------------------------------
  77. MpdVertex::~MpdVertex() { delete fTrInd; }
  78. // -------------------------------------------------------------------------
  79. // ----- Public method Print -------------------------------------------
  80. void MpdVertex::Print() {
  81. Double_t chi2ndf;
  82. if (fNDF) chi2ndf = fChi2 / Double_t(fNDF);
  83. else chi2ndf = 0.;
  84. cout << "Vertex coord. (" << fX << "," << fY << "," << fZ << ") cm, "
  85. << "chi2/ndf = " << chi2ndf << ", " << fNTracks
  86. << " tracks used" << endl;
  87. }
  88. // -------------------------------------------------------------------------
  89. // ----- Accessor to covariance matrix --------------------------------
  90. void MpdVertex::CovMatrix(TMatrixFSym& covMat) const {
  91. Int_t index = 0;
  92. for (int i=0; i<3; i++) {
  93. for (int j=i; j<3; j++) {
  94. covMat[i][j] = fCovMatrix[index];
  95. covMat[j][i] = fCovMatrix[index];
  96. index++;
  97. }
  98. }
  99. }
  100. // -------------------------------------------------------------------------
  101. // ----- Accessor to covariance matrix elements ------------------------
  102. Double_t MpdVertex::GetCovariance(Int_t i, Int_t j) const {
  103. TMatrixFSym* mat = new TMatrixFSym(3);
  104. CovMatrix(*mat);
  105. Double_t element = (*mat)[i][j];
  106. delete mat;
  107. return element;
  108. }
  109. // -------------------------------------------------------------------------
  110. // ----- Public method SetVertex ---------------------------------------
  111. void MpdVertex::SetVertex(Double_t x, Double_t y, Double_t z, Double_t chi2,
  112. Int_t ndf, Int_t nTracks,
  113. const TMatrixFSym& covMat) {
  114. fX = x;
  115. fY = y;
  116. fZ = z;
  117. fChi2 = chi2;
  118. fNDF = ndf;
  119. fNTracks = nTracks;
  120. Int_t index = 0;
  121. for (Int_t i=0; i<3; i++) {
  122. for (Int_t j=i; j<3; j++) fCovMatrix[index++] = covMat[i][j];
  123. }
  124. }
  125. // -------------------------------------------------------------------------
  126. // ----- Public method Reset -------------------------------------------
  127. void MpdVertex::Reset() {
  128. fX = fY = fZ = fChi2 = 0.;
  129. fNDF = fNTracks = 0;
  130. for(Int_t i=0; i<6; i++) fCovMatrix[i] = 0;
  131. }
  132. // -------------------------------------------------------------------------
  133. ClassImp(MpdVertex)