// Copyright 2003, FreeHEP. package hep.graphics.heprep.test; import hep.graphics.heprep.HepRep; import hep.graphics.heprep.HepRepFactory; import hep.graphics.heprep.HepRepInstance; import hep.graphics.heprep.HepRepInstanceTree; import hep.graphics.heprep.HepRepTreeID; import hep.graphics.heprep.HepRepType; import hep.graphics.heprep.HepRepTypeTree; import hep.graphics.heprep.HepRepWriter; import java.io.FileOutputStream; import java.io.IOException; import java.util.Random; /** * Writes multiple hepreps to one xml file. * * @author M.Donszelmann * * @version $Id: MultiWriteTest.java 8584 2006-08-10 23:06:37Z duns $ */ public class MultiWriteTest { private final static int NUMBER_OF_POLYGONS = 255; private final static int NUMBER_OF_POINTS = 4; private final static int NUMBER_OF_HITS = 512; private final static int NUMBER_OF_TRACKS = 16; private final static int NUMBER_OF_TRACK_POINTS = 32; private Random random; /** * */ public MultiWriteTest() { random = new Random(); } private HepRep makeRandomHepRep(HepRepFactory factory) throws IOException { HepRep heprep = factory.createHepRep(); // layers heprep.addLayer("Geometry"); heprep.addLayer("Event"); // geometry types HepRepTreeID geometryTypeTreeID = factory.createHepRepTreeID("GeometryTypeTree", "1.0"); HepRepTypeTree geometryTypeTree = factory.createHepRepTypeTree(geometryTypeTreeID); heprep.addTypeTree(geometryTypeTree); HepRepType geometryType = factory.createHepRepType(geometryTypeTree, "GeometryType"); geometryType.addAttValue("drawAs", "polygon"); geometryType.addAttValue("color", "gray"); // geometry HepRepInstanceTree geometryTree = factory.createHepRepInstanceTree("Geometry", "MultiTest", geometryTypeTree); heprep.addInstanceTree(geometryTree); HepRepInstance geometry = factory.createHepRepInstance(geometryTree, geometryType); for (int p=0; p<NUMBER_OF_POLYGONS; p++) { HepRepInstance polygon = factory.createHepRepInstance(geometry, geometryType); for (int i=0; i<NUMBER_OF_POINTS; i++) { factory.createHepRepPoint(polygon, nextRandom(), nextRandom(), nextRandom()); } } // event types HepRepTreeID eventTypeTreeID = factory.createHepRepTreeID("EventTypeTree", "1.0"); HepRepTypeTree eventTypeTree = factory.createHepRepTypeTree(eventTypeTreeID); heprep.addTypeTree(eventTypeTree); HepRepType eventType = factory.createHepRepType(eventTypeTree, "Event"); HepRepType hitType = factory.createHepRepType(eventType, "Hits"); hitType.addAttValue("drawAs", "point"); hitType.addAttValue("color", "yellow"); HepRepType trackType = factory.createHepRepType(eventType, "Tracks"); trackType.addAttValue("drawAs", "polyline"); trackType.addAttValue("color", "blue"); // event HepRepInstanceTree eventTree = factory.createHepRepInstanceTree("Event", "MultiTest", eventTypeTree); heprep.addInstanceTree(eventTree); HepRepInstance event = factory.createHepRepInstance(eventTree, eventType); for (int h=0; h<NUMBER_OF_HITS; h++) { HepRepInstance hit = factory.createHepRepInstance(event, hitType); factory.createHepRepPoint(hit, nextRandom(), nextRandom(), nextRandom()); } for (int t=0; t<NUMBER_OF_TRACKS; t++) { HepRepInstance track = factory.createHepRepInstance(event, trackType); for (int i=0; i<NUMBER_OF_TRACK_POINTS; i++) { factory.createHepRepPoint(track, nextRandom(), nextRandom(), nextRandom()); } } return heprep; } private double nextRandom() { return random.nextDouble()*1000; } private void write(HepRepFactory factory, int nevents, String filename) throws IOException { FileOutputStream fos = new FileOutputStream(filename); boolean zip = filename.endsWith(".zip"); boolean gz = filename.endsWith(".gz"); HepRepWriter writer = factory.createHepRepWriter(fos, zip, zip || gz); for (int i=0; i<nevents; i++) { HepRep heprep = makeRandomHepRep(factory); writer.write(heprep, "event"+i+".heprep"); } writer.close(); fos.close(); } /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { if (args.length < 2) { System.out.println("Usage: MultiTest #events filename [factoryclass]"); System.exit(1); } HepRepFactory factory; if (args.length == 3) { Class factoryClass = Class.forName(args[2]); factory = (HepRepFactory)factoryClass.newInstance(); } else { factory = HepRepFactory.create(); } int nevents = Integer.parseInt(args[0]); long start = System.currentTimeMillis(); new MultiWriteTest().write(factory, nevents, args[1]); System.out.println("Written "+nevents+" events in "+(System.currentTimeMillis()-start)+" ms."); } }