// Copyright 2000, CERN, Geneva, Switzerland package hep.physics.yappi; import java.io.*; import java.util.*; import org.freehep.xml.util.*; import hep.physics.yappi.*; /** * @author Mark Donszelmann * @version $Id: XMLYappiWriter.java 8584 2006-08-10 23:06:37Z duns $ */ public class XMLYappiWriter extends XMLWriter { private static String nameSpace = "ppml"; private DecayGroup currentGroup = null; public XMLYappiWriter(String filename) throws IOException { this(new BufferedWriter(new FileWriter(filename))); } public XMLYappiWriter(Writer writer) { super(writer); openDoc(); } public void close() throws IOException { closeDoc(); super.close(); } public void write(Yappi yappi) { setAttribute("xmlns", nameSpace, "http://www.freehep.org/Yappi"); setAttribute("xmlns", "xsi", "http://www.w3.org/1999/XMLSchema-instance"); setAttribute("xsi", "schemaLocation", "PPML.xsd"); openTag(nameSpace, "yappi"); // Families for (Iterator i = yappi.getFamilies(); i.hasNext(); ) { Map.Entry entry = (Map.Entry)i.next(); write((Family)entry.getValue()); } // Particles for (Iterator i = yappi.getParticles(); i.hasNext(); ) { Map.Entry entry = (Map.Entry)i.next(); write((ParticleType)entry.getValue()); } closeTag(); } public void write(Family family) { setAttribute("name", family.getName()); setAttribute("texName", family.getTexName()); openTag(nameSpace, "Family"); // Sub-families for (Iterator i = family.getFamilies(); i.hasNext(); ) { Map.Entry entry = (Map.Entry)i.next(); write((Family)entry.getValue()); } closeTag(); } public void write(ParticleType particle) { currentGroup = null; setAttribute("name", particle.getName()); setAttribute("texName", particle.getTexName()); setAttribute("antiName", particle.getAntiName()); setAttribute("antiTexName", particle.getAntiTexName()); setAttribute("PDGID", particle.getPDGID().getID()); openTag(nameSpace, "ParticleType"); // Data for (Iterator i = particle.getData(); i.hasNext(); ) { Map.Entry entry = (Map.Entry)i.next(); write((Data)entry.getValue()); } // Decays for (Iterator i = particle.getDecayChannels(); i.hasNext(); ) { write((DecayChannel)i.next()); } closeTag(); } public void write(Data data) { setAttribute("name", data.getName()); setAttribute("texName", data.getTexName()); setAttribute("value", data.getValueAsString()); setAttribute("posError", data.getPosErrorAsString()); setAttribute("negError", data.getNegErrorAsString()); setAttribute("confidenceLevel", data.getConfidenceLevel()); setAttribute("scaleFactor", data.getScaleFactor()); printTag(nameSpace, "Data"); } // FIXME: add reference public void write(DecayChannel decay) { DecayGroup group = decay.getDecayGroup(); if (currentGroup != group) { if (currentGroup != null) { closeTag(); } if (group != null) { setAttribute("name", group.getName()); openTag(nameSpace, "DecayGroup"); } currentGroup = group; } setAttribute("name", decay.getName()); setAttribute("texName", decay.getTexName()); setAttribute("fraction", decay.getFractionAsString()); setAttribute("posError", decay.getPosErrorAsString()); setAttribute("negError", decay.getNegErrorAsString()); setAttribute("confidenceLevel", decay.getConfidenceLevel()); setAttribute("scaleFactor", decay.getScaleFactor()); setAttribute("P", decay.getP()); setAttribute("PUnit", decay.getPUnit()); openTag(nameSpace, "Decay"); closeTag(); } }