// Copyright 2004, FreeHEP. package hep.graphics.heprep1.adapter.test; import hep.graphics.heprep.HepRep; import hep.graphics.heprep.HepRepInstanceTree; import hep.graphics.heprep.HepRepWriter; import hep.graphics.heprep1.adapter.HepRepAdapterFactory; import hep.graphics.heprep1.adapter.NumericalComparator; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.xml.sax.SAXException; import org.xml.sax.SAXParseException; /** * * @author Mark Donszelmann * @version $Id: HepRep1toHepRep2Converter.java 8584 2006-08-10 23:06:37Z duns $ */ public class HepRep1toHepRep2Converter { /** * Convert heprep1 source into heprep2 destination * @param source * @param dest * @throws Exception */ public HepRep1toHepRep2Converter(String source, String dest) throws Exception { hep.graphics.heprep1.xml.XMLHepRepReader in = new hep.graphics.heprep1.xml.XMLHepRepReader(new FileInputStream(source)); hep.graphics.heprep1.HepRep heprep1 = in.next(); in.close(); HepRepAdapterFactory factory = HepRepAdapterFactory.getFactory(); HepRep heprep = factory.createHepRep(); List layers = new ArrayList(); // FIXME, this should go somewhere else... // read geometry /* WGF wgf = new WGF("/babargeometry"); wgf.parse("babar.xml.gz"); HepRep geometry = wgf.getHepRep(); heprep.addTypeTree(geometry.getTypeTree("GeometryTypes", "1.0")); heprep.addInstanceTree(geometry.getInstanceTreeTop("BaBarGeometry", "1.0")); layers.addAll(geometry.getLayerOrder()); */ // read event HepRep event = factory.createHepRep(heprep1); // add to new heprep heprep.addTypeTree(event.getTypeTree("Types", "1.0")); HepRepInstanceTree instanceTree = event.getInstanceTreeTop("Instances", "1.0"); heprep.addInstanceTree(instanceTree); layers.addAll(event.getLayerOrder()); // instanceTree.addInstanceTree(factory.createHepRepTreeID("BaBarGeometry", "1.0")); // merge layers Collections.sort(layers, new NumericalComparator()); for (Iterator i=layers.iterator(); i.hasNext(); ) { heprep.addLayer((String)i.next()); } HepRepWriter writer = factory.createHepRepWriter(new FileOutputStream(dest), false, false); writer.write(heprep, "Event"); writer.close(); } /** * Command Line Utility to convert HepRep 1 into HepRep 2 files. * @param args see usage * @throws Exception for any exception */ public static void main(String[] args) throws Exception { if (args.length < 2) { System.err.println("Usage: HepRep1toHepRep2Converter sourcefile destfile"); System.exit(1); } try { new HepRep1toHepRep2Converter(args[0], args[1]); } catch (SAXParseException e) { System.out.println(e+" in "+args[0]+" at line: "+e.getLineNumber()+", col: "+e.getColumnNumber()); } catch (SAXException e) { System.out.println(e.getMessage()); } catch (IOException e) { System.out.println(e); } } }