Print

Print


Commit in java/trunk/integration-tests/src/test/java/org/hps on MAIN
MCReconTest.java+114added 1062
Add meaningful test assertions.  This test probably still needs some work.

java/trunk/integration-tests/src/test/java/org/hps
MCReconTest.java added at 1062
--- java/trunk/integration-tests/src/test/java/org/hps/MCReconTest.java	                        (rev 0)
+++ java/trunk/integration-tests/src/test/java/org/hps/MCReconTest.java	2014-09-19 02:56:59 UTC (rev 1062)
@@ -0,0 +1,114 @@
+package org.hps;
+
+import java.io.File;
+
+import junit.framework.TestCase;
+
+import org.lcsim.event.CalorimeterHit;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.ReconstructedParticle;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.job.JobControlManager;
+import org.lcsim.util.Driver;
+import org.lcsim.util.test.TestUtil.TestOutputFile;
+
+/**
+ * Run the reconstruction on output from the readout simulation.
+ * 
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public class MCReconTest extends TestCase {
+    
+    File reconOutputFile = new TestOutputFile("recon");
+    File inputFile = new File("/nfs/slac/g/hps3/data/testcase/MCReconTestInput.slcio");
+    
+    static final int TOTAL_CLUSTERS = 3960;        
+    static final int TOTAL_TRACKER_HITS = 28129;
+    static final int TOTAL_CALORIMETER_HITS = 61924;
+       
+    static final long TOTAL_RECON_EVENTS = 945;
+    static final int TOTAL_TRACKS = 1990;
+    static final int TOTAL_TRACKS_DELTA = 13;
+    static final int TOTAL_TRACKS_LOWER = TOTAL_TRACKS - TOTAL_TRACKS_DELTA;
+    static final int TOTAL_TRACKS_UPPER = TOTAL_TRACKS + TOTAL_TRACKS_DELTA;
+    
+    static final int TOTAL_RECONSTRUCTED_PARTICLES = 4341; 
+    static final int TOTAL_RECONSTRUCTED_PARTICLES_DELTA = 9;
+    static final int TOTAL_RECONSTRUCTED_PARTICLES_LOWER = TOTAL_RECONSTRUCTED_PARTICLES - TOTAL_RECONSTRUCTED_PARTICLES_DELTA;
+    static final int TOTAL_RECONSTRUCTED_PARTICLES_UPPER = TOTAL_RECONSTRUCTED_PARTICLES + TOTAL_RECONSTRUCTED_PARTICLES_DELTA;
+        
+    public void testMCRecon() throws Exception {
+        
+        System.out.println("Running MC recon on " + inputFile.getPath() + " ...");
+        JobControlManager job = new JobControlManager();
+        job.addVariableDefinition("outputFile", reconOutputFile.getPath());
+        job.addInputFile(inputFile);
+        job.setup("/org/hps/steering/recon/HPS2014OfflineTruthRecon.lcsim");
+        ReconCheckDriver reconCheckDriver = new ReconCheckDriver();
+        job.getLCSimLoop().add(reconCheckDriver);
+        long startMillis = System.currentTimeMillis();
+        job.run();
+        long elapsedMillis = System.currentTimeMillis() - startMillis;
+        long nevents = job.getLCSimLoop().getTotalSupplied();
+        System.out.println("MC recon processed " + job.getLCSimLoop().getTotalSupplied() + " events.");
+        System.out.print("MC recon took " + ((double)elapsedMillis/1000L) + " seconds");
+        System.out.println(" which is " + ((double)elapsedMillis / (double)nevents) + " ms per event.");
+        job.getLCSimLoop().dispose();
+                
+        TestCase.assertEquals("Number of recon events processed was wrong.", TOTAL_RECON_EVENTS, nevents);     
+                                
+        assertEquals("Wrong number of tracker hits.", TOTAL_TRACKER_HITS, reconCheckDriver.nTrackerHits);
+        assertEquals("Wrong number of calorimeter hits.", TOTAL_CALORIMETER_HITS, reconCheckDriver.nCalorimeterHits);
+        assertEquals("Wrong number of clusters.", TOTAL_CLUSTERS, reconCheckDriver.nClusters);
+        TestCase.assertTrue("Number of tracks not within acceptable range.", 
+                (reconCheckDriver.nTracks >= TOTAL_TRACKS_LOWER && reconCheckDriver.nTracks <= TOTAL_TRACKS_UPPER));
+        assertTrue("Number of reconstructed particles not within acceptable range.", 
+                (reconCheckDriver.nReconstructedParticles >= TOTAL_RECONSTRUCTED_PARTICLES_LOWER 
+                && reconCheckDriver.nReconstructedParticles <= TOTAL_RECONSTRUCTED_PARTICLES_UPPER));
+    }          
+    
+    static class ReconCheckDriver extends Driver {
+        
+        int nTracks;
+        int nClusters;        
+        int nTrackerHits;
+        int nCalorimeterHits;
+        int nReconstructedParticles;
+        int nEvents;
+        
+        public void process(EventHeader event) {
+            //System.out.println("ReconCheckDriver - event #" + event.getEventNumber());
+            ++nEvents;
+            if (event.hasCollection(Track.class, "MatchedTracks")) {
+                nTracks += event.get(Track.class, "MatchedTracks").size();
+                //System.out.println("  MatchedTracks: " + event.get(Track.class, "MatchedTracks").size());
+            }
+            if (event.hasCollection(Cluster.class, "EcalClusters")) {
+                nClusters += event.get(Cluster.class, "EcalClusters").size();
+                //System.out.println("  EcalClusters: " + event.get(Cluster.class, "EcalClusters").size());
+            }
+            if (event.hasCollection(TrackerHit.class, "RotatedHelicalTrackHits")) {
+                nTrackerHits += event.get(TrackerHit.class, "RotatedHelicalTrackHits").size();
+            }
+            if (event.hasCollection(CalorimeterHit.class, "EcalCalHits")) {
+                nCalorimeterHits += event.get(CalorimeterHit.class, "EcalCalHits").size();
+            }
+            if (event.hasCollection(ReconstructedParticle.class, "FinalStateParticles")) {
+                nReconstructedParticles += event.get(ReconstructedParticle.class, "FinalStateParticles").size();
+                //System.out.println("  FinalStateParticles: " + event.get(ReconstructedParticle.class, "FinalStateParticles").size());
+            }
+        }        
+        
+        public void endOfData() {
+            System.out.println("ReconCheckDriver results ...");
+            System.out.println("  nEvents: " + nEvents);
+            System.out.println("  nTracks: " + nTracks);
+            System.out.println("  nClusters: " + nClusters);
+            System.out.println("  nTrackerHits: " + nTrackerHits);
+            System.out.println("  nCalorimeterHits: " + nCalorimeterHits);
+            System.out.println("  nReconstructedParticles: " + nReconstructedParticles);
+        }
+    }              
+}
SVNspam 0.1