Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:17

0001 /*
0002  * This file is part of KFParticle package
0003  * Copyright (C) 2007-2019 FIAS Frankfurt Institute for Advanced Studies
0004  *               2007-2019 Goethe University of Frankfurt
0005  *               2007-2019 Ivan Kisel <I.Kisel@compeng.uni-frankfurt.de>
0006  *               2007-2019 Maksym Zyzak
0007  *
0008  * KFParticle is free software: you can redistribute it and/or modify
0009  * it under the terms of the GNU General Public License as published by
0010  * the Free Software Foundation, either version 3 of the License, or
0011  * (at your option) any later version.
0012  *
0013  * KFParticle is distributed in the hope that it will be useful,
0014  * but WITHOUT ANY WARRANTY; without even the implied warranty of
0015  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0016  * GNU General Public License for more details.
0017  *
0018  * You should have received a copy of the GNU General Public License
0019  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
0020  */
0021 
0022 #ifndef KFPartEfficiencies_H
0023 #define KFPartEfficiencies_H
0024 
0025 #include <map>
0026 #include <iomanip>
0027 #include "KFMCCounter.h"
0028 
0029 #ifdef HLTCA_STANDALONE
0030 #include "RootTypesDef.h"
0031 #else
0032 #include "TObject.h"
0033 #endif
0034 
0035 /** @class KFEfficiencyParticleInfo
0036  ** @brief A helper class to define parameters of the decay list in KFPartEfficiencies.
0037  ** @author  M.Zyzak, I.Kisel
0038  ** @date 05.02.2019
0039  ** @version 1.0
0040  **/
0041 
0042 class KFEfficiencyParticleInfo
0043 {
0044  public:
0045   KFEfficiencyParticleInfo():fName("null"),fTitle("null"),fPDG(0),fHistoMin(0.f),fHistoMax(0.f),fMass(0.f),fLifeTime(0.f),fCharge(0), fMassSigma(0.001) {};
0046   /** \brief Constructor with all parameters set in. There is no other way to define the parameters other then use this constructor.*/
0047   KFEfficiencyParticleInfo(std::string name, std::string title, int pdg, float histoMin, float histoMax, float mass, float lifeTime, int charge, float massSigma ):
0048     fName(name), fTitle(title), fPDG(pdg), fHistoMin(histoMin), fHistoMax(histoMax), fMass(mass), fLifeTime(lifeTime), fCharge(charge), fMassSigma(massSigma) {};
0049   ~KFEfficiencyParticleInfo() {};
0050   
0051   //accessors
0052   std::string Name()      const { return fName; }      ///< Returns name of the decay in the file with histograms.
0053   std::string Title()     const { return fTitle; }     ///< Returns name of the decay in the output table with efficiency.
0054   int         PDG()       const { return fPDG; }       ///< Returns the assigned PDG code.
0055   float       HistoMin()  const { return fHistoMin; }  ///< Returns lower boundary in the mass histogram for the current decay.
0056   float       HistoMax()  const { return fHistoMax; }  ///< Returns upper boundary in the mass histogram for the current decay.
0057   float       Mass()      const { return fMass; }      ///< Returns table mass of the particle.
0058   float       LifeTime()  const { return fLifeTime; }  ///< Returns lifetime of the particle.
0059   int         Charge()    const { return fCharge; }    ///< Returns charge of the particle in units of the elementary charge.
0060   float       MassSigma() const { return fMassSigma; } ///< Returns expected width of the mass peak, used in the side bands method.
0061   
0062  private:
0063   std::string fName;  ///< Name of the decay in the file with histograms.
0064   std::string fTitle; ///< Name of the decay in the output table with efficiency.
0065   int fPDG;           ///< PDG code assigned to the current decay in the scheme of KF Particle Finder.
0066   float fHistoMin;    ///< Lower boundary in the mass histogram for the current decay.
0067   float fHistoMax;    ///< Upper boundary in the mass histogram for the current decay.
0068   float fMass;        ///< Table mass of the particle.
0069   float fLifeTime;    ///< Lifetime of the particle in seconds.
0070   int fCharge;        ///< Charge in units of the elementary charge.
0071   float fMassSigma;   ///< Expected width of the decay, determines peak sigma for the side bands method.
0072 };
0073 
0074 /** @class KFPartEfficiencies
0075  ** @brief Class to calculate efficiency of KF Particle Finder.
0076  ** @author  M.Zyzak, I.Kisel
0077  ** @date 05.02.2019
0078  ** @version 1.0
0079  **
0080  ** The class has two main purposes:\n
0081  ** 1) Defines the list of decays to be analysed: a unique code of the decay, its mass, lifetime,
0082  ** a list of daughter particles, etc. See KFPartEfficiencies::KFPartEfficiencies() for more details.\n
0083  ** 2) It calculates reconstruction efficiency of the decays from the KF Particle Finder scheme.\n
0084  ** Definitions:\n
0085  ** background - physics background, when daughter particle come from the real particle, but the pdg
0086  ** hypothesis is incorrect, for example, Lambda->p pi will create a physics background for
0087  ** K0s if the proton is misidentified;\n
0088  ** ghost - combinatorial background, tracks do not form a real vertex;\n
0089  ** clone - a particle is reconstructed several times, for example, particle track is split into 
0090  ** to parts due to the multiple scattering.
0091  **/
0092 
0093 class KFPartEfficiencies :public TObject
0094 {
0095  public:
0096 
0097   /** \brief The default constructor. Defines the list of decays to be analysed and their properties. Please, see the code for indexing scheme. */
0098   KFPartEfficiencies():
0099     partDaughterPdg(0),
0100     names(),
0101     indices(),
0102     fPdgToIndex(),
0103     ratio_reco1(),
0104     ratio_reco2(),
0105     ratio_reco3(),
0106     mc1(),
0107     mc2(),
0108     mc3(),
0109     reco(),
0110     ratio_ghost(),
0111     ratio_bg(),
0112     ratio_clone(),
0113     ghost(),
0114     bg(),
0115     clone()
0116   {                                    
0117     KFEfficiencyParticleInfo particleInfo[nParticles] = 
0118     {
0119       //                       name                title               PDG code   min   max    mass       lifetime    Q
0120 #ifdef CBM
0121       KFEfficiencyParticleInfo("Ks",               "KShort        ",        310, 0.3f, 1.3f, 0.497614   , 8.954e-11,  0, 0.0045), //0
0122 #else
0123       KFEfficiencyParticleInfo("Ks",               "KShort        ",        310, 0.3f, 1.3f, 0.497614   , 8.954e-11,  0, 0.0057), //0
0124 #endif
0125       KFEfficiencyParticleInfo("Lambda",           "Lambda        ",       3122, 1.0f, 2.0f, 1.115683   , 2.632e-10,  0, 0.0020), //1
0126       KFEfficiencyParticleInfo("Lambdab",          "Lambda b      ",      -3122, 1.0f, 2.0f, 1.115683   , 2.632e-10,  0, 0.0020), //2
0127       KFEfficiencyParticleInfo("Xi-",              "Xi-           ",       3312, 1.0f, 3.0f, 1.32171    , 1.639e-10, -1, 0.0022), //3
0128       KFEfficiencyParticleInfo("Xi+",              "Xi+           ",      -3312, 1.0f, 3.0f, 1.32171    , 1.639e-10,  1, 0.0022), //4
0129       KFEfficiencyParticleInfo("Xi0",              "Xi0           ",       3322, 1.0f, 3.0f, 1.31486    , 2.9e-10,    0, 0.0030), //5
0130       KFEfficiencyParticleInfo("Xi0b",             "Xi0 b         ",      -3322, 1.0f, 3.0f, 1.31486    , 2.9e-10,    0, 0.0030), //6
0131       KFEfficiencyParticleInfo("Omega-",           "Omega-        ",       3334, 1.0f, 3.0f, 1.67245    , 0.821e-10, -1, 0.0022), //7
0132       KFEfficiencyParticleInfo("Omega+",           "Omega+        ",      -3334, 1.0f, 3.0f, 1.67245    , 0.821e-10,  1, 0.0022), //8
0133       KFEfficiencyParticleInfo("Sigma^0",          "Sigma0        ",       3212, 1.0f, 3.0f, 1.192642   , 7.4e-20,    0, 0.0030), //9
0134       KFEfficiencyParticleInfo("Sigma^0b",         "Sigma0 b      ",      -3212, 1.0f, 3.0f, 1.192642   , 7.4e-20,    0, 0.0030), //10
0135       KFEfficiencyParticleInfo("Sigma^+",          "Sigma+        ",       3222, 1.0f, 3.0f, 1.18937    , 0.8018e-10, 1, 0.0030), //11
0136       KFEfficiencyParticleInfo("Sigma^-b",         "Sigma- b      ",      -3222, 1.0f, 3.0f, 1.18937    , 0.8018e-10,-1, 0.0030), //12
0137       KFEfficiencyParticleInfo("K*0",              "K*0           ",        313, 0.6f, 2.6f, 0.8958     , 1.38e-23,   0, 0.0300), //13
0138       KFEfficiencyParticleInfo("K*0b",             "K*0 b         ",       -313, 0.6f, 2.6f, 0.8958     , 1.38e-23,   0, 0.0300), //14
0139       KFEfficiencyParticleInfo("K*+",              "K*+           ",        323, 0.6f, 2.6f, 0.89166    , 1.30e-23,   1, 0.0300), //15
0140       KFEfficiencyParticleInfo("K*-",              "K*-           ",       -323, 0.6f, 2.6f, 0.89166    , 1.30e-23,  -1, 0.0300), //16
0141       KFEfficiencyParticleInfo("K*0_K0,pi0",       "K*0_K0pi0     ",     100313, 0.6f, 2.6f, 0.8958     , 1.38e-23,   0, 0.0030), //17
0142       KFEfficiencyParticleInfo("K*+_K+,pi0",       "K*+_K+pi0     ",     100323, 0.6f, 2.6f, 0.89166    , 1.30e-23,   1, 0.0030), //18
0143       KFEfficiencyParticleInfo("K*-_K-,pi0",       "K*-_K-pi0     ",    -100323, 0.6f, 2.6f, 0.89166    , 1.30e-23,  -1, 0.0030), //19
0144       KFEfficiencyParticleInfo("Sigma*+",          "Sigma*+       ",       3224, 1.0f, 3.0f, 1.3828     , 1.83e-23,   1, 0.0100), //20
0145       KFEfficiencyParticleInfo("Sigma*-",          "Sigma*-       ",       3114, 1.0f, 3.0f, 1.3872     , 1.67e-23,  -1, 0.0100), //21
0146       KFEfficiencyParticleInfo("Sigma*+b",         "Sigma*+ b     ",      -3114, 1.0f, 3.0f, 1.3828     , 1.83e-23,  -1, 0.0100), //22
0147       KFEfficiencyParticleInfo("Sigma*-b",         "Sigma*- b     ",      -3224, 1.0f, 3.0f, 1.3872     , 1.67e-23,   1, 0.0100), //23
0148       KFEfficiencyParticleInfo("Sigma*0",          "Sigma*0       ",       3214, 1.0f, 3.0f, 1.3837     , 1.83e-23,   0, 0.0030), //24
0149       KFEfficiencyParticleInfo("Sigma*0b",         "Sigma*0 b     ",      -3214, 1.0f, 3.0f, 1.3837     , 1.83e-23,   0, 0.0030), //25
0150       KFEfficiencyParticleInfo("Lambda*",          "Lambda*       ",       3124, 1.4f, 3.4f, 1.5195     , 4.22e-23,   0, 0.0100), //26
0151       KFEfficiencyParticleInfo("Lambda*b",         "Lambda* b     ",      -3124, 1.4f, 3.4f, 1.5195     , 4.22e-23,   0, 0.0100), //27
0152       KFEfficiencyParticleInfo("Xi*0",             "Xi*0          ",       3324, 1.4f, 3.4f, 1.53180    , 7.23e-23,   0, 0.0100), //28
0153       KFEfficiencyParticleInfo("Xi*0b",            "Xi*0 b        ",      -3324, 1.4f, 3.4f, 1.53180    , 7.23e-23,   0, 0.0100), //29
0154       KFEfficiencyParticleInfo("Xi*-_LK",          "Xi*-_lk       ",    1003314, 1.4f, 3.4f, 1.823      , 2.74e-23,  -1, 0.0030), //30
0155       KFEfficiencyParticleInfo("Xi*+_LK",          "Xi*+_lk       ",   -1003314, 1.4f, 3.4f, 1.823      , 2.74e-23,   1, 0.0030), //31
0156       KFEfficiencyParticleInfo("Xi*-_xi-,pi0",     "Xi*-_XiPi     ",       3314, 1.4f, 3.4f, 1.535      , 6.65e-23,  -1, 0.0030), //32
0157       KFEfficiencyParticleInfo("Xi*+_xi+,pi0",     "Xi*+_XiPi     ",      -3314, 1.4f, 3.4f, 1.535      , 6.65e-23,   1, 0.0030), //33
0158       KFEfficiencyParticleInfo("Omega*-",          "Omega*-       ",    1003334, 1.8f, 3.8f, 2.252      , 1.2e-23,   -1, 0.0030), //34
0159       KFEfficiencyParticleInfo("Omega*+",          "Omega*+       ",   -1003334, 1.8f, 3.8f, 2.252      , 1.2e-23,    1, 0.0030), //35
0160       KFEfficiencyParticleInfo("H0_LL",            "H0_LL         ",       3000, 1.5f, 3.5f, 2.21       , 1.32e-10,   0, 0.0030), //36
0161       KFEfficiencyParticleInfo("phi_KK",           "phi_KK        ",        333, 0.8f, 2.8f, 1.019455   , 1.55e-22,   0, 0.0030), //37
0162       KFEfficiencyParticleInfo("rho_pipi",         "rho_pipi      ",        113, 0.0f, 2.0f, 0.77526    , 4.45e-24,   0, 0.0030), //38
0163       KFEfficiencyParticleInfo("rho_ee",           "rho_ee        ",     100113, 0.0f, 2.0f, 0.77526    , 4.45e-24,   0, 0.0030), //39
0164       KFEfficiencyParticleInfo("rho_mm",           "rho_mm        ",     200113, 0.0f, 2.0f, 0.77526    , 4.45e-24,   0, 0.0030), //40
0165       KFEfficiencyParticleInfo("gamma",            "gamma         ",         22, 0.0f, 3.0f, 0.         , 1.e20,      0, 0.0030), //41
0166       KFEfficiencyParticleInfo("pi0",              "pi0           ",        111, 0.0f, 3.0f, 0.1349766  , 8.52e-17,   0, 0.0030), //42
0167       KFEfficiencyParticleInfo("eta",              "eta           ",        221, 0.0f, 3.0f, 0.547862   , 5.0e-19,    0, 0.0030), //43
0168 //Delta and N resonances
0169       KFEfficiencyParticleInfo("Delta0",           "Delta0        ",       2114, 1.0f, 3.0f, 1.232      , 5.63e-24,   0, 0.0030), //44
0170       KFEfficiencyParticleInfo("Delta0 b",         "Delta0 b      ",      -2114, 1.0f, 3.0f, 1.232      , 5.63e-24,   0, 0.0030), //45
0171       KFEfficiencyParticleInfo("Delta++",          "Delta++       ",       2224, 1.0f, 3.0f, 1.232      , 5.63e-24,   2, 0.0030), //46
0172       KFEfficiencyParticleInfo("Delta-- b",        "Delta-- b     ",      -2224, 1.0f, 3.0f, 1.232      , 5.63e-24,  -2, 0.0030), //47
0173 //charmonium
0174       KFEfficiencyParticleInfo("JPsi_ee",          "JPsi_ee       ",        443, 1.0f, 4.0f, 3.096916   , 7.1e-21,    0, 0.0030), //48
0175       KFEfficiencyParticleInfo("JPsi_mumu",        "JPsi_mm       ",     100443, 1.0f, 4.0f, 3.096916   , 7.1e-21,    0, 0.0030), //49
0176       KFEfficiencyParticleInfo("JPsi_pp",          "JPsi_pp       ",     200443, 1.0f, 4.0f, 3.096916   , 7.1e-21,    0, 0.0030), //50
0177       KFEfficiencyParticleInfo("JPsi_LL",          "JPsi_LL       ",     300443, 2.0f, 5.0f, 3.096916   , 7.1e-21,    0, 0.0030), //51
0178       KFEfficiencyParticleInfo("JPsi_XiXi",        "JPsi_XiXi     ",     400443, 2.0f, 5.0f, 3.096916   , 7.1e-21,    0, 0.0030), //52
0179       KFEfficiencyParticleInfo("Psi_OO",           "Psi_OO        ",     500443, 3.0f, 6.0f, 3.686109   , 2.1e-22,    0, 0.0030), //53
0180 //open charm
0181       KFEfficiencyParticleInfo("D0",               "D0            ",        421, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0154), //54
0182       KFEfficiencyParticleInfo("D0b",              "D0b           ",       -421, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0154), //55
0183       KFEfficiencyParticleInfo("D0_4",             "D0_4          ",        429, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0100), //56
0184       KFEfficiencyParticleInfo("D0b_4",            "D0b_4         ",       -429, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0100), //57
0185       KFEfficiencyParticleInfo("D0_pipi",          "D0_pipi       ",        420, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0154), //58
0186       KFEfficiencyParticleInfo("D0_2pi2pi",        "D0_2pi2pi     ",        470, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0154), //59
0187       KFEfficiencyParticleInfo("D0_K0pipi",        "D0_K0pipi     ",        425, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0150), //60
0188       KFEfficiencyParticleInfo("D0_KK",            "D0_KK         ",        426, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0130), //61
0189       KFEfficiencyParticleInfo("D0_KKK0",          "D0_KKK0       ",        427, 0.6f, 3.6f, 1.86486    , 4.1e-13,    0, 0.0154), //62
0190       KFEfficiencyParticleInfo("D0_pi0",           "D0_#pi0       ",        428, 1.0f, 3.0f, 1.86486    , 4.1e-13,    0, 0.0030), //63
0191       KFEfficiencyParticleInfo("D+",               "D+            ",        411, 1.0f, 3.0f, 1.86962    , 1.04e-13,   1, 0.0114), //64
0192       KFEfficiencyParticleInfo("D-",               "D-            ",       -411, 1.0f, 3.0f, 1.86962    , 1.04e-13,  -1, 0.0114), //65
0193       KFEfficiencyParticleInfo("D+_K0pi+",         "D+_K0pi+      ",     100411, 0.6f, 4.6f, 1.86962    , 1.04e-13,   1, 0.0030), //66
0194       KFEfficiencyParticleInfo("D-_K0pi-",         "D-_K0pi-      ",    -100411, 0.6f, 4.6f, 1.86962    , 1.04e-13,  -1, 0.0030), //67
0195       KFEfficiencyParticleInfo("D+_K03pi",         "D+_K03pi      ",     200411, 0.6f, 4.6f, 1.86962    , 1.04e-13,   1, 0.0030), //68
0196       KFEfficiencyParticleInfo("D-_K03pi",         "D-_K03pi      ",    -200411, 0.6f, 4.6f, 1.86962    , 1.04e-13,  -1, 0.0030), //69
0197       KFEfficiencyParticleInfo("D+_3pi",           "D+_3pi        ",     300411, 0.6f, 4.6f, 1.86962    , 1.04e-13,   1, 0.0030), //70
0198       KFEfficiencyParticleInfo("D-_3pi",           "D-_3pi        ",    -300411, 0.6f, 4.6f, 1.86962    , 1.04e-13,  -1, 0.0030), //71
0199       KFEfficiencyParticleInfo("Ds+",              "Ds+           ",        431, 1.0f, 3.0f, 1.96850    , 5.0e-13,    1, 0.0110), //72
0200       KFEfficiencyParticleInfo("Ds-",              "Ds-           ",       -431, 1.0f, 3.0f, 1.96850    , 5.0e-13,   -1, 0.0110), //73
0201       KFEfficiencyParticleInfo("Ds+_K0K+",         "Ds+_K0K+      ",     100431, 1.0f, 3.0f, 1.96850    , 5.0e-13,    1, 0.0030), //74
0202       KFEfficiencyParticleInfo("Ds-_K0K-",         "Ds-_K0K-      ",    -100431, 1.0f, 3.0f, 1.96850    , 5.0e-13,   -1, 0.0030), //75
0203       KFEfficiencyParticleInfo("Ds+_K0K0pi+",      "Ds+_K0K0pi+   ",     200431, 1.0f, 3.0f, 1.96850    , 5.0e-13,    1, 0.0030), //76
0204       KFEfficiencyParticleInfo("Ds-_K0K0pi-",      "Ds-_K0K0pi-   ",    -200431, 1.0f, 3.0f, 1.96850    , 5.0e-13,   -1, 0.0030), //77
0205       KFEfficiencyParticleInfo("Ds+_K0K+pipi",     "Ds+_K0K+pipi  ",     300431, 1.0f, 3.0f, 1.96850    , 5.0e-13,    1, 0.0030), //78
0206       KFEfficiencyParticleInfo("Ds-_K0K-pipi",     "Ds-_K0K-pipi  ",    -300431, 1.0f, 3.0f, 1.96850    , 5.0e-13,   -1, 0.0030), //79
0207       KFEfficiencyParticleInfo("Ds+_K+pipi",       "Ds+_K+pipi    ",     400431, 1.0f, 3.0f, 1.96850    , 5.0e-13,    1, 0.0030), //80
0208       KFEfficiencyParticleInfo("Ds-_K-pipi",       "Ds-_K-pipi    ",    -400431, 1.0f, 3.0f, 1.96850    , 5.0e-13,   -1, 0.0030), //81
0209       KFEfficiencyParticleInfo("Lc",               "Lambdac       ",       4122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0110), //82
0210       KFEfficiencyParticleInfo("Lcb",              "Lambdac b     ",      -4122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0110), //83
0211       KFEfficiencyParticleInfo("Lc_{pK0}",         "Lc   {pK0}    ",     104122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0030), //84
0212       KFEfficiencyParticleInfo("Lcb_{pK0}",        "Lc b {pK0}    ",    -104122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0030), //85
0213       KFEfficiencyParticleInfo("Lc_{pK02pi}",      "Lc   {pK02pi} ",     204122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0030), //86
0214       KFEfficiencyParticleInfo("Lcb_{pK02pi}",     "Lc b {pK02pi} ",    -204122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0030), //87
0215       KFEfficiencyParticleInfo("Lc_{Lpi}",         "Lc   {Lpi}    ",     304122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0030), //88
0216       KFEfficiencyParticleInfo("Lcb_{Lpi}",        "Lc b {Lpi}    ",    -304122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0030), //89
0217       KFEfficiencyParticleInfo("Lc_{L3pi}",        "Lc   {L3pi}   ",     404122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0030), //90
0218       KFEfficiencyParticleInfo("Lcb_{L3pi}",       "Lc b {L3pi}   ",    -404122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0030), //91
0219       KFEfficiencyParticleInfo("Lc_{p2pi}",        "Lc   {p2pi}   ",     504122, 1.8f, 3.8f, 2.28646    , 2.0e-13,    1, 0.0030), //92
0220       KFEfficiencyParticleInfo("Lcb_{p2pi}",       "Lc b {p2pi}   ",    -504122, 1.8f, 3.8f, 2.28646    , 2.0e-13,   -1, 0.0030), //93  
0221       KFEfficiencyParticleInfo("Xic0",             "Xic0          ",       4132, 2.1f, 4.1f, 2.47087    , 1.0e-13,    0, 0.0030), //94
0222       KFEfficiencyParticleInfo("Xic0b",            "Xic0b         ",      -4132, 2.1f, 4.1f, 2.47087    , 1.0e-13,    0, 0.0030), //95  
0223       KFEfficiencyParticleInfo("D*0",              "D*0           ",      10421, 1.8f, 3.8f, 2.00699    , 3.0e-22,    0, 0.0030), //96
0224       KFEfficiencyParticleInfo("D*0b",             "D*0 b         ",     -10421, 1.8f, 3.8f, 2.00699    , 3.0e-22,    0, 0.0030), //97
0225       KFEfficiencyParticleInfo("D*+",              "D*+           ",      10411, 1.8f, 3.8f, 2.01029    , 6.86e-21,   1, 0.0030), //98
0226       KFEfficiencyParticleInfo("D*-",              "D*-           ",     -10411, 1.8f, 3.8f, 2.01029    , 6.86e-21,  -1, 0.0030), //99
0227       KFEfficiencyParticleInfo("D*+_4",            "D*+_4         ",      20411, 1.8f, 3.8f, 2.01029    , 6.86e-21,   1, 0.0030), //100
0228       KFEfficiencyParticleInfo("D*-_4",            "D*-_4         ",     -20411, 1.8f, 3.8f, 2.01029    , 6.86e-21,  -1, 0.0030), //101
0229       KFEfficiencyParticleInfo("D0*_pi0",          "D0*_#pi0      ",      10428, 1.8f, 3.8f, 2.00699    , 6.86e-21,   0, 0.0030), //102
0230 //B mesons
0231       KFEfficiencyParticleInfo("B_Jpsi_ee",        "B_Jpsi_ee     ",        500, 1.0f, 4.0f, 3.096916   , 7.1e-21,    0, 0.0030), //103
0232       KFEfficiencyParticleInfo("B_Jpsi_mm",        "B_Jpsi_mm     ",        501, 1.0f, 4.0f, 3.096916   , 7.1e-21,    0, 0.0030), //104
0233       KFEfficiencyParticleInfo("B+_D0bPi+",        "B+ {D0bPi+}   ",        521, 3.0f, 7.0f, 5.27931    , 1.638e-12,  0, 0.0030), //105
0234       KFEfficiencyParticleInfo("B-_D0Pi-",         "B- {D0Pi-}    ",       -521, 3.0f, 7.0f, 5.27931    , 1.638e-12,  0, 0.0030), //106
0235       KFEfficiencyParticleInfo("B+_D0bK+",         "B+ {D0bK+}    ",        529, 3.0f, 7.0f, 5.27931    , 1.638e-12,  0, 0.0030), //107
0236       KFEfficiencyParticleInfo("B-_D0K-",          "B- {D0K+}     ",       -529, 3.0f, 7.0f, 5.27931    , 1.638e-12,  0, 0.0030), //108
0237       KFEfficiencyParticleInfo("B0_D-Pi+",         "B0 {D-Pi+}    ",        511, 3.0f, 7.0f, 5.27962    , 1.520e-12,  0, 0.0030), //109
0238       KFEfficiencyParticleInfo("B0b_D+Pi-",        "B0b {D+Pi-}   ",       -511, 3.0f, 7.0f, 5.27962    , 1.520e-12,  0, 0.0030), //110
0239       KFEfficiencyParticleInfo("B0_D-K+",          "B0 {D-K+}     ",        519, 3.0f, 7.0f, 5.27962    , 1.520e-12,  0, 0.0030), //111
0240       KFEfficiencyParticleInfo("B0b_D+K-",         "B0b {D+K-}    ",       -519, 3.0f, 7.0f, 5.27962    , 1.520e-12,  0, 0.0030), //112
0241       KFEfficiencyParticleInfo("H0_{Lppi}",        "H0            ",       3001, 2.0f, 4.0f, 2.21       , 1.32e-10,   0, 0.0030), //113
0242 //hypernuclei
0243       KFEfficiencyParticleInfo("LambdaN",          "LambdaN       ",       3003, 1.0f, 3.0f, 2.05395    , 1.00e-10,   0, 0.0030), //114
0244       KFEfficiencyParticleInfo("LambdaNb",         "LambdaN b     ",      -3003, 1.0f, 3.0f, 2.05395    , 1.00e-10,   0, 0.0030), //115
0245       KFEfficiencyParticleInfo("LambdaNN",         "LambdaNN      ",       3103, 2.0f, 4.0f, 2.99352    , 1.00e-10,   0, 0.0030), //116
0246       KFEfficiencyParticleInfo("LambdaNNb",        "LambdaNN b    ",      -3103, 2.0f, 4.0f, 2.99352    , 1.00e-10,   0, 0.0030), //117
0247       KFEfficiencyParticleInfo("H3L",              "H3L           ",       3004, 2.0f, 4.0f, 2.99339    , 1.85e-10,   1, 0.0030), //118
0248       KFEfficiencyParticleInfo("H3Lb",             "H3L b         ",      -3004, 2.0f, 4.0f, 2.99339    , 1.85e-10,  -1, 0.0030), //119
0249       KFEfficiencyParticleInfo("H4L",              "H4L           ",       3005, 3.0f, 5.0f, 3.92975    , 1.80e-10,   1, 0.0030), //120
0250       KFEfficiencyParticleInfo("H4Lb",             "H4L b         ",      -3005, 3.0f, 5.0f, 3.92975    , 1.80e-10,  -1, 0.0030), //121
0251       KFEfficiencyParticleInfo("He4L",             "He4L          ",       3006, 3.0f, 5.0f, 3.93070    , 1.50e-10,   2, 0.0030), //122
0252       KFEfficiencyParticleInfo("He4Lb",            "He4L b        ",      -3006, 3.0f, 5.0f, 3.93070    , 1.50e-10,  -2, 0.0030), //123
0253       KFEfficiencyParticleInfo("He5L",             "He5L          ",       3007, 4.0f, 6.0f, 4.86824    , 1.40e-10,   2, 0.0030), //124
0254       KFEfficiencyParticleInfo("He5Lb",            "He5L b        ",      -3007, 4.0f, 6.0f, 4.86824    , 1.40e-10,  -2, 0.0030), //125
0255       KFEfficiencyParticleInfo("LLn",              "LLn           ",       3203, 3.0f, 5.0f, 3.16964    , 1.00e-10,   0, 0.0030), //126
0256       KFEfficiencyParticleInfo("H4LL_{He4Lpi-}",   "H4LL_{He4Lpi-}",       3008, 3.0f, 5.0f, 4.10791    ,  1.0e-10,   1, 0.0030), //127
0257       KFEfficiencyParticleInfo("H4LL_{H3Lppi-}",   "H4LL_{H3Lppi-}",       3009, 3.0f, 5.0f, 4.10791    ,  1.0e-10,   1, 0.0030), //128
0258       KFEfficiencyParticleInfo("H5LL_{He5Lpi-}",   "H5LL_{He5Lpi-}",       3010, 4.0f, 6.0f, 5.04748    ,  1.0e-10,   1, 0.0030), //129
0259       KFEfficiencyParticleInfo("He6LL",            "He6LL         ",       3011, 5.0f, 7.0f, 5.98575    ,  1.0e-10,   2, 0.0030), //130
0260 //missing mass method      
0261       KFEfficiencyParticleInfo("pi-_{mu,nu}",      "pi-_{mnu}     ",   -7000211,-1.0f, 1.0f, 0.139570   , 2.6e-8,    -1, 0.0030), //131
0262       KFEfficiencyParticleInfo("nu_{pi-}",         "nu_{mupi-} b  ",   -7000014,-1.0f, 1.0f, 0.         , 1.0e20,     0, 0.0030), //132
0263       KFEfficiencyParticleInfo("pi+_{mu,nu}",      "pi+_{mnu}     ",    7000211,-1.0f, 1.0f, 0.139570   , 2.6e-8,     1, 0.0030), //133
0264       KFEfficiencyParticleInfo("nu_{pi+}",         "nu_{mupi+}    ",    7000014,-1.0f, 1.0f, 0.         , 1.0e20,     0, 0.0030), //134
0265       KFEfficiencyParticleInfo("K-_{mu,nu}",       "K-_{mnu}      ",   -7000321,-1.0f, 1.0f, 0.493677   , 1.238e-8,  -1, 0.0030), //135
0266       KFEfficiencyParticleInfo("nu_{K-}",          "nu_{K-} b     ",   -8000014,-1.0f, 1.0f, 0.         , 1.0e20,     0, 0.0030), //136
0267       KFEfficiencyParticleInfo("K+_{mu,nu}",       "K+_{mnu}      ",    7000321,-1.0f, 1.0f, 0.493677   , 1.238e-8,   1, 0.0030), //137
0268       KFEfficiencyParticleInfo("nu_{K+}",          "nu_{K+}       ",    8000014,-1.0f, 1.0f, 0.         , 1.0e20,     0, 0.0030), //138
0269       KFEfficiencyParticleInfo("Sigma-_{pi-,n}",   "Sigma-_{pi-n} ",    7003112, 0.0f, 3.0f, 1.192642   , 1.479e-10, -1, 0.0100), //139
0270       KFEfficiencyParticleInfo("n_{Sigma-}",       "n_{Sigma-}    ",    7002112, 0.0f, 1.5f, 0.9395654  , 880,        0, 0.0030), //140
0271       KFEfficiencyParticleInfo("Sigma+_{pi+n}b",   "Sigma+{pi+n} b",   -7003112, 0.0f, 3.0f, 1.192642   , 1.479e-10, -1, 0.0030), //141
0272       KFEfficiencyParticleInfo("n_{Sigma+} b",     "n_{Sigma+b} b ",   -7002112, 0.0f, 1.5f, 0.9395654  , 880,        0, 0.0030), //142
0273       KFEfficiencyParticleInfo("Sigma-_{pi-n}b",   "Sigma+{pi-n} b",   -7003222, 0.0f, 3.0f, 1.18937    , 0.8018e-10, 1, 0.0030), //143
0274       KFEfficiencyParticleInfo("n_{Sigma-} b",     "n_{Sigma-_b} b",   -8002112, 0.0f, 1.5f, 0.9395654  , 0.93956541, 0, 0.0030), //144
0275       KFEfficiencyParticleInfo("Sigma+_{pi+n}",    "Sigma+_{pi+n} ",    7003222, 0.0f, 3.0f, 1.18937    , 0.8018e-10, 1, 0.0100), //145
0276       KFEfficiencyParticleInfo("n_{Sigma+}",       "n_{Sigma+}    ",    8002112, 0.0f, 1.5f, 0.9395654  , 880,        0, 0.0030), //146
0277       KFEfficiencyParticleInfo("Xi-_{pi-L}",       "Xi-_{pi-L}    ",    7003312, 0.0f, 3.0f, 1.32171    , 1.639e-10, -1, 0.0030), //147
0278       KFEfficiencyParticleInfo("Lambda_{Xi-}",     "Lambda_{Xi-}  ",    7003122, 0.0f, 2.0f, 1.115683   , 2.632e-10,  0, 0.0030), //148
0279       KFEfficiencyParticleInfo("Xi+_{pi+L_b}",     "Xi+_{pi+L_b}  ",   -7003312, 0.0f, 3.0f, 1.32171    , 1.639e-10,  1, 0.0030), //149
0280       KFEfficiencyParticleInfo("Lambda_{Xi+} b",   "Lambda_{Xi+} b",   -7003122, 0.0f, 2.0f, 1.115683   , 2.632e-10,  0, 0.0030), //150
0281       KFEfficiencyParticleInfo("Omega-_{Xi-pi0}",  "Omega-{pi-Xi0}",    7003334, 0.0f, 3.0f, 1.67245    , 0.821e-10, -1, 0.0030), //151
0282       KFEfficiencyParticleInfo("Xi0_{Omega-}",     "Xi0_{Omega-}  ",    7003322, 0.0f, 3.0f, 1.31486    , 2.9e-10,    0, 0.0030), //152
0283       KFEfficiencyParticleInfo("Omega+_{Xi+pi0}",  "Omega+_{Xipi0}",   -7003334, 0.0f, 3.0f, 1.67245    , 0.821e-10,  1, 0.0030), //153
0284       KFEfficiencyParticleInfo("Xi0_{Omega+} b",   "Xi0_{Omega+} b",   -7003322, 0.0f, 3.0f, 1.31486    , 2.9e-10,    0, 0.0030), //154
0285       KFEfficiencyParticleInfo("K-_{pi-pi0}",      "K-_{pi-pi0}   ",   -9000321, 0.0f, 3.0f, 0.493677   , 1.24e-8,   -1, 0.0030), //155
0286       KFEfficiencyParticleInfo("pi0_{K-}",         "pi0_{K-}      ",   -9000111, 0.0f, 3.0f, 0.1349766  , 8.52e-17,   0, 0.0030), //156
0287       KFEfficiencyParticleInfo("K+_{pi+pi0}",      "K+_{pi+pi0}   ",    9000321, 0.0f, 3.0f, 0.493677   , 1.24e-8,    1, 0.0030), //157
0288       KFEfficiencyParticleInfo("pi0_{K+}",         "pi0_{K+}      ",    9000111, 0.0f, 3.0f, 0.1349766  , 8.52e-17,   0, 0.0030), //158
0289       KFEfficiencyParticleInfo("Omega-{K-L}",      "Omega-_{K-L}  ",    8003334, 0.0f, 3.0f, 1.67245    , 0.821e-10, -1, 0.0030), //159
0290       KFEfficiencyParticleInfo("Lambda_{Omega-}",  "Lambda_{O-}   ",    8003122, 0.0f, 3.0f, 1.115683   , 2.632e-10,  0, 0.0030), //160
0291       KFEfficiencyParticleInfo("Omega+_{K+L_b}",   "Omega+_{K+Lb} ",   -8003334, 0.0f, 3.0f, 1.67245    , 0.821e-10,  1, 0.0030), //161
0292       KFEfficiencyParticleInfo("Lamda_{Omega+} b", "Lambda_{O+} b ",   -8003122, 0.0f, 3.0f, 1.115683   , 2.632e-10,  0, 0.0030), //162
0293       KFEfficiencyParticleInfo("Sigma-{p_b pi0} b","Sigma-{ppi0} b",   -8003222, 0.0f, 3.0f, 1.18937    , 0.8018e-10, 1, 0.0030), //163
0294       KFEfficiencyParticleInfo("pi0_{Sigma-b}",    "pi0_{Sigma-_b}",   -8000111, 0.0f, 3.0f, 0.1349766  , 8.52e-17,   0, 0.0030), //164
0295       KFEfficiencyParticleInfo("Sigma+_{p pi0}",   "Sigma+_{ppi0} ",    8003222, 0.0f, 3.0f, 1.18937    , 0.8018e-10, 1, 0.0250), //165
0296       KFEfficiencyParticleInfo("pi0_{Sigma+}",     "pi0_{Sigma+}  ",    8000111, 0.0f, 3.0f, 0.1349766  , 8.52e-17,   0, 0.0030), //166
0297 //tracks
0298       KFEfficiencyParticleInfo("e-",               "e-            ",         11, 0.0f,0.01f, 5.485799e-4, 1.0e20,    -1, 0.0030), //167
0299       KFEfficiencyParticleInfo("e+",               "e+            ",        -11, 0.0f,0.01f, 5.485799e-4, 1.0e20,     1, 0.0030), //168
0300       KFEfficiencyParticleInfo("mu-",              "mu-           ",         13, 0.0f, 1.0f, 0.105658   , 2.2e-6,    -1, 0.0030), //169
0301       KFEfficiencyParticleInfo("mu+",              "mu+           ",        -13, 0.0f, 1.0f, 0.105658   , 2.2e-6,     1, 0.0030), //170
0302       KFEfficiencyParticleInfo("pi+",              "pi+           ",        211, 0.0f, 1.0f, 0.139570   , 2.6e-8,     1, 0.0030), //171
0303       KFEfficiencyParticleInfo("pi-",              "pi-           ",       -211, 0.0f, 1.0f, 0.139570   , 2.6e-8,    -1, 0.0030), //172
0304       KFEfficiencyParticleInfo("K+",               "K+            ",        321, 0.0f, 1.0f, 0.493677   , 1.238e-8,   1, 0.0030), //173
0305       KFEfficiencyParticleInfo("K-",               "K-            ",       -321, 0.0f, 1.0f, 0.493677   , 1.238e-8,  -1, 0.0030), //174
0306       KFEfficiencyParticleInfo("p+",               "p+            ",       2212, 0.0f, 1.5f, 0.938272   , 1.0e20,     1, 0.0030), //175
0307       KFEfficiencyParticleInfo("p-",               "p-            ",      -2212, 0.0f, 1.5f, 0.938272   , 1.0e20,    -1, 0.0030), //176
0308       KFEfficiencyParticleInfo("d+",               "d+            ", 1000010020, 0.0f, 2.5f, 1.876124   , 1.0e20,     1, 0.0030), //177
0309       KFEfficiencyParticleInfo("d-",               "d-            ",-1000010020, 0.0f, 2.5f, 1.876124   , 1.0e20,    -1, 0.0030), //178
0310       KFEfficiencyParticleInfo("t+",               "t+            ", 1000010030, 0.0f, 3.5f, 2.809432   , 1.0e20,     1, 0.0030), //179
0311       KFEfficiencyParticleInfo("t-",               "t-            ",-1000010030, 0.0f, 3.5f, 2.809432   , 1.0e20,    -1, 0.0030), //180
0312       KFEfficiencyParticleInfo("He3+",             "He3+          ", 1000020030, 0.0f, 3.5f, 2.809413   , 1.0e20,     2, 0.0030), //181
0313       KFEfficiencyParticleInfo("He3-",             "He3-          ",-1000020030, 0.0f, 3.5f, 2.809413   , 1.0e20,    -2, 0.0030), //182
0314       KFEfficiencyParticleInfo("He4+",             "He4+          ", 1000020040, 0.0f, 4.5f, 3.728400   , 1.0e20,     2, 0.0030), //183
0315       KFEfficiencyParticleInfo("He4-",             "He4-          ",-1000020040, 0.0f, 4.5f, 3.728400   , 1.0e20,    -2, 0.0030), //184
0316 //background for subtraction
0317       KFEfficiencyParticleInfo("pi+pi+",           "pi+pi+        ",       9001, 0.0f, 2.0f, 0          , 1.0e20,     0, 0.0030), //185
0318       KFEfficiencyParticleInfo("pi+K+",            "pi+K+         ",       9002, 0.6f, 5.6f, 0          , 1.0e20,     0, 0.0030), //186
0319       KFEfficiencyParticleInfo("K+K+",             "K+K+          ",       9003, 0.8f, 3.8f, 0          , 1.0e20,     0, 0.0030), //187
0320       KFEfficiencyParticleInfo("K+p+",             "K+p+          ",       9004, 1.4f, 5.4f, 0          , 1.0e20,     0, 0.0030), //188
0321       KFEfficiencyParticleInfo("pi-pi-",           "pi-pi-        ",      -9001, 0.0f, 2.0f, 0          , 1.0e20,     0, 0.0030), //189
0322       KFEfficiencyParticleInfo("pi-K-",            "pi-K-         ",      -9002, 0.6f, 5.6f, 0          , 1.0e20,     0, 0.0030), //190
0323       KFEfficiencyParticleInfo("K-K-",             "K-K-          ",      -9003, 0.8f, 3.8f, 0          , 1.0e20,     0, 0.0030), //191
0324       KFEfficiencyParticleInfo("K-p-",             "K-p-          ",      -9004, 1.4f, 5.4f, 0          , 1.0e20,     0, 0.0030), //192
0325 //V0
0326       KFEfficiencyParticleInfo("V0",               "V0            ",  123456789, 0.3f, 1.3f, 0          , 0,          0, 0.0030)  //193
0327     };
0328                                         
0329     int mPartMaxMult[nParticles];
0330     for(int i=0; i<nParticles; i++)
0331       mPartMaxMult[i] = 20;
0332     mPartMaxMult[fFirstStableParticleIndex + 4] = 500;
0333     mPartMaxMult[fFirstStableParticleIndex + 5] = 500;
0334     mPartMaxMult[fFirstStableParticleIndex + 6] = 50;
0335     mPartMaxMult[fFirstStableParticleIndex + 7] = 50;
0336     mPartMaxMult[fFirstStableParticleIndex + 8] = 500;
0337                                     
0338     //set decay mode
0339     partDaughterPdg.resize(nParticles);
0340 
0341     int curPart = 0;
0342     
0343     partDaughterPdg[curPart].push_back(  211); //K0s -> pi+ pi-
0344     partDaughterPdg[curPart].push_back( -211);
0345     curPart++;
0346     
0347     partDaughterPdg[curPart].push_back( 2212); //Lambda -> p pi-
0348     partDaughterPdg[curPart].push_back( -211);
0349     curPart++;
0350     
0351     partDaughterPdg[curPart].push_back(-2212); //Lambda_bar -> p- pi+
0352     partDaughterPdg[curPart].push_back(  211);
0353     curPart++;
0354     
0355     partDaughterPdg[curPart].push_back( 3122); //Xi- -> Lambda pi-
0356     partDaughterPdg[curPart].push_back( -211);
0357     curPart++;
0358     
0359     partDaughterPdg[curPart].push_back(-3122); //Xi+ -> Lambda_bar pi+
0360     partDaughterPdg[curPart].push_back(  211);
0361     curPart++;
0362     
0363     partDaughterPdg[curPart].push_back( 3122); //Xi0 -> Lambda Pi0
0364     partDaughterPdg[curPart].push_back(  111);
0365     curPart++;
0366     
0367     partDaughterPdg[curPart].push_back(-3122); //Xi0_bar -> Lambda_bar Pi0
0368     partDaughterPdg[curPart].push_back(  111);
0369     curPart++;
0370     
0371     partDaughterPdg[curPart].push_back( 3122); //Omega- -> Lambda K-
0372     partDaughterPdg[curPart].push_back( -321);
0373     curPart++;
0374     
0375     partDaughterPdg[curPart].push_back(-3122); //Omega+ -> Lambda_bar K+
0376     partDaughterPdg[curPart].push_back(  321);
0377     curPart++;
0378     
0379     partDaughterPdg[curPart].push_back(   22); //Sigma0 -> Lambda Gamma
0380     partDaughterPdg[curPart].push_back( 3122);
0381     curPart++;
0382     
0383     partDaughterPdg[curPart].push_back(   22); //Sigma0_bar -> Lambda_bar Gamma
0384     partDaughterPdg[curPart].push_back(-3122);
0385     curPart++;
0386     
0387     partDaughterPdg[curPart].push_back(  111); //Sigma+ -> p Pi0
0388     partDaughterPdg[curPart].push_back( 2212);
0389     curPart++;
0390     
0391     partDaughterPdg[curPart].push_back(  111); //Sigma+_bar -> p- Pi0
0392     partDaughterPdg[curPart].push_back(-2212);
0393     curPart++;
0394     
0395     partDaughterPdg[curPart].push_back(  321); //K*0 -> K+ pi-
0396     partDaughterPdg[curPart].push_back( -211);
0397     curPart++;
0398     
0399     partDaughterPdg[curPart].push_back( -321); //K*0_bar -> K- pi+
0400     partDaughterPdg[curPart].push_back(  211);
0401     curPart++;
0402     
0403     partDaughterPdg[curPart].push_back(  310); //K*+ -> K0s pi+
0404     partDaughterPdg[curPart].push_back(  211);
0405     curPart++;
0406     
0407     partDaughterPdg[curPart].push_back(  310); //K*- -> K0s pi-
0408     partDaughterPdg[curPart].push_back( -211);
0409     curPart++;
0410     
0411     partDaughterPdg[curPart].push_back(  310); //K*0 -> K0 pi0
0412     partDaughterPdg[curPart].push_back(  111);
0413     curPart++;
0414     
0415     partDaughterPdg[curPart].push_back(  111); //K*+ -> K+ pi0
0416     partDaughterPdg[curPart].push_back(  321);
0417     curPart++;
0418     
0419     partDaughterPdg[curPart].push_back(  111); //K*- -> K- pi0
0420     partDaughterPdg[curPart].push_back( -321);
0421     curPart++;
0422     
0423     partDaughterPdg[curPart].push_back( 3122); //Sigma+ -> Lambda pi+
0424     partDaughterPdg[curPart].push_back(  211);
0425     curPart++;
0426     
0427     partDaughterPdg[curPart].push_back( 3122); //Sigma- -> Lambda pi-
0428     partDaughterPdg[curPart].push_back( -211);
0429     curPart++;
0430     
0431     partDaughterPdg[curPart].push_back(-3122); //Sigma+_bar -> Lambda_bar pi+
0432     partDaughterPdg[curPart].push_back(  211);
0433     curPart++;
0434     
0435     partDaughterPdg[curPart].push_back(-3122); //Sigma-_bar -> Lambda_bar pi-
0436     partDaughterPdg[curPart].push_back( -211);
0437     curPart++;
0438     
0439     partDaughterPdg[curPart].push_back( 3122); //Sigma*0 -> Lambda pi0
0440     partDaughterPdg[curPart].push_back(  111);
0441     curPart++;
0442     
0443     partDaughterPdg[curPart].push_back(-3122); //Sigma*0_bar -> Lambda_bar pi0
0444     partDaughterPdg[curPart].push_back(  111);
0445     curPart++;
0446     
0447     partDaughterPdg[curPart].push_back( 2212); //Lambda* -> p K-
0448     partDaughterPdg[curPart].push_back( -321);
0449     curPart++;
0450     
0451     partDaughterPdg[curPart].push_back(-2212); //Lambda*_bar -> p- K+
0452     partDaughterPdg[curPart].push_back(  321);
0453     curPart++;
0454     
0455     partDaughterPdg[curPart].push_back( 3312); //Xi*0 -> Xi- pi+
0456     partDaughterPdg[curPart].push_back(  211);
0457     curPart++;
0458     
0459     partDaughterPdg[curPart].push_back(-3312); //Xi*0_bar -> Xi+ pi-
0460     partDaughterPdg[curPart].push_back( -211);
0461     curPart++;
0462     
0463     partDaughterPdg[curPart].push_back( 3122); //Xi*- -> Lambda K-
0464     partDaughterPdg[curPart].push_back( -321);
0465     curPart++;
0466     
0467     partDaughterPdg[curPart].push_back(-3122); //Xi*+ -> Lambda_bar K+
0468     partDaughterPdg[curPart].push_back(  321);
0469     curPart++;
0470     
0471     partDaughterPdg[curPart].push_back( 3312); //Xi*- -> Xi- pi0
0472     partDaughterPdg[curPart].push_back(  111);
0473     curPart++;
0474     
0475     partDaughterPdg[curPart].push_back(-3312); //Xi*+ -> Xi+ pi0
0476     partDaughterPdg[curPart].push_back(  111);
0477     curPart++;
0478     
0479     partDaughterPdg[curPart].push_back( 3312); //Omega*- -> Xi- pi+ K-
0480     partDaughterPdg[curPart].push_back(  211);
0481     partDaughterPdg[curPart].push_back( -321);
0482     curPart++;
0483     
0484     partDaughterPdg[curPart].push_back(-3312); //Omega*- -> Xi+ pi- K+
0485     partDaughterPdg[curPart].push_back( -211);
0486     partDaughterPdg[curPart].push_back(  321);
0487     curPart++;
0488     
0489     partDaughterPdg[curPart].push_back( 3122); //H-dibar -> Lambda Lambda
0490     partDaughterPdg[curPart].push_back( 3122);
0491     curPart++;
0492     
0493     partDaughterPdg[curPart].push_back(  321); //phi -> K+ K-
0494     partDaughterPdg[curPart].push_back( -321);
0495     curPart++;
0496     
0497     partDaughterPdg[curPart].push_back(  211); //rho, omega, phi -> pi+ pi-
0498     partDaughterPdg[curPart].push_back( -211);
0499     curPart++;
0500     
0501     partDaughterPdg[curPart].push_back(   11); //rho, omega, phi -> e+ e-
0502     partDaughterPdg[curPart].push_back(  -11);
0503     curPart++;
0504     
0505     partDaughterPdg[curPart].push_back(   13); //rho, omega, phi -> mu+ mu-
0506     partDaughterPdg[curPart].push_back(  -13);
0507     curPart++;
0508     
0509     partDaughterPdg[curPart].push_back(   11); //gamma -> e+ e-
0510     partDaughterPdg[curPart].push_back(  -11);
0511     curPart++;
0512     
0513     partDaughterPdg[curPart].push_back(   22); //pi0 -> gamma gamma
0514     partDaughterPdg[curPart].push_back(   22);
0515     curPart++;
0516     
0517     partDaughterPdg[curPart].push_back(  111); //eta -> pi0 pi0
0518     partDaughterPdg[curPart].push_back(  111);
0519     partDaughterPdg[curPart].push_back(  111);
0520     curPart++;
0521     
0522     partDaughterPdg[curPart].push_back( 2212); //Delta0 -> p pi-
0523     partDaughterPdg[curPart].push_back( -211);
0524     curPart++;
0525 
0526     partDaughterPdg[curPart].push_back(-2212); //Delta0_bar -> p- pi+
0527     partDaughterPdg[curPart].push_back(  211);
0528     curPart++;
0529 
0530     partDaughterPdg[curPart].push_back( 2212); //Delta++ -> p pi+
0531     partDaughterPdg[curPart].push_back(  211);
0532     curPart++;
0533 
0534     partDaughterPdg[curPart].push_back(-2212); //Delta--_bar -> p- pi-
0535     partDaughterPdg[curPart].push_back( -211);
0536     curPart++;
0537     
0538     partDaughterPdg[curPart].push_back(   11); //JPsi -> e+ e-
0539     partDaughterPdg[curPart].push_back(  -11);
0540     curPart++;
0541     
0542     partDaughterPdg[curPart].push_back(   13); //JPsi -> mu+ mu-
0543     partDaughterPdg[curPart].push_back(  -13);
0544     curPart++;
0545 
0546     partDaughterPdg[curPart].push_back(   2212); //JPsi -> p p-
0547     partDaughterPdg[curPart].push_back(  -2212);
0548     curPart++;
0549 
0550     partDaughterPdg[curPart].push_back(   3122); //JPsi -> Lambda Lambda_bar
0551     partDaughterPdg[curPart].push_back(  -3122);
0552     curPart++;
0553 
0554     partDaughterPdg[curPart].push_back(   3312); //JPsi -> Xi- Xi+
0555     partDaughterPdg[curPart].push_back(  -3312);
0556     curPart++;
0557 
0558     partDaughterPdg[curPart].push_back(   3334); //Psi -> Omega- Omega+
0559     partDaughterPdg[curPart].push_back(  -3334);
0560     curPart++;
0561     
0562     partDaughterPdg[curPart].push_back(  211); //D0 -> pi+ K-
0563     partDaughterPdg[curPart].push_back( -321);
0564     curPart++;
0565     
0566     partDaughterPdg[curPart].push_back( -211); //D0_bar -> K+ pi-
0567     partDaughterPdg[curPart].push_back(  321);
0568     curPart++;
0569     
0570     partDaughterPdg[curPart].push_back(  211); //D0 -> pi+ pi+ pi- K-
0571     partDaughterPdg[curPart].push_back(  211);
0572     partDaughterPdg[curPart].push_back( -211);
0573     partDaughterPdg[curPart].push_back( -321);
0574     curPart++;
0575     
0576     partDaughterPdg[curPart].push_back( -211); //D0_bar -> pi- pi- pi+ K+
0577     partDaughterPdg[curPart].push_back( -211);
0578     partDaughterPdg[curPart].push_back(  211);
0579     partDaughterPdg[curPart].push_back(  321);
0580     curPart++;
0581 
0582     partDaughterPdg[curPart].push_back(  211); //D0 -> pi+ pi-
0583     partDaughterPdg[curPart].push_back( -211);
0584     curPart++;
0585 
0586     partDaughterPdg[curPart].push_back(  211); //D0 -> 2pi+ 2pi-
0587     partDaughterPdg[curPart].push_back(  211);
0588     partDaughterPdg[curPart].push_back( -211);
0589     partDaughterPdg[curPart].push_back( -211);
0590     curPart++;
0591     
0592     partDaughterPdg[curPart].push_back(  310); //D0_bar -> K0 pi+ pi-
0593     partDaughterPdg[curPart].push_back(  211);
0594     partDaughterPdg[curPart].push_back( -211);
0595     curPart++;
0596     
0597     partDaughterPdg[curPart].push_back(  321); //D0_bar -> K+ K-
0598     partDaughterPdg[curPart].push_back( -321);
0599     curPart++;
0600 
0601     partDaughterPdg[curPart].push_back(  321); //D0_bar -> K+ K- K0
0602     partDaughterPdg[curPart].push_back( -321);
0603     partDaughterPdg[curPart].push_back(  310);
0604     curPart++;
0605     
0606     partDaughterPdg[curPart].push_back(  310); //D0_bar -> K0 pi+ pi- pi0
0607     partDaughterPdg[curPart].push_back(  211);
0608     partDaughterPdg[curPart].push_back( -211);
0609     partDaughterPdg[curPart].push_back(  111);
0610     curPart++;
0611     
0612     partDaughterPdg[curPart].push_back( -321); //D+ -> K- pi+ pi+
0613     partDaughterPdg[curPart].push_back(  211);
0614     partDaughterPdg[curPart].push_back(  211);
0615     curPart++;
0616     
0617     partDaughterPdg[curPart].push_back(  321); //D- -> K+ pi- pi-
0618     partDaughterPdg[curPart].push_back( -211);
0619     partDaughterPdg[curPart].push_back( -211);
0620     curPart++;
0621     
0622     partDaughterPdg[curPart].push_back(  310); //D+ -> K0 pi+
0623     partDaughterPdg[curPart].push_back(  211);
0624     curPart++;
0625     
0626     partDaughterPdg[curPart].push_back(  310); //D- -> K0 pi-
0627     partDaughterPdg[curPart].push_back( -211);
0628     curPart++;
0629     
0630     partDaughterPdg[curPart].push_back(  310); //D+ -> K0 pi+ pi+ pi-
0631     partDaughterPdg[curPart].push_back(  211);
0632     partDaughterPdg[curPart].push_back(  211);
0633     partDaughterPdg[curPart].push_back( -211);
0634     curPart++;
0635     
0636     partDaughterPdg[curPart].push_back(  310); //D- -> K0 pi+ pi- pi-
0637     partDaughterPdg[curPart].push_back(  211);
0638     partDaughterPdg[curPart].push_back( -211);
0639     partDaughterPdg[curPart].push_back( -211);
0640     curPart++;
0641     
0642     partDaughterPdg[curPart].push_back(  211); //D+ -> pi+ pi+ pi-
0643     partDaughterPdg[curPart].push_back(  211);
0644     partDaughterPdg[curPart].push_back( -211);
0645     curPart++;
0646     
0647     partDaughterPdg[curPart].push_back(  211); //D- -> pi+ pi- pi-
0648     partDaughterPdg[curPart].push_back( -211);
0649     partDaughterPdg[curPart].push_back( -211);
0650     curPart++;
0651     
0652     partDaughterPdg[curPart].push_back( -321); //Ds+ -> K- K+ pi+
0653     partDaughterPdg[curPart].push_back(  321);
0654     partDaughterPdg[curPart].push_back(  211);
0655     curPart++;
0656     
0657     partDaughterPdg[curPart].push_back(  321); //Ds- -> K+ K- pi-
0658     partDaughterPdg[curPart].push_back( -321);
0659     partDaughterPdg[curPart].push_back( -211);
0660     curPart++;
0661     
0662     partDaughterPdg[curPart].push_back(  310); //Ds+ -> K0 K+
0663     partDaughterPdg[curPart].push_back(  321);
0664     curPart++;
0665     
0666     partDaughterPdg[curPart].push_back(  310); //Ds- -> K0 K-
0667     partDaughterPdg[curPart].push_back( -321);
0668     curPart++;
0669     
0670     partDaughterPdg[curPart].push_back(  310); //Ds+ -> K0 K0 pi+
0671     partDaughterPdg[curPart].push_back(  310);
0672     partDaughterPdg[curPart].push_back(  211);
0673     curPart++;
0674 
0675     partDaughterPdg[curPart].push_back(  310); //Ds- -> K0 K0 pi-
0676     partDaughterPdg[curPart].push_back(  310);
0677     partDaughterPdg[curPart].push_back( -211);
0678     curPart++;
0679     
0680     partDaughterPdg[curPart].push_back(  310); //Ds+ -> K0 K+ pi+ pi-
0681     partDaughterPdg[curPart].push_back(  321);
0682     partDaughterPdg[curPart].push_back(  211);
0683     partDaughterPdg[curPart].push_back( -211);
0684     curPart++;
0685 
0686     partDaughterPdg[curPart].push_back(  310); //Ds- -> K0 K- pi+ pi-
0687     partDaughterPdg[curPart].push_back( -321);
0688     partDaughterPdg[curPart].push_back(  211);
0689     partDaughterPdg[curPart].push_back( -211);
0690     curPart++;
0691     
0692     partDaughterPdg[curPart].push_back(  321); //Ds+ -> K+ pi+ pi-
0693     partDaughterPdg[curPart].push_back(  211);
0694     partDaughterPdg[curPart].push_back( -211);
0695     curPart++;
0696 
0697     partDaughterPdg[curPart].push_back( -321); //Ds- -> K- pi+ pi-
0698     partDaughterPdg[curPart].push_back(  211);
0699     partDaughterPdg[curPart].push_back( -211);
0700     curPart++;
0701     
0702     
0703     partDaughterPdg[curPart].push_back(  211); //Lambdac -> pi+ K- p
0704     partDaughterPdg[curPart].push_back( -321);
0705     partDaughterPdg[curPart].push_back( 2212);
0706     curPart++;
0707     
0708     partDaughterPdg[curPart].push_back( -211); //Lambdac_bar -> pi- K+ p-
0709     partDaughterPdg[curPart].push_back(  321);
0710     partDaughterPdg[curPart].push_back(-2212);
0711     curPart++;
0712     
0713     partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p K0s
0714     partDaughterPdg[curPart].push_back(  310);
0715     curPart++;
0716 
0717     partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar K0s
0718     partDaughterPdg[curPart].push_back(  310);
0719     curPart++;
0720     
0721     partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p K0s pi+ pi-
0722     partDaughterPdg[curPart].push_back(  310);
0723     partDaughterPdg[curPart].push_back(  211);
0724     partDaughterPdg[curPart].push_back( -211);
0725     curPart++;
0726 
0727     partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar K0s pi+ pi-
0728     partDaughterPdg[curPart].push_back(  310);
0729     partDaughterPdg[curPart].push_back(  211);
0730     partDaughterPdg[curPart].push_back( -211);
0731     curPart++;
0732     
0733     partDaughterPdg[curPart].push_back( 3122); //Lambdac -> Lambda pi+
0734     partDaughterPdg[curPart].push_back(  211);
0735     curPart++;
0736 
0737     partDaughterPdg[curPart].push_back(-3122); //Lambdac_bar -> Lambda_bar pi-
0738     partDaughterPdg[curPart].push_back( -211);
0739     curPart++;
0740     
0741     partDaughterPdg[curPart].push_back( 3122); //Lambdac -> Lambda 2pi+ pi-
0742     partDaughterPdg[curPart].push_back(  211);
0743     partDaughterPdg[curPart].push_back(  211);
0744     partDaughterPdg[curPart].push_back( -211);
0745     curPart++;
0746 
0747     partDaughterPdg[curPart].push_back(-3122); //Lambdac_bar -> Lambda_bar 2pi- pi+
0748     partDaughterPdg[curPart].push_back( -211);
0749     partDaughterPdg[curPart].push_back(  211);
0750     partDaughterPdg[curPart].push_back( -211);
0751     curPart++;  
0752     
0753     partDaughterPdg[curPart].push_back( 3312); //Xic0 -> Xi- 2pi+ pi-
0754     partDaughterPdg[curPart].push_back(  211);
0755     partDaughterPdg[curPart].push_back(  211);
0756     partDaughterPdg[curPart].push_back( -211);
0757     curPart++;
0758     
0759     partDaughterPdg[curPart].push_back(-3312); //Xic0_bar -> Xi+ 2pi- pi+
0760     partDaughterPdg[curPart].push_back(  211);
0761     partDaughterPdg[curPart].push_back( -211);
0762     partDaughterPdg[curPart].push_back( -211);
0763     curPart++;
0764     
0765     partDaughterPdg[curPart].push_back( 2212); //Lambdac -> p pi+ pi-
0766     partDaughterPdg[curPart].push_back(  211);
0767     partDaughterPdg[curPart].push_back( -211);
0768     curPart++;
0769 
0770     partDaughterPdg[curPart].push_back(-2212); //Lambdac_bar -> p_bar pi+ pi-
0771     partDaughterPdg[curPart].push_back(  211);
0772     partDaughterPdg[curPart].push_back( -211);
0773     curPart++;
0774     
0775     
0776     partDaughterPdg[curPart].push_back(  411); //D*0 -> D+ pi-
0777     partDaughterPdg[curPart].push_back( -211);
0778     curPart++;
0779     
0780     partDaughterPdg[curPart].push_back( -411); //D*0_bar -> D- pi+
0781     partDaughterPdg[curPart].push_back(  211);
0782     curPart++;
0783     
0784     partDaughterPdg[curPart].push_back(  421); //D*+ -> D0 pi+
0785     partDaughterPdg[curPart].push_back(  211);
0786     curPart++;
0787     
0788     partDaughterPdg[curPart].push_back( -421); //D*- -> D0_bar pi-
0789     partDaughterPdg[curPart].push_back( -211);
0790     curPart++;
0791     
0792     partDaughterPdg[curPart].push_back(  429); //D*+ -> D04 pi+
0793     partDaughterPdg[curPart].push_back(  211);
0794     curPart++;
0795     
0796     partDaughterPdg[curPart].push_back( -429); //D*- -> D04_bar pi-
0797     partDaughterPdg[curPart].push_back( -211);
0798     curPart++;
0799 
0800     partDaughterPdg[curPart].push_back(  428); //D*0 -> D04 pi0
0801     partDaughterPdg[curPart].push_back(  111);
0802     curPart++;
0803     
0804     partDaughterPdg[curPart].push_back(   11); //B -> e+ e-
0805     partDaughterPdg[curPart].push_back(  -11);
0806     curPart++;
0807     
0808     partDaughterPdg[curPart].push_back(   13); //B -> mu+ mu-
0809     partDaughterPdg[curPart].push_back(  -13);
0810     curPart++;
0811     
0812     partDaughterPdg[curPart].push_back( -421); //B+ -> D0_bar pi+
0813     partDaughterPdg[curPart].push_back(  211);
0814     curPart++;
0815     
0816     partDaughterPdg[curPart].push_back(  421); //B- -> D0 pi-
0817     partDaughterPdg[curPart].push_back( -211);
0818     curPart++;
0819     
0820     partDaughterPdg[curPart].push_back( -421); //B+ -> D0_bar K+
0821     partDaughterPdg[curPart].push_back(  321);
0822     curPart++;
0823     
0824     partDaughterPdg[curPart].push_back(  421); //B- -> D0 K-
0825     partDaughterPdg[curPart].push_back( -321);
0826     curPart++;
0827 
0828     partDaughterPdg[curPart].push_back( -411); //B0 -> D- pi+
0829     partDaughterPdg[curPart].push_back(  211);
0830     curPart++;
0831     
0832     partDaughterPdg[curPart].push_back(  411); //B0_bar -> D+ pi-
0833     partDaughterPdg[curPart].push_back( -211);
0834     curPart++;
0835     
0836     partDaughterPdg[curPart].push_back( -411); //B0 -> D0_bar K+
0837     partDaughterPdg[curPart].push_back(  321);
0838     curPart++;
0839     
0840     partDaughterPdg[curPart].push_back(  411); //B0_bar -> D0 K-
0841     partDaughterPdg[curPart].push_back( -321);
0842     curPart++;
0843 
0844     partDaughterPdg[curPart].push_back( 3122); //H0-> Lambda pi- p
0845     partDaughterPdg[curPart].push_back( -211);
0846     partDaughterPdg[curPart].push_back( 2212);
0847     curPart++;
0848     
0849     partDaughterPdg[curPart].push_back( 1000010020); //LambdaN -> d+ pi-
0850     partDaughterPdg[curPart].push_back( -211);
0851     curPart++;
0852 
0853     partDaughterPdg[curPart].push_back(-1000010020); //LambdaN_bar-> d- pi+
0854     partDaughterPdg[curPart].push_back(  211);
0855     curPart++;
0856 
0857     partDaughterPdg[curPart].push_back( 1000010030); //LambdaNN -> t+ pi-
0858     partDaughterPdg[curPart].push_back( -211);
0859     curPart++;
0860 
0861     partDaughterPdg[curPart].push_back(-1000010030); //LambdaNN_bar -> t- pi+
0862     partDaughterPdg[curPart].push_back(  211);
0863     curPart++;
0864     
0865     partDaughterPdg[curPart].push_back( 1000020030); //H3Lambda -> He3+ pi-
0866     partDaughterPdg[curPart].push_back( -211);
0867     curPart++;
0868 
0869     partDaughterPdg[curPart].push_back(-1000020030); //H3Lambda_bar -> He3- pi+
0870     partDaughterPdg[curPart].push_back(  211);
0871     curPart++;
0872 
0873     partDaughterPdg[curPart].push_back( 1000020040); //H4Lambda -> He4+ pi-
0874     partDaughterPdg[curPart].push_back( -211);
0875     curPart++;
0876 
0877     partDaughterPdg[curPart].push_back(-1000020040); //H4Lambda_bar -> He4- pi+
0878     partDaughterPdg[curPart].push_back(  211);
0879     curPart++;
0880     
0881     partDaughterPdg[curPart].push_back( 1000020030); //He4Lambda -> He3+ p+ pi-
0882     partDaughterPdg[curPart].push_back( 2212);
0883     partDaughterPdg[curPart].push_back( -211);
0884     curPart++;
0885 
0886     partDaughterPdg[curPart].push_back(-1000020030); //He4Lambda_bar -> He3- p- pi+
0887     partDaughterPdg[curPart].push_back(-2212);
0888     partDaughterPdg[curPart].push_back(  211);
0889     curPart++;
0890     
0891     partDaughterPdg[curPart].push_back( 1000020040); //He5Lambda -> He4+ p+ pi-
0892     partDaughterPdg[curPart].push_back( 2212);
0893     partDaughterPdg[curPart].push_back( -211);
0894     curPart++;
0895 
0896     partDaughterPdg[curPart].push_back(-1000020040); //He5Lambda_bar -> He4- p- pi+
0897     partDaughterPdg[curPart].push_back(-2212);
0898     partDaughterPdg[curPart].push_back(  211);
0899     curPart++;
0900     
0901     partDaughterPdg[curPart].push_back( 3004); //LLn -> H3Lambda pi-
0902     partDaughterPdg[curPart].push_back( -211);
0903     curPart++;
0904     
0905     partDaughterPdg[curPart].push_back( 3006); //H4LL -> He4Lambda pi-
0906     partDaughterPdg[curPart].push_back( -211);
0907     curPart++;
0908 
0909     partDaughterPdg[curPart].push_back( 3004); //H4LL -> H3Lambda p pi-
0910     partDaughterPdg[curPart].push_back( 2212);
0911     partDaughterPdg[curPart].push_back( -211);
0912     curPart++;
0913 
0914     partDaughterPdg[curPart].push_back( 3007); //H5LL -> He5Lambda pi-
0915     partDaughterPdg[curPart].push_back( -211);
0916     curPart++;
0917     
0918     partDaughterPdg[curPart].push_back( 3007); //He6LL -> He5Lambda p pi-
0919     partDaughterPdg[curPart].push_back( 2212);
0920     partDaughterPdg[curPart].push_back( -211);
0921     curPart++;
0922     
0923     partDaughterPdg[curPart].push_back(      13); // pi- -> mu- + nu_mu_bar
0924     partDaughterPdg[curPart].push_back(-7000014); //
0925     curPart++;
0926     
0927     partDaughterPdg[curPart].push_back(    -211); // nu_mu_bar <- pi- - mu-
0928     partDaughterPdg[curPart].push_back(      13); //
0929     curPart++;
0930     
0931     partDaughterPdg[curPart].push_back(     -13); // pi+ -> mu+ + nu_mu
0932     partDaughterPdg[curPart].push_back( 7000014); //
0933     curPart++;
0934     
0935     partDaughterPdg[curPart].push_back(    211); // nu_mu <- pi+ - mu+
0936     partDaughterPdg[curPart].push_back(    -13); //
0937     curPart++;
0938     
0939     partDaughterPdg[curPart].push_back(      13); // K- -> mu- + nu_mu_bar
0940     partDaughterPdg[curPart].push_back(-8000014); //
0941     curPart++;
0942     
0943     partDaughterPdg[curPart].push_back(    -321); // nu_mu_bar <- K- - mu-
0944     partDaughterPdg[curPart].push_back(      13); //
0945     curPart++;
0946     
0947     partDaughterPdg[curPart].push_back(     -13); // K+ -> mu+ + nu_mu
0948     partDaughterPdg[curPart].push_back( 8000014); //
0949     curPart++;
0950     
0951     partDaughterPdg[curPart].push_back(     321); // nu_mu <- K+ - mu+
0952     partDaughterPdg[curPart].push_back(     -13); //
0953     curPart++;
0954     
0955     partDaughterPdg[curPart].push_back(     -211); // Sigma- -> pi- + n
0956     partDaughterPdg[curPart].push_back(  7002112); //
0957     curPart++;
0958     
0959     partDaughterPdg[curPart].push_back(     3112); // n <- Sigma- - pi-
0960     partDaughterPdg[curPart].push_back(     -211); //
0961     curPart++;
0962     
0963     partDaughterPdg[curPart].push_back(       211); // Sigma-b -> pi+ + nb
0964     partDaughterPdg[curPart].push_back(  -7002112); //
0965     curPart++;
0966     
0967     partDaughterPdg[curPart].push_back(     -3112); // nb <- Sigma-b - pi+
0968     partDaughterPdg[curPart].push_back(       211); //
0969     curPart++;
0970     
0971     partDaughterPdg[curPart].push_back(      -211); // Sigma+b -> pi- + nb
0972     partDaughterPdg[curPart].push_back(  -8002112); //
0973     curPart++;
0974     
0975     partDaughterPdg[curPart].push_back(    -3222); // nb <- Sigma+b - pi-
0976     partDaughterPdg[curPart].push_back(     -211); //
0977     curPart++;
0978     
0979     partDaughterPdg[curPart].push_back(       211); // Sigma+ -> pi+ + n
0980     partDaughterPdg[curPart].push_back(   8002112); //
0981     curPart++;
0982     
0983     partDaughterPdg[curPart].push_back(      3222); // n <- Sigma+ - pi+
0984     partDaughterPdg[curPart].push_back(       211); //
0985     curPart++;
0986     
0987     partDaughterPdg[curPart].push_back(      -211); // Xi- -> pi- + lam
0988     partDaughterPdg[curPart].push_back(   7003122); //
0989     curPart++;
0990     
0991     partDaughterPdg[curPart].push_back(      3312); // lam <- Xi- - pi-
0992     partDaughterPdg[curPart].push_back(      -211); //
0993     curPart++;
0994     
0995     partDaughterPdg[curPart].push_back(       211); // Xi-b -> pi+ + lam_b
0996     partDaughterPdg[curPart].push_back(  -7003122); //
0997     curPart++;
0998     
0999     partDaughterPdg[curPart].push_back(     -3312); // lam_b <- Xi-b - pi+
1000     partDaughterPdg[curPart].push_back(       211); //
1001     curPart++;
1002     
1003     partDaughterPdg[curPart].push_back(      -211); // Om- -> pi- + Xi0
1004     partDaughterPdg[curPart].push_back(   7003322); //
1005     curPart++;
1006     
1007     partDaughterPdg[curPart].push_back(      3334); // Xi0 <- Om- - pi-
1008     partDaughterPdg[curPart].push_back(      -211); //
1009     curPart++;
1010     
1011     partDaughterPdg[curPart].push_back(       211); // Om-b -> pi+ + Xi0_b
1012     partDaughterPdg[curPart].push_back(  -7003322); //
1013     curPart++;
1014     
1015     partDaughterPdg[curPart].push_back(     -3334); // Xi0_b <- Om-b - pi+
1016     partDaughterPdg[curPart].push_back(       211); //
1017     curPart++;
1018     
1019     partDaughterPdg[curPart].push_back(      -211); // K- -> pi- + Pi0_b
1020     partDaughterPdg[curPart].push_back(  -9000111); //
1021     curPart++;
1022     
1023     partDaughterPdg[curPart].push_back(      -321); // Pi0_b <- K- - pi-
1024     partDaughterPdg[curPart].push_back(      -211); //
1025     curPart++;
1026     
1027     partDaughterPdg[curPart].push_back(       211); // K+ -> pi+ + Pi0
1028     partDaughterPdg[curPart].push_back(   9000111); //
1029     curPart++;
1030     
1031     partDaughterPdg[curPart].push_back(       321); // Pi0 <- K+ - pi+
1032     partDaughterPdg[curPart].push_back(       211); //
1033     curPart++;
1034     
1035     partDaughterPdg[curPart].push_back(      -321); // Om- -> K- + Lam
1036     partDaughterPdg[curPart].push_back(   8003122); //
1037     curPart++;
1038     
1039     partDaughterPdg[curPart].push_back(      3334); // Lam <- Om- - K-
1040     partDaughterPdg[curPart].push_back(      -321); //
1041     curPart++;
1042     
1043     partDaughterPdg[curPart].push_back(       321); // Om+ -> K+ + Lam_b
1044     partDaughterPdg[curPart].push_back(  -8003122); //
1045     curPart++;
1046     
1047     partDaughterPdg[curPart].push_back(     -3334); // Lam_b <- Om+ - K+
1048     partDaughterPdg[curPart].push_back(       321); //
1049     curPart++;
1050     
1051     partDaughterPdg[curPart].push_back(     -2212); // Si+b -> p_b + Pi0
1052     partDaughterPdg[curPart].push_back(  -8000111); //
1053     curPart++;
1054     
1055     partDaughterPdg[curPart].push_back(     -3222); // Pi0 <- Si+b - p_b
1056     partDaughterPdg[curPart].push_back(     -2212); //
1057     curPart++;
1058     
1059     partDaughterPdg[curPart].push_back(      2212); // Si+ -> p + Pi0
1060     partDaughterPdg[curPart].push_back(   8000111); //
1061     curPart++;
1062     
1063     partDaughterPdg[curPart].push_back(      3222); // Pi0 <- Si+ - p
1064     partDaughterPdg[curPart].push_back(      2212); //
1065     curPart++;
1066     
1067     for(int iP=0; iP<nParticles; iP++)
1068     {
1069       partPDG[iP] = particleInfo[iP].PDG();
1070       partName[iP] = particleInfo[iP].Name();
1071       partTitle[iP] = particleInfo[iP].Title();
1072       partMHistoMin[iP] = particleInfo[iP].HistoMin();
1073       partMHistoMax[iP] = particleInfo[iP].HistoMax();
1074       partMaxMult[iP] = mPartMaxMult[iP];
1075       partMass[iP] = particleInfo[iP].Mass();
1076       partLifeTime[iP] = particleInfo[iP].LifeTime();
1077       partCharge[iP] = particleInfo[iP].Charge();
1078       partMassSigma[iP] = particleInfo[iP].MassSigma();
1079     }
1080 
1081     for(int iP=0; iP<nParticles; iP++)
1082     {
1083       AddCounter(partName[iP],           partTitle[iP] + "     ");
1084       AddCounter(partName[iP] + "_prim", partTitle[iP] + " Prim");
1085       AddCounter(partName[iP] + "_sec",  partTitle[iP] + " Sec ");
1086     }
1087 
1088     for(int iP=0; iP<nParticles; iP++)
1089       fPdgToIndex[particleInfo[iP].PDG()] = iP;
1090   }
1091 
1092   virtual ~KFPartEfficiencies(){};
1093 
1094   /** \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". */
1095   int GetParticleIndex(int pdg)
1096   {
1097     std::map<int, int>::iterator it;
1098     it=fPdgToIndex.find(pdg);
1099     if(it != fPdgToIndex.end()) return it->second;
1100     else return -1;
1101   }
1102 
1103   /** \brief Returns the map between PDG codes and index of the decay in the scheme of the KF Particle Finder. */
1104   std::map<int,int> GetPdgToIndexMap() const { return fPdgToIndex; } 
1105   
1106   virtual void AddCounter(std::string shortname, std::string name)
1107   {
1108     /** Adds a counter with the name defined by "name" to all counter
1109      ** objects. For easiness of operation with counters, a shortname is assigned
1110      ** to each of them and the corresponding entry in the map indices is done.
1111      ** \param[in] shortname - a short name of the counter for fast and easy access to its index
1112      ** \param[in] name - name of the counter which is added to each counter object.
1113      **/
1114     indices[shortname] = names.size();
1115     names.push_back(name);
1116 
1117     ratio_reco1.AddCounter();
1118     ratio_reco2.AddCounter();
1119     ratio_reco3.AddCounter();
1120 
1121     mc1.AddCounter();
1122     mc2.AddCounter();
1123     mc3.AddCounter();
1124     
1125     reco.AddCounter();
1126 
1127     ratio_ghost.AddCounter();
1128     ratio_bg.AddCounter();
1129     ratio_clone.AddCounter();
1130     ghost.AddCounter();
1131     bg.AddCounter();
1132     clone.AddCounter();
1133   };
1134 
1135   /** \brief Operator to add efficiency table from object "a" to the current object. Returns the current object after addition. */
1136   KFPartEfficiencies& operator+=(KFPartEfficiencies& a){
1137     mc1 += a.mc1; mc2 += a.mc2; mc3 += a.mc3; reco += a.reco;
1138     ghost += a.ghost; bg += a.bg; clone += a.clone;
1139     return *this;
1140   };
1141   
1142   /** \brief Function to calculate efficiency after all counters are set. If the counters are modified the function should be called again. */
1143   void CalcEff(){
1144     ratio_reco1 = reco/mc1;
1145     ratio_reco2 = reco/mc2;
1146     ratio_reco3 = reco/mc3;
1147 
1148     KFMCCounter<int> allReco = reco + ghost + bg;
1149     ratio_ghost = ghost/allReco;
1150     ratio_bg  = bg/allReco;
1151     ratio_clone  = clone/allReco;
1152   };
1153   
1154   void Inc(bool isReco, int nClones, bool isMC1, bool isMC2, bool isMC3, std::string name)
1155   {
1156     /** Increases counters by one, if the corresponding boolean variable is "true".
1157      ** \param[in] isReco - "true" if particle is reconstructed
1158      ** \param[in] nClones - number of double reconstructed particles for the given MC particle,
1159      ** will be added to the "clone" counters
1160      ** \param[in] isMC1 - "true" if particle is reconstructable in 4pi, mc1 is increased
1161      ** \param[in] isMC2 - "true" if all daughters are reconstructable, mc2 is increased
1162      ** \param[in] isMC3 - "true" if all daughters are reconstructed, mc3 is increased
1163      ** \param[in] name  - "shortname" of the set of counters, which should be increased
1164      **/
1165     const int index = indices[name];
1166     
1167     if(isMC1) mc1.counters[index]++;
1168     if(isMC2) mc2.counters[index]++;
1169     if(isMC3) mc3.counters[index]++;
1170     
1171     if(isReco) reco.counters[index]++;
1172     if(nClones > 0)
1173       clone.counters[index] += nClones;
1174   };
1175 
1176   void IncReco(bool isGhost, bool isBg, std::string name)
1177   {
1178     /** Increases counters by one, if the corresponding boolean variable is "true".
1179      ** \param[in] isGhost - "true" if ghost is added
1180      ** \param[in] isBg - "true" if physics background is added
1181      ** \param[in] name  - "shortname" of the set of counters, which should be increased
1182      **/
1183     const int index = indices[name];
1184 
1185     if (isGhost) ghost.     counters[index]++;
1186     if (isBg)    bg.counters[index]++;
1187   };
1188 
1189   /** \brief Prints the efficiency table on the screen. */
1190   void PrintEff(){
1191     std::ios_base::fmtflags original_flags = std::cout.flags();
1192     std::cout.setf(std::ios::fixed);
1193     std::cout.setf(std::ios::showpoint);
1194     std::cout.precision(3);
1195     std::cout << "Particle             : "
1196          <<        "   Eff 4pi "
1197          <<" / "<< " Eff accept"
1198          <<" / "<< "  Eff KFPF "
1199          <<" / "<< "     Ghost "
1200          <<" / "<< "    BackGr "
1201          <<" / "<< "   N Ghost "
1202          <<" / "<< "  N BackGr "
1203          <<" / "<< "    N Reco "
1204          <<" / "<< "   N Clone "
1205          <<" | "<< "  N MC 4pi " 
1206          <<" | "<< "N MC accept" 
1207          <<" | "<< " N MC KFPF "  << std::endl;
1208     
1209     int NCounters = mc1.NCounters;
1210     for (int iC = 0; iC < NCounters; iC++){
1211         std::cout << names[iC]
1212              << "  : " << std::setw(10) << ratio_reco1.counters[iC]    
1213              << "  / " << std::setw(10) << ratio_reco2.counters[iC]
1214              << "  / " << std::setw(10) << ratio_reco3.counters[iC]
1215              << "  / " << std::setw(10) << ratio_ghost.counters[iC]  // particles w\o MCParticle
1216              << "  / " << std::setw(10) << ratio_bg.counters[iC]     // particles with incorrect MCParticle
1217              << "  / " << std::setw(10) << ghost.counters[iC]
1218              << "  / " << std::setw(10) << bg.counters[iC]
1219              << "  / " << std::setw(10) << reco.counters[iC]
1220              << "  / " << std::setw(10) << clone.counters[iC]
1221              << "  | " << std::setw(10) << mc1.counters[iC] 
1222              << "  | " << std::setw(10) << mc2.counters[iC]
1223              << "  | " << std::setw(10) << mc3.counters[iC]  << std::endl;
1224     }
1225     std::cout.flags(original_flags); 
1226   };
1227   
1228   float GetTotal4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay]; }  ///< Returns efficiency in 4pi for decay "iDecay".
1229   float GetTotalKFPEfficiency(int iDecay) { return ratio_reco3.counters[3*iDecay]; }  ///< Returns efficiency of KF Particle Finder method (cuts) for decay "iDecay".
1230   float GetPrimary4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay+1]; } ///< Returns efficiency in 4pi for decay "iDecay" for primary particles.
1231   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.
1232   float GetSecondary4piEfficiency(int iDecay) { return ratio_reco1.counters[3*iDecay+2]; } ///< Returns efficiency in 4pi for decay "iDecay" for secondary particles.
1233   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.
1234   
1235   /** \brief Operator to write efficiencies to file. */
1236   friend std::fstream & operator<<(std::fstream &strm, KFPartEfficiencies &a) 
1237   {
1238     strm << a.ratio_reco1;
1239     strm << a.ratio_reco2;
1240     strm << a.ratio_reco3;
1241     strm << a.mc1;
1242     strm << a.mc2;
1243     strm << a.mc3;
1244     strm << a.reco;
1245     strm << a.ratio_ghost;
1246     strm << a.ratio_bg;
1247     strm << a.ratio_clone;
1248     strm << a.ghost;
1249     strm << a.bg;
1250     strm << a.clone;
1251 
1252     return strm;
1253   }
1254   /** \brief Operator to read efficiencies from file. */
1255   friend std::fstream & operator>>(std::fstream &strm, KFPartEfficiencies &a)
1256   {
1257     strm >> a.ratio_reco1;
1258     strm >> a.ratio_reco2;
1259     strm >> a.ratio_reco3;
1260     strm >> a.mc1;
1261     strm >> a.mc2;
1262     strm >> a.mc3;
1263     strm >> a.reco;
1264     strm >> a.ratio_ghost;
1265     strm >> a.ratio_bg;
1266     strm >> a.ratio_clone;
1267     strm >> a.ghost;
1268     strm >> a.bg;
1269     strm >> a.clone;
1270 
1271     return strm;
1272   }
1273   /** \brief Adds efficiency from the file with the name defined by "fileName" to the current objects. */
1274   void AddFromFile(std::string fileName)
1275   {
1276     std::fstream file(fileName.data(),std::fstream::in);
1277     file >> *this;
1278   }
1279   
1280   int GetNDaughters(int iParticle) const { return partDaughterPdg[iParticle].size(); } ///< Returns number of daughter particles for the decay with index "iParticle".
1281   /** \brief Returns the PDG code of the daughter "iDaughter" from the decay with index "iParticle". */
1282   int GetDaughterPDG(int iParticle, int iDaughter) const { return partDaughterPdg[iParticle][iDaughter]; }
1283   
1284   float GetMass(int iParticle) const { return partMass[iParticle]; } ///< Returns the table mass of the decay with index "iParticle".
1285   float GetMassSigma(int iParticle) const { return partMassSigma[iParticle]; } ///< Returns expected width of the mass peak of the decay with index "iParticle".
1286   
1287   static const int nParticles = 194;                     ///< Number of particles.
1288   static const int fFirstHypernucleusIndex = 114;        ///< Index of the first hypernuclei in the list.
1289   static const int fLastHypernucleusIndex = 130;         ///< Index of the last hypernuclei in the list.
1290   static const int fFirstMissingMassParticleIndex = 131; ///< Index of the first decay reconstructed by the missing mass method.
1291   static const int fLastMissingMassParticleIndex = 166;  ///< Index of the last decay reconstructed by the missing mass method.
1292   static const int fFirstStableParticleIndex = 167;      ///< Index of the first stable particle in the list.
1293   static const int fLastStableParticleIndex = 184;       ///< Index of the last stable particle in the list.
1294   
1295   int partPDG[nParticles];                        ///< Array of PDG codes assigned to the decays.
1296   std::string partName[nParticles];               ///< Array of names of the decay in the file with histograms.
1297   std::string partTitle[nParticles];              ///< Array of names of the decay in the output table with efficiency.
1298   std::vector<std::vector<int> > partDaughterPdg; ///< Array with vectors of daughter particles for each decay.
1299   float partMHistoMin[nParticles];                ///< Array with lower boundary in the mass histograms for each decay.
1300   float partMHistoMax[nParticles];                ///< Array with upper boundary in the mass histograms for each decay.
1301   int partMaxMult[nParticles];                    ///< Array with upper boundary in the multiplicity histograms of each decay.
1302   float partMass[nParticles];                     ///< Array with table masses of each decay.
1303   float partLifeTime[nParticles];                 ///< Array with lifetimes in seconds of each decay.
1304   int partCharge[nParticles];                     ///< Array with charge of each particle specie in units of the elementary charge.
1305   float partMassSigma[nParticles];                ///< Array with expected width of mass peaks used for the side band method.
1306 
1307   
1308  private:
1309   std::vector<std::string> names;     ///< Names of the counters. The same for all counters objects.
1310   std::map<std::string, int> indices; ///< Map between the counter index and its short name.
1311 
1312   std::map<int, int> fPdgToIndex;     ///< The map between PDG code assigned to the decay and index in the decay list.
1313 
1314   KFMCCounter<double> ratio_reco1;    ///< Efficiency in 4 pi for all decays.
1315   KFMCCounter<double> ratio_reco2;    ///< Efficiency normalised on the particles with all daughters reconstructable for all decays.
1316   KFMCCounter<double> ratio_reco3;    ///< Efficiency normalised on the particles with all daughters reconstructed for all decays.
1317 
1318   KFMCCounter<int> mc1;               ///< Counters of the Monte Carlo particles of all species.
1319   KFMCCounter<int> mc2;               ///< Counters of the Monte Carlo particles with all daughters reconstructable for all species.
1320   KFMCCounter<int> mc3;               ///< Counters of the Monte Carlo particles with all daughters found for all species.
1321 
1322   KFMCCounter<int> reco;              ///< Counters of the reconstructed particles for all species.
1323 
1324   KFMCCounter<double> ratio_ghost;    ///< Ratio of the ghost candidates to the total number of candidates for all species.
1325   KFMCCounter<double> ratio_bg;       ///< Ratio of the physics background candidates to the total number of candidates for all species.
1326   KFMCCounter<double> ratio_clone;    ///< Ratio of double reconstructed particles to the total number of signal candidates for all species.
1327 
1328   KFMCCounter<int> ghost;             ///< Counters of the ghost candidates for all species.
1329   KFMCCounter<int> bg;                ///< Counters of the physics background candidates for all species.
1330   KFMCCounter<int> clone;             ///< Counters of the double reconstructed particles for all species.
1331   
1332 #ifndef KFParticleStandalone
1333   ClassDef( KFPartEfficiencies, 1 )
1334 #endif
1335 };
1336 
1337 #endif