package hep.physics.particle.properties; import java.util.Formatter; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Default table of particle properties used by <code>ParticlePropertyProvider</code>. * @see ParticlePropertyProvider * @author Tony Johnson * Corrections to particle codes/properties as per PDG '98: M. Krishnamurthy/R.J.Wilson 8/8/99 * Updated as a result of discussion between Bob Wilson and Tony Waite. * Fixed charges for some SUSY particles */ public class DefaultParticlePropertyProvider implements ParticlePropertyProvider { /** * Default constructor, can be called from superclasses */ protected DefaultParticlePropertyProvider() { // Units double m = 100; double cm = 1; double mm = 0.1; double GeV = 1; double MeV = 1./1000; double keV = 1./1000000; double hbarc = 197.327*MeV*m*1.E-15; double ec = 0.00299792; // GeV/T-m // TODO: Hopefully soon this whole ugly thing will be replaced by a new XML // file derived directly from the PDG. // originally chopped directly from arve/gismo/CreateDefault.cxx // name (anti) id 2J Q mass width or hbarc/ctau // ---- ------ -- - - ---- ------------------- PART("gluon", "gluon_bar", 21, 2, 0, 0, 0); PART("gamma", 22, 2, 0, 0.); PART("e-", "e+", 11, 1,-1, 511.0*keV); PART("mu-", "mu+", 13, 1,-1, 105.658*MeV, hbarc/(658.65*m) ); PART("tau-", "tau+", 15, 1,-1, 1.777*GeV, hbarc/(87.2E-6*m) ); PART("nu_e", "nu_e_bar", 12, 1, 0, 0.); PART("nu_mu", "nu_mu_bar", 14, 1, 0, 0.); PART("nu_tau", "nu_tau_bar", 16, 1, 0, 0, 0); PART("d", "d_bar", 1, 1, -1./3., 6.*MeV , 0); PART("u", "u_bar", 2, 1, 2./3., 3.25*MeV, 0 ); PART("s", "s_bar", 3, 1, -1./3., 115.*MeV, 0); PART("c", "c_bar", 4, 1, 2./3., 1.4*GeV, 0 ); PART("b", "b_bar", 5, 1, -1./3., 4.25*GeV, 0); PART("t", "t_bar", 6, 1, 2./3., 175.*GeV, 0); PART("a1+", "a1-", 20213, 2, 0, 1.230*GeV, 400.*MeV); PART("eta", "eta_bar", 221, 0, 0, 547.45*MeV, 0); PART("eta'", "eta'_bar", 331, 0, 0, 957.77*MeV, 0.201*MeV); PART("eta(c)(1S)","eta(c)(1S)_bar", 441, 0, 0, 29.798*MeV, 13.2*MeV); PART("Delta+", "Delta+_bar", 2214, 3, 1, 1.232*GeV, 350.0*MeV); PART("Delta-", "Delta-_bar", 1114, 3,-1, 1.232*GeV, 350.0*MeV); PART("Deltao", "Deltao_bar", 2114, 3, 0, 1.232*GeV, 120.0*MeV); PART("Delta++", "Delta--", 2224, 3, 2, 1.232*GeV, 120.0*MeV); PART("Lambda(c)+", "Lambda(c)-", 4122, 1, 0, 2.285*GeV, hbarc/(61.8E-6*m)); PART("Lambda(b)o","Lambda(b)o_bar", 5122, 1, 0, 5.6415*GeV, 0); PART("B*+", "B*-", 523, 2, 1, 5.325*GeV, 0); PART("B*o", "B*o_bar", 513, 2, 0, 5.325*GeV, 0); PART("B(s)o", "B(s)o_bar", 531, 0, 0, 5.3693*GeV, hbarc/(483.0E-6*m) ); PART("B(s)*o", "B(s)*o_bar", 533, 2, 0, 5.51*GeV, 0);// double check PART("Xi-", "Xi+", 3312, 1, -1, 1.321*GeV, hbarc/(4.91E-3*m)); PART("Xi(b)-", "Xi(b)+", 5132, 1, -1, 6000, 6000);//double check mass PART("Xi(b)*-", "Xi(b)*+", 5314, 2, -1, 5.81*GeV, 0); //double check width PART("Xi(b)'-", "Xi(b)'+", 5312, 1, -1, 5.77*GeV, 0);//double check width PART("Xi(b)o", "Xi(b)o_bar", 5232, 1, 0, 6.0, 0);//mass guess PART("Xi(b)*o", "Xi(b)*o_bar", 5324, 2, 0, 6.0, 0);//mass guess PART("Xi(b)'o", "Xi(b)'o_bar", 5322, 1, 0, 6.0, 0);//mass guess PART("Xi(c)+", "Xi(c)-", 4232, 1, 1, 2.465*GeV, 0); PART("Xi(c)o", "Xi(c)o_bar", 4132, 1, 0, 2.470*GeV, 0); PART("Xi(c)*+", "Xi(c)*-", 4324, 2, 1, 2.6446*GeV, 0); PART("Xi(c)*o", "Xi(c)*o_bar", 4314, 2, 0, 2.6438*GeV, 0); PART("Xi(c)'+", "Xi(c)'-", 4322, 1, 1, 2.465*GeV, 0);//don't know what these are RJW PART("Xi(c)'o", "Xi(c)'o_bar", 4312, 1, 0, 2.470*GeV, 0);//don't know what these are RJW PART("Xi(c0)(1P)","Xi(c0)(1P)_bar",10441, 0, 0, 3.415*GeV, 13.5*MeV); PART("Xi(c1)(1P)","Xi(c1)(1P)_bar",20443, 2, 0, 3.5105*GeV, 0.88*MeV); PART("Xi(c2)(1P)", "Xi(c)(1P)_bar",445, 4, 0, 3.556*GeV, 2.00*MeV); PART("Xi(1530)o", "Xi(1530)o_bar", 3324, 3, 0, 1.532*GeV, 9.1*MeV); PART("Sigma(b)-", "Sigma(b)-_bar", 5112, 1, -1, 5.812*GeV, 0);// check width PART("Sigma(b)+", "Sigma(b)+_bar", 5222, 1, 1, 5.812*GeV, 0);// check these two PART("Sigma(b)*+","Sigma(b)*+_bar",5224, 2, 1, 5.812*GeV, 0); PART("Sigma(b)*-","Sigma(b)*-_bar",5114, 2, -1, 5.812*GeV, 0);// check width PART("Sigma(b)o", "Sigma(b)o_bar", 5212, 1, 0, 1.193*GeV, 0); PART("Sigma(b)*o","Sigma(b)*o_bar",5214, 2, 0, 1.193*GeV,0); PART("Sigma(c)+", "Sigma(c)-", 4212, 1, 1, 2.453*GeV, 0); PART("Sigma(c)o", "Sigma(c)o_bar", 4112, 1, 0, 2.452*GeV, 0); PART("Sigma(c)*o","Sigma(c)*o_bar",4114, 2, 0, 2.452*GeV, 0);// check width PART("Sigma(c)*+", "Sigma(c)*-", 4214, 2, 1, 2.4535*GeV, 0);// check width PART("Sigma(c)++", "Sigma(c)--", 4222, 1, 2, 2.453*GeV, 0); PART("Sigma(c)*++", "Sigma(c)*--", 4224, 2, 2, 2.455*GeV, 0); PART("Sigma(1385)+","Sigma(1385)-",3224,3,1,1.383*GeV,35.8*MeV); PART("Ko", "Ko_bar", 311, 0, 0, 497.672*MeV, 0); PART("K(1410)*o", "K(1410)*o_bar", 100313, 2, 0, 1.414*GeV, 227.0*MeV); PART("K(1410)*+", "K(1410)*-", 100323, 2, 1, 1.414*GeV, 227.0*MeV); PART("K(892)*o", "K*o(892)_bar", 313, 2, 0, 896.10*MeV, 50.5*MeV); PART("K(892)*+", "K*-(892)", 323, 2, 0, 891.59*MeV, 49.8*MeV); PART("K(1270)1o", "K(1270)1o_bar", 10313, 2, 0, 1.273*GeV, 90.0*MeV); PART("K1(1270)+", "K1(1270)-", 10323, 2, 1, 1.273*GeV, 90.0*MeV); PART("K2(1430)*o","K2(1430)*o_bar", 315, 4, 0, 1.4254*GeV, 98.4*MeV); PART("K2(1430)*+", "K2(1430)*-", 325, 4, 1, 1.4254*GeV, 98.4*MeV); PART("Omega(b)-", "Omega(b)+", 5332, 3, -1, 6.0*GeV, 0);//Not measured; guess mass is Omega(c)+(mb-mc) PART("Omega(b)*-", "Omega(b)*+", 5334, 4, -1, 6.0*GeV, 0);// PART("Omega(c)o", "Omega(c)o_bar", 4332, 1, 0, 2.704*GeV, 0); PART("Omega(c)*o","Omega(c)*o_bar", 4334, 2, 0, 2.704*GeV, 0); PART("T+", "T-", 611, 0, 1, 175.0*GeV, 0); PART("T*+","T*-", 613, 2, 1, 175.14*GeV, 0); PART("To", "To_bar", 621, 0, 0, 175.0*GeV, 0); PART("T*o", "T*o_bar", 623, 2, 0, 175.14*GeV, 0); PART("W+", "W-", 24, 2, 1, 80.33*GeV, 2.07*GeV); PART("J/psi(1S)", "J/psi(1S)", 443, 2, 0, 3.0969*GeV, 87.0*keV); // SUSY particles from '98 PDG // Left-handed squarks and sleptons PART("sdl-", "sdl+", 1000001, 0,-1./3., 100.*GeV, 0 ); PART("sul-", "sul+", 1000002, 0,-2./3., 100.*GeV, 0 ); PART("ssl-", "ssl+", 1000003, 0,-1./3., 100.*GeV, 0 ); PART("scl-", "scl+", 1000004, 0,-2./3., 100.*GeV, 0 ); PART("sbl-", "sbl+", 1000005, 0,-1./3., 100.*GeV, 0 ); PART("stl-", "stl+", 1000006, 0,-2./3., 100.*GeV, 0 ); PART("sel-", "sel+", 1000011, 0, -1, 100.*GeV, 0 ); PART("snuel", "snuel_bar", 1000012, 0,0, 100.*GeV, 0 ); PART("smul-", "smul+", 1000013, 0, -1, 100.*GeV, 0 ); PART("snumul", "snumul_bar", 1000014, 0,0, 100.*GeV, 0 ); PART("staul-", "staul+", 1000015, 0, -1, 100.*GeV, 0 ); PART("snutaul", "snutaul_bar", 1000016, 0,0, 100.*GeV, 0 ); // Right-handed squarks and sleptons PART("sdr-", "sdr+", 2000001, 0,-1./3., 100.*GeV, 0 ); PART("sur-", "sur+", 2000002, 0,-2./3., 100.*GeV, 0 ); PART("ssr-", "ssr+", 2000003, 0,-1./3., 100.*GeV, 0 ); PART("scr-", "scr+", 2000004, 0,-2./3., 100.*GeV, 0 ); PART("sbr-", "sbr+", 2000005, 0,-1./3., 100.*GeV, 0 ); PART("str-", "str+", 2000006, 0,-2./3., 100.*GeV, 0 ); PART("ser-", "ser+", 2000011, 0, -1, 100.*GeV, 0 ); PART("snuer", "snuer_bar", 2000012, 0,0, 100.*GeV, 0 ); PART("smur-", "smur+", 2000013, 0, -1, 100.*GeV, 0 ); PART("snumur", "snumur_bar", 2000014, 0,0, 100.*GeV, 0 ); PART("staur-", "staur+", 2000015, 0, -1, 100.*GeV, 0 ); PART("snutaur", "snutaur_bar", 2000016, 0,1, 100.*GeV, 0 ); PART("gluino", 1000021, 1, 0, 0.); // charginos PART("neut10", "neut10_bar", 1000022, 0,0, 100.*GeV, 0. ); PART("neut20", "neut20_bar", 1000023, 0,0, 100.*GeV, 0 ); PART("charg1+", "charg1-", 1000024, 0, 1, 100.*GeV, 0 ); PART("neut30", "neut30_bar", 1000025, 0,0, 100.*GeV, 0 ); PART("zino2", "zino2_bar", 1000032, 0, 0, 0, 0); PART("zino3", "zino3_bar", 1000033, 0, 0, 0, 0); PART("wino2", "wino2_bar", 1000034, 0, 0, 0, 0); PART("zino4", "zino4_bar", 1000056, 0, 0, 0, 0);//double check PART("neut40", "neut40_bar", 1000035, 0,0, 100.*GeV, 0 ); PART("charg2+", "charg2-", 1000037, 0,1, 100.*GeV, 0 ); PART("gravitino", 1000039, 2, 0, 0.); PART("pi+", "pi-", 211, 0, 1, 139.5675*MeV, hbarc/(7.804*m) ); PART("pi0", 111, 0, 0, 134.9739*MeV, hbarc/(2.5E-6*cm) ); PART("K+", "K-", 321, 1, 1, 493.646*MeV, hbarc/(379.9*cm) ); PART("K0_S", 310, 0, 0, 497.671*MeV, hbarc/(2.675*cm) ); PART("K0_L", 130, 0, 0, 497.671*MeV, hbarc/(15.50*m) ); PART("rho+","rho-",213, 2, 1, 768.3*MeV, 149.*MeV ); PART("rho0", 113, 2, 0, 768.3*MeV, 149.*MeV ); PART("omega", 223, 2, 0, 781.95*MeV, 8.43*MeV ); PART("phi", 333, 2, 0, 1019.412*MeV, 4.41*MeV ); PART("p", "p_bar",2212, 1, 1, 938.272*MeV); PART("n", "n_bar",2112, 1, 0, 939.566*MeV); PART("J/psi" , 443, 2, 0, 3097.*MeV, 0.07*MeV ); PART("Lambda","Lambda_bar", 3122, 1, 0, 1115.63*MeV, hbarc/(7.89*cm)); PART("Sigma+","Sigma+_bar", 3222, 1, 1, 1189.37*MeV, hbarc/(2.40*cm)); PART("Sigma0","Sigma0_bar", 3212, 1, 0, 1192.55*MeV, hbarc/(2.2e-9*cm)); PART("Sigma-","Sigma-_bar", 3112, 1,-1, 1197.43*MeV, hbarc/(4.43*cm)); PART("Sigma0(1385)", "Sigma0(1385)_bar", 3214, 3, 0, 1.384*GeV, 36.0*MeV); PART("Sigma(1385)-", "Sigma(1385)-_bar", 3114, 3, 0, 1.3872*GeV, 39.4*MeV); PART("Xi0","Xi0_bar", 3322, 1, 0, 1314.9*MeV, hbarc/(8.69*cm)); PART("Xi-","Xi-_bar", 3312, 1,-1, 1321.32*MeV, hbarc/(4.91*cm)); PART("Omega-","Omega-_bar", 3334, 3,-1, 1672.43*MeV, hbarc/(2.46*cm)); PART("D+", "D-", 411, 0, 1, 1869.3*MeV, hbarc/(m*320e-6)); PART("D0","D0-bar",421, 0, 0, 1864.5*MeV, hbarc/(m*125.9e-6)); PART("D*+","D*-", 413, 1, 1, 2010.1*MeV, 0.5*MeV); PART("D*0","D*0-bar",423,1,0, 2007.1*MeV, 0.5*MeV); PART("D(s)+","D(s)-",431,0,1, 1968.8*MeV, 1.46E-12*GeV); PART("D(s)*+","D(s)*-",433,0, 0, 2110.3*MeV); PART("B+","B-", 521, 0, 1, 5278.6*MeV, hbarc/(m*387e-6)); PART("B0","B0-bar",511, 0, 0, 5278.7*MeV, hbarc/(m*387e-6)); PART("upsilon(4S)",70553, 2, 0, 10.5800*GeV, 23.8*MeV); PART("deutron", 10002, 1, 1, 1876.01*MeV); PART("triton", 10003, 2, 1, 2809.26*MeV); PART("alpha", 20001, 0, 2, 3728.17*MeV); PART("Z0", 33, 2, 0, 91.187*GeV, 2.490*GeV); PART("Zo", 23, 2, 0, 91.187*GeV, 2.490*GeV); PART("H0/H02", 35, 0, 0, 300*GeV, 1*GeV); PART("h0/H01", 25, 0, 0, 44.0*GeV, 0); PART("H+", 37, 0, 1, 140.0*GeV,1*GeV); } private void PART(String pname, String aname,int id, int spin,double charge, double mass,double width) { add(new Type(pname, id,spin, charge,mass,width)); add(new Type(aname,-id,spin,-charge,mass,width)); } private void PART(String pname, String aname,int id, int spin,double charge, double mass) { add(new Type(pname, id,spin, charge,mass,0)); add(new Type(aname,-id,spin,-charge,mass,0)); } private void PART(String pname, int id, int spin,int charge, double mass,double width) { add(new Type(pname,id,spin,charge,mass,width)); } private void PART(String pname, int id, int spin,int charge, double mass) { add(new Type(pname,id,spin,charge,mass,0)); } private void add(Type type) { map.put(new Integer(type.getPDGID()),type); } /** * Get the properties for a particular particle. * Note, this method no longer throws UnknownParticleID. It will always * returns a ParticleType object, from which at least the PDGID can be * obtained. Calling other methods on the ParticleType object may cause * UnknownParticleID to be thrown if the PDGID is unknown. */ public ParticleType get(int PDGID) { ParticleType pt = (ParticleType) map.get(new Integer(PDGID)); if (pt == null) pt = new UnknownType(PDGID); return pt; } public Set types() { return new HashSet(map.values()); } private Map map = new HashMap(); private class UnknownType implements ParticleType { UnknownType(int pdgid) { this.id = pdgid; } public String getName() { return "unknown"; } public int getPDGID() { return id; } public int get2xSpin() { throw new UnknownParticleIDException(id); } public double getCharge() { throw new UnknownParticleIDException(id); } public double getMass() { throw new UnknownParticleIDException(id); } public double getWidth() { throw new UnknownParticleIDException(id); } public String toString() { return "unknown (id="+id+")"; } public hep.physics.particle.properties.ParticlePropertyProvider getParticlePropertyProvider() { return DefaultParticlePropertyProvider.this; } private int id; } private class Type implements ParticleType { Type(String name, int id, int spin, double charge, double mass,double width) { this.name = name; this.id = id; this.spin = spin; this.charge = charge; this.mass = mass; this.width = width; } public String getName() { return name; } public int getPDGID() { return id; } public int get2xSpin() { return spin; } public double getCharge() { return charge; } public double getMass() { return mass; } public double getWidth() { return width; } public String toString() { Formatter formatter = new Formatter(); formatter.format("%s (mass=%5g id=%d charge=%5g)",name,mass,id,charge); return formatter.toString(); } public boolean equals(Object o) { if (o instanceof ParticleType) { ParticleType that = (ParticleType) o; return Math.abs(this.getPDGID()) == Math.abs(that.getPDGID()); } return false; } public int hashCode() { return Math.abs(getPDGID()); } public hep.physics.particle.properties.ParticlePropertyProvider getParticlePropertyProvider() { return DefaultParticlePropertyProvider.this; } private String name; private int id; private int spin; private double charge; private double mass; private double width; } }