// @(#)$Id: hphysicsconstants.cc,v 1.9 2009-07-03 12:10:14 halo Exp $
//*-- Author : Dan Magestro
//*-- Created: 03/09/01
//*-- Modified : 24/02/03 by Marcin Jaskula
// new ids for fakes, get rid of TObject
//*-- Last modified: 24/02/03
//*-- Modified : 03/11/06 by Alexander Belyaev
// leptonCharge, baryonCharge and strangeness are added
//_HADES_CLASS_DESCRIPTION
////////////////////////////////////////////////////////////////////////////////
//
// HPhysicsConstants
//
// This class contains look-up information for particle properties. The
// design is based on a scheme written by Marios Kargalis in his PData.h
// class for Pluto++. See PStdData.h class documentation for references.
//
// Note: Particle Id's are reserved for 'pion' (44) and 'kaon' (48), which
// can be either + or -. This is useful for graphical cuts on all
// particles regardless of sign; see HCutHadronId.
//
// BEGIN_HTMLFor more information, see the PhyAna documentation. END_HTML
//
////////////////////////////////////////////////////////////////////////////////
#include "hphysicsconstants.h"
#include "TError.h"
#include
ClassImp(HPhysicsConstants)
// -----------------------------------------------------------------------------
const Int_t nPart = 53; // number of particles stored permanently
// -----------------------------------------------------------------------------
// particle naming convention (adopted from Pluto++)
const Char_t *cName[nPart] = {
/* 0: dummy */ "dummy", /* 1: Photon */ "g",
/* 2: Positron */ "e+", /* 3: Electron */ "e-",
/* 4: Neutrino */ "nu", /* 5: mu+ */ "mu+",
/* 6: mu- */ "mu-", /* 7: pi0 */ "pi0",
/* 8: pi+ */ "pi+", /* 9: pi- */ "pi-",
/*10: K0_long */ "K0L", /*11: K+ */ "K+",
/*12: K- */ "K-", /*13: Neutron */ "n",
/*14: Proton */ "p", /*15: Antiproton*/ "anti_p",
/*16: K0_short */ "K0S", /*17: Eta */ "eta",
/*18: Lambda */ "Lambda", /*19: Sigma+ */ "Sigma+",
/*20: Sigma0 */ "Sigma0", /*21: Sigma- */ "Sigma-",
/*22: Xi0 */ "Xi0", /*23: Xi- */ "Xi-",
/*24: Omega- */ "Omega", /*25: Antineutrn*/ "anti_n",
/*26: Antilambda*/ "anti_Lambda",/*27: Antisigma-*/ "anti_Sigma-",
/*28: Antisigma0*/ "anti_Sigma0",/*29: Antisigma+*/ "anti_Sigma+",
/*30: Antixi0 */ "anti_Xi0", /*31: Antixi+ */ "anti_Xi+",
/*32: Antiomega+*/ "anti_Omega+",/*33: TC */ "TC",
/*34: Delta0 */ "D0", /*35: Delta++ */ "D++",
/*36: Delta+ */ "D+", /*37: Delta- */ "D-",
/*38: NP11+ */ "NP11+", /*39: ND13+ */ "ND13+",
/*40: NS11+ */ "NS11+", /*41: rho0 */ "rho0",
/*42: rho+ */ "rho+", /*43: rho- */ "rho-",
/*44: PION */ "pion", /*45: Deuteron */ "d",
/*46: Tritium */ "t", /*47: Alpha */ "alpha",
/*48: KAON */ "kaon", /*49: He3 */ "He3",
/*50: dimuon */ "dimuon", /*51: dilepton */ "dilepton",
/*52: omega */ "w"
};
Double_t fMass[nPart]={
/* 0: dummy */ 0.0, /* 1: Photon */ 0.0,
/* 2: Positron */ 0.51099906, /* 3: Electron */ 0.51099906,
/* 4: Neutrino */ 0.0, /* 5: mu+ */ 105.658389,
/* 6: mu- */ 105.658389, /* 7: pi0 */ 134.9764,
/* 8: pi+ */ 139.56995, /* 9: pi- */ 139.56995,
/*10: K0_long */ 497.672, /*11: K+ */ 493.677,
/*12: K- */ 493.677, /*13: Neutron */ 939.56563,
/*14: Proton */ 938.27231, /*15: Antiproton*/ 938.27231,
/*16: K0_short */ 497.672, /*17: Eta */ 547.45,
/*18: Lambda */ 1115.684, /*19: Sigma+ */ 1189.37,
/*20: Sigma0 */ 1192.55, /*21: Sigma- */ 1197.436,
/*22: Xi0 */ 1314.9, /*23: Xi- */ 1321.32,
/*24: Omega- */ 1672.45, /*25: Antineutrn*/ 939.56563,
/*26: Antilambda*/ 1115.684, /*27: Antisigma-*/ 1189.37,
/*28: Antisigma0*/ 1192.55, /*29: Antisigma+*/ 1197.436,
/*30: Antixi0 */ 1314.9, /*31: Antixi+ */ 1321.32,
/*32: Antiomega+*/ 1672.45, /*33: TC */ 0.0,
/*34: Delta0 */ 1232.0, /*35: Delta++ */ 1232.0,
/*36: Delta+ */ 1232.0, /*37: Delta- */ 1232.0,
/*38: NP11+ */ 1440.0, /*39: ND13+ */ 1520.0,
/*40: NS11+ */ 1535.0, /*41: rho0 */ 769.9,
/*42: rho+ */ 769.9, /*43: rho- */ 769.9,
/*44: PION */ 139.56995, /*45: Deuteron */ 1875.613,
/*46: Tritium */ 2809.25, /*47: Alpha */ 3727.417,
/*48: KAON */ 493.677, /*49: He3 */ 2809.23,
/*50: dimuon */ 211.31678, /*51: dilepton */ 1.022,
/*52: omega */ 781.94
};
// Particle charge
Int_t fCharge[nPart]={
/* 0: dummy */ 0, /* 1: Photon */ 0,
/* 2: Positron */ 1, /* 3: Electron */ -1,
/* 4: Neutrino */ 0, /* 5: mu+ */ 1,
/* 6: mu- */ -1, /* 7: pi0 */ 0,
/* 8: pi+ */ 1, /* 9: pi- */ -1,
/*10: K0_long */ 0, /*11: K+ */ 1,
/*12: K- */ -1, /*13: Neutron */ 0,
/*14: Proton */ 1, /*15: Antiproton*/ -1,
/*16: K0_short */ 0, /*17: eta */ 0,
/*18: Lambda */ 0, /*19: Sigma+ */ 1,
/*20: Sigma0 */ 0, /*21: Sigma- */ -1,
/*22: Xi0 */ 0, /*23: Xi- */ -1,
/*24: Omega- */ -1, /*25: Antineutrn*/ 0,
/*26: Antilambda*/ 0, /*27: Antisigma-*/ -1,
/*28: Antisigma0*/ 0, /*29: Antisigma+*/ +1,
/*30: Antixi0 */ 0, /*31: Antixi+ */ 1,
/*32: Antiomega+*/ 1, /*33: TC */ 0,
/*34: Delta0 */ 0, /*35: Delta++ */ 2,
/*36: Delta+ */ 1, /*37: Delta- */ -1,
/*38: NP11+ */ 1, /*39: ND13+ */ 1,
/*40: NS11+ */ 1, /*41: rho0 */ 0,
/*42: rho+ */ 1, /*43: rho- */ -1,
/*44: PION */ 0, /*45: Deuteron */ 1,
/*46: Tritium */ 1, /*47: Alpha */ 2,
/*48: KAON */ 0, /*49: He3 */ 2,
/*50: dimuon */ 0, /*51: dilepton */ 0,
/*52: omega */ 0
};
// Particle lepton charge
Int_t fLeptonCharge[nPart]={
/* 0: dummy */ 0, /* 1: Photon */ 0,
/* 2: Positron */ -1, /* 3: Electron */ +1,
/* 4: Neutrino */ +1, /* 5: mu+ */ -1,
/* 6: mu- */ +1, /* 7: pi0 */ 0,
/* 8: pi+ */ 0, /* 9: pi- */ 0,
/*10: K0_long */ 0, /*11: K+ */ 0,
/*12: K- */ 0, /*13: Neutron */ 0,
/*14: Proton */ 0, /*15: Antiproton*/ 0,
/*16: K0_short */ 0, /*17: eta */ 0,
/*18: Lambda */ 0, /*19: Sigma+ */ 0,
/*20: Sigma0 */ 0, /*21: Sigma- */ 0,
/*22: Xi0 */ 0, /*23: Xi- */ 0,
/*24: Omega- */ 0, /*25: Antineutrn*/ 0,
/*26: Antilambda*/ 0, /*27: Antisigma-*/ 0,
/*28: Antisigma0*/ 0, /*29: Antisigma+*/ 0,
/*30: Antixi0 */ 0, /*31: Antixi+ */ 0,
/*32: Antiomega+*/ 0, /*33: TC */ 0,
/*34: Delta0 */ 0, /*35: Delta++ */ 0,
/*36: Delta+ */ 0, /*37: Delta- */ 0,
/*38: NP11+ */ 0, /*39: ND13+ */ 0,
/*40: NS11+ */ 0, /*41: rho0 */ 0,
/*42: rho+ */ 0, /*43: rho- */ 0,
/*44: PION */ 0, /*45: Deuteron */ 0,
/*46: Tritium */ 0, /*47: Alpha */ 0,
/*48: KAON */ 0, /*49: He3 */ 0,
/*50: dimuon */ 0, /*51: dilepton */ 0,
/*52: omega */ 0
};
// Particle baryon charge
Int_t fBaryonCharge[nPart]={
/* 0: dummy */ 0, /* 1: Photon */ 0,
/* 2: Positron */ 0, /* 3: Electron */ 0,
/* 4: Neutrino */ 0, /* 5: mu+ */ 0,
/* 6: mu- */ 0, /* 7: pi0 */ 0,
/* 8: pi+ */ 0, /* 9: pi- */ 0,
/*10: K0_long */ 0, /*11: K+ */ 0,
/*12: K- */ 0, /*13: Neutron */ +1,
/*14: Proton */ +1, /*15: Antiproton*/ -1,
/*16: K0_short */ 0, /*17: eta */ 0,
/*18: Lambda */ +1, /*19: Sigma+ */ +1,
/*20: Sigma0 */ +1, /*21: Sigma- */ +1,
/*22: Xi0 */ +1, /*23: Xi- */ +1,
/*24: Omega- */ +1, /*25: Antineutrn*/ -1,
/*26: Antilambda*/ -1, /*27: Antisigma-*/ -1,
/*28: Antisigma0*/ -1, /*29: Antisigma+*/ -1,
/*30: Antixi0 */ -1, /*31: Antixi+ */ -1,
/*32: Antiomega+*/ -1, /*33: TC */ 0,
/*34: Delta0 */ +1, /*35: Delta++ */ +1,
/*36: Delta+ */ +1, /*37: Delta- */ +1,
/*38: NP11+ */ +1, /*39: ND13+ */ +1,
/*40: NS11+ */ +1, /*41: rho0 */ 0,
/*42: rho+ */ 0, /*43: rho- */ 0,
/*44: PION */ 0, /*45: Deuteron */ +2,
/*46: Tritium */ +3, /*47: Alpha */ +4,
/*48: KAON */ 0, /*49: He3 */ +3,
/*50: dimuon */ 0, /*51: dilepton */ 0,
/*52: omega */ 0
};
// Particle strangeness
Int_t fStrangeness[nPart]={
/* 0: dummy */ 0, /* 1: Photon */ 0,
/* 2: Positron */ 0, /* 3: Electron */ 0,
/* 4: Neutrino */ 0, /* 5: mu+ */ 0,
/* 6: mu- */ 0, /* 7: pi0 */ 0,
/* 8: pi+ */ 0, /* 9: pi- */ 0,
/*10: K0_long */ +1, /*11: K+ */ +1,
/*12: K- */ -1, /*13: Neutron */ 0,
/*14: Proton */ 0, /*15: Antiproton*/ 0,
/*16: K0_short */ +1, /*17: eta */ 0,
/*18: Lambda */ -1, /*19: Sigma+ */ -1,
/*20: Sigma0 */ -1, /*21: Sigma- */ -1,
/*22: Xi0 */ -2, /*23: Xi- */ -2,
/*24: Omega- */ -3, /*25: Antineutrn*/ 0,
/*26: Antilambda*/ +1, /*27: Antisigma-*/ +1,
/*28: Antisigma0*/ +1, /*29: Antisigma+*/ +1,
/*30: Antixi0 */ +2, /*31: Antixi+ */ +2,
/*32: Antiomega+*/ +3, /*33: TC */ 0,
/*34: Delta0 */ 0, /*35: Delta++ */ 0,
/*36: Delta+ */ 0, /*37: Delta- */ 0,
/*38: NP11+ */ 0, /*39: ND13+ */ 0,
/*40: NS11+ */ 0, /*41: rho0 */ 0,
/*42: rho+ */ 0, /*43: rho- */ 0,
/*44: PION */ 0, /*45: Deuteron */ 0,
/*46: Tritium */ 0, /*47: Alpha */ 0,
/*48: KAON */ 0, /*49: He3 */ 0,
/*50: dimuon */ 0, /*51: dilepton */ 0,
/*52: omega */ 0
};
// -----------------------------------------------------------------------------
// artificial particles
const Int_t nArtPart = 2;
const Char_t *cArtName[nArtPart] = { "fake-", "fake+" };
const Int_t fArtCharge[nArtPart] = { -1, 1 };
const Int_t fArtLeptonCharge[nArtPart] = { -1, 1 };
const Int_t fArtBaryonCharge[nArtPart] = { -1, 1 };
const Int_t fArtStrangeness[nArtPart] = { -1, 1 };
const Int_t fArtMass[nArtPart] = { -1, -1 };
// -----------------------------------------------------------------------------
#define ARTIFICIAL_OFFSET 500
// -----------------------------------------------------------------------------
// new artificial particles
const Int_t nArtPartNew = 4;
const Char_t *cArtNameNew[nArtPartNew] = { "artificial+", "artificial-",
"fake+", "fake-" };
const Int_t fArtChargeNew[nArtPartNew] = { 1, -1, 1, -1 };
const Int_t fArtLeptonChargeNew[nArtPartNew] = { 1, -1, 1, -1 };
const Int_t fArtBaryonChargeNew[nArtPartNew] = { 1, -1, 1, -1 };
const Int_t fArtStrangenessNew[nArtPartNew] = { 1, -1, 1, -1 };
const Int_t fArtMassNew[nArtPartNew] = { -1, -1, -1, -1 };
// -----------------------------------------------------------------------------
Int_t HPhysicsConstants::pid(const Char_t *n)
{
// Return integer id given a particle's name
Int_t i;
if( ! n)
return 0;
for(i = 0; i < nPart && strcmp(n, (Char_t*)cName[i]); i++)
;
if(i < nPart)
return i;
for(i = 0; i < nArtPartNew && strcmp(n, (Char_t*)cArtNameNew[i]); i++)
;
if(i < nArtPartNew)
return i - nArtPartNew; // negative ids
for(i = 0; i < nArtPart && strcmp(n, (Char_t*)cArtName[i]); i++)
;
if(i < nArtPart)
return ARTIFICIAL_OFFSET + i;
::Error("HPhysicsConstants::pid",
"%s is not a valid particle name\n",n);
return 0;
}
// -----------------------------------------------------------------------------
const Char_t *HPhysicsConstants::pid(Short_t pid)
{
// Return name of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return cArtName[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return cName[pid];
else
{
if(pid >= -nArtPartNew)
return cArtNameNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::pid", "No particle with id=%d", pid);
return NULL;
}
// -----------------------------------------------------------------------------
Int_t HPhysicsConstants::charge(const Int_t pid)
{
// Return charge of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return fArtCharge[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return fCharge[pid];
else
{
if(pid >= -nArtPartNew)
return fArtChargeNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::charge", "No particle with id=%d", pid);
return 0;
}
// -----------------------------------------------------------------------------
Int_t HPhysicsConstants::leptonCharge(const Int_t pid)
{
// Return leptonCharge of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return fArtLeptonCharge[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return fLeptonCharge[pid];
else
{
if(pid >= -nArtPartNew)
return fArtLeptonChargeNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::leptonCharge", "No particle with id=%d", pid);
return 0;
}
// -----------------------------------------------------------------------------
Int_t HPhysicsConstants::baryonCharge(const Int_t pid)
{
// Return baryonCharge of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return fArtBaryonCharge[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return fBaryonCharge[pid];
else
{
if(pid >= -nArtPartNew)
return fArtBaryonChargeNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::baryonCharge", "No particle with id=%d", pid);
return 0;
}
// -----------------------------------------------------------------------------
Int_t HPhysicsConstants::strangeness(const Int_t pid)
{
// Return strangeness of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return fArtStrangeness[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return fStrangeness[pid];
else
{
if(pid >= -nArtPartNew)
return fArtStrangenessNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::strangeness", "No particle with id=%d", pid);
return 0;
}
// -----------------------------------------------------------------------------
Float_t HPhysicsConstants::mass(const Int_t pid)
{
// Return mass of the particle
if(pid >= ARTIFICIAL_OFFSET)
{
if(pid < ARTIFICIAL_OFFSET + nArtPart)
return fArtMass[pid - ARTIFICIAL_OFFSET];
}
else
{
if((pid >= 0) && (pid < nPart))
return fMass[pid];
else
{
if(pid >= -nArtPartNew)
return fArtMassNew[nArtPartNew + pid];
}
}
::Error("HPhysicsConstants::mass", "No particle with id=%d", pid);
return -1.0;
}
// -----------------------------------------------------------------------------
Bool_t HPhysicsConstants::isFake(Int_t iId)
{
// checks wheater the particle defined by its id is a fake
return ((iId >= ARTIFICIAL_OFFSET)
|| (iId == fakePos()) || (iId == fakeNeg()));
}
// -----------------------------------------------------------------------------
Bool_t HPhysicsConstants::isArtificial(Int_t iId)
{
// checks wheater the particle defined by its id is an artificial one
return ((iId == artificialPos()) || (iId == artificialNeg()));
}