lcsim/test/org/lcsim/recon/cluster/directedtree
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