MpdConvPi0.h 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. #ifndef MPDCONVPI0_H
  2. #define MPDCONVPI0_H
  3. #include <deque>
  4. #include "TChain.h"
  5. #include "TVector3.h"
  6. #include "TLorentzVector.h"
  7. #include "TH1.h"
  8. #include "TH2.h"
  9. #include "TH3.h"
  10. #include "MpdEvent.h"
  11. #include "MpdPid.h"
  12. #include "MpdHelix.h"
  13. #include "FairMCEventHeader.h"
  14. #include "MpdKalmanFilter.h"
  15. #include "MpdParticle.h"
  16. #include "MpdPhoton.h"
  17. #include "MpdPhotonAnalysisParams.h"
  18. class V0{
  19. public:
  20. V0()=default ;
  21. V0(bool it,float pt,float chi2,float mee,float rConv,float alpha,float dca, float qt, float qta,float asym,float psi):
  22. isTrue(it),mpt(pt),mchi2(chi2),mmee(mee),mrConv(rConv),malpha(alpha),mdca(dca),mqt(qt),mqta(qta),masym(asym),mpsi(psi){}
  23. ~V0()=default ;
  24. bool isTrue;
  25. float mpt;
  26. float mchi2;
  27. float mmee;
  28. float mrConv;
  29. float malpha;
  30. float mdca;
  31. float mqt;
  32. float mqta;
  33. float masym;
  34. float mpsi;
  35. };
  36. class MpdConvPi0 {
  37. public :
  38. MpdConvPi0() {}
  39. MpdConvPi0(std::string inputlist, std::string configfile="") ;
  40. ~MpdConvPi0() {} //TODO: normal descructor with cleaning off histos
  41. void init();
  42. void processData() ;
  43. void endAnalysis() ;
  44. void setOutFile(std::string filename = "histos.root"){mOutFile=filename ;}
  45. protected:
  46. bool selectEvent() ;
  47. void selectConversion() ;
  48. bool selectTrack(MpdTrack *tr) ;
  49. bool createSelectV0(MpdTrack *tr1, MpdTpcKalmanTrack *ktr1, MpdTrack *tr2, MpdTpcKalmanTrack *ktr2, MpdPhoton &v );
  50. void selectClusters();
  51. void processHistograms() ;
  52. int centrality(int tpcMultiplicity) const ;
  53. MpdHelix MakeHelix(const MpdKalmanTrack &tr) const ;
  54. float Beta_sigma(float beta, float mom) const ;
  55. float dEdx_sigma(float dEdx, float mom) const ;
  56. void ArmenterosPodolanski(TVector3& p1, TVector3& p2, float &qt, float &alpha ) const ;
  57. bool ArmenterosQtCut(float qt, float alpha, MpdParticle & part) const ;
  58. float CosPsiPair(TVector3& p1, TVector3& p2) const ;
  59. bool AsymmetryCut(float asym, float pt) const ;
  60. long int IsSameParent(long int prim1, long int prim2) const ;
  61. bool TestHybrid(MpdPhoton &clu, MpdPhoton &v0) const ;
  62. float distCPV(float dphi, float dz, float E) const ;
  63. float lambdaCut(float l1,float l2,float E) const;
  64. float tofCut(float time,float E) const;
  65. float Nonlinearity(float oldE) const;
  66. private:
  67. std::vector<V0> mStorage ;
  68. //Event properties
  69. bool isInitialized = false ;
  70. bool isMC = true ;
  71. int mCenBin =0 ;
  72. int mZvtxBin=0 ;
  73. int mRPBin =0 ;
  74. TVector3 mPrimaryVertex;
  75. std::string mParamConfig ;
  76. MpdPhotonAnalysisParams mParams ;
  77. std::string mOutFile = "histos.root" ;
  78. TChain * mChain = nullptr ; /// input chain
  79. FairRunAna * mAna = nullptr ;
  80. MpdKalmanFilter* mKF = nullptr ;
  81. MpdPid *mPID = nullptr ;
  82. TClonesArray * mVertexes = nullptr ;
  83. MpdEvent * mMPDEvent = nullptr ;
  84. FairMCEventHeader * mMCHeader = nullptr ;
  85. TClonesArray * mMCTracks = nullptr ;
  86. TObjArray * mEMCClusters = nullptr ;
  87. TClonesArray * mKalmanTracks = nullptr ;
  88. TClonesArray * mMpdGlobalTracks=nullptr ;
  89. vector<MpdParticle*> mPartK ;
  90. MpdKalmanHit mKHit ;
  91. std::vector<MpdPhoton> mClusters ; /// EMC clusters in this event
  92. std::vector<MpdPhoton> mV0 ; /// EMC clusters in this event
  93. static constexpr short nMixEventZ = 20 ; /// number of bins in z direction
  94. static constexpr short nMixEventCent = 10 ; /// number of bins of centrality
  95. static constexpr short nMixEventRP = 5 ; /// number of bins of Reaction Plane orientation
  96. static constexpr short nMixTot = nMixEventZ* nMixEventCent * nMixEventRP ;
  97. int mMaxMixSize = 10 ;
  98. std::array<std::deque<MpdPhoton>, nMixTot> mMixClu ;
  99. std::array<std::deque<MpdPhoton>, nMixTot> mMixV0 ;
  100. //Histograms
  101. TList mHistoList;
  102. static constexpr short mHistoCentBins=5;
  103. //General QA
  104. TH1F * mhEvents = nullptr ;
  105. TH1F * mhVertex = nullptr ;
  106. TH1F * mhCentrality=nullptr ;
  107. //TH2F * mhEPvsCen = nullptr ;
  108. //Single Track selection
  109. TH1F * mhNhits = nullptr ; // Number of hits per track
  110. TH2F * mhTracks = nullptr ; // track occupancy QA
  111. TH2F * mhProbEl = nullptr ; // Electron PID probability estimate
  112. TH2F * mhdEdx = nullptr ; // TPC dEdx
  113. //V0selection
  114. TH2F * mhCutEff = nullptr ;
  115. TH3F * mhConvMap = nullptr ; //Conversion map for all V0
  116. TH2F * mhAlpha = nullptr ;
  117. TH2F * mhChi2 = nullptr ;
  118. TH2F * mhDist = nullptr ;
  119. TH2F * hmMassEE= nullptr ;
  120. TH2F * mhCosPsi= nullptr ;
  121. TH2F * mhArmPo = nullptr ; //Armesteros-Podolanski plot
  122. TH2F * mhAsym = nullptr ; // electron asymmetry
  123. TH2F * mhConvSp= nullptr ; // spectrum of converted photons
  124. TH2F * mhProbElTrue = nullptr ; // Electron PID probability estimate for true electrons
  125. TH2F * mhdEdxTrue = nullptr ; // TPC dEdx for true electrons
  126. TH3F * mhConvMapTrue = nullptr ; //Conversion map for true conversions
  127. TH2F * mhAlphaTrue = nullptr ;
  128. TH2F * mhChi2True = nullptr ;
  129. TH2F * mhDistTrue = nullptr ;
  130. TH2F * hmMassEETrue = nullptr ;
  131. TH2F * mhCosPsiTrue = nullptr ;
  132. TH2F * mhArmPoTrue = nullptr ; //Armesteros-Podolanski plot
  133. TH2F * mhAsymTrue = nullptr ; // electron asymmetry
  134. TH2F * mhConvSpTrue = nullptr ; // spectrum of converted photons
  135. //Cluster selection
  136. TH2F * mhCluCutEff = nullptr ;
  137. // Inv mass histos
  138. TH2F * mhRealCalo[mHistoCentBins] ;
  139. TH2F * mhMixedCalo[mHistoCentBins] ;
  140. TH2F * mhRealHybrid[mHistoCentBins] ;
  141. TH2F * mhMixedHybrid[mHistoCentBins] ;
  142. TH2F * mhRealConv[mHistoCentBins] ;
  143. TH2F * mhMixedConv[mHistoCentBins] ;
  144. TH2F * mhRealCaloTrue[mHistoCentBins] ;
  145. TH2F * mhRealHybridTrue[mHistoCentBins] ;
  146. TH2F * mhRealConvTrue[mHistoCentBins] ;
  147. TH2F * mhRealCaloTrueEl[mHistoCentBins] ;
  148. TH2F * mhRealHybridTrueEl[mHistoCentBins] ;
  149. TH2F * mhRealConvTrueEl[mHistoCentBins] ;
  150. TH2F * mhRealCaloTrueAll[mHistoCentBins] ;
  151. TH2F * mhRealHybridTrueAll[mHistoCentBins] ;
  152. TH2F * mhRealConvTrueAll[mHistoCentBins] ;
  153. TH2F * hPrimPi0[mHistoCentBins] ;
  154. ClassDef(MpdConvPi0, 1) ;
  155. } ;
  156. #endif