KFPartEfficiencies.h 69 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328
  1. //----------------------------------------------------------------------------
  2. // Implementation of the KFParticle class
  3. // .
  4. // @author I.Kisel, I.Kulakov, M.Zyzak
  5. // @version 1.0
  6. // @since 20.08.13
  7. //
  8. //
  9. // -= Copyright &copy ALICE HLT and CBM L1 Groups =-
  10. //____________________________________________________________________________
  11. #ifndef KFPartEfficiencies_H
  12. #define KFPartEfficiencies_H
  13. #include <map>
  14. #include <iomanip>
  15. #include "KFMCCounter.h"
  16. #ifdef HLTCA_STANDALONE
  17. #include "RootTypesDef.h"
  18. #else
  19. #include "TObject.h"
  20. #endif
  21. /** @class KFEfficiencyParticleInfo
  22. ** @brief A helper class to define parameters of the decay list in KFPartEfficiencies.
  23. ** @author M.Zyzak, I.Kisel
  24. ** @date 05.02.2019
  25. ** @version 1.0
  26. **/
  27. class KFEfficiencyParticleInfo
  28. {
  29. public:
  30. KFEfficiencyParticleInfo():fName("null"),fTitle("null"),fPDG(0),fHistoMin(0.f),fHistoMax(0.f),fMass(0.f),fLifeTime(0.f),fCharge(0), fMassSigma(0.001) {};
  31. /** \brief Constructor with all parameters set in. There is no other way to define the parameters other then use this constructor.*/
  32. KFEfficiencyParticleInfo(std::string name, std::string title, int pdg, float histoMin, float histoMax, float mass, float lifeTime, int charge, float massSigma ):
  33. fName(name), fTitle(title), fPDG(pdg), fHistoMin(histoMin), fHistoMax(histoMax), fMass(mass), fLifeTime(lifeTime), fCharge(charge), fMassSigma(massSigma) {};
  34. ~KFEfficiencyParticleInfo() {};
  35. //accessors
  36. std::string Name() const { return fName; } ///< Returns name of the decay in the file with histograms.
  37. std::string Title() const { return fTitle; } ///< Returns name of the decay in the output table with efficiency.
  38. int PDG() const { return fPDG; } ///< Returns the assigned PDG code.
  39. float HistoMin() const { return fHistoMin; } ///< Returns lower boundary in the mass histogram for the current decay.
  40. float HistoMax() const { return fHistoMax; } ///< Returns upper boundary in the mass histogram for the current decay.
  41. float Mass() const { return fMass; } ///< Returns table mass of the particle.
  42. float LifeTime() const { return fLifeTime; } ///< Returns lifetime of the particle.
  43. int Charge() const { return fCharge; } ///< Returns charge of the particle in units of the elementary charge.
  44. float MassSigma() const { return fMassSigma; } ///< Returns expected width of the mass peak, used in the side bands method.
  45. private:
  46. std::string fName; ///< Name of the decay in the file with histograms.
  47. std::string fTitle; ///< Name of the decay in the output table with efficiency.
  48. int fPDG; ///< PDG code assigned to the current decay in the scheme of KF Particle Finder.
  49. float fHistoMin; ///< Lower boundary in the mass histogram for the current decay.
  50. float fHistoMax; ///< Upper boundary in the mass histogram for the current decay.
  51. float fMass; ///< Table mass of the particle.
  52. float fLifeTime; ///< Lifetime of the particle in seconds.
  53. int fCharge; ///< Charge in units of the elementary charge.
  54. float fMassSigma; ///< Expected width of the decay, determines peak sigma for the side bands method.
  55. };
  56. /** @class KFPartEfficiencies
  57. ** @brief Class to calculate efficiency of KF Particle Finder.
  58. ** @author M.Zyzak, I.Kisel
  59. ** @date 05.02.2019
  60. ** @version 1.0
  61. **
  62. ** The class has two main purposes:\n
  63. ** 1) Defines the list of decays to be analysed: a unique code of the decay, its mass, lifetime,
  64. ** a list of daughter particles, etc. See KFPartEfficiencies::KFPartEfficiencies() for more details.\n
  65. ** 2) It calculates reconstruction efficiency of the decays from the KF Particle Finder scheme.\n
  66. ** Definitions:\n
  67. ** background - physics background, when daughter particle come from the real particle, but the pdg
  68. ** hypothesis is incorrect, for example, Lambda->p pi will create a physics background for
  69. ** K0s if the proton is misidentified;\n
  70. ** ghost - combinatorial background, tracks do not form a real vertex;\n
  71. ** clone - a particle is reconstructed several times, for example, particle track is split into
  72. ** to parts due to the multiple scattering.
  73. **/
  74. class KFPartEfficiencies :public TObject
  75. {
  76. public:
  77. /** \brief The default constructor. Defines the list of decays to be analysed and their properties. Please, see the code for indexing scheme. */
  78. KFPartEfficiencies():
  79. partDaughterPdg(0),
  80. names(),
  81. indices(),
  82. fPdgToIndex(),
  83. ratio_reco1(),
  84. ratio_reco2(),
  85. ratio_reco3(),
  86. mc1(),
  87. mc2(),
  88. mc3(),
  89. reco(),
  90. ratio_ghost(),
  91. ratio_bg(),
  92. ratio_clone(),
  93. ghost(),
  94. bg(),
  95. clone()
  96. {
  97. KFEfficiencyParticleInfo particleInfo[nParticles] =
  98. {
  99. // name title PDG code min max mass lifetime Q
  100. #ifdef CBM
  101. KFEfficiencyParticleInfo("Ks", "KShort ", 310, 0.3f, 1.3f, 0.497614 , 8.954e-11, 0, 0.0045), //0
  102. #else
  103. KFEfficiencyParticleInfo("Ks", "KShort ", 310, 0.3f, 1.3f, 0.497614 , 8.954e-11, 0, 0.0057), //0
  104. #endif
  105. KFEfficiencyParticleInfo("Lambda", "Lambda ", 3122, 1.0f, 2.0f, 1.115683 , 2.632e-10, 0, 0.0020), //1
  106. KFEfficiencyParticleInfo("Lambdab", "Lambda b ", -3122, 1.0f, 2.0f, 1.115683 , 2.632e-10, 0, 0.0020), //2
  107. KFEfficiencyParticleInfo("Xi-", "Xi- ", 3312, 1.0f, 3.0f, 1.32171 , 1.639e-10, -1, 0.0022), //3
  108. KFEfficiencyParticleInfo("Xi+", "Xi+ ", -3312, 1.0f, 3.0f, 1.32171 , 1.639e-10, 1, 0.0022), //4
  109. KFEfficiencyParticleInfo("Xi0", "Xi0 ", 3322, 1.0f, 3.0f, 1.31486 , 2.9e-10, 0, 0.0030), //5
  110. KFEfficiencyParticleInfo("Xi0b", "Xi0 b ", -3322, 1.0f, 3.0f, 1.31486 , 2.9e-10, 0, 0.0030), //6
  111. KFEfficiencyParticleInfo("Omega-", "Omega- ", 3334, 1.0f, 3.0f, 1.67245 , 0.821e-10, -1, 0.0022), //7
  112. KFEfficiencyParticleInfo("Omega+", "Omega+ ", -3334, 1.0f, 3.0f, 1.67245 , 0.821e-10, 1, 0.0022), //8
  113. KFEfficiencyParticleInfo("Sigma^0", "Sigma0 ", 3212, 1.0f, 3.0f, 1.192642 , 7.4e-20, 0, 0.0030), //9
  114. KFEfficiencyParticleInfo("Sigma^0b", "Sigma0 b ", -3212, 1.0f, 3.0f, 1.192642 , 7.4e-20, 0, 0.0030), //10
  115. KFEfficiencyParticleInfo("Sigma^+", "Sigma+ ", 3222, 1.0f, 3.0f, 1.18937 , 0.8018e-10, 1, 0.0030), //11
  116. KFEfficiencyParticleInfo("Sigma^-b", "Sigma- b ", -3222, 1.0f, 3.0f, 1.18937 , 0.8018e-10,-1, 0.0030), //12
  117. KFEfficiencyParticleInfo("K*0", "K*0 ", 313, 0.6f, 2.6f, 0.8958 , 1.38e-23, 0, 0.0300), //13
  118. KFEfficiencyParticleInfo("K*0b", "K*0 b ", -313, 0.6f, 2.6f, 0.8958 , 1.38e-23, 0, 0.0300), //14
  119. KFEfficiencyParticleInfo("K*+", "K*+ ", 323, 0.6f, 2.6f, 0.89166 , 1.30e-23, 1, 0.0300), //15
  120. KFEfficiencyParticleInfo("K*-", "K*- ", -323, 0.6f, 2.6f, 0.89166 , 1.30e-23, -1, 0.0300), //16
  121. KFEfficiencyParticleInfo("K*0_K0,pi0", "K*0_K0pi0 ", 100313, 0.6f, 2.6f, 0.8958 , 1.38e-23, 0, 0.0030), //17
  122. KFEfficiencyParticleInfo("K*+_K+,pi0", "K*+_K+pi0 ", 100323, 0.6f, 2.6f, 0.89166 , 1.30e-23, 1, 0.0030), //18
  123. KFEfficiencyParticleInfo("K*-_K-,pi0", "K*-_K-pi0 ", -100323, 0.6f, 2.6f, 0.89166 , 1.30e-23, -1, 0.0030), //19
  124. KFEfficiencyParticleInfo("Sigma*+", "Sigma*+ ", 3224, 1.0f, 3.0f, 1.3828 , 1.83e-23, 1, 0.0100), //20
  125. KFEfficiencyParticleInfo("Sigma*-", "Sigma*- ", 3114, 1.0f, 3.0f, 1.3872 , 1.67e-23, -1, 0.0100), //21
  126. KFEfficiencyParticleInfo("Sigma*+b", "Sigma*+ b ", -3114, 1.0f, 3.0f, 1.3828 , 1.83e-23, -1, 0.0100), //22
  127. KFEfficiencyParticleInfo("Sigma*-b", "Sigma*- b ", -3224, 1.0f, 3.0f, 1.3872 , 1.67e-23, 1, 0.0100), //23
  128. KFEfficiencyParticleInfo("Sigma*0", "Sigma*0 ", 3214, 1.0f, 3.0f, 1.3837 , 1.83e-23, 0, 0.0030), //24
  129. KFEfficiencyParticleInfo("Sigma*0b", "Sigma*0 b ", -3214, 1.0f, 3.0f, 1.3837 , 1.83e-23, 0, 0.0030), //25
  130. KFEfficiencyParticleInfo("Lambda*", "Lambda* ", 3124, 1.4f, 3.4f, 1.5195 , 4.22e-23, 0, 0.0100), //26
  131. KFEfficiencyParticleInfo("Lambda*b", "Lambda* b ", -3124, 1.4f, 3.4f, 1.5195 , 4.22e-23, 0, 0.0100), //27
  132. KFEfficiencyParticleInfo("Xi*0", "Xi*0 ", 3324, 1.4f, 3.4f, 1.53180 , 7.23e-23, 0, 0.0100), //28
  133. KFEfficiencyParticleInfo("Xi*0b", "Xi*0 b ", -3324, 1.4f, 3.4f, 1.53180 , 7.23e-23, 0, 0.0100), //29
  134. KFEfficiencyParticleInfo("Xi*-_LK", "Xi*-_lk ", 1003314, 1.4f, 3.4f, 1.823 , 2.74e-23, -1, 0.0030), //30
  135. KFEfficiencyParticleInfo("Xi*+_LK", "Xi*+_lk ", -1003314, 1.4f, 3.4f, 1.823 , 2.74e-23, 1, 0.0030), //31
  136. KFEfficiencyParticleInfo("Xi*-_xi-,pi0", "Xi*-_XiPi ", 3314, 1.4f, 3.4f, 1.535 , 6.65e-23, -1, 0.0030), //32
  137. KFEfficiencyParticleInfo("Xi*+_xi+,pi0", "Xi*+_XiPi ", -3314, 1.4f, 3.4f, 1.535 , 6.65e-23, 1, 0.0030), //33
  138. KFEfficiencyParticleInfo("Omega*-", "Omega*- ", 1003334, 1.8f, 3.8f, 2.252 , 1.2e-23, -1, 0.0030), //34
  139. KFEfficiencyParticleInfo("Omega*+", "Omega*+ ", -1003334, 1.8f, 3.8f, 2.252 , 1.2e-23, 1, 0.0030), //35
  140. KFEfficiencyParticleInfo("H0_LL", "H0_LL ", 3000, 1.5f, 3.5f, 2.21 , 1.32e-10, 0, 0.0030), //36
  141. KFEfficiencyParticleInfo("phi_KK", "phi_KK ", 333, 0.8f, 2.8f, 1.019455 , 1.55e-22, 0, 0.0030), //37
  142. KFEfficiencyParticleInfo("rho_pipi", "rho_pipi ", 113, 0.0f, 2.0f, 0.77526 , 4.45e-24, 0, 0.0030), //38
  143. KFEfficiencyParticleInfo("rho_ee", "rho_ee ", 100113, 0.0f, 2.0f, 0.77526 , 4.45e-24, 0, 0.0030), //39
  144. KFEfficiencyParticleInfo("rho_mm", "rho_mm ", 200113, 0.0f, 2.0f, 0.77526 , 4.45e-24, 0, 0.0030), //40
  145. KFEfficiencyParticleInfo("gamma", "gamma ", 22, 0.0f, 3.0f, 0. , 1.e20, 0, 0.0030), //41
  146. KFEfficiencyParticleInfo("pi0", "pi0 ", 111, 0.0f, 3.0f, 0.1349766 , 8.52e-17, 0, 0.0030), //42
  147. KFEfficiencyParticleInfo("eta", "eta ", 221, 0.0f, 3.0f, 0.547862 , 5.0e-19, 0, 0.0030), //43
  148. //Delta and N resonances
  149. KFEfficiencyParticleInfo("Delta0", "Delta0 ", 2114, 1.0f, 3.0f, 1.232 , 5.63e-24, 0, 0.0030), //44
  150. KFEfficiencyParticleInfo("Delta0 b", "Delta0 b ", -2114, 1.0f, 3.0f, 1.232 , 5.63e-24, 0, 0.0030), //45
  151. KFEfficiencyParticleInfo("Delta++", "Delta++ ", 2224, 1.0f, 3.0f, 1.232 , 5.63e-24, 2, 0.0030), //46
  152. KFEfficiencyParticleInfo("Delta-- b", "Delta-- b ", -2224, 1.0f, 3.0f, 1.232 , 5.63e-24, -2, 0.0030), //47
  153. //charmonium
  154. KFEfficiencyParticleInfo("JPsi_ee", "JPsi_ee ", 443, 1.0f, 4.0f, 3.096916 , 7.1e-21, 0, 0.0030), //48
  155. KFEfficiencyParticleInfo("JPsi_mumu", "JPsi_mm ", 100443, 1.0f, 4.0f, 3.096916 , 7.1e-21, 0, 0.0030), //49
  156. KFEfficiencyParticleInfo("JPsi_pp", "JPsi_pp ", 200443, 1.0f, 4.0f, 3.096916 , 7.1e-21, 0, 0.0030), //50
  157. KFEfficiencyParticleInfo("JPsi_LL", "JPsi_LL ", 300443, 2.0f, 5.0f, 3.096916 , 7.1e-21, 0, 0.0030), //51
  158. KFEfficiencyParticleInfo("JPsi_XiXi", "JPsi_XiXi ", 400443, 2.0f, 5.0f, 3.096916 , 7.1e-21, 0, 0.0030), //52
  159. KFEfficiencyParticleInfo("Psi_OO", "Psi_OO ", 500443, 3.0f, 6.0f, 3.686109 , 2.1e-22, 0, 0.0030), //53
  160. //open charm
  161. KFEfficiencyParticleInfo("D0", "D0 ", 421, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0154), //54
  162. KFEfficiencyParticleInfo("D0b", "D0b ", -421, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0154), //55
  163. KFEfficiencyParticleInfo("D0_4", "D0_4 ", 429, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0100), //56
  164. KFEfficiencyParticleInfo("D0b_4", "D0b_4 ", -429, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0100), //57
  165. KFEfficiencyParticleInfo("D0_pipi", "D0_pipi ", 420, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0154), //58
  166. KFEfficiencyParticleInfo("D0_2pi2pi", "D0_2pi2pi ", 470, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0154), //59
  167. KFEfficiencyParticleInfo("D0_K0pipi", "D0_K0pipi ", 425, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0150), //60
  168. KFEfficiencyParticleInfo("D0_KK", "D0_KK ", 426, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0130), //61
  169. KFEfficiencyParticleInfo("D0_KKK0", "D0_KKK0 ", 427, 0.6f, 3.6f, 1.86486 , 4.1e-13, 0, 0.0154), //62
  170. KFEfficiencyParticleInfo("D0_pi0", "D0_#pi0 ", 428, 1.0f, 3.0f, 1.86486 , 4.1e-13, 0, 0.0030), //63
  171. KFEfficiencyParticleInfo("D+", "D+ ", 411, 1.0f, 3.0f, 1.86962 , 1.04e-13, 1, 0.0114), //64
  172. KFEfficiencyParticleInfo("D-", "D- ", -411, 1.0f, 3.0f, 1.86962 , 1.04e-13, -1, 0.0114), //65
  173. KFEfficiencyParticleInfo("D+_K0pi+", "D+_K0pi+ ", 100411, 0.6f, 4.6f, 1.86962 , 1.04e-13, 1, 0.0030), //66
  174. KFEfficiencyParticleInfo("D-_K0pi-", "D-_K0pi- ", -100411, 0.6f, 4.6f, 1.86962 , 1.04e-13, -1, 0.0030), //67
  175. KFEfficiencyParticleInfo("D+_K03pi", "D+_K03pi ", 200411, 0.6f, 4.6f, 1.86962 , 1.04e-13, 1, 0.0030), //68
  176. KFEfficiencyParticleInfo("D-_K03pi", "D-_K03pi ", -200411, 0.6f, 4.6f, 1.86962 , 1.04e-13, -1, 0.0030), //69
  177. KFEfficiencyParticleInfo("D+_3pi", "D+_3pi ", 300411, 0.6f, 4.6f, 1.86962 , 1.04e-13, 1, 0.0030), //70
  178. KFEfficiencyParticleInfo("D-_3pi", "D-_3pi ", -300411, 0.6f, 4.6f, 1.86962 , 1.04e-13, -1, 0.0030), //71
  179. KFEfficiencyParticleInfo("Ds+", "Ds+ ", 431, 1.0f, 3.0f, 1.96850 , 5.0e-13, 1, 0.0110), //72
  180. KFEfficiencyParticleInfo("Ds-", "Ds- ", -431, 1.0f, 3.0f, 1.96850 , 5.0e-13, -1, 0.0110), //73
  181. KFEfficiencyParticleInfo("Ds+_K0K+", "Ds+_K0K+ ", 100431, 1.0f, 3.0f, 1.96850 , 5.0e-13, 1, 0.0030), //74
  182. KFEfficiencyParticleInfo("Ds-_K0K-", "Ds-_K0K- ", -100431, 1.0f, 3.0f, 1.96850 , 5.0e-13, -1, 0.0030), //75
  183. KFEfficiencyParticleInfo("Ds+_K0K0pi+", "Ds+_K0K0pi+ ", 200431, 1.0f, 3.0f, 1.96850 , 5.0e-13, 1, 0.0030), //76
  184. KFEfficiencyParticleInfo("Ds-_K0K0pi-", "Ds-_K0K0pi- ", -200431, 1.0f, 3.0f, 1.96850 , 5.0e-13, -1, 0.0030), //77
  185. KFEfficiencyParticleInfo("Ds+_K0K+pipi", "Ds+_K0K+pipi ", 300431, 1.0f, 3.0f, 1.96850 , 5.0e-13, 1, 0.0030), //78
  186. KFEfficiencyParticleInfo("Ds-_K0K-pipi", "Ds-_K0K-pipi ", -300431, 1.0f, 3.0f, 1.96850 , 5.0e-13, -1, 0.0030), //79
  187. KFEfficiencyParticleInfo("Ds+_K+pipi", "Ds+_K+pipi ", 400431, 1.0f, 3.0f, 1.96850 , 5.0e-13, 1, 0.0030), //80
  188. KFEfficiencyParticleInfo("Ds-_K-pipi", "Ds-_K-pipi ", -400431, 1.0f, 3.0f, 1.96850 , 5.0e-13, -1, 0.0030), //81
  189. KFEfficiencyParticleInfo("Lc", "Lambdac ", 4122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0110), //82
  190. KFEfficiencyParticleInfo("Lcb", "Lambdac b ", -4122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0110), //83
  191. KFEfficiencyParticleInfo("Lc_{pK0}", "Lc {pK0} ", 104122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0030), //84
  192. KFEfficiencyParticleInfo("Lcb_{pK0}", "Lc b {pK0} ", -104122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0030), //85
  193. KFEfficiencyParticleInfo("Lc_{pK02pi}", "Lc {pK02pi} ", 204122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0030), //86
  194. KFEfficiencyParticleInfo("Lcb_{pK02pi}", "Lc b {pK02pi} ", -204122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0030), //87
  195. KFEfficiencyParticleInfo("Lc_{Lpi}", "Lc {Lpi} ", 304122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0030), //88
  196. KFEfficiencyParticleInfo("Lcb_{Lpi}", "Lc b {Lpi} ", -304122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0030), //89
  197. KFEfficiencyParticleInfo("Lc_{L3pi}", "Lc {L3pi} ", 404122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0030), //90
  198. KFEfficiencyParticleInfo("Lcb_{L3pi}", "Lc b {L3pi} ", -404122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0030), //91
  199. KFEfficiencyParticleInfo("Lc_{p2pi}", "Lc {p2pi} ", 504122, 1.8f, 3.8f, 2.28646 , 2.0e-13, 1, 0.0030), //92
  200. KFEfficiencyParticleInfo("Lcb_{p2pi}", "Lc b {p2pi} ", -504122, 1.8f, 3.8f, 2.28646 , 2.0e-13, -1, 0.0030), //93
  201. KFEfficiencyParticleInfo("Xic0", "Xic0 ", 4132, 2.1f, 4.1f, 2.47087 , 1.0e-13, 0, 0.0030), //94
  202. KFEfficiencyParticleInfo("Xic0b", "Xic0b ", -4132, 2.1f, 4.1f, 2.47087 , 1.0e-13, 0, 0.0030), //95
  203. KFEfficiencyParticleInfo("D*0", "D*0 ", 10421, 1.8f, 3.8f, 2.00699 , 3.0e-22, 0, 0.0030), //96
  204. KFEfficiencyParticleInfo("D*0b", "D*0 b ", -10421, 1.8f, 3.8f, 2.00699 , 3.0e-22, 0, 0.0030), //97
  205. KFEfficiencyParticleInfo("D*+", "D*+ ", 10411, 1.8f, 3.8f, 2.01029 , 6.86e-21, 1, 0.0030), //98
  206. KFEfficiencyParticleInfo("D*-", "D*- ", -10411, 1.8f, 3.8f, 2.01029 , 6.86e-21, -1, 0.0030), //99
  207. KFEfficiencyParticleInfo("D*+_4", "D*+_4 ", 20411, 1.8f, 3.8f, 2.01029 , 6.86e-21, 1, 0.0030), //100
  208. KFEfficiencyParticleInfo("D*-_4", "D*-_4 ", -20411, 1.8f, 3.8f, 2.01029 , 6.86e-21, -1, 0.0030), //101
  209. KFEfficiencyParticleInfo("D0*_pi0", "D0*_#pi0 ", 10428, 1.8f, 3.8f, 2.00699 , 6.86e-21, 0, 0.0030), //102
  210. //B mesons
  211. KFEfficiencyParticleInfo("B_Jpsi_ee", "B_Jpsi_ee ", 500, 1.0f, 4.0f, 3.096916 , 7.1e-21, 0, 0.0030), //103
  212. KFEfficiencyParticleInfo("B_Jpsi_mm", "B_Jpsi_mm ", 501, 1.0f, 4.0f, 3.096916 , 7.1e-21, 0, 0.0030), //104
  213. KFEfficiencyParticleInfo("B+_D0bPi+", "B+ {D0bPi+} ", 521, 3.0f, 7.0f, 5.27931 , 1.638e-12, 0, 0.0030), //105
  214. KFEfficiencyParticleInfo("B-_D0Pi-", "B- {D0Pi-} ", -521, 3.0f, 7.0f, 5.27931 , 1.638e-12, 0, 0.0030), //106
  215. KFEfficiencyParticleInfo("B+_D0bK+", "B+ {D0bK+} ", 529, 3.0f, 7.0f, 5.27931 , 1.638e-12, 0, 0.0030), //107
  216. KFEfficiencyParticleInfo("B-_D0K-", "B- {D0K+} ", -529, 3.0f, 7.0f, 5.27931 , 1.638e-12, 0, 0.0030), //108
  217. KFEfficiencyParticleInfo("B0_D-Pi+", "B0 {D-Pi+} ", 511, 3.0f, 7.0f, 5.27962 , 1.520e-12, 0, 0.0030), //109
  218. KFEfficiencyParticleInfo("B0b_D+Pi-", "B0b {D+Pi-} ", -511, 3.0f, 7.0f, 5.27962 , 1.520e-12, 0, 0.0030), //110
  219. KFEfficiencyParticleInfo("B0_D-K+", "B0 {D-K+} ", 519, 3.0f, 7.0f, 5.27962 , 1.520e-12, 0, 0.0030), //111
  220. KFEfficiencyParticleInfo("B0b_D+K-", "B0b {D+K-} ", -519, 3.0f, 7.0f, 5.27962 , 1.520e-12, 0, 0.0030), //112
  221. KFEfficiencyParticleInfo("H0_{Lppi}", "H0 ", 3001, 2.0f, 4.0f, 2.21 , 1.32e-10, 0, 0.0030), //113
  222. //hypernuclei
  223. KFEfficiencyParticleInfo("LambdaN", "LambdaN ", 3003, 1.0f, 3.0f, 2.05395 , 1.00e-10, 0, 0.0030), //114
  224. KFEfficiencyParticleInfo("LambdaNb", "LambdaN b ", -3003, 1.0f, 3.0f, 2.05395 , 1.00e-10, 0, 0.0030), //115
  225. KFEfficiencyParticleInfo("LambdaNN", "LambdaNN ", 3103, 2.0f, 4.0f, 2.99352 , 1.00e-10, 0, 0.0030), //116
  226. KFEfficiencyParticleInfo("LambdaNNb", "LambdaNN b ", -3103, 2.0f, 4.0f, 2.99352 , 1.00e-10, 0, 0.0030), //117
  227. KFEfficiencyParticleInfo("H3L", "H3L ", 3004, 2.0f, 4.0f, 2.99339 , 1.85e-10, 1, 0.0030), //118
  228. KFEfficiencyParticleInfo("H3Lb", "H3L b ", -3004, 2.0f, 4.0f, 2.99339 , 1.85e-10, -1, 0.0030), //119
  229. KFEfficiencyParticleInfo("H4L", "H4L ", 3005, 3.0f, 5.0f, 3.92975 , 1.80e-10, 1, 0.0030), //120
  230. KFEfficiencyParticleInfo("H4Lb", "H4L b ", -3005, 3.0f, 5.0f, 3.92975 , 1.80e-10, -1, 0.0030), //121
  231. KFEfficiencyParticleInfo("He4L", "He4L ", 3006, 3.0f, 5.0f, 3.93070 , 1.50e-10, 2, 0.0030), //122
  232. KFEfficiencyParticleInfo("He4Lb", "He4L b ", -3006, 3.0f, 5.0f, 3.93070 , 1.50e-10, -2, 0.0030), //123
  233. KFEfficiencyParticleInfo("He5L", "He5L ", 3007, 4.0f, 6.0f, 4.86824 , 1.40e-10, 2, 0.0030), //124
  234. KFEfficiencyParticleInfo("He5Lb", "He5L b ", -3007, 4.0f, 6.0f, 4.86824 , 1.40e-10, -2, 0.0030), //125
  235. KFEfficiencyParticleInfo("LLn", "LLn ", 3203, 3.0f, 5.0f, 3.16964 , 1.00e-10, 0, 0.0030), //126
  236. KFEfficiencyParticleInfo("H4LL_{He4Lpi-}", "H4LL_{He4Lpi-}", 3008, 3.0f, 5.0f, 4.10791 , 1.0e-10, 1, 0.0030), //127
  237. KFEfficiencyParticleInfo("H4LL_{H3Lppi-}", "H4LL_{H3Lppi-}", 3009, 3.0f, 5.0f, 4.10791 , 1.0e-10, 1, 0.0030), //128
  238. KFEfficiencyParticleInfo("H5LL_{He5Lpi-}", "H5LL_{He5Lpi-}", 3010, 4.0f, 6.0f, 5.04748 , 1.0e-10, 1, 0.0030), //129
  239. KFEfficiencyParticleInfo("He6LL", "He6LL ", 3011, 5.0f, 7.0f, 5.98575 , 1.0e-10, 2, 0.0030), //130
  240. //missing mass method
  241. KFEfficiencyParticleInfo("pi-_{mu,nu}", "pi-_{mnu} ", -7000211,-1.0f, 1.0f, 0.139570 , 2.6e-8, -1, 0.0030), //131
  242. KFEfficiencyParticleInfo("nu_{pi-}", "nu_{mupi-} b ", -7000014,-1.0f, 1.0f, 0. , 1.0e20, 0, 0.0030), //132
  243. KFEfficiencyParticleInfo("pi+_{mu,nu}", "pi+_{mnu} ", 7000211,-1.0f, 1.0f, 0.139570 , 2.6e-8, 1, 0.0030), //133
  244. KFEfficiencyParticleInfo("nu_{pi+}", "nu_{mupi+} ", 7000014,-1.0f, 1.0f, 0. , 1.0e20, 0, 0.0030), //134
  245. KFEfficiencyParticleInfo("K-_{mu,nu}", "K-_{mnu} ", -7000321,-1.0f, 1.0f, 0.493677 , 1.238e-8, -1, 0.0030), //135
  246. KFEfficiencyParticleInfo("nu_{K-}", "nu_{K-} b ", -8000014,-1.0f, 1.0f, 0. , 1.0e20, 0, 0.0030), //136
  247. KFEfficiencyParticleInfo("K+_{mu,nu}", "K+_{mnu} ", 7000321,-1.0f, 1.0f, 0.493677 , 1.238e-8, 1, 0.0030), //137
  248. KFEfficiencyParticleInfo("nu_{K+}", "nu_{K+} ", 8000014,-1.0f, 1.0f, 0. , 1.0e20, 0, 0.0030), //138
  249. KFEfficiencyParticleInfo("Sigma-_{pi-,n}", "Sigma-_{pi-n} ", 7003112, 0.0f, 3.0f, 1.192642 , 1.479e-10, -1, 0.0100), //139
  250. KFEfficiencyParticleInfo("n_{Sigma-}", "n_{Sigma-} ", 7002112, 0.0f, 1.5f, 0.9395654 , 880, 0, 0.0030), //140
  251. KFEfficiencyParticleInfo("Sigma+_{pi+n}b", "Sigma+{pi+n} b", -7003112, 0.0f, 3.0f, 1.192642 , 1.479e-10, -1, 0.0030), //141
  252. KFEfficiencyParticleInfo("n_{Sigma+} b", "n_{Sigma+b} b ", -7002112, 0.0f, 1.5f, 0.9395654 , 880, 0, 0.0030), //142
  253. KFEfficiencyParticleInfo("Sigma-_{pi-n}b", "Sigma+{pi-n} b", -7003222, 0.0f, 3.0f, 1.18937 , 0.8018e-10, 1, 0.0030), //143
  254. KFEfficiencyParticleInfo("n_{Sigma-} b", "n_{Sigma-_b} b", -8002112, 0.0f, 1.5f, 0.9395654 , 0.93956541, 0, 0.0030), //144
  255. KFEfficiencyParticleInfo("Sigma+_{pi+n}", "Sigma+_{pi+n} ", 7003222, 0.0f, 3.0f, 1.18937 , 0.8018e-10, 1, 0.0100), //145
  256. KFEfficiencyParticleInfo("n_{Sigma+}", "n_{Sigma+} ", 8002112, 0.0f, 1.5f, 0.9395654 , 880, 0, 0.0030), //146
  257. KFEfficiencyParticleInfo("Xi-_{pi-L}", "Xi-_{pi-L} ", 7003312, 0.0f, 3.0f, 1.32171 , 1.639e-10, -1, 0.0030), //147
  258. KFEfficiencyParticleInfo("Lambda_{Xi-}", "Lambda_{Xi-} ", 7003122, 0.0f, 2.0f, 1.115683 , 2.632e-10, 0, 0.0030), //148
  259. KFEfficiencyParticleInfo("Xi+_{pi+L_b}", "Xi+_{pi+L_b} ", -7003312, 0.0f, 3.0f, 1.32171 , 1.639e-10, 1, 0.0030), //149
  260. KFEfficiencyParticleInfo("Lambda_{Xi+} b", "Lambda_{Xi+} b", -7003122, 0.0f, 2.0f, 1.115683 , 2.632e-10, 0, 0.0030), //150
  261. KFEfficiencyParticleInfo("Omega-_{Xi-pi0}", "Omega-{pi-Xi0}", 7003334, 0.0f, 3.0f, 1.67245 , 0.821e-10, -1, 0.0030), //151
  262. KFEfficiencyParticleInfo("Xi0_{Omega-}", "Xi0_{Omega-} ", 7003322, 0.0f, 3.0f, 1.31486 , 2.9e-10, 0, 0.0030), //152
  263. KFEfficiencyParticleInfo("Omega+_{Xi+pi0}", "Omega+_{Xipi0}", -7003334, 0.0f, 3.0f, 1.67245 , 0.821e-10, 1, 0.0030), //153
  264. KFEfficiencyParticleInfo("Xi0_{Omega+} b", "Xi0_{Omega+} b", -7003322, 0.0f, 3.0f, 1.31486 , 2.9e-10, 0, 0.0030), //154
  265. KFEfficiencyParticleInfo("K-_{pi-pi0}", "K-_{pi-pi0} ", -9000321, 0.0f, 3.0f, 0.493677 , 1.24e-8, -1, 0.0030), //155
  266. KFEfficiencyParticleInfo("pi0_{K-}", "pi0_{K-} ", -9000111, 0.0f, 3.0f, 0.1349766 , 8.52e-17, 0, 0.0030), //156
  267. KFEfficiencyParticleInfo("K+_{pi+pi0}", "K+_{pi+pi0} ", 9000321, 0.0f, 3.0f, 0.493677 , 1.24e-8, 1, 0.0030), //157
  268. KFEfficiencyParticleInfo("pi0_{K+}", "pi0_{K+} ", 9000111, 0.0f, 3.0f, 0.1349766 , 8.52e-17, 0, 0.0030), //158
  269. KFEfficiencyParticleInfo("Omega-{K-L}", "Omega-_{K-L} ", 8003334, 0.0f, 3.0f, 1.67245 , 0.821e-10, -1, 0.0030), //159
  270. KFEfficiencyParticleInfo("Lambda_{Omega-}", "Lambda_{O-} ", 8003122, 0.0f, 3.0f, 1.115683 , 2.632e-10, 0, 0.0030), //160
  271. KFEfficiencyParticleInfo("Omega+_{K+L_b}", "Omega+_{K+Lb} ", -8003334, 0.0f, 3.0f, 1.67245 , 0.821e-10, 1, 0.0030), //161
  272. KFEfficiencyParticleInfo("Lamda_{Omega+} b", "Lambda_{O+} b ", -8003122, 0.0f, 3.0f, 1.115683 , 2.632e-10, 0, 0.0030), //162
  273. KFEfficiencyParticleInfo("Sigma-{p_b pi0} b","Sigma-{ppi0} b", -8003222, 0.0f, 3.0f, 1.18937 , 0.8018e-10, 1, 0.0030), //163
  274. KFEfficiencyParticleInfo("pi0_{Sigma-b}", "pi0_{Sigma-_b}", -8000111, 0.0f, 3.0f, 0.1349766 , 8.52e-17, 0, 0.0030), //164
  275. KFEfficiencyParticleInfo("Sigma+_{p pi0}", "Sigma+_{ppi0} ", 8003222, 0.0f, 3.0f, 1.18937 , 0.8018e-10, 1, 0.0250), //165
  276. KFEfficiencyParticleInfo("pi0_{Sigma+}", "pi0_{Sigma+} ", 8000111, 0.0f, 3.0f, 0.1349766 , 8.52e-17, 0, 0.0030), //166
  277. //tracks
  278. KFEfficiencyParticleInfo("e-", "e- ", 11, 0.0f,0.01f, 5.485799e-4, 1.0e20, -1, 0.0030), //167
  279. KFEfficiencyParticleInfo("e+", "e+ ", -11, 0.0f,0.01f, 5.485799e-4, 1.0e20, 1, 0.0030), //168
  280. KFEfficiencyParticleInfo("mu-", "mu- ", 13, 0.0f, 1.0f, 0.105658 , 2.2e-6, -1, 0.0030), //169
  281. KFEfficiencyParticleInfo("mu+", "mu+ ", -13, 0.0f, 1.0f, 0.105658 , 2.2e-6, 1, 0.0030), //170
  282. KFEfficiencyParticleInfo("pi+", "pi+ ", 211, 0.0f, 1.0f, 0.139570 , 2.6e-8, 1, 0.0030), //171
  283. KFEfficiencyParticleInfo("pi-", "pi- ", -211, 0.0f, 1.0f, 0.139570 , 2.6e-8, -1, 0.0030), //172
  284. KFEfficiencyParticleInfo("K+", "K+ ", 321, 0.0f, 1.0f, 0.493677 , 1.238e-8, 1, 0.0030), //173
  285. KFEfficiencyParticleInfo("K-", "K- ", -321, 0.0f, 1.0f, 0.493677 , 1.238e-8, -1, 0.0030), //174
  286. KFEfficiencyParticleInfo("p+", "p+ ", 2212, 0.0f, 1.5f, 0.938272 , 1.0e20, 1, 0.0030), //175
  287. KFEfficiencyParticleInfo("p-", "p- ", -2212, 0.0f, 1.5f, 0.938272 , 1.0e20, -1, 0.0030), //176
  288. KFEfficiencyParticleInfo("d+", "d+ ", 1000010020, 0.0f, 2.5f, 1.876124 , 1.0e20, 1, 0.0030), //177
  289. KFEfficiencyParticleInfo("d-", "d- ",-1000010020, 0.0f, 2.5f, 1.876124 , 1.0e20, -1, 0.0030), //178
  290. KFEfficiencyParticleInfo("t+", "t+ ", 1000010030, 0.0f, 3.5f, 2.809432 , 1.0e20, 1, 0.0030), //179
  291. KFEfficiencyParticleInfo("t-", "t- ",-1000010030, 0.0f, 3.5f, 2.809432 , 1.0e20, -1, 0.0030), //180
  292. KFEfficiencyParticleInfo("He3+", "He3+ ", 1000020030, 0.0f, 3.5f, 2.809413 , 1.0e20, 2, 0.0030), //181
  293. KFEfficiencyParticleInfo("He3-", "He3- ",-1000020030, 0.0f, 3.5f, 2.809413 , 1.0e20, -2, 0.0030), //182
  294. KFEfficiencyParticleInfo("He4+", "He4+ ", 1000020040, 0.0f, 4.5f, 3.728400 , 1.0e20, 2, 0.0030), //183
  295. KFEfficiencyParticleInfo("He4-", "He4- ",-1000020040, 0.0f, 4.5f, 3.728400 , 1.0e20, -2, 0.0030), //184
  296. //background for subtraction
  297. KFEfficiencyParticleInfo("pi+pi+", "pi+pi+ ", 9001, 0.0f, 2.0f, 0 , 1.0e20, 0, 0.0030), //185
  298. KFEfficiencyParticleInfo("pi+K+", "pi+K+ ", 9002, 0.6f, 5.6f, 0 , 1.0e20, 0, 0.0030), //186
  299. KFEfficiencyParticleInfo("K+K+", "K+K+ ", 9003, 0.8f, 3.8f, 0 , 1.0e20, 0, 0.0030), //187
  300. KFEfficiencyParticleInfo("K+p+", "K+p+ ", 9004, 1.4f, 5.4f, 0 , 1.0e20, 0, 0.0030), //188
  301. KFEfficiencyParticleInfo("pi-pi-", "pi-pi- ", -9001, 0.0f, 2.0f, 0 , 1.0e20, 0, 0.0030), //189
  302. KFEfficiencyParticleInfo("pi-K-", "pi-K- ", -9002, 0.6f, 5.6f, 0 , 1.0e20, 0, 0.0030), //190
  303. KFEfficiencyParticleInfo("K-K-", "K-K- ", -9003, 0.8f, 3.8f, 0 , 1.0e20, 0, 0.0030), //191
  304. KFEfficiencyParticleInfo("K-p-", "K-p- ", -9004, 1.4f, 5.4f, 0 , 1.0e20, 0, 0.0030), //192
  305. //V0
  306. KFEfficiencyParticleInfo("V0", "V0 ", 123456789, 0.3f, 1.3f, 0 , 0, 0, 0.0030) //193
  307. };
  308. int mPartMaxMult[nParticles];
  309. for(int i=0; i<nParticles; i++)
  310. mPartMaxMult[i] = 20;
  311. mPartMaxMult[fFirstStableParticleIndex + 4] = 500;
  312. mPartMaxMult[fFirstStableParticleIndex + 5] = 500;
  313. mPartMaxMult[fFirstStableParticleIndex + 6] = 50;
  314. mPartMaxMult[fFirstStableParticleIndex + 7] = 50;
  315. mPartMaxMult[fFirstStableParticleIndex + 8] = 500;
  316. //set decay mode
  317. partDaughterPdg.resize(nParticles);
  318. int curPart = 0;
  319. partDaughterPdg[curPart].push_back( 211); //K0s -> pi+ pi-
  320. partDaughterPdg[curPart].push_back( -211);
  321. curPart++;
  322. partDaughterPdg[curPart].push_back( 2212); //Lambda -> p pi-
  323. partDaughterPdg[curPart].push_back( -211);
  324. curPart++;
  325. partDaughterPdg[curPart].push_back(-2212); //Lambda_bar -> p- pi+
  326. partDaughterPdg[curPart].push_back( 211);
  327. curPart++;
  328. partDaughterPdg[curPart].push_back( 3122); //Xi- -> Lambda pi-
  329. partDaughterPdg[curPart].push_back( -211);
  330. curPart++;
  331. partDaughterPdg[curPart].push_back(-3122); //Xi+ -> Lambda_bar pi+
  332. partDaughterPdg[curPart].push_back( 211);
  333. curPart++;
  334. partDaughterPdg[curPart].push_back( 3122); //Xi0 -> Lambda Pi0
  335. partDaughterPdg[curPart].push_back( 111);
  336. curPart++;
  337. partDaughterPdg[curPart].push_back(-3122); //Xi0_bar -> Lambda_bar Pi0
  338. partDaughterPdg[curPart].push_back( 111);
  339. curPart++;
  340. partDaughterPdg[curPart].push_back( 3122); //Omega- -> Lambda K-
  341. partDaughterPdg[curPart].push_back( -321);
  342. curPart++;
  343. partDaughterPdg[curPart].push_back(-3122); //Omega+ -> Lambda_bar K+
  344. partDaughterPdg[curPart].push_back( 321);
  345. curPart++;
  346. partDaughterPdg[curPart].push_back( 22); //Sigma0 -> Lambda Gamma
  347. partDaughterPdg[curPart].push_back( 3122);
  348. curPart++;
  349. partDaughterPdg[curPart].push_back( 22); //Sigma0_bar -> Lambda_bar Gamma
  350. partDaughterPdg[curPart].push_back(-3122);
  351. curPart++;
  352. partDaughterPdg[curPart].push_back( 111); //Sigma+ -> p Pi0
  353. partDaughterPdg[curPart].push_back( 2212);
  354. curPart++;
  355. partDaughterPdg[curPart].push_back( 111); //Sigma+_bar -> p- Pi0
  356. partDaughterPdg[curPart].push_back(-2212);
  357. curPart++;
  358. partDaughterPdg[curPart].push_back( 321); //K*0 -> K+ pi-
  359. partDaughterPdg[curPart].push_back( -211);
  360. curPart++;
  361. partDaughterPdg[curPart].push_back( -321); //K*0_bar -> K- pi+
  362. partDaughterPdg[curPart].push_back( 211);
  363. curPart++;
  364. partDaughterPdg[curPart].push_back( 310); //K*+ -> K0s pi+
  365. partDaughterPdg[curPart].push_back( 211);
  366. curPart++;
  367. partDaughterPdg[curPart].push_back( 310); //K*- -> K0s pi-
  368. partDaughterPdg[curPart].push_back( -211);
  369. curPart++;
  370. partDaughterPdg[curPart].push_back( 310); //K*0 -> K0 pi0
  371. partDaughterPdg[curPart].push_back( 111);
  372. curPart++;
  373. partDaughterPdg[curPart].push_back( 111); //K*+ -> K+ pi0
  374. partDaughterPdg[curPart].push_back( 321);
  375. curPart++;
  376. partDaughterPdg[curPart].push_back( 111); //K*- -> K- pi0
  377. partDaughterPdg[curPart].push_back( -321);
  378. curPart++;
  379. partDaughterPdg[curPart].push_back( 3122); //Sigma+ -> Lambda pi+
  380. partDaughterPdg[curPart].push_back( 211);
  381. curPart++;
  382. partDaughterPdg[curPart].push_back( 3122); //Sigma- -> Lambda pi-
  383. partDaughterPdg[curPart].push_back( -211);
  384. curPart++;
  385. partDaughterPdg[curPart].push_back(-3122); //Sigma+_bar -> Lambda_bar pi+
  386. partDaughterPdg[curPart].push_back( 211);
  387. curPart++;
  388. partDaughterPdg[curPart].push_back(-3122); //Sigma-_bar -> Lambda_bar pi-
  389. partDaughterPdg[curPart].push_back( -211);
  390. curPart++;
  391. partDaughterPdg[curPart].push_back( 3122); //Sigma*0 -> Lambda pi0
  392. partDaughterPdg[curPart].push_back( 111);
  393. curPart++;
  394. partDaughterPdg[curPart].push_back(-3122); //Sigma*0_bar -> Lambda_bar pi0
  395. partDaughterPdg[curPart].push_back( 111);
  396. curPart++;
  397. partDaughterPdg[curPart].push_back( 2212); //Lambda* -> p K-
  398. partDaughterPdg[curPart].push_back( -321);
  399. curPart++;
  400. partDaughterPdg[curPart].push_back(-2212); //Lambda*_bar -> p- K+
  401. partDaughterPdg[curPart].push_back( 321);
  402. curPart++;
  403. partDaughterPdg[curPart].push_back( 3312); //Xi*0 -> Xi- pi+
  404. partDaughterPdg[curPart].push_back( 211);
  405. curPart++;
  406. partDaughterPdg[curPart].push_back(-3312); //Xi*0_bar -> Xi+ pi-
  407. partDaughterPdg[curPart].push_back( -211);
  408. curPart++;
  409. partDaughterPdg[curPart].push_back( 3122); //Xi*- -> Lambda K-
  410. partDaughterPdg[curPart].push_back( -321);
  411. curPart++;
  412. partDaughterPdg[curPart].push_back(-3122); //Xi*+ -> Lambda_bar K+
  413. partDaughterPdg[curPart].push_back( 321);
  414. curPart++;
  415. partDaughterPdg[curPart].push_back( 3312); //Xi*- -> Xi- pi0
  416. partDaughterPdg[curPart].push_back( 111);
  417. curPart++;
  418. partDaughterPdg[curPart].push_back(-3312); //Xi*+ -> Xi+ pi0
  419. partDaughterPdg[curPart].push_back( 111);
  420. curPart++;
  421. partDaughterPdg[curPart].push_back( 3312); //Omega*- -> Xi- pi+ K-
  422. partDaughterPdg[curPart].push_back( 211);
  423. partDaughterPdg[curPart].push_back( -321);
  424. curPart++;
  425. partDaughterPdg[curPart].push_back(-3312); //Omega*- -> Xi+ pi- K+
  426. partDaughterPdg[curPart].push_back( -211);
  427. partDaughterPdg[curPart].push_back( 321);
  428. curPart++;
  429. partDaughterPdg[curPart].push_back( 3122); //H-dibar -> Lambda Lambda
  430. partDaughterPdg[curPart].push_back( 3122);
  431. curPart++;
  432. partDaughterPdg[curPart].push_back( 321); //phi -> K+ K-
  433. partDaughterPdg[curPart].push_back( -321);
  434. curPart++;
  435. partDaughterPdg[curPart].push_back( 211); //rho, omega, phi -> pi+ pi-
  436. partDaughterPdg[curPart].push_back( -211);
  437. curPart++;
  438. partDaughterPdg[curPart].push_back( 11); //rho, omega, phi -> e+ e-
  439. partDaughterPdg[curPart].push_back( -11);
  440. curPart++;
  441. partDaughterPdg[curPart].push_back( 13); //rho, omega, phi -> mu+ mu-
  442. partDaughterPdg[curPart].push_back( -13);
  443. curPart++;
  444. partDaughterPdg[curPart].push_back( 11); //gamma -> e+ e-
  445. partDaughterPdg[curPart].push_back( -11);
  446. curPart++;
  447. partDaughterPdg[curPart].push_back( 22); //pi0 -> gamma gamma
  448. partDaughterPdg[curPart].push_back( 22);
  449. curPart++;
  450. partDaughterPdg[curPart].push_back( 111); //eta -> pi0 pi0
  451. partDaughterPdg[curPart].push_back( 111);
  452. partDaughterPdg[curPart].push_back( 111);
  453. curPart++;
  454. partDaughterPdg[curPart].push_back( 2212); //Delta0 -> p pi-
  455. partDaughterPdg[curPart].push_back( -211);
  456. curPart++;
  457. partDaughterPdg[curPart].push_back(-2212); //Delta0_bar -> p- pi+
  458. partDaughterPdg[curPart].push_back( 211);
  459. curPart++;
  460. partDaughterPdg[curPart].push_back( 2212); //Delta++ -> p pi+
  461. partDaughterPdg[curPart].push_back( 211);
  462. curPart++;
  463. partDaughterPdg[curPart].push_back(-2212); //Delta--_bar -> p- pi-
  464. partDaughterPdg[curPart].push_back( -211);
  465. curPart++;
  466. partDaughterPdg[curPart].push_back( 11); //JPsi -> e+ e-
  467. partDaughterPdg[curPart].push_back( -11);
  468. curPart++;
  469. partDaughterPdg[curPart].push_back( 13); //JPsi -> mu+ mu-
  470. partDaughterPdg[curPart].push_back( -13);
  471. curPart++;
  472. partDaughterPdg[curPart].push_back( 2212); //JPsi -> p p-
  473. partDaughterPdg[curPart].push_back( -2212);
  474. curPart++;
  475. partDaughterPdg[curPart].push_back( 3122); //JPsi -> Lambda Lambda_bar
  476. partDaughterPdg[curPart].push_back( -3122);
  477. curPart++;
  478. partDaughterPdg[curPart].push_back( 3312); //JPsi -> Xi- Xi+
  479. partDaughterPdg[curPart].push_back( -3312);
  480. curPart++;
  481. partDaughterPdg[curPart].push_back( 3334); //Psi -> Omega- Omega+
  482. partDaughterPdg[curPart].push_back( -3334);
  483. curPart++;
  484. partDaughterPdg[curPart].push_back( 211); //D0 -> pi+ K-
  485. partDaughterPdg[curPart].push_back( -321);
  486. curPart++;
  487. partDaughterPdg[curPart].push_back( -211); //D0_bar -> K+ pi-
  488. partDaughterPdg[curPart].push_back( 321);
  489. curPart++;
  490. partDaughterPdg[curPart].push_back( 211); //D0 -> pi+ pi+ pi- K-
  491. partDaughterPdg[curPart].push_back( 211);
  492. partDaughterPdg[curPart].push_back( -211);
  493. partDaughterPdg[curPart].push_back( -321);
  494. curPart++;
  495. partDaughterPdg[curPart].push_back( -211); //D0_bar -> pi- pi- pi+ K+
  496. partDaughterPdg[curPart].push_back( -211);
  497. partDaughterPdg[curPart].push_back( 211);
  498. partDaughterPdg[curPart].push_back( 321);
  499. curPart++;
  500. partDaughterPdg[curPart].push_back( 211); //D0 -> pi+ pi-
  501. partDaughterPdg[curPart].push_back( -211);
  502. curPart++;
  503. partDaughterPdg[curPart].push_back( 211); //D0 -> 2pi+ 2pi-
  504. partDaughterPdg[curPart].push_back( 211);
  505. partDaughterPdg[curPart].push_back( -211);
  506. partDaughterPdg[curPart].push_back( -211);
  507. curPart++;
  508. partDaughterPdg[curPart].push_back( 310); //D0_bar -> K0 pi+ pi-
  509. partDaughterPdg[curPart].push_back( 211);
  510. partDaughterPdg[curPart].push_back( -211);
  511. curPart++;
  512. partDaughterPdg[curPart].push_back( 321); //D0_bar -> K+ K-
  513. partDaughterPdg[curPart].push_back( -321);
  514. curPart++;
  515. partDaughterPdg[curPart].push_back( 321); //D0_bar -> K+ K- K0
  516. partDaughterPdg[curPart].push_back( -321);
  517. partDaughterPdg[curPart].push_back( 310);
  518. curPart++;
  519. partDaughterPdg[curPart].push_back( 310); //D0_bar -> K0 pi+ pi- pi0
  520. partDaughterPdg[curPart].push_back( 211);
  521. partDaughterPdg[curPart].push_back( -211);
  522. partDaughterPdg[curPart].push_back( 111);
  523. curPart++;
  524. partDaughterPdg[curPart].push_back( -321); //D+ -> K- pi+ pi+
  525. partDaughterPdg[curPart].push_back( 211);
  526. partDaughterPdg[curPart].push_back( 211);
  527. curPart++;
  528. partDaughterPdg[curPart].push_back( 321); //D- -> K+ pi- pi-
  529. partDaughterPdg[curPart].push_back( -211);
  530. partDaughterPdg[curPart].push_back( -211);
  531. curPart++;
  532. partDaughterPdg[curPart].push_back( 310); //D+ -> K0 pi+
  533. partDaughterPdg[curPart].push_back( 211);
  534. curPart++;
  535. partDaughterPdg[curPart].push_back( 310); //D- -> K0 pi-
  536. partDaughterPdg[curPart].push_back( -211);
  537. curPart++;
  538. partDaughterPdg[curPart].push_back( 310); //D+ -> K0 pi+ pi+ pi-
  539. partDaughterPdg[curPart].push_back( 211);
  540. partDaughterPdg[curPart].push_back( 211);
  541. partDaughterPdg[curPart].push_back( -211);
  542. curPart++;
  543. partDaughterPdg[curPart].push_back( 310); //D- -> K0 pi+ pi- pi-
  544. partDaughterPdg[curPart].push_back( 211);
  545. partDaughterPdg[curPart].push_back( -211);
  546. partDaughterPdg[curPart].push_back( -211);
  547. curPart++;
  548. partDaughterPdg[curPart].push_back( 211); //D+ -> pi+ pi+ pi-
  549. partDaughterPdg[curPart].push_back( 211);
  550. partDaughterPdg[curPart].push_back( -211);
  551. curPart++;
  552. partDaughterPdg[curPart].push_back( 211); //D- -> pi+ pi- pi-
  553. partDaughterPdg[curPart].push_back( -211);
  554. partDaughterPdg[curPart].push_back( -211);
  555. curPart++;
  556. partDaughterPdg[curPart].push_back( -321); //Ds+ -> K- K+ pi+
  557. partDaughterPdg[curPart].push_back( 321);
  558. partDaughterPdg[curPart].push_back( 211);
  559. curPart++;
  560. partDaughterPdg[curPart].push_back( 321); //Ds- -> K+ K- pi-
  561. partDaughterPdg[curPart].push_back( -321);
  562. partDaughterPdg[curPart].push_back( -211);
  563. curPart++;
  564. partDaughterPdg[curPart].push_back( 310); //Ds+ -> K0 K+
  565. partDaughterPdg[curPart].push_back( 321);
  566. curPart++;
  567. partDaughterPdg[curPart].push_back( 310); //Ds- -> K0 K-
  568. partDaughterPdg[curPart].push_back( -321);
  569. curPart++;
  570. partDaughterPdg[curPart].push_back( 310); //Ds+ -> K0 K0 pi+
  571. partDaughterPdg[curPart].push_back( 310);
  572. partDaughterPdg[curPart].push_back( 211);
  573. curPart++;
  574. partDaughterPdg[curPart].push_back( 310); //Ds- -> K0 K0 pi-
  575. partDaughterPdg[curPart].push_back( 310);
  576. partDaughterPdg[curPart].push_back( -211);
  577. curPart++;
  578. partDaughterPdg[curPart].push_back( 310); //Ds+ -> K0 K+ pi+ pi-
  579. partDaughterPdg[curPart].push_back( 321);
  580. partDaughterPdg[curPart].push_back( 211);
  581. partDaughterPdg[curPart].push_back( -211);
  582. curPart++;
  583. partDaughterPdg[curPart].push_back( 310); //Ds- -> K0 K- pi+ pi-
  584. partDaughterPdg[curPart].push_back( -321);
  585. partDaughterPdg[curPart].push_back( 211);
  586. partDaughterPdg[curPart].push_back( -211);
  587. curPart++;
  588. partDaughterPdg[curPart].push_back( 321); //Ds+ -> K+ pi+ pi-
  589. partDaughterPdg[curPart].push_back( 211);
  590. partDaughterPdg[curPart].push_back( -211);
  591. curPart++;
  592. partDaughterPdg[curPart].push_back( -321); //Ds- -> K- pi+ pi-
  593. partDaughterPdg[curPart].push_back( 211);
  594. partDaughterPdg[curPart].push_back( -211);
  595. curPart++;
  596. partDaughterPdg[curPart].push_back( 211); //Lambdac -> pi+ K- p
  597. partDaughterPdg[curPart].push_back( -321);
  598. partDaughterPdg[curPart].push_back( 2212);
  599. curPart++;
  600. partDaughterPdg[curPart].push_back( -211); //Lambdac_bar -> pi- K+ p-
  601. partDaughterPdg[curPart].push_back( 321);
  602. partDaughterPdg[curPart].push_back(-2212);
  603. curPart++;
  604. partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p K0s
  605. partDaughterPdg[curPart].push_back( 310);
  606. curPart++;
  607. partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar K0s
  608. partDaughterPdg[curPart].push_back( 310);
  609. curPart++;
  610. partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p K0s pi+ pi-
  611. partDaughterPdg[curPart].push_back( 310);
  612. partDaughterPdg[curPart].push_back( 211);
  613. partDaughterPdg[curPart].push_back( -211);
  614. curPart++;
  615. partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar K0s pi+ pi-
  616. partDaughterPdg[curPart].push_back( 310);
  617. partDaughterPdg[curPart].push_back( 211);
  618. partDaughterPdg[curPart].push_back( -211);
  619. curPart++;
  620. partDaughterPdg[curPart].push_back( 3122); //Lambdac -> Lambda pi+
  621. partDaughterPdg[curPart].push_back( 211);
  622. curPart++;
  623. partDaughterPdg[curPart].push_back(-3122); //Lambdac_bar -> Lambda_bar pi-
  624. partDaughterPdg[curPart].push_back( -211);
  625. curPart++;
  626. partDaughterPdg[curPart].push_back( 3122); //Lambdac -> Lambda 2pi+ pi-
  627. partDaughterPdg[curPart].push_back( 211);
  628. partDaughterPdg[curPart].push_back( 211);
  629. partDaughterPdg[curPart].push_back( -211);
  630. curPart++;
  631. partDaughterPdg[curPart].push_back(-3122); //Lambdac_bar -> Lambda_bar 2pi- pi+
  632. partDaughterPdg[curPart].push_back( -211);
  633. partDaughterPdg[curPart].push_back( 211);
  634. partDaughterPdg[curPart].push_back( -211);
  635. curPart++;
  636. partDaughterPdg[curPart].push_back( 3312); //Xic0 -> Xi- 2pi+ pi-
  637. partDaughterPdg[curPart].push_back( 211);
  638. partDaughterPdg[curPart].push_back( 211);
  639. partDaughterPdg[curPart].push_back( -211);
  640. curPart++;
  641. partDaughterPdg[curPart].push_back(-3312); //Xic0_bar -> Xi+ 2pi- pi+
  642. partDaughterPdg[curPart].push_back( 211);
  643. partDaughterPdg[curPart].push_back( -211);
  644. partDaughterPdg[curPart].push_back( -211);
  645. curPart++;
  646. partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p pi+ pi-
  647. partDaughterPdg[curPart].push_back( 211);
  648. partDaughterPdg[curPart].push_back( -211);
  649. curPart++;
  650. partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar pi+ pi-
  651. partDaughterPdg[curPart].push_back( 211);
  652. partDaughterPdg[curPart].push_back( -211);
  653. curPart++;
  654. partDaughterPdg[curPart].push_back( 411); //D*0 -> D+ pi-
  655. partDaughterPdg[curPart].push_back( -211);
  656. curPart++;
  657. partDaughterPdg[curPart].push_back( -411); //D*0_bar -> D- pi+
  658. partDaughterPdg[curPart].push_back( 211);
  659. curPart++;
  660. partDaughterPdg[curPart].push_back( 421); //D*+ -> D0 pi+
  661. partDaughterPdg[curPart].push_back( 211);
  662. curPart++;
  663. partDaughterPdg[curPart].push_back( -421); //D*- -> D0_bar pi-
  664. partDaughterPdg[curPart].push_back( -211);
  665. curPart++;
  666. partDaughterPdg[curPart].push_back( 429); //D*+ -> D04 pi+
  667. partDaughterPdg[curPart].push_back( 211);
  668. curPart++;
  669. partDaughterPdg[curPart].push_back( -429); //D*- -> D04_bar pi-
  670. partDaughterPdg[curPart].push_back( -211);
  671. curPart++;
  672. partDaughterPdg[curPart].push_back( 428); //D*0 -> D04 pi0
  673. partDaughterPdg[curPart].push_back( 111);
  674. curPart++;
  675. partDaughterPdg[curPart].push_back( 11); //B -> e+ e-
  676. partDaughterPdg[curPart].push_back( -11);
  677. curPart++;
  678. partDaughterPdg[curPart].push_back( 13); //B -> mu+ mu-
  679. partDaughterPdg[curPart].push_back( -13);
  680. curPart++;
  681. partDaughterPdg[curPart].push_back( -421); //B+ -> D0_bar pi+
  682. partDaughterPdg[curPart].push_back( 211);
  683. curPart++;
  684. partDaughterPdg[curPart].push_back( 421); //B- -> D0 pi-
  685. partDaughterPdg[curPart].push_back( -211);
  686. curPart++;
  687. partDaughterPdg[curPart].push_back( -421); //B+ -> D0_bar K+
  688. partDaughterPdg[curPart].push_back( 321);
  689. curPart++;
  690. partDaughterPdg[curPart].push_back( 421); //B- -> D0 K-
  691. partDaughterPdg[curPart].push_back( -321);
  692. curPart++;
  693. partDaughterPdg[curPart].push_back( -411); //B0 -> D- pi+
  694. partDaughterPdg[curPart].push_back( 211);
  695. curPart++;
  696. partDaughterPdg[curPart].push_back( 411); //B0_bar -> D+ pi-
  697. partDaughterPdg[curPart].push_back( -211);
  698. curPart++;
  699. partDaughterPdg[curPart].push_back( -411); //B0 -> D0_bar K+
  700. partDaughterPdg[curPart].push_back( 321);
  701. curPart++;
  702. partDaughterPdg[curPart].push_back( 411); //B0_bar -> D0 K-
  703. partDaughterPdg[curPart].push_back( -321);
  704. curPart++;
  705. partDaughterPdg[curPart].push_back( 3122); //H0-> Lambda pi- p
  706. partDaughterPdg[curPart].push_back( -211);
  707. partDaughterPdg[curPart].push_back( 2212);
  708. curPart++;
  709. partDaughterPdg[curPart].push_back( 1000010020); //LambdaN -> d+ pi-
  710. partDaughterPdg[curPart].push_back( -211);
  711. curPart++;
  712. partDaughterPdg[curPart].push_back(-1000010020); //LambdaN_bar-> d- pi+
  713. partDaughterPdg[curPart].push_back( 211);
  714. curPart++;
  715. partDaughterPdg[curPart].push_back( 1000010030); //LambdaNN -> t+ pi-
  716. partDaughterPdg[curPart].push_back( -211);
  717. curPart++;
  718. partDaughterPdg[curPart].push_back(-1000010030); //LambdaNN_bar -> t- pi+
  719. partDaughterPdg[curPart].push_back( 211);
  720. curPart++;
  721. partDaughterPdg[curPart].push_back( 1000020030); //H3Lambda -> He3+ pi-
  722. partDaughterPdg[curPart].push_back( -211);
  723. curPart++;
  724. partDaughterPdg[curPart].push_back(-1000020030); //H3Lambda_bar -> He3- pi+
  725. partDaughterPdg[curPart].push_back( 211);
  726. curPart++;
  727. partDaughterPdg[curPart].push_back( 1000020040); //H4Lambda -> He4+ pi-
  728. partDaughterPdg[curPart].push_back( -211);
  729. curPart++;
  730. partDaughterPdg[curPart].push_back(-1000020040); //H4Lambda_bar -> He4- pi+
  731. partDaughterPdg[curPart].push_back( 211);
  732. curPart++;
  733. partDaughterPdg[curPart].push_back( 1000020030); //He4Lambda -> He3+ p+ pi-
  734. partDaughterPdg[curPart].push_back( 2212);
  735. partDaughterPdg[curPart].push_back( -211);
  736. curPart++;
  737. partDaughterPdg[curPart].push_back(-1000020030); //He4Lambda_bar -> He3- p- pi+
  738. partDaughterPdg[curPart].push_back(-2212);
  739. partDaughterPdg[curPart].push_back( 211);
  740. curPart++;
  741. partDaughterPdg[curPart].push_back( 1000020040); //He5Lambda -> He4+ p+ pi-
  742. partDaughterPdg[curPart].push_back( 2212);
  743. partDaughterPdg[curPart].push_back( -211);
  744. curPart++;
  745. partDaughterPdg[curPart].push_back(-1000020040); //He5Lambda_bar -> He4- p- pi+
  746. partDaughterPdg[curPart].push_back(-2212);
  747. partDaughterPdg[curPart].push_back( 211);
  748. curPart++;
  749. partDaughterPdg[curPart].push_back( 3004); //LLn -> H3Lambda pi-
  750. partDaughterPdg[curPart].push_back( -211);
  751. curPart++;
  752. partDaughterPdg[curPart].push_back( 3006); //H4LL -> He4Lambda pi-
  753. partDaughterPdg[curPart].push_back( -211);
  754. curPart++;
  755. partDaughterPdg[curPart].push_back( 3004); //H4LL -> H3Lambda p pi-
  756. partDaughterPdg[curPart].push_back( 2212);
  757. partDaughterPdg[curPart].push_back( -211);
  758. curPart++;
  759. partDaughterPdg[curPart].push_back( 3007); //H5LL -> He5Lambda pi-
  760. partDaughterPdg[curPart].push_back( -211);
  761. curPart++;
  762. partDaughterPdg[curPart].push_back( 3007); //He6LL -> He5Lambda p pi-
  763. partDaughterPdg[curPart].push_back( 2212);
  764. partDaughterPdg[curPart].push_back( -211);
  765. curPart++;
  766. partDaughterPdg[curPart].push_back( 13); // pi- -> mu- + nu_mu_bar
  767. partDaughterPdg[curPart].push_back(-7000014); //
  768. curPart++;
  769. partDaughterPdg[curPart].push_back( -211); // nu_mu_bar <- pi- - mu-
  770. partDaughterPdg[curPart].push_back( 13); //
  771. curPart++;
  772. partDaughterPdg[curPart].push_back( -13); // pi+ -> mu+ + nu_mu
  773. partDaughterPdg[curPart].push_back( 7000014); //
  774. curPart++;
  775. partDaughterPdg[curPart].push_back( 211); // nu_mu <- pi+ - mu+
  776. partDaughterPdg[curPart].push_back( -13); //
  777. curPart++;
  778. partDaughterPdg[curPart].push_back( 13); // K- -> mu- + nu_mu_bar
  779. partDaughterPdg[curPart].push_back(-8000014); //
  780. curPart++;
  781. partDaughterPdg[curPart].push_back( -321); // nu_mu_bar <- K- - mu-
  782. partDaughterPdg[curPart].push_back( 13); //
  783. curPart++;
  784. partDaughterPdg[curPart].push_back( -13); // K+ -> mu+ + nu_mu
  785. partDaughterPdg[curPart].push_back( 8000014); //
  786. curPart++;
  787. partDaughterPdg[curPart].push_back( 321); // nu_mu <- K+ - mu+
  788. partDaughterPdg[curPart].push_back( -13); //
  789. curPart++;
  790. partDaughterPdg[curPart].push_back( -211); // Sigma- -> pi- + n
  791. partDaughterPdg[curPart].push_back( 7002112); //
  792. curPart++;
  793. partDaughterPdg[curPart].push_back( 3112); // n <- Sigma- - pi-
  794. partDaughterPdg[curPart].push_back( -211); //
  795. curPart++;
  796. partDaughterPdg[curPart].push_back( 211); // Sigma-b -> pi+ + nb
  797. partDaughterPdg[curPart].push_back( -7002112); //
  798. curPart++;
  799. partDaughterPdg[curPart].push_back( -3112); // nb <- Sigma-b - pi+
  800. partDaughterPdg[curPart].push_back( 211); //
  801. curPart++;
  802. partDaughterPdg[curPart].push_back( -211); // Sigma+b -> pi- + nb
  803. partDaughterPdg[curPart].push_back( -8002112); //
  804. curPart++;
  805. partDaughterPdg[curPart].push_back( -3222); // nb <- Sigma+b - pi-
  806. partDaughterPdg[curPart].push_back( -211); //
  807. curPart++;
  808. partDaughterPdg[curPart].push_back( 211); // Sigma+ -> pi+ + n
  809. partDaughterPdg[curPart].push_back( 8002112); //
  810. curPart++;
  811. partDaughterPdg[curPart].push_back( 3222); // n <- Sigma+ - pi+
  812. partDaughterPdg[curPart].push_back( 211); //
  813. curPart++;
  814. partDaughterPdg[curPart].push_back( -211); // Xi- -> pi- + lam
  815. partDaughterPdg[curPart].push_back( 7003122); //
  816. curPart++;
  817. partDaughterPdg[curPart].push_back( 3312); // lam <- Xi- - pi-
  818. partDaughterPdg[curPart].push_back( -211); //
  819. curPart++;
  820. partDaughterPdg[curPart].push_back( 211); // Xi-b -> pi+ + lam_b
  821. partDaughterPdg[curPart].push_back( -7003122); //
  822. curPart++;
  823. partDaughterPdg[curPart].push_back( -3312); // lam_b <- Xi-b - pi+
  824. partDaughterPdg[curPart].push_back( 211); //
  825. curPart++;
  826. partDaughterPdg[curPart].push_back( -211); // Om- -> pi- + Xi0
  827. partDaughterPdg[curPart].push_back( 7003322); //
  828. curPart++;
  829. partDaughterPdg[curPart].push_back( 3334); // Xi0 <- Om- - pi-
  830. partDaughterPdg[curPart].push_back( -211); //
  831. curPart++;
  832. partDaughterPdg[curPart].push_back( 211); // Om-b -> pi+ + Xi0_b
  833. partDaughterPdg[curPart].push_back( -7003322); //
  834. curPart++;
  835. partDaughterPdg[curPart].push_back( -3334); // Xi0_b <- Om-b - pi+
  836. partDaughterPdg[curPart].push_back( 211); //
  837. curPart++;
  838. partDaughterPdg[curPart].push_back( -211); // K- -> pi- + Pi0_b
  839. partDaughterPdg[curPart].push_back( -9000111); //
  840. curPart++;
  841. partDaughterPdg[curPart].push_back( -321); // Pi0_b <- K- - pi-
  842. partDaughterPdg[curPart].push_back( -211); //
  843. curPart++;
  844. partDaughterPdg[curPart].push_back( 211); // K+ -> pi+ + Pi0
  845. partDaughterPdg[curPart].push_back( 9000111); //
  846. curPart++;
  847. partDaughterPdg[curPart].push_back( 321); // Pi0 <- K+ - pi+
  848. partDaughterPdg[curPart].push_back( 211); //
  849. curPart++;
  850. partDaughterPdg[curPart].push_back( -321); // Om- -> K- + Lam
  851. partDaughterPdg[curPart].push_back( 8003122); //
  852. curPart++;
  853. partDaughterPdg[curPart].push_back( 3334); // Lam <- Om- - K-
  854. partDaughterPdg[curPart].push_back( -321); //
  855. curPart++;
  856. partDaughterPdg[curPart].push_back( 321); // Om+ -> K+ + Lam_b
  857. partDaughterPdg[curPart].push_back( -8003122); //
  858. curPart++;
  859. partDaughterPdg[curPart].push_back( -3334); // Lam_b <- Om+ - K+
  860. partDaughterPdg[curPart].push_back( 321); //
  861. curPart++;
  862. partDaughterPdg[curPart].push_back( -2212); // Si+b -> p_b + Pi0
  863. partDaughterPdg[curPart].push_back( -8000111); //
  864. curPart++;
  865. partDaughterPdg[curPart].push_back( -3222); // Pi0 <- Si+b - p_b
  866. partDaughterPdg[curPart].push_back( -2212); //
  867. curPart++;
  868. partDaughterPdg[curPart].push_back( 2212); // Si+ -> p + Pi0
  869. partDaughterPdg[curPart].push_back( 8000111); //
  870. curPart++;
  871. partDaughterPdg[curPart].push_back( 3222); // Pi0 <- Si+ - p
  872. partDaughterPdg[curPart].push_back( 2212); //
  873. curPart++;
  874. for(int iP=0; iP<nParticles; iP++)
  875. {
  876. partPDG[iP] = particleInfo[iP].PDG();
  877. partName[iP] = particleInfo[iP].Name();
  878. partTitle[iP] = particleInfo[iP].Title();
  879. partMHistoMin[iP] = particleInfo[iP].HistoMin();
  880. partMHistoMax[iP] = particleInfo[iP].HistoMax();
  881. partMaxMult[iP] = mPartMaxMult[iP];
  882. partMass[iP] = particleInfo[iP].Mass();
  883. partLifeTime[iP] = particleInfo[iP].LifeTime();
  884. partCharge[iP] = particleInfo[iP].Charge();
  885. partMassSigma[iP] = particleInfo[iP].MassSigma();
  886. }
  887. for(int iP=0; iP<nParticles; iP++)
  888. {
  889. AddCounter(partName[iP], partTitle[iP] + " ");
  890. AddCounter(partName[iP] + "_prim", partTitle[iP] + " Prim");
  891. AddCounter(partName[iP] + "_sec", partTitle[iP] + " Sec ");
  892. }
  893. for(int iP=0; iP<nParticles; iP++)
  894. fPdgToIndex[particleInfo[iP].PDG()] = iP;
  895. }
  896. virtual ~KFPartEfficiencies(){};
  897. /** \brief Returns index of the decay with a given PDG code in the scheme of the KF Particle Finder. If it is not present there - returns "-1". */
  898. int GetParticleIndex(int pdg)
  899. {
  900. std::map<int, int>::iterator it;
  901. it=fPdgToIndex.find(pdg);
  902. if(it != fPdgToIndex.end()) return it->second;
  903. else return -1;
  904. }
  905. /** \brief Returns the map between PDG codes and index of the decay in the scheme of the KF Particle Finder. */
  906. std::map<int,int> GetPdgToIndexMap() const { return fPdgToIndex; }
  907. virtual void AddCounter(std::string shortname, std::string name)
  908. {
  909. /** Adds a counter with the name defined by "name" to all counter
  910. ** objects. For easiness of operation with counters, a shortname is assigned
  911. ** to each of them and the corresponding entry in the map indices is done.
  912. ** \param[in] shortname - a short name of the counter for fast and easy access to its index
  913. ** \param[in] name - name of the counter which is added to each counter object.
  914. **/
  915. indices[shortname] = names.size();
  916. names.push_back(name);
  917. ratio_reco1.AddCounter();
  918. ratio_reco2.AddCounter();
  919. ratio_reco3.AddCounter();
  920. mc1.AddCounter();
  921. mc2.AddCounter();
  922. mc3.AddCounter();
  923. reco.AddCounter();
  924. ratio_ghost.AddCounter();
  925. ratio_bg.AddCounter();
  926. ratio_clone.AddCounter();
  927. ghost.AddCounter();
  928. bg.AddCounter();
  929. clone.AddCounter();
  930. };
  931. /** \brief Operator to add efficiency table from object "a" to the current object. Returns the current object after addition. */
  932. KFPartEfficiencies& operator+=(KFPartEfficiencies& a){
  933. mc1 += a.mc1; mc2 += a.mc2; mc3 += a.mc3; reco += a.reco;
  934. ghost += a.ghost; bg += a.bg; clone += a.clone;
  935. return *this;
  936. };
  937. /** \brief Function to calculate efficiency after all counters are set. If the counters are modified the function should be called again. */
  938. void CalcEff(){
  939. ratio_reco1 = reco/mc1;
  940. ratio_reco2 = reco/mc2;
  941. ratio_reco3 = reco/mc3;
  942. KFMCCounter<int> allReco = reco + ghost + bg;
  943. ratio_ghost = ghost/allReco;
  944. ratio_bg = bg/allReco;
  945. ratio_clone = clone/allReco;
  946. };
  947. void Inc(bool isReco, int nClones, bool isMC1, bool isMC2, bool isMC3, std::string name)
  948. {
  949. /** Increases counters by one, if the corresponding boolean variable is "true".
  950. ** \param[in] isReco - "true" if particle is reconstructed
  951. ** \param[in] nClones - number of double reconstructed particles for the given MC particle,
  952. ** will be added to the "clone" counters
  953. ** \param[in] isMC1 - "true" if particle is reconstructable in 4pi, mc1 is increased
  954. ** \param[in] isMC2 - "true" if all daughters are reconstructable, mc2 is increased
  955. ** \param[in] isMC3 - "true" if all daughters are reconstructed, mc3 is increased
  956. ** \param[in] name - "shortname" of the set of counters, which should be increased
  957. **/
  958. const int index = indices[name];
  959. if(isMC1) mc1.counters[index]++;
  960. if(isMC2) mc2.counters[index]++;
  961. if(isMC3) mc3.counters[index]++;
  962. if(isReco) reco.counters[index]++;
  963. if(nClones > 0)
  964. clone.counters[index] += nClones;
  965. };
  966. void IncReco(bool isGhost, bool isBg, std::string name)
  967. {
  968. /** Increases counters by one, if the corresponding boolean variable is "true".
  969. ** \param[in] isGhost - "true" if ghost is added
  970. ** \param[in] isBg - "true" if physics background is added
  971. ** \param[in] name - "shortname" of the set of counters, which should be increased
  972. **/
  973. const int index = indices[name];
  974. if (isGhost) ghost. counters[index]++;
  975. if (isBg) bg.counters[index]++;
  976. };
  977. /** \brief Prints the efficiency table on the screen. */
  978. void PrintEff(){
  979. std::ios_base::fmtflags original_flags = std::cout.flags();
  980. std::cout.setf(std::ios::fixed);
  981. std::cout.setf(std::ios::showpoint);
  982. std::cout.precision(3);
  983. std::cout << "Particle : "
  984. << " Eff 4pi "
  985. <<" / "<< " Eff accept"
  986. <<" / "<< " Eff KFPF "
  987. <<" / "<< " Ghost "
  988. <<" / "<< " BackGr "
  989. <<" / "<< " N Ghost "
  990. <<" / "<< " N BackGr "
  991. <<" / "<< " N Reco "
  992. <<" / "<< " N Clone "
  993. <<" | "<< " N MC 4pi "
  994. <<" | "<< "N MC accept"
  995. <<" | "<< " N MC KFPF " << std::endl;
  996. int NCounters = mc1.NCounters;
  997. for (int iC = 0; iC < NCounters; iC++){
  998. std::cout << names[iC]
  999. << " : " << std::setw(10) << ratio_reco1.counters[iC]
  1000. << " / " << std::setw(10) << ratio_reco2.counters[iC]
  1001. << " / " << std::setw(10) << ratio_reco3.counters[iC]
  1002. << " / " << std::setw(10) << ratio_ghost.counters[iC] // particles w\o MCParticle
  1003. << " / " << std::setw(10) << ratio_bg.counters[iC] // particles with incorrect MCParticle
  1004. << " / " << std::setw(10) << ghost.counters[iC]
  1005. << " / " << std::setw(10) << bg.counters[iC]
  1006. << " / " << std::setw(10) << reco.counters[iC]
  1007. << " / " << std::setw(10) << clone.counters[iC]
  1008. << " | " << std::setw(10) << mc1.counters[iC]
  1009. << " | " << std::setw(10) << mc2.counters[iC]
  1010. << " | " << std::setw(10) << mc3.counters[iC] << std::endl;
  1011. }
  1012. std::cout.flags(original_flags);
  1013. };
  1014. float GetTotal4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay]; } ///< Returns efficiency in 4pi for decay "iDecay".
  1015. float GetTotalKFPEfficiency(int iDecay) { return ratio_reco3.counters[3*iDecay]; } ///< Returns efficiency of KF Particle Finder method (cuts) for decay "iDecay".
  1016. float GetPrimary4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay+1]; } ///< Returns efficiency in 4pi for decay "iDecay" for primary particles.
  1017. float GetPrimaryKFPEfficiency(int iDecay) { return ratio_reco3.counters[3*iDecay+1]; } ///< Returns efficiency of KF Particle Finder method (cuts) for decay "iDecay" for primary particles.
  1018. float GetSecondary4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay+2]; } ///< Returns efficiency in 4pi for decay "iDecay" for secondary particles.
  1019. float GetSecondaryKFPEfficiency(int iDecay) { return ratio_reco3.counters[3*iDecay+2]; } ///< Returns efficiency of KF Particle Finder method (cuts) for decay "iDecay" for secondary particles.
  1020. /** \brief Operator to write efficiencies to file. */
  1021. friend std::fstream & operator<<(std::fstream &strm, KFPartEfficiencies &a)
  1022. {
  1023. strm << a.ratio_reco1;
  1024. strm << a.ratio_reco2;
  1025. strm << a.ratio_reco3;
  1026. strm << a.mc1;
  1027. strm << a.mc2;
  1028. strm << a.mc3;
  1029. strm << a.reco;
  1030. strm << a.ratio_ghost;
  1031. strm << a.ratio_bg;
  1032. strm << a.ratio_clone;
  1033. strm << a.ghost;
  1034. strm << a.bg;
  1035. strm << a.clone;
  1036. return strm;
  1037. }
  1038. /** \brief Operator to read efficiencies from file. */
  1039. friend std::fstream & operator>>(std::fstream &strm, KFPartEfficiencies &a)
  1040. {
  1041. strm >> a.ratio_reco1;
  1042. strm >> a.ratio_reco2;
  1043. strm >> a.ratio_reco3;
  1044. strm >> a.mc1;
  1045. strm >> a.mc2;
  1046. strm >> a.mc3;
  1047. strm >> a.reco;
  1048. strm >> a.ratio_ghost;
  1049. strm >> a.ratio_bg;
  1050. strm >> a.ratio_clone;
  1051. strm >> a.ghost;
  1052. strm >> a.bg;
  1053. strm >> a.clone;
  1054. return strm;
  1055. }
  1056. /** \brief Adds efficiency from the file with the name defined by "fileName" to the current objects. */
  1057. void AddFromFile(std::string fileName)
  1058. {
  1059. std::fstream file(fileName.data(),std::fstream::in);
  1060. file >> *this;
  1061. }
  1062. int GetNDaughters(int iParticle) const { return partDaughterPdg[iParticle].size(); } ///< Returns number of daughter particles for the decay with index "iParticle".
  1063. /** \brief Returns the PDG code of the daughter "iDaughter" from the decay with index "iParticle". */
  1064. int GetDaughterPDG(int iParticle, int iDaughter) const { return partDaughterPdg[iParticle][iDaughter]; }
  1065. float GetMass(int iParticle) const { return partMass[iParticle]; } ///< Returns the table mass of the decay with index "iParticle".
  1066. float GetMassSigma(int iParticle) const { return partMassSigma[iParticle]; } ///< Returns expected width of the mass peak of the decay with index "iParticle".
  1067. static const int nParticles = 194; ///< Number of particles.
  1068. static const int fFirstHypernucleusIndex = 114; ///< Index of the first hypernuclei in the list.
  1069. static const int fLastHypernucleusIndex = 130; ///< Index of the last hypernuclei in the list.
  1070. static const int fFirstMissingMassParticleIndex = 131; ///< Index of the first decay reconstructed by the missing mass method.
  1071. static const int fLastMissingMassParticleIndex = 166; ///< Index of the last decay reconstructed by the missing mass method.
  1072. static const int fFirstStableParticleIndex = 167; ///< Index of the first stable particle in the list.
  1073. static const int fLastStableParticleIndex = 184; ///< Index of the last stable particle in the list.
  1074. int partPDG[nParticles]; ///< Array of PDG codes assigned to the decays.
  1075. std::string partName[nParticles]; ///< Array of names of the decay in the file with histograms.
  1076. std::string partTitle[nParticles]; ///< Array of names of the decay in the output table with efficiency.
  1077. std::vector<std::vector<int> > partDaughterPdg; ///< Array with vectors of daughter particles for each decay.
  1078. float partMHistoMin[nParticles]; ///< Array with lower boundary in the mass histograms for each decay.
  1079. float partMHistoMax[nParticles]; ///< Array with upper boundary in the mass histograms for each decay.
  1080. int partMaxMult[nParticles]; ///< Array with upper boundary in the multiplicity histograms of each decay.
  1081. float partMass[nParticles]; ///< Array with table masses of each decay.
  1082. float partLifeTime[nParticles]; ///< Array with lifetimes in seconds of each decay.
  1083. int partCharge[nParticles]; ///< Array with charge of each particle specie in units of the elementary charge.
  1084. float partMassSigma[nParticles]; ///< Array with expected width of mass peaks used for the side band method.
  1085. private:
  1086. std::vector<std::string> names; ///< Names of the counters. The same for all counters objects.
  1087. std::map<std::string, int> indices; ///< Map between the counter index and its short name.
  1088. std::map<int, int> fPdgToIndex; ///< The map between PDG code assigned to the decay and index in the decay list.
  1089. KFMCCounter<double> ratio_reco1; ///< Efficiency in 4 pi for all decays.
  1090. KFMCCounter<double> ratio_reco2; ///< Efficiency normalised on the particles with all daughters reconstructable for all decays.
  1091. KFMCCounter<double> ratio_reco3; ///< Efficiency normalised on the particles with all daughters reconstructed for all decays.
  1092. KFMCCounter<int> mc1; ///< Counters of the Monte Carlo particles of all species.
  1093. KFMCCounter<int> mc2; ///< Counters of the Monte Carlo particles with all daughters reconstructable for all species.
  1094. KFMCCounter<int> mc3; ///< Counters of the Monte Carlo particles with all daughters found for all species.
  1095. KFMCCounter<int> reco; ///< Counters of the reconstructed particles for all species.
  1096. KFMCCounter<double> ratio_ghost; ///< Ratio of the ghost candidates to the total number of candidates for all species.
  1097. KFMCCounter<double> ratio_bg; ///< Ratio of the physics background candidates to the total number of candidates for all species.
  1098. KFMCCounter<double> ratio_clone; ///< Ratio of double reconstructed particles to the total number of signal candidates for all species.
  1099. KFMCCounter<int> ghost; ///< Counters of the ghost candidates for all species.
  1100. KFMCCounter<int> bg; ///< Counters of the physics background candidates for all species.
  1101. KFMCCounter<int> clone; ///< Counters of the double reconstructed particles for all species.
  1102. #ifndef KFParticleStandalone
  1103. ClassDef( KFPartEfficiencies, 1 )
  1104. #endif
  1105. };
  1106. #endif