Print

Print


Commit in hps-java on MAIN
sandbox/EvioToLcioTest.java+832added 1.1
       /StandAlone.java+41added 1.1
       /alignment.StandAlone.java+46added 1.1
       /mgraham.StandAlone.java+46added 1.1
src/main/java/org/lcsim/hps/users/mgraham/StandAlone.java-461.4 removed
src/main/java/org/lcsim/hps/users/mgraham/alignment/StandAlone.java-461.2 removed
src/main/java/org/lcsim/hps/users/mgraham/jlabrotation/StandAlone.java-411.2 removed
src/test/java/org/lcsim/hps/evio/EvioToLcioTest.java-8321.3 removed
+965-965
4 added + 4 removed, total 8 files
sandbox some code that is causing me headaches

hps-java/sandbox
EvioToLcioTest.java added at 1.1
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

hps-java/sandbox
StandAlone.java added at 1.1
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();
+    }
+
+}

hps-java/sandbox
alignment.StandAlone.java added at 1.1
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();
+    }
+}

hps-java/sandbox
mgraham.StandAlone.java added at 1.1
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();
+    }
+}

hps-java/src/main/java/org/lcsim/hps/users/mgraham
StandAlone.java removed after 1.4
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();
-    }
-}

hps-java/src/main/java/org/lcsim/hps/users/mgraham/alignment
StandAlone.java removed after 1.2
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();
-    }
-}

hps-java/src/main/java/org/lcsim/hps/users/mgraham/jlabrotation
StandAlone.java removed after 1.2
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();
-    }
-
-}

hps-java/src/test/java/org/lcsim/hps/evio
EvioToLcioTest.java removed after 1.3
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
CVSspam 0.2.12


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