Commit in hps-java on MAIN | |||
sandbox/EvioToLcioTest.java | +832 | added 1.1 | |
/StandAlone.java | +41 | added 1.1 | |
/alignment.StandAlone.java | +46 | added 1.1 | |
/mgraham.StandAlone.java | +46 | added 1.1 | |
src/main/java/org/lcsim/hps/users/mgraham/StandAlone.java | -46 | 1.4 removed | |
src/main/java/org/lcsim/hps/users/mgraham/alignment/StandAlone.java | -46 | 1.2 removed | |
src/main/java/org/lcsim/hps/users/mgraham/jlabrotation/StandAlone.java | -41 | 1.2 removed | |
src/test/java/org/lcsim/hps/evio/EvioToLcioTest.java | -832 | 1.3 removed | |
+965 | -965 |
sandbox some code that is causing me headaches
diff -N EvioToLcioTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ EvioToLcioTest.java 19 Jun 2012 18:09:35 -0000 1.1 @@ -0,0 +1,832 @@
+package org.lcsim.hps.evio; + +import static java.lang.System.arraycopy; + +import java.io.File; +import java.io.IOException; +import java.io.PrintStream; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Vector; + +import junit.framework.TestCase; + +import org.jlab.coda.jevio.BaseStructure; +import org.jlab.coda.jevio.BaseStructureHeader; +import org.jlab.coda.jevio.EvioEvent; +import org.jlab.coda.jevio.EvioException; +import org.jlab.coda.jevio.EvioFile; +import org.lcsim.conditions.ConditionsManager; +import org.lcsim.conditions.ConditionsManagerImplementation; +import org.lcsim.conditions.ConditionsReader; +import org.lcsim.event.EventHeader; +import org.lcsim.event.GenericObject; +import org.lcsim.event.LCRelation; +import org.lcsim.event.base.BaseLCRelation; +import org.lcsim.event.base.BaseLCSimEvent; +import org.lcsim.util.Driver; +import org.lcsim.util.cache.FileCache; +import org.lcsim.util.lcio.LCIOWriter; +import org.lcsim.util.loop.DummyConditionsConverter; +import org.lcsim.util.loop.DummyDetector; +import org.lcsim.util.loop.LCSimLoop; + +/** + * Test that generically converts an EVIO v3 file into a collection of LCIO GenericObjects. + * Each data bank is copied into a corresponding GenericObject which has an associated object with its bank metadata. + * No type conversion to LCIO classes is performed. This can be done in a subsequent step within the LCSim event loop. + * + * @author Jeremy McCormick + * @version $Id: EvioToLcioTest.java,v 1.1 2012/06/19 18:09:35 jeremy Exp $ + */ +public class EvioToLcioTest extends TestCase +{ + // Control flags for debugging. Change these by hand and recompile to use. + static private final boolean DEBUG = false; // Set to true for a lot of debug prints. + static private final boolean BREAK_AFTER_SINGLE_EVENT = false; // Set to true to stop after one event. + static private final boolean WRITE_XML = false; // Set to true to write the EVIO file as XML before the conversion begins. + + // Converted LCIO file name. + static final private String outputFilePath = "./EvioCnvTest.slcio"; + + // URL pointing to test data from Maurik, which was generated by the GEMC simulation. + static final private String testFileUrl = "http://www.lcsim.org/test/hps/hps_test_data_2011_nov_18_1.evio"; + + /** + * Convert an EVIO file to LCIO and then read them back in parallel to check the output. + */ + public void testEvio2Lcio() + { + // Setup the file cache. + FileCache cache = null; + File testFile = null; + try + { + cache = new FileCache(new File(".testdata")); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + + // Get the test file to the local machine. + try + { + testFile = cache.getCachedFile(new URL(testFileUrl)); + } + catch (Exception x) + { + throw new RuntimeException(x); + } + + // Convert a test EVIO file to LCIO. + String[] args = new String[2]; + try + { + args[0] = testFile.getCanonicalPath(); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + args[1] = outputFilePath; + (new Evio2LcioConverter()).main(args); + + if (DEBUG) + { + System.out.println("-----------------------"); + } + + // Test that the LCIO data matches the EVIO. + readBackLcio(new File(outputFilePath), testFile); + } + + /** + * Example class for generically converting EVIO data to LCIO. + */ + private static class Evio2LcioConverter + { + String bankInfoCollName = "BankInfo"; + String rawDataCollName = "RawDataBank"; + String relCollName = "BankInfoRelations"; + + public Evio2LcioConverter() + {} + + public void main(String[] args) + { + // Use dummy detector for LCSim conditions to avoid errors. + setDummyDetector("DUMMY"); + + // Check and set user arguments. + if (args.length < 2) + throw new RuntimeException("Not enough arguments."); + String inFilePath = args[0]; + String outputFilePath = args[1]; + + // Open the EVIO file for reading. + EvioFile evioFile = null; + try + { + evioFile = new EvioFile(inFilePath); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + + // Write out test XML file with EVIO structure and data. + if (WRITE_XML) + { + System.out.println("Writing EVIO data to XML file ..."); + evioFile.toXMLFile("EvioTest.xml"); + } + + // Read the first EVIO event outside the processing loop. + EvioEvent evioEvent = null; + int nread = 0; + try + { + evioEvent = evioFile.parseNextEvent(); + ++nread; + } + catch (EvioException x) + { + throw new RuntimeException(x); + } + + if (DEBUG) + { + System.out.println("Read first EVIO event OKAY."); + } + + // Open new LCIOWriter for converted output. + LCIOWriter writer = null; + try + { + writer = new LCIOWriter(outputFilePath); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + + if (DEBUG) + System.out.println(); + + // Loop over EVIO events. + while (evioEvent != null) + { + // Make a new LCIO event. + // FIXME EVIO event numbers all seem to be zero in the test file. + // FIXME Set run number. + BaseLCSimEvent lcioEvent = new BaseLCSimEvent(0, evioEvent.getEventNumber(), "DUMMY"); + + // GenericObject collection to fill with the raw data. + List<GenericObject> objectColl = new ArrayList<GenericObject>(); + + // LCRelation list to connect bank info with data. + List<LCRelation> bankRelColl = new ArrayList<LCRelation>(); + + // Map to represent bank tag and number info. + Map<String, GenericObject> bankIds = new HashMap<String, GenericObject>(); + + // Loop over the EVIO data banks. + Vector<BaseStructure> children = evioEvent.getChildren(); + for (BaseStructure topBank : children) + { + BaseStructureHeader topHeader = topBank.getHeader(); + if (topBank.getChildCount() > 0) + { + for (BaseStructure subBank : topBank.getChildren()) + { + BaseStructureHeader subHeader = subBank.getHeader(); + if (subBank.getChildCount() > 0) + { + for (BaseStructure dataBank : subBank.getChildren()) + { + BaseStructureHeader dataBankHeader = dataBank.getHeader(); + + // Make a concatenated ID for this bank. + String bankId = makeHeaderId(topHeader, subHeader, dataBankHeader); + + // Make a new GenericObject for this bank's info. + if (bankIds.get(bankId) == null) + { + int[] bankInfo = new int[6]; + bankInfo[0] = topHeader.getTag(); + bankInfo[1] = topHeader.getNumber(); + bankInfo[2] = subHeader.getTag(); + bankInfo[3] = subHeader.getNumber(); + bankInfo[4] = dataBankHeader.getTag(); + bankInfo[5] = dataBankHeader.getNumber(); + bankIds.put(bankId, new LcioDataBankInfo(bankInfo)); + } + + // Get the bank info. + GenericObject bankInfo = bankIds.get(bankId); + + //System.out.println("BankInfo: tag = " + bankInfo.getIntVal(0) + "; number = " + bankInfo.getIntVal(1)); + + if (DEBUG) + { + printOut(dataBank, System.out); + } + + // LCIO object to represent one bank of data. + LcioDataBank lcioData = null; + + // Float data. + if (dataBank.getFloatData() != null) + { + lcioData = new LcioDataBank(dataBank.getFloatData()); + } + // Int data. + if (dataBank.getIntData() != null) + { + lcioData = new LcioDataBank(dataBank.getIntData()); + } + // Double data. + if (dataBank.getDoubleData() != null) + { + lcioData = new LcioDataBank(dataBank.getDoubleData()); + } + // FIXME: How to handle raw byte data? Copy to int array with values between 0 and 255? + // Could also pack the data 4 to a 32-bit int or 8 to 64. + + // Setup relation pointing from bank data to its info. + if (lcioData != null) + { + objectColl.add(lcioData); + LCRelation relation = new BaseLCRelation(lcioData, bankInfo); + bankRelColl.add(relation); + } + + if (DEBUG) + { + System.out.println(); + } + } + } + } + } + } + + // Put the data bank info into the LCIO event. + List<GenericObject> bankInfoList = new ArrayList<GenericObject>(bankIds.values()); + lcioEvent.put(bankInfoCollName, bankInfoList, GenericObject.class, 0); + + // Put the GenericObject object collection containing the block data into the event. + lcioEvent.put(rawDataCollName, objectColl, GenericObject.class, 0); + + // Put the relations into the event. + lcioEvent.put(relCollName, bankRelColl, LCRelation.class, 0); + + // Write out the LCIO event. + try + { + writer.write(lcioEvent); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + + // Check if need to break on one event. + if (BREAK_AFTER_SINGLE_EVENT) + break; + + // Read next EVIO event. + try + { + evioEvent = evioFile.parseNextEvent(); + ++nread; + } + catch (EvioException x) + { + throw new RuntimeException(x); + } + } + + try + { + writer.close(); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + + if (DEBUG) + { + System.out.println("Read " + nread + " EVIO events OKAY."); + } + } + } + + private static void readBackLcio(File lcioFile, File evioFile) + { + LCSimLoop loop = new LCSimLoop(); + loop.setDummyDetector("DUMMY"); + try + { + loop.setLCIORecordSource(lcioFile); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + LcioCheckDriver checkDriver = new LcioCheckDriver(); + try + { + checkDriver.setEvioFilePath(evioFile.getCanonicalPath()); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + loop.add(checkDriver); + try + { + loop.loop(-1, null); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + } + + /** + * Read back the LCIO event and check that the data matches the corresponding EVIO file. + */ + static private class LcioCheckDriver extends Driver + { + // Number of events read. + int nread = 0; + + // Settable path to EVIO file. + String evioFilePath = null; + + // The EVIO file for comparison. + EvioFile evioFile = null; + + // The current EVIO event. + EvioEvent evioEvent = null; + + public LcioCheckDriver() + {} + + /** + * Set the path of the EVIO file to be checked against. + * @param evioFilePath The path to the EVIO file. + */ + public void setEvioFilePath(String evioFilePath) + { + this.evioFilePath = evioFilePath; + } + + public void startOfData() + { + // Open the EVIO file for reading. + if (evioFilePath == null) + { + throw new RuntimeException("The EVIO file path was not set!"); + } + try + { + evioFile = new EvioFile(evioFilePath); + } + catch (IOException x) + { + throw new RuntimeException(x); + } + nread = 0; + } + + // FIXME The names of the LCIO collections are hard-coded and correspond to the defaults from the converter class. + public void process(EventHeader event) + { + if (DEBUG) + { + System.out.println("Processing event #" + event.getEventNumber()); + } + + // Read in next EVIO event which should match up with this LCIO event. + try + { + evioEvent = evioFile.parseNextEvent(); + } + catch (EvioException x) + { + throw new RuntimeException(x); + } + + // Make a list of EVIO banks to check. Only the leaf banks with data are added to the list. + Vector<BaseStructure> children = evioEvent.getChildren(); + List<BaseStructure> evioBanks = new ArrayList<BaseStructure>(); + for (BaseStructure topBank : children) + { + if (topBank.getChildCount() > 0) + { + for (BaseStructure subBank : topBank.getChildren()) + { + if (subBank.getChildCount() > 0) + { + for (BaseStructure dataBank : subBank.getChildren()) + { + // Only add leaf banks containing some data. + if (dataBank.getFloatData() != null || dataBank.getDoubleData() != null || dataBank.getIntData() != null) + { + evioBanks.add(dataBank); + } + } + } + } + } + } + + if (DEBUG) + { + System.out.println("EVIO event has " + evioBanks.size() + " data banks."); + } + + // Get the GenericObject collection containing the bank data. + List<GenericObject> lcioDataColl = event.get(GenericObject.class, "RawDataBank"); + + // Get the list of relations to bank info. + List<LCRelation> infoRel = event.get(LCRelation.class, "BankInfoRelations"); + + if (DEBUG) + { + System.out.println("LCIO collection RawDataBank has " + lcioDataColl.size() + " generic objects."); + } + + // Check that number of banks and GenericObjects is the same. + assertEquals("Number of EVIO data banks and LCIO GenericObjects does not match.", evioBanks.size(), lcioDataColl.size()); + + // Loop over the LCIO GenericObject collection. + int ibank = 0; + for (GenericObject lcioObj : lcioDataColl) + { + // Get the next bank from the EVIO file. + BaseStructure evioBank = evioBanks.get(ibank); + + if (DEBUG) + { + System.out.println("GenericObject ..."); + System.out.println(" ndoubles = " + lcioObj.getNDouble()); + System.out.println(" nfloats = " + lcioObj.getNFloat()); + System.out.println(" nints = " + lcioObj.getNInt()); + printOut(lcioObj, System.out); + } + + // Find the info relation for this data. + LCRelation rel = findRelation(infoRel, lcioObj); + + // Check that the relation exists. + TestCase.assertTrue("Could not find corresponding bank info for GenericObject.", rel != null); + + // Get the bank info. + GenericObject bankInfo = (GenericObject)rel.getTo(); + + if (DEBUG) + { + System.out.println("LCIO BankInfo ..."); + printOut(bankInfo, System.out); + System.out.println("EVIO Header; tag = " + evioBank.getHeader().getTag() + "; number = " + evioBank.getHeader().getNumber()); + } + + // Check that data bank info matches the EVIO file. This just checks the last tag and number. + assertEquals("Bank tag does not match EVIO.", evioBank.getHeader().getTag(), bankInfo.getIntVal(4)); + assertEquals("Bank number does not match EVIO.", evioBank.getHeader().getNumber(), bankInfo.getIntVal(5)); + + // Check double values. + if (lcioObj.getNDouble() != 0) + { + double[] evioDoubleData = evioBank.getDoubleData(); + int ndouble = evioDoubleData.length; + assertEquals("Number of doubles in GenericObject and EVIO bank don't match.", ndouble, lcioObj.getNDouble()); + for (int i=0; i<ndouble; i++) + { + // Seems that we need a big tolerance for this to pass! + assertEquals("EVIO double value does not match LCIO.", evioDoubleData[i], lcioObj.getDoubleVal(i), 1e-2); + } + } + + // Check int values. + if (lcioObj.getNInt() != 0) + { + int[] evioIntData = evioBank.getIntData(); + int nint = evioIntData.length; + assertEquals("Number of ints in GenericObject and EVIO bank don't match.", nint, lcioObj.getNInt()); + for (int i=0; i<nint; i++) + { + assertEquals("EVIO int value does not match LCIO.", evioIntData[i], lcioObj.getIntVal(i), 1e-2); + } + } + + // Check float values. + if (lcioObj.getNFloat() != 0) + { + float[] evioFloatData = evioBank.getFloatData(); + int nfloat = evioFloatData.length; + assertEquals("Number of floats in GenericObject and EVIO bank don't match.", nfloat, lcioObj.getNInt()); + for (int i=0; i<nfloat; i++) + { + assertEquals("EVIO float value does not match LCIO.", evioFloatData[i], lcioObj.getDoubleVal(i)); + } + } + + // Increment EVIO bank number. + ++ibank; + } + if (DEBUG) + { + System.out.println("Read " + event.getEventNumber() + " LCIO events OKAY."); + } + ++nread; + } + + public void endOfData() + { + if (DEBUG) + { + System.out.println(this.getClass().getSimpleName() + " read " + nread + " events OKAY."); + } + evioFile.close(); + } + } + + /** + * Represents the tag and number values from a set of EVIO banks. + */ + private static class LcioDataBankInfo implements GenericObject + { + private static final int BANK_INFO_SIZE = 6; + int[] bankInfo = new int[BANK_INFO_SIZE]; + + public LcioDataBankInfo(int[] bankInfo) + { + this.bankInfo = bankInfo; + } + + public int getNInt() + { + return BANK_INFO_SIZE; + } + + public int getNFloat() + { + return 0; + } + + public int getNDouble() + { + return 0; + } + + public int getIntVal(int index) + { + return bankInfo[index]; + } + + public float getFloatVal(int index) + { + return 0; + } + + public double getDoubleVal(int index) + { + return 0; + } + + public boolean isFixedSize() + { + return true; + } + } + + /** + * Implementation of GenericObject to represent an EVIO data bank in LCIO. + */ + private static class LcioDataBank implements GenericObject + { + float[] floatVals = null; + double[] doubleVals = null; + int[] intVals = null; + + int nint = 0; + int nfloat = 0; + int ndouble = 0; + + public LcioDataBank(float[] floatVals) + { + this.floatVals = new float[floatVals.length]; + arraycopy(floatVals, 0, this.floatVals, 0, floatVals.length); + nfloat = this.floatVals.length; + if (DEBUG) + { + System.out.println("Made LcioDataBank with " + nfloat + " floats."); + } + } + + public LcioDataBank(int[] intVals) + { + this.intVals = new int[intVals.length]; + arraycopy(intVals, 0, this.intVals, 0, intVals.length); + nint = this.intVals.length; + if (DEBUG) + { + System.out.println("Made LcioDataBank with " + nint + " ints."); + } + } + + public LcioDataBank(double[] doubleVals) + { + this.doubleVals = new double[doubleVals.length]; + arraycopy(doubleVals, 0, this.doubleVals, 0, doubleVals.length); + ndouble = this.doubleVals.length; + if (DEBUG) + { + System.out.println("Made LcioDataBank with " + ndouble + " doubles."); + } + } + + public int getNInt() + { + return nint; + } + + public int getNFloat() + { + return nfloat; + } + + public int getNDouble() + { + return ndouble; + } + + public int getIntVal(int index) + { + return intVals[index]; + } + + public float getFloatVal(int index) + { + return floatVals[index]; + } + + public double getDoubleVal(int index) + { + return doubleVals[index]; + } + + public boolean isFixedSize() + { + return false; + } + } + + /** + * Print out GenericObject values. + * @param lcioObj The GenericObject to be printed. + * @param ps The PrintStream to be used. + */ + private static void printOut(GenericObject lcioObj, PrintStream ps) + { + if (lcioObj.getNDouble() != 0) + { + int ndouble = lcioObj.getNDouble(); + ps.print("[ "); + for (int i=0; i<ndouble; i++) + { + ps.print(lcioObj.getDoubleVal(i) + " "); + } + ps.println("]"); + } + if (lcioObj.getNInt() != 0) + { + int nint = lcioObj.getNInt(); + ps.print("[ "); + for (int i=0; i<nint; i++) + { + ps.print(lcioObj.getIntVal(i) + " "); + } + ps.println("]"); + } + if (lcioObj.getNFloat() != 0) + { + int nfloat = lcioObj.getNFloat(); + ps.print("[ "); + for (int i=0; i<nfloat; i++) + { + ps.print(lcioObj.getFloatVal(i) + " "); + } + ps.println("]"); + } + } + + /** + * Makes an ID hash from three EVIO headers. + * @param h1 The first header. + * @param h2 The second header. + * @param h3 The third header. + * @return An ID that sequentially concatenates the tag and number values of the headers. + */ + private static String makeHeaderId(BaseStructureHeader h1, BaseStructureHeader h2, BaseStructureHeader h3) + { + return Integer.toString(h1.getTag()) + Integer.toString(h1.getNumber()) + + Integer.toString(h2.getTag()) + Integer.toString(h2.getNumber()) + + Integer.toString(h3.getTag()) + Integer.toString(h3.getNumber()); + } + + /** + * Print out the values from an EVIO data bank. + * @param dataBank The EVIO bank. + * @param ps The PrintStream to use. + */ + private static void printOut(BaseStructure dataBank, PrintStream ps) + { + if (dataBank.getFloatData() != null) + { + ps.println("Data bank has " + dataBank.getFloatData().length + " floats."); + float[] floatData = dataBank.getFloatData(); + ps.print("[ "); + for (int i=0; i<floatData.length; i++) + { + ps.print(floatData[i] + " "); + } + ps.println("]"); + } + if (dataBank.getIntData() != null) + { + ps.println("Data bank has " + dataBank.getIntData().length + " ints."); + int[] intData = dataBank.getIntData(); + ps.print("[ "); + for (int i=0; i<intData.length; i++) + { + ps.print(intData[i] + " "); + } + ps.println("]"); + } + if (dataBank.getDoubleData() != null) + { + ps.println("Data bank has " + dataBank.getDoubleData().length + " doubles."); + double[] doubleData = dataBank.getDoubleData(); + ps.print("[ "); + for (int i=0; i<doubleData.length; i++) + { + ps.print(doubleData[i] + " "); + } + ps.println("]"); + } + if (dataBank.getByteData() != null) + { + ps.println("Data bank has " + dataBank.getByteData().length + " bytes."); + byte[] byteData = dataBank.getByteData(); + ps.print("[ "); + for (int i = 0; i < byteData.length; i++) + { + ps.print(byteData[i] + " "); + } + ps.println("]"); + } + } + + /** + * An (inefficient) method for finding a relation by its 'from' object. + * @param relations The list of all relations to check. + * @param o1 The from object to find. + * @return The matching LCRelation or null if does not exist. + */ + private static LCRelation findRelation(List<LCRelation> relations, Object o1) + { + LCRelation fnd = null; + for (LCRelation rel : relations) + { + if (rel.getFrom() == o1) + { + fnd = rel; + break; + } + } + return fnd; + } + + /** + * Copied from conditions system to setup dummy detector. + * @param detectorName The name of the detector (shouldn't actually matter). + */ + private static void setDummyDetector(String detectorName) + { + ConditionsManager cond = ConditionsManager.defaultInstance(); + ConditionsReader dummyReader = ConditionsReader.createDummy(); + ((ConditionsManagerImplementation)cond).setConditionsReader(dummyReader, detectorName); + DummyDetector detector = new DummyDetector(detectorName); + cond.registerConditionsConverter(new DummyConditionsConverter(detector)); + } +}
\ No newline at end of file
diff -N StandAlone.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ StandAlone.java 19 Jun 2012 18:09:35 -0000 1.1 @@ -0,0 +1,41 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ + +package org.lcsim.hps.users.mgraham.jlabrotation; + +//import org.lcsim.hps.examples.HeavyPhotonLLDriver; + +import java.io.File; +import java.io.IOException; + +import org.lcsim.util.loop.LCSimLoop; + +/** + * + * @author mgraham + */ +public class StandAlone { + public static void main(String[] args) throws IOException { + + LCSimLoop loop = new LCSimLoop(); + + // Download example file and set as input file + File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); + // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); +// + loop.setLCIORecordSource(file); + + // Or to read a local slcio file + //loop.setLCIORecordSource(new File("myFile.slcio")); + // Or to read a local stdhep file + //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); + // Or to read a list of files + //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); + loop.add(new HeavyPhotonLLDriver()); + loop.loop(10); // 0 means loop forever + loop.dispose(); + } + +}
diff -N alignment.StandAlone.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ alignment.StandAlone.java 19 Jun 2012 18:09:35 -0000 1.1 @@ -0,0 +1,46 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.lcsim.hps.users.mgraham.alignment; + +//import org.lcsim.hps.examples.HeavyPhotonLLDriver; +//import org.lcsim.hps.users.mgraham.jlabrotation.*; +import java.io.File; +import java.io.IOException; + +import org.lcsim.util.loop.LCSimLoop; + +/** + * + * @author mgraham + */ +public class StandAlone { + + public static void main(String[] args) throws IOException { + + LCSimLoop loop = new LCSimLoop(); + + // Download example file and set as input file +// File file = new File("/Users/mgraham/HPS/HPSData/ap2.2gev080mevsel_Concat0-HPS-Test-Alignment.slcio"); + File file = new File("/Users/mgraham/HPS/HPSData/ap2.2gev080mevsel_Concat0-HPS-Test-v1.8.slcio"); +// File file = new File("/Users/mgraham/HPS/ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm_SLIC-v2r10p7_geant4-v9r3p2_QGSP_BERT_HPS-Test-Alignment.slcio"); + // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); +// File file = new File("/Users/mgraham/HPS/HPSData/HPS-Dedicated-v3.4-ap2.2gev40mevsel_1_20u_beamspot_gammactau_0cm.xml"); + // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); +// + loop.setLCIORecordSource(file); + + // Or to read a local slcio file + //loop.setLCIORecordSource(new File("myFile.slcio")); + // Or to read a local stdhep file + //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); + // Or to read a list of files + //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); + loop.add(new HeavyPhotonLLDriver()); +// loop.loop(3); + loop.loop(250000); + + loop.dispose(); + } +}
diff -N mgraham.StandAlone.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mgraham.StandAlone.java 19 Jun 2012 18:09:35 -0000 1.1 @@ -0,0 +1,46 @@
+/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package org.lcsim.hps.users.mgraham; + +//import org.lcsim.hps.examples.HeavyPhotonLLDriver; +//import org.lcsim.hps.users.mgraham.jlabrotation.*; +import java.io.File; +import java.io.IOException; + +import org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver; +import org.lcsim.hps.recon.tracking.HPSSVTSensorSetup; +import org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup; +import org.lcsim.util.loop.LCSimLoop; + +/** + * + * @author mgraham + */ +public class StandAlone { + + public static void main(String[] args) throws IOException { + + LCSimLoop loop = new LCSimLoop(); + + // Download example file and set as input file +// File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); + File file = new File("/Users/mgraham/HPS/HPSData/TestRunReconNew.slcio"); + // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); +// + loop.setLCIORecordSource(file); + + // Or to read a local slcio file + //loop.setLCIORecordSource(new File("myFile.slcio")); + // Or to read a local stdhep file + //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); + // Or to read a list of files + //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); + loop.add(new HPSSVTSensorSetup()); + loop.add(new RawTrackerHitSensorSetup()); + loop.add(new HPSRawTrackerHitFitterDriver()); + loop.loop(5000); // 0 means loop forever + loop.dispose(); + } +}
diff -N StandAlone.java --- StandAlone.java 19 Jun 2012 00:07:33 -0000 1.4 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,46 +0,0 @@
-/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.lcsim.hps.users.mgraham; - -//import org.lcsim.hps.examples.HeavyPhotonLLDriver; -//import org.lcsim.hps.users.mgraham.jlabrotation.*; -import java.io.File; -import java.io.IOException; - -import org.lcsim.hps.recon.tracking.HPSRawTrackerHitFitterDriver; -import org.lcsim.hps.recon.tracking.HPSSVTSensorSetup; -import org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup; -import org.lcsim.util.loop.LCSimLoop; - -/** - * - * @author mgraham - */ -public class StandAlone { - - public static void main(String[] args) throws IOException { - - LCSimLoop loop = new LCSimLoop(); - - // Download example file and set as input file -// File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); - File file = new File("/Users/mgraham/HPS/HPSData/TestRunReconNew.slcio"); - // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); -// - loop.setLCIORecordSource(file); - - // Or to read a local slcio file - //loop.setLCIORecordSource(new File("myFile.slcio")); - // Or to read a local stdhep file - //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); - // Or to read a list of files - //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); - loop.add(new HPSSVTSensorSetup()); - loop.add(new RawTrackerHitSensorSetup()); - loop.add(new HPSRawTrackerHitFitterDriver()); - loop.loop(5000); // 0 means loop forever - loop.dispose(); - } -}
diff -N StandAlone.java --- StandAlone.java 19 Jun 2012 00:07:33 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,46 +0,0 @@
-/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.lcsim.hps.users.mgraham.alignment; - -//import org.lcsim.hps.examples.HeavyPhotonLLDriver; -//import org.lcsim.hps.users.mgraham.jlabrotation.*; -import java.io.File; -import java.io.IOException; - -import org.lcsim.util.loop.LCSimLoop; - -/** - * - * @author mgraham - */ -public class StandAlone { - - public static void main(String[] args) throws IOException { - - LCSimLoop loop = new LCSimLoop(); - - // Download example file and set as input file -// File file = new File("/Users/mgraham/HPS/HPSData/ap2.2gev080mevsel_Concat0-HPS-Test-Alignment.slcio"); - File file = new File("/Users/mgraham/HPS/HPSData/ap2.2gev080mevsel_Concat0-HPS-Test-v1.8.slcio"); -// File file = new File("/Users/mgraham/HPS/ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm_SLIC-v2r10p7_geant4-v9r3p2_QGSP_BERT_HPS-Test-Alignment.slcio"); - // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); -// File file = new File("/Users/mgraham/HPS/HPSData/HPS-Dedicated-v3.4-ap2.2gev40mevsel_1_20u_beamspot_gammactau_0cm.xml"); - // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); -// - loop.setLCIORecordSource(file); - - // Or to read a local slcio file - //loop.setLCIORecordSource(new File("myFile.slcio")); - // Or to read a local stdhep file - //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); - // Or to read a list of files - //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); - loop.add(new HeavyPhotonLLDriver()); -// loop.loop(3); - loop.loop(250000); - - loop.dispose(); - } -}
diff -N StandAlone.java --- StandAlone.java 19 Jun 2012 00:07:33 -0000 1.2 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,41 +0,0 @@
-/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ - -package org.lcsim.hps.users.mgraham.jlabrotation; - -//import org.lcsim.hps.examples.HeavyPhotonLLDriver; - -import java.io.File; -import java.io.IOException; - -import org.lcsim.util.loop.LCSimLoop; - -/** - * - * @author mgraham - */ -public class StandAlone { - public static void main(String[] args) throws IOException { - - LCSimLoop loop = new LCSimLoop(); - - // Download example file and set as input file - File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-JLAB-v2pt0-ap2.2gev80mevsel_1JLAB_200ux20u_beamspot_gammactau_0cm.slcio"); - // File file = new File("/Users/mgraham/HPS/HPSData/HPS-Test-v1.8-ap2.2gev80mevsel_21_20ux200u_beamspot_gammactau_0cm.slcio"); -// - loop.setLCIORecordSource(file); - - // Or to read a local slcio file - //loop.setLCIORecordSource(new File("myFile.slcio")); - // Or to read a local stdhep file - //loop.setStdhepRecordSource(new File("myFile.stdhep"),"sid01"); - // Or to read a list of files - //loop.setLCIORecordSource(new LCIOEventSource(new FileList(new File("myFileList.filelist"),"My File List"))); - loop.add(new HeavyPhotonLLDriver()); - loop.loop(10); // 0 means loop forever - loop.dispose(); - } - -}
diff -N EvioToLcioTest.java --- EvioToLcioTest.java 19 Jun 2012 00:07:33 -0000 1.3 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,832 +0,0 @@
-package org.lcsim.hps.evio; - -import static java.lang.System.arraycopy; - -import java.io.File; -import java.io.IOException; -import java.io.PrintStream; -import java.net.URL; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Vector; - -import junit.framework.TestCase; - -import org.jlab.coda.jevio.BaseStructure; -import org.jlab.coda.jevio.BaseStructureHeader; -import org.jlab.coda.jevio.EvioEvent; -import org.jlab.coda.jevio.EvioException; -import org.jlab.coda.jevio.EvioFile; -import org.lcsim.conditions.ConditionsManager; -import org.lcsim.conditions.ConditionsManagerImplementation; -import org.lcsim.conditions.ConditionsReader; -import org.lcsim.event.EventHeader; -import org.lcsim.event.GenericObject; -import org.lcsim.event.LCRelation; -import org.lcsim.event.base.BaseLCRelation; -import org.lcsim.event.base.BaseLCSimEvent; -import org.lcsim.util.Driver; -import org.lcsim.util.cache.FileCache; -import org.lcsim.util.lcio.LCIOWriter; -import org.lcsim.util.loop.DummyConditionsConverter; -import org.lcsim.util.loop.DummyDetector; -import org.lcsim.util.loop.LCSimLoop; - -/** - * Test that generically converts an EVIO v3 file into a collection of LCIO GenericObjects. - * Each data bank is copied into a corresponding GenericObject which has an associated object with its bank metadata. - * No type conversion to LCIO classes is performed. This can be done in a subsequent step within the LCSim event loop. - * - * @author Jeremy McCormick - * @version $Id: EvioToLcioTest.java,v 1.3 2012/06/19 00:07:33 jeremy Exp $ - */ -public class EvioToLcioTest extends TestCase -{ - // Control flags for debugging. Change these by hand and recompile to use. - static private final boolean DEBUG = false; // Set to true for a lot of debug prints. - static private final boolean BREAK_AFTER_SINGLE_EVENT = false; // Set to true to stop after one event. - static private final boolean WRITE_XML = false; // Set to true to write the EVIO file as XML before the conversion begins. - - // Converted LCIO file name. - static final private String outputFilePath = "./EvioCnvTest.slcio"; - - // URL pointing to test data from Maurik, which was generated by the GEMC simulation. - static final private String testFileUrl = "http://www.lcsim.org/test/hps/hps_test_data_2011_nov_18_1.evio"; - - /** - * Convert an EVIO file to LCIO and then read them back in parallel to check the output. - */ - public void testEvio2Lcio() - { - // Setup the file cache. - FileCache cache = null; - File testFile = null; - try - { - cache = new FileCache(new File(".testdata")); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - - // Get the test file to the local machine. - try - { - testFile = cache.getCachedFile(new URL(testFileUrl)); - } - catch (Exception x) - { - throw new RuntimeException(x); - } - - // Convert a test EVIO file to LCIO. - String[] args = new String[2]; - try - { - args[0] = testFile.getCanonicalPath(); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - args[1] = outputFilePath; - (new Evio2LcioConverter()).main(args); - - if (DEBUG) - { - System.out.println("-----------------------"); - } - - // Test that the LCIO data matches the EVIO. - readBackLcio(new File(outputFilePath), testFile); - } - - /** - * Example class for generically converting EVIO data to LCIO. - */ - private static class Evio2LcioConverter - { - String bankInfoCollName = "BankInfo"; - String rawDataCollName = "RawDataBank"; - String relCollName = "BankInfoRelations"; - - public Evio2LcioConverter() - {} - - public void main(String[] args) - { - // Use dummy detector for LCSim conditions to avoid errors. - setDummyDetector("DUMMY"); - - // Check and set user arguments. - if (args.length < 2) - throw new RuntimeException("Not enough arguments."); - String inFilePath = args[0]; - String outputFilePath = args[1]; - - // Open the EVIO file for reading. - EvioFile evioFile = null; - try - { - evioFile = new EvioFile(inFilePath); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - - // Write out test XML file with EVIO structure and data. - if (WRITE_XML) - { - System.out.println("Writing EVIO data to XML file ..."); - evioFile.toXMLFile("EvioTest.xml"); - } - - // Read the first EVIO event outside the processing loop. - EvioEvent evioEvent = null; - int nread = 0; - try - { - evioEvent = evioFile.parseNextEvent(); - ++nread; - } - catch (EvioException x) - { - throw new RuntimeException(x); - } - - if (DEBUG) - { - System.out.println("Read first EVIO event OKAY."); - } - - // Open new LCIOWriter for converted output. - LCIOWriter writer = null; - try - { - writer = new LCIOWriter(outputFilePath); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - - if (DEBUG) - System.out.println(); - - // Loop over EVIO events. - while (evioEvent != null) - { - // Make a new LCIO event. - // FIXME EVIO event numbers all seem to be zero in the test file. - // FIXME Set run number. - BaseLCSimEvent lcioEvent = new BaseLCSimEvent(0, evioEvent.getEventNumber(), "DUMMY"); - - // GenericObject collection to fill with the raw data. - List<GenericObject> objectColl = new ArrayList<GenericObject>(); - - // LCRelation list to connect bank info with data. - List<LCRelation> bankRelColl = new ArrayList<LCRelation>(); - - // Map to represent bank tag and number info. - Map<String, GenericObject> bankIds = new HashMap<String, GenericObject>(); - - // Loop over the EVIO data banks. - Vector<BaseStructure> children = evioEvent.getChildren(); - for (BaseStructure topBank : children) - { - BaseStructureHeader topHeader = topBank.getHeader(); - if (topBank.getChildCount() > 0) - { - for (BaseStructure subBank : topBank.getChildren()) - { - BaseStructureHeader subHeader = subBank.getHeader(); - if (subBank.getChildCount() > 0) - { - for (BaseStructure dataBank : subBank.getChildren()) - { - BaseStructureHeader dataBankHeader = dataBank.getHeader(); - - // Make a concatenated ID for this bank. - String bankId = makeHeaderId(topHeader, subHeader, dataBankHeader); - - // Make a new GenericObject for this bank's info. - if (bankIds.get(bankId) == null) - { - int[] bankInfo = new int[6]; - bankInfo[0] = topHeader.getTag(); - bankInfo[1] = topHeader.getNumber(); - bankInfo[2] = subHeader.getTag(); - bankInfo[3] = subHeader.getNumber(); - bankInfo[4] = dataBankHeader.getTag(); - bankInfo[5] = dataBankHeader.getNumber(); - bankIds.put(bankId, new LcioDataBankInfo(bankInfo)); - } - - // Get the bank info. - GenericObject bankInfo = bankIds.get(bankId); - - //System.out.println("BankInfo: tag = " + bankInfo.getIntVal(0) + "; number = " + bankInfo.getIntVal(1)); - - if (DEBUG) - { - printOut(dataBank, System.out); - } - - // LCIO object to represent one bank of data. - LcioDataBank lcioData = null; - - // Float data. - if (dataBank.getFloatData() != null) - { - lcioData = new LcioDataBank(dataBank.getFloatData()); - } - // Int data. - if (dataBank.getIntData() != null) - { - lcioData = new LcioDataBank(dataBank.getIntData()); - } - // Double data. - if (dataBank.getDoubleData() != null) - { - lcioData = new LcioDataBank(dataBank.getDoubleData()); - } - // FIXME: How to handle raw byte data? Copy to int array with values between 0 and 255? - // Could also pack the data 4 to a 32-bit int or 8 to 64. - - // Setup relation pointing from bank data to its info. - if (lcioData != null) - { - objectColl.add(lcioData); - LCRelation relation = new BaseLCRelation(lcioData, bankInfo); - bankRelColl.add(relation); - } - - if (DEBUG) - { - System.out.println(); - } - } - } - } - } - } - - // Put the data bank info into the LCIO event. - List<GenericObject> bankInfoList = new ArrayList<GenericObject>(bankIds.values()); - lcioEvent.put(bankInfoCollName, bankInfoList, GenericObject.class, 0); - - // Put the GenericObject object collection containing the block data into the event. - lcioEvent.put(rawDataCollName, objectColl, GenericObject.class, 0); - - // Put the relations into the event. - lcioEvent.put(relCollName, bankRelColl, LCRelation.class, 0); - - // Write out the LCIO event. - try - { - writer.write(lcioEvent); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - - // Check if need to break on one event. - if (BREAK_AFTER_SINGLE_EVENT) - break; - - // Read next EVIO event. - try - { - evioEvent = evioFile.parseNextEvent(); - ++nread; - } - catch (EvioException x) - { - throw new RuntimeException(x); - } - } - - try - { - writer.close(); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - - if (DEBUG) - { - System.out.println("Read " + nread + " EVIO events OKAY."); - } - } - } - - private static void readBackLcio(File lcioFile, File evioFile) - { - LCSimLoop loop = new LCSimLoop(); - loop.setDummyDetector("DUMMY"); - try - { - loop.setLCIORecordSource(lcioFile); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - LcioCheckDriver checkDriver = new LcioCheckDriver(); - try - { - checkDriver.setEvioFilePath(evioFile.getCanonicalPath()); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - loop.add(checkDriver); - try - { - loop.loop(-1, null); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - } - - /** - * Read back the LCIO event and check that the data matches the corresponding EVIO file. - */ - static private class LcioCheckDriver extends Driver - { - // Number of events read. - int nread = 0; - - // Settable path to EVIO file. - String evioFilePath = null; - - // The EVIO file for comparison. - EvioFile evioFile = null; - - // The current EVIO event. - EvioEvent evioEvent = null; - - public LcioCheckDriver() - {} - - /** - * Set the path of the EVIO file to be checked against. - * @param evioFilePath The path to the EVIO file. - */ - public void setEvioFilePath(String evioFilePath) - { - this.evioFilePath = evioFilePath; - } - - public void startOfData() - { - // Open the EVIO file for reading. - if (evioFilePath == null) - { - throw new RuntimeException("The EVIO file path was not set!"); - } - try - { - evioFile = new EvioFile(evioFilePath); - } - catch (IOException x) - { - throw new RuntimeException(x); - } - nread = 0; - } - - // FIXME The names of the LCIO collections are hard-coded and correspond to the defaults from the converter class. - public void process(EventHeader event) - { - if (DEBUG) - { - System.out.println("Processing event #" + event.getEventNumber()); - } - - // Read in next EVIO event which should match up with this LCIO event. - try - { - evioEvent = evioFile.parseNextEvent(); - } - catch (EvioException x) - { - throw new RuntimeException(x); - } - - // Make a list of EVIO banks to check. Only the leaf banks with data are added to the list. - Vector<BaseStructure> children = evioEvent.getChildren(); - List<BaseStructure> evioBanks = new ArrayList<BaseStructure>(); - for (BaseStructure topBank : children) - { - if (topBank.getChildCount() > 0) - { - for (BaseStructure subBank : topBank.getChildren()) - { - if (subBank.getChildCount() > 0) - { - for (BaseStructure dataBank : subBank.getChildren()) - { - // Only add leaf banks containing some data. - if (dataBank.getFloatData() != null || dataBank.getDoubleData() != null || dataBank.getIntData() != null) - { - evioBanks.add(dataBank); - } - } - } - } - } - } - - if (DEBUG) - { - System.out.println("EVIO event has " + evioBanks.size() + " data banks."); - } - - // Get the GenericObject collection containing the bank data. - List<GenericObject> lcioDataColl = event.get(GenericObject.class, "RawDataBank"); - - // Get the list of relations to bank info. - List<LCRelation> infoRel = event.get(LCRelation.class, "BankInfoRelations"); - - if (DEBUG) - { - System.out.println("LCIO collection RawDataBank has " + lcioDataColl.size() + " generic objects."); - } - - // Check that number of banks and GenericObjects is the same. - assertEquals("Number of EVIO data banks and LCIO GenericObjects does not match.", evioBanks.size(), lcioDataColl.size()); - - // Loop over the LCIO GenericObject collection. - int ibank = 0; - for (GenericObject lcioObj : lcioDataColl) - { - // Get the next bank from the EVIO file. - BaseStructure evioBank = evioBanks.get(ibank); - - if (DEBUG) - { - System.out.println("GenericObject ..."); - System.out.println(" ndoubles = " + lcioObj.getNDouble()); - System.out.println(" nfloats = " + lcioObj.getNFloat()); - System.out.println(" nints = " + lcioObj.getNInt()); - printOut(lcioObj, System.out); - } - - // Find the info relation for this data. - LCRelation rel = findRelation(infoRel, lcioObj); - - // Check that the relation exists. - TestCase.assertTrue("Could not find corresponding bank info for GenericObject.", rel != null); - - // Get the bank info. - GenericObject bankInfo = (GenericObject)rel.getTo(); - - if (DEBUG) - { - System.out.println("LCIO BankInfo ..."); - printOut(bankInfo, System.out); - System.out.println("EVIO Header; tag = " + evioBank.getHeader().getTag() + "; number = " + evioBank.getHeader().getNumber()); - } - - // Check that data bank info matches the EVIO file. This just checks the last tag and number. - assertEquals("Bank tag does not match EVIO.", evioBank.getHeader().getTag(), bankInfo.getIntVal(4)); - assertEquals("Bank number does not match EVIO.", evioBank.getHeader().getNumber(), bankInfo.getIntVal(5)); - - // Check double values. - if (lcioObj.getNDouble() != 0) - { - double[] evioDoubleData = evioBank.getDoubleData(); - int ndouble = evioDoubleData.length; - assertEquals("Number of doubles in GenericObject and EVIO bank don't match.", ndouble, lcioObj.getNDouble()); - for (int i=0; i<ndouble; i++) - { - // Seems that we need a big tolerance for this to pass! - assertEquals("EVIO double value does not match LCIO.", evioDoubleData[i], lcioObj.getDoubleVal(i), 1e-2); - } - } - - // Check int values. - if (lcioObj.getNInt() != 0) - { - int[] evioIntData = evioBank.getIntData(); - int nint = evioIntData.length; - assertEquals("Number of ints in GenericObject and EVIO bank don't match.", nint, lcioObj.getNInt()); - for (int i=0; i<nint; i++) - { - assertEquals("EVIO int value does not match LCIO.", evioIntData[i], lcioObj.getIntVal(i), 1e-2); - } - } - - // Check float values. - if (lcioObj.getNFloat() != 0) - { - float[] evioFloatData = evioBank.getFloatData(); - int nfloat = evioFloatData.length; - assertEquals("Number of floats in GenericObject and EVIO bank don't match.", nfloat, lcioObj.getNInt()); - for (int i=0; i<nfloat; i++) - { - assertEquals("EVIO float value does not match LCIO.", evioFloatData[i], lcioObj.getDoubleVal(i)); - } - } - - // Increment EVIO bank number. - ++ibank; - } - if (DEBUG) - { - System.out.println("Read " + event.getEventNumber() + " LCIO events OKAY."); - } - ++nread; - } - - public void endOfData() - { - if (DEBUG) - { - System.out.println(this.getClass().getSimpleName() + " read " + nread + " events OKAY."); - } - evioFile.close(); - } - } - - /** - * Represents the tag and number values from a set of EVIO banks. - */ - private static class LcioDataBankInfo implements GenericObject - { - private static final int BANK_INFO_SIZE = 6; - int[] bankInfo = new int[BANK_INFO_SIZE]; - - public LcioDataBankInfo(int[] bankInfo) - { - this.bankInfo = bankInfo; - } - - public int getNInt() - { - return BANK_INFO_SIZE; - } - - public int getNFloat() - { - return 0; - } - - public int getNDouble() - { - return 0; - } - - public int getIntVal(int index) - { - return bankInfo[index]; - } - - public float getFloatVal(int index) - { - return 0; - } - - public double getDoubleVal(int index) - { - return 0; - } - - public boolean isFixedSize() - { - return true; - } - } - - /** - * Implementation of GenericObject to represent an EVIO data bank in LCIO. - */ - private static class LcioDataBank implements GenericObject - { - float[] floatVals = null; - double[] doubleVals = null; - int[] intVals = null; - - int nint = 0; - int nfloat = 0; - int ndouble = 0; - - public LcioDataBank(float[] floatVals) - { - this.floatVals = new float[floatVals.length]; - arraycopy(floatVals, 0, this.floatVals, 0, floatVals.length); - nfloat = this.floatVals.length; - if (DEBUG) - { - System.out.println("Made LcioDataBank with " + nfloat + " floats."); - } - } - - public LcioDataBank(int[] intVals) - { - this.intVals = new int[intVals.length]; - arraycopy(intVals, 0, this.intVals, 0, intVals.length); - nint = this.intVals.length; - if (DEBUG) - { - System.out.println("Made LcioDataBank with " + nint + " ints."); - } - } - - public LcioDataBank(double[] doubleVals) - { - this.doubleVals = new double[doubleVals.length]; - arraycopy(doubleVals, 0, this.doubleVals, 0, doubleVals.length); - ndouble = this.doubleVals.length; - if (DEBUG) - { - System.out.println("Made LcioDataBank with " + ndouble + " doubles."); - } - } - - public int getNInt() - { - return nint; - } - - public int getNFloat() - { - return nfloat; - } - - public int getNDouble() - { - return ndouble; - } - - public int getIntVal(int index) - { - return intVals[index]; - } - - public float getFloatVal(int index) - { - return floatVals[index]; - } - - public double getDoubleVal(int index) - { - return doubleVals[index]; - } - - public boolean isFixedSize() - { - return false; - } - } - - /** - * Print out GenericObject values. - * @param lcioObj The GenericObject to be printed. - * @param ps The PrintStream to be used. - */ - private static void printOut(GenericObject lcioObj, PrintStream ps) - { - if (lcioObj.getNDouble() != 0) - { - int ndouble = lcioObj.getNDouble(); - ps.print("[ "); - for (int i=0; i<ndouble; i++) - { - ps.print(lcioObj.getDoubleVal(i) + " "); - } - ps.println("]"); - } - if (lcioObj.getNInt() != 0) - { - int nint = lcioObj.getNInt(); - ps.print("[ "); - for (int i=0; i<nint; i++) - { - ps.print(lcioObj.getIntVal(i) + " "); - } - ps.println("]"); - } - if (lcioObj.getNFloat() != 0) - { - int nfloat = lcioObj.getNFloat(); - ps.print("[ "); - for (int i=0; i<nfloat; i++) - { - ps.print(lcioObj.getFloatVal(i) + " "); - } - ps.println("]"); - } - } - - /** - * Makes an ID hash from three EVIO headers. - * @param h1 The first header. - * @param h2 The second header. - * @param h3 The third header. - * @return An ID that sequentially concatenates the tag and number values of the headers. - */ - private static String makeHeaderId(BaseStructureHeader h1, BaseStructureHeader h2, BaseStructureHeader h3) - { - return Integer.toString(h1.getTag()) + Integer.toString(h1.getNumber()) + - Integer.toString(h2.getTag()) + Integer.toString(h2.getNumber()) + - Integer.toString(h3.getTag()) + Integer.toString(h3.getNumber()); - } - - /** - * Print out the values from an EVIO data bank. - * @param dataBank The EVIO bank. - * @param ps The PrintStream to use. - */ - private static void printOut(BaseStructure dataBank, PrintStream ps) - { - if (dataBank.getFloatData() != null) - { - ps.println("Data bank has " + dataBank.getFloatData().length + " floats."); - float[] floatData = dataBank.getFloatData(); - ps.print("[ "); - for (int i=0; i<floatData.length; i++) - { - ps.print(floatData[i] + " "); - } - ps.println("]"); - } - if (dataBank.getIntData() != null) - { - ps.println("Data bank has " + dataBank.getIntData().length + " ints."); - int[] intData = dataBank.getIntData(); - ps.print("[ "); - for (int i=0; i<intData.length; i++) - { - ps.print(intData[i] + " "); - } - ps.println("]"); - } - if (dataBank.getDoubleData() != null) - { - ps.println("Data bank has " + dataBank.getDoubleData().length + " doubles."); - double[] doubleData = dataBank.getDoubleData(); - ps.print("[ "); - for (int i=0; i<doubleData.length; i++) - { - ps.print(doubleData[i] + " "); - } - ps.println("]"); - } - if (dataBank.getByteData() != null) - { - ps.println("Data bank has " + dataBank.getByteData().length + " bytes."); - byte[] byteData = dataBank.getByteData(); - ps.print("[ "); - for (int i = 0; i < byteData.length; i++) - { - ps.print(byteData[i] + " "); - } - ps.println("]"); - } - } - - /** - * An (inefficient) method for finding a relation by its 'from' object. - * @param relations The list of all relations to check. - * @param o1 The from object to find. - * @return The matching LCRelation or null if does not exist. - */ - private static LCRelation findRelation(List<LCRelation> relations, Object o1) - { - LCRelation fnd = null; - for (LCRelation rel : relations) - { - if (rel.getFrom() == o1) - { - fnd = rel; - break; - } - } - return fnd; - } - - /** - * Copied from conditions system to setup dummy detector. - * @param detectorName The name of the detector (shouldn't actually matter). - */ - private static void setDummyDetector(String detectorName) - { - ConditionsManager cond = ConditionsManager.defaultInstance(); - ConditionsReader dummyReader = ConditionsReader.createDummy(); - ((ConditionsManagerImplementation)cond).setConditionsReader(dummyReader, detectorName); - DummyDetector detector = new DummyDetector(detectorName); - cond.registerConditionsConverter(new DummyConditionsConverter(detector)); - } -}
\ No newline at end of file
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1