// Copyright 2000, CERN, Geneva, Switzerland
package hep.physics.yappi;
import java.util.*;
/**
* Yappi: Yet Another Particle Propery Interface
*
* @author Patrick Hellwig
* @author Mark Donszelmann
* @version $Id: Yappi.java 8584 2006-08-10 23:06:37Z duns $
*/
public class Yappi
{
private Map particlesByName; // of ParticleType stored by Name
private Map particlesByPDGID; // of ParticleType stored by PDGID
private Map families;
public Yappi()
{
particlesByName = new HashMap();
particlesByPDGID = new HashMap();
families = new HashMap();
}
public void addParticle(ParticleType particleType)
{
particlesByName.put(particleType.getName(), particleType);
if (particleType.getPDGID() != null) {
particlesByPDGID.put(particleType.getPDGID(), particleType);
}
}
public Iterator getParticles()
{
return particlesByName.entrySet().iterator();
}
public ParticleType getParticle(String name)
{
return (ParticleType)particlesByName.get(name);
}
public ParticleType getParticle(PDGID pdgid)
{
return (ParticleType)particlesByPDGID.get(pdgid);
}
/**
* @return Iterator with data
*/
public Iterator getFamilies()
{
return families.entrySet().iterator();
}
public Family getFamily(String familyName)
{
return (Family)families.get(familyName);
}
/**
*/
public void addFamily(Family family)
{
families.put(family.getName(), family);
}
/**
*/
public void removeFamily(String familyName)
{
families.remove(familyName);
}
/**
*/
public void removeFamily(Family family)
{
removeFamily(family.getName());
}
public Family[] getFamilies(ParticleType particle) {
Vector result = new Vector();
getFamilies(families.values().iterator(), particle, result);
Family[] f = new Family[result.size()];
result.copyInto(f);
return f;
}
private static void getFamilies(Iterator familyIterator, ParticleType particle, Vector result) {
while (familyIterator.hasNext()) {
Family f = (Family)familyIterator.next();
System.out.println(f);
// look for particle type
ParticleType p = f.getParticle(particle.getName());
System.out.println(p);
if (p != null) {
result.addElement(f);
}
// handle subfamilies
getFamilies(f.getFamilies(), particle, result);
}
}
}