package hep.physics.yappi.util;
import hep.physics.particle.properties.ParticlePropertyProvider;
import hep.physics.yappi.Data;
import hep.physics.yappi.PDGID;
import hep.physics.yappi.ParticleType;
import hep.physics.yappi.XMLYappi;
import hep.physics.yappi.Yappi;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class YappiParticlePropertyProvider implements ParticlePropertyProvider
{
private Yappi yappi;
public YappiParticlePropertyProvider(String filename) throws Exception //FixMe: Better exception needed
{
yappi = new XMLYappi(filename);
}
public hep.physics.particle.properties.ParticleType get(int PDGID)
{
ParticleType tp = yappi.getParticle(new PDGID(PDGID));
return new ParticleTypeImplementation(tp);
}
public Set types()
{
Iterator i = yappi.getParticles();
Set set = new HashSet();
while (i.hasNext())
{
// Fixme: Should not return Entry
Map.Entry entry = (Map.Entry) i.next();
set.add(new ParticleTypeImplementation((ParticleType) entry.getValue()));
}
return set;
}
private class ParticleTypeImplementation implements hep.physics.particle.properties.ParticleType
{
private ParticleType tp;
private ParticleTypeImplementation(ParticleType tp)
{
this.tp = tp;
}
public String getName()
{
return tp.getName();
}
public int getPDGID()
{
PDGID pdg = tp.getPDGID();
return pdg != null ? pdg.getID() : -999;
}
public int get2xSpin()
{
Data data = tp.getData("Spin");
return data != null ? (int) data.getValue()*2 : -999;
}
public double getCharge()
{
Data data = tp.getData("Charge");
return data != null ? data.getValue() : -999;
}
public double getMass()
{
Data data = tp.getData("Mass");
return data != null ? data.getValue() : -999;
}
public double getWidth()
{
Data data = tp.getData("Width");
return data != null ? data.getValue() : -999;
}
public String toString()
{
return tp.getName()+" (PDGid="+tp.getPDGID()+")";
}
public ParticlePropertyProvider getParticlePropertyProvider()
{
return YappiParticlePropertyProvider.this;
}
}
}