MpdTpcPeak.cxx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. #include "MpdTpcPeak.h"
  2. #include <cmath>
  3. ClassImp(MpdTpcPeak)
  4. MpdTpcPeak::MpdTpcPeak() :
  5. fCol(-1), fBktOff(0), fPeakTime(0.), fIntegral(0.), fIntegSig(0.),
  6. fChi2(-1.), fMean(-1.e5), fSigMean(-1.), fSumADC(-1.),
  7. fMaxADC(0.), fMinADC(1.e9)
  8. {
  9. fADC.clear();
  10. }
  11. //......................................................................
  12. MpdTpcPeak::MpdTpcPeak(Int_t col, Float_t ptime, Float_t integ, Float_t chi2)
  13. {
  14. fCol = col;
  15. fPeakTime = ptime;
  16. fIntegral = integ;
  17. fChi2 = chi2;
  18. fBktOff = 0;
  19. fMean = -1.;
  20. fSigMean = -1.;
  21. fSumADC = -1.;
  22. fMaxADC = 0.;
  23. fMinADC = 1.e9;
  24. fADC.clear();
  25. }
  26. //......................................................................
  27. MpdTpcPeak::MpdTpcPeak(const MpdTpcPeak& peak) :
  28. TObject((const TObject&) peak)
  29. {
  30. fCol = peak.fCol;
  31. fBktOff = peak.fBktOff;
  32. fCluster = peak.fCluster;
  33. fChi2 = peak.fChi2;
  34. fPeakTime = peak.fPeakTime;
  35. fIntegral = peak.fIntegral;
  36. fIntegSig = peak.fIntegSig;
  37. fMean = peak.fMean;
  38. fSigMean = peak.fSigMean;
  39. fMaxADC = peak.fMaxADC;
  40. fMinADC = peak.fMinADC;
  41. fSumADC = 0.;
  42. for (UInt_t i=0; i<peak.fADC.size(); ++i) {
  43. fADC.push_back(peak.fADC[i]);
  44. fSumADC += peak.fADC[i];
  45. }
  46. }
  47. //......................................................................
  48. MpdTpcPeak::~MpdTpcPeak()
  49. {
  50. fADC.clear();
  51. }
  52. //......................................................................
  53. void MpdTpcPeak::Insert(Float_t val, Int_t col, Int_t bkt)
  54. {
  55. fADC.push_back(val);
  56. if (val > fMaxADC){
  57. fMaxADC = val;
  58. fMaxAdcCol = col;
  59. fMaxAdcBkt = bkt;
  60. }
  61. if (val < fMinADC) fMinADC = val;
  62. }
  63. //......................................................................
  64. void MpdTpcPeak::Remove(UInt_t val)
  65. {
  66. fADC.erase(fADC.begin()+val);
  67. fMinADC = 1.e9;
  68. fMaxADC = 0.;
  69. for (UInt_t i=0; i<fADC.size(); ++i) {
  70. if (fADC[i] > fMaxADC) fMaxADC = fADC[i];
  71. if (fADC[i] < fMinADC) fMinADC = fADC[i];
  72. }
  73. }
  74. //......................................................................
  75. void MpdTpcPeak::Clear()
  76. {
  77. fCol = -1;
  78. fCluster = 0;
  79. fChi2 = -1.;
  80. fPeakTime = 0.;
  81. fIntegral = 0.;
  82. fIntegSig = 0.;
  83. fBktOff = 0;
  84. fMean = -1.e5;
  85. fSigMean = -1.;
  86. fSumADC = -1.;
  87. fMaxADC = 0.;
  88. fMinADC = 1.e9;
  89. fADC.clear();
  90. }
  91. //......................................................................
  92. void MpdTpcPeak::AttachCluster(const MpdTpc2dCluster* currclus)
  93. {
  94. //fCluster = TRef((MpdTpc2dCluster*)currclus);
  95. fCluster = currclus;
  96. }
  97. //......................................................................
  98. const Float_t MpdTpcPeak::Mean()
  99. {
  100. if (fMean < -1.e2) {
  101. fMean = 0.;
  102. Float_t sumq = 0.;
  103. for (UInt_t i=0; i<fADC.size(); ++i) {
  104. sumq += fADC[i];
  105. fMean += fADC[i]*(Float_t)i;
  106. }
  107. fMean /= sumq;
  108. }
  109. return fMean;
  110. }
  111. //......................................................................
  112. const Float_t MpdTpcPeak::SigMean()
  113. {
  114. if (fSigMean < 0.) {
  115. Float_t mean = this->Mean();
  116. fSigMean = 0.;
  117. for (UInt_t i=0; i<fADC.size(); ++i) {
  118. fSigMean += (fADC[i] - mean)*(fADC[i] - mean);
  119. }
  120. fSigMean /= (Float_t)fADC.size();
  121. fSigMean = sqrt(fSigMean);
  122. fSigMean /= sqrt((Float_t)fADC.size() - 1);
  123. }
  124. return fSigMean;
  125. }
  126. //......................................................................
  127. const Float_t MpdTpcPeak::SumADC()
  128. {
  129. if (fSumADC < 0.) {
  130. fSumADC = 0.;
  131. for (UInt_t i=0; i<fADC.size(); ++i)
  132. fSumADC += fADC[i];
  133. }
  134. return fSumADC;
  135. }
  136. ////////////////////////////////////////////////////////////////////////