Commit in lcsim/test/org/lcsim/recon/cluster/directedtree on MAIN
DirectedTreeCompareTest.java+114added 1.1
JM: DT comparison test for tracking any changes to LCIO output

lcsim/test/org/lcsim/recon/cluster/directedtree
DirectedTreeCompareTest.java added at 1.1
diff -N DirectedTreeCompareTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ DirectedTreeCompareTest.java	26 Jun 2008 23:47:03 -0000	1.1
@@ -0,0 +1,114 @@
+package org.lcsim.recon.cluster.directedtree;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.lcsim.digisim.DigiSimDriver;
+import org.lcsim.digisim.SimCalorimeterHitsDriver;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.EventHeader.LCMetaData;
+import org.lcsim.recon.cluster.util.CalHitMapDriver;
+import org.lcsim.util.cache.FileCache;
+import org.lcsim.util.lcio.LCIOReader;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.loop.LCSimLoop;
+import org.lcsim.util.test.TestUtil.TestOutputFile;
+
+/**
+ * Tests that the output of the DirectedTreeDriver matches a test file from lcsim.org. 
+ * @author Jeremy McCormick
+ */
+public class DirectedTreeCompareTest extends TestCase
+{
+	public void testDirectedTreeCompare() throws Exception
+	{
+		// Generate DT event with current lcsim version and save to test file.
+		URL url = new URL("http://www.lcsim.org/test/lcio/pythiaZPoleuds-0-1000_SLIC-v2r3p7_geant4-v9r0p1_LCPhys_sid01.slcio");
+		FileCache cache = new FileCache();
+		File file = cache.getCachedFile(url);
+		LCSimLoop loop = new LCSimLoop();
+		loop.setLCIORecordSource(file);	
+		loop.add(new CalHitMapDriver());
+		loop.add(new DigiSimDriver());
+		loop.add(new SimCalorimeterHitsDriver());		
+		loop.add(new DirectedTreeDriver());
+		File testOut = new TestOutputFile("DirectedTreeCompareTest.slcio");
+		loop.add(new LCIODriver(testOut));
+		loop.loop(1);
+		loop.dispose();
+
+		// Fetch the LCIO answer key generated with known lcsim version.
+		url = new URL("http://www.lcsim.org/test/lcio/DirectedTreeProdTest.slcio");
+		cache = new FileCache();
+		File fileAnswers = cache.getCachedFile(url);
+
+		// Read in the 2 files.
+		LCIOReader reader = new LCIOReader(fileAnswers);
+		LCIOReader readerCompare = new LCIOReader(testOut);
+
+		// Compare the 2 files.
+		compare(reader.read(), readerCompare.read());
+	}
+
+	public void compare(EventHeader event, EventHeader compareEvent)
+	{		
+		List<List<Cluster>> clusters = event.get(Cluster.class);
+		List<List<Cluster>> compareClusters = compareEvent.get(Cluster.class);
+
+		assertEquals(clusters.size(), compareClusters.size());
+
+		for (int i=0,n=clusters.size(); i<n; i++)
+		{							
+			// Get next cluster collection and its metadata.
+			List<Cluster> clusterCollection = clusters.get(i);				
+			LCMetaData meta = event.getMetaData(clusterCollection);
+			String name = meta.getName();
+
+			// Get the cluster collection by name from comparison event.
+			List<Cluster> compareClusterCollection = compareEvent.get(Cluster.class, name);
+
+			// Size of collections must be equal.
+			assertEquals(clusterCollection.size(), compareClusterCollection.size());
+
+			// Sort both cluster collections by energy.
+			CompareClusterE compare = new CompareClusterE();
+			Collections.sort(clusterCollection, compare);
+			Collections.sort(compareClusterCollection, compare);
+
+			// Detailed comparison of sorted cluster collections.
+			for (int j=0,nn=clusterCollection.size(); j<nn; j++)
+			{
+				Cluster cluster = clusterCollection.get(j);
+				Cluster compareCluster = compareClusterCollection.get(j);
+
+				// Cluster energies must be equal.
+				assertEquals(cluster.getEnergy(), compareCluster.getEnergy(), 10e-7);
+
+				// Number of hits must be equal.
+				assertEquals(cluster.getCalorimeterHits().size(), compareCluster.getCalorimeterHits().size());
+
+				//System.out.println("compared cluster " + cluster + " with compareCluster " + compareCluster + ", which is number " + j + " in collection " + name);
+			}
+		}
+	}
+
+	class CompareClusterE implements Comparator<Cluster>
+	{
+		public int compare(Cluster c1, Cluster c2)
+		{
+			double ediff = c1.getEnergy() - c2.getEnergy();
+			if (ediff < 0)
+				return -1;
+			else if (ediff == 0)
+				return 0;
+			else 
+				return 1;				 				
+		}         
+	}
+}
\ No newline at end of file
CVSspam 0.2.8