Print

Print


Author: [log in to unmask]
Date: Fri Aug 28 15:03:11 2015
New Revision: 3447

Log:
Modify ECal recon test so it runs on readout output; change expected test results to match.

Modified:
    java/trunk/integration-tests/src/test/java/org/hps/test/it/EcalSimReconTest.java

Modified: java/trunk/integration-tests/src/test/java/org/hps/test/it/EcalSimReconTest.java
 =============================================================================
--- java/trunk/integration-tests/src/test/java/org/hps/test/it/EcalSimReconTest.java	(original)
+++ java/trunk/integration-tests/src/test/java/org/hps/test/it/EcalSimReconTest.java	Fri Aug 28 15:03:11 2015
@@ -19,88 +19,150 @@
 import org.lcsim.util.loop.LCSimLoop;
 
 /**
- * Run readout simulation and full 2015 Engineering Run reconstruction on ECal MC input data and then check histograms of cluster data.
- * 
+ * Run readout simulation and full 2015 Engineering Run reconstruction on ECal MC input data and then check histograms
+ * of cluster data.
+ *
  * @author Jeremy McCormick, SLAC
  */
 public class EcalSimReconTest extends TestCase {
+
+    /**
+     * Driver for checking test output.
+     *
+     * @author Jeremy McCormick, SLAC
+     */
+    static class EcalSimReconCheckDriver extends Driver {
+
+        /**
+         * Setup AIDA histogramming.
+         */
+        private final static AIDA aida = AIDA.defaultInstance();
+
+        /**
+         * Count of clusters per event.
+         */
+        private final IHistogram1D clusCountH1D = aida.histogram1D("Cluster Count", 20, -0.5, 19.5);
+
+        /**
+         * Individual cluster energies.
+         */
+        private final IHistogram1D clusEnergyH1D = aida.histogram1D("Cluster Energy", 100, -0.5, 9.5);
+
+        /**
+         * Highest cluster energy in event.
+         */
+        private final IHistogram1D clusHighEnergyH1D = aida.histogram1D("Cluster Highest Energy", 100, -0.5, 9.5);
+
+        /**
+         * First hit time in highest energy cluster.
+         */
+        private final IHistogram1D clusTimeH1D = aida.histogram1D("Cluster Time", 500, -0.5, 499.5);
         
+        /**
+         * Number of clusters found.
+         */
+        private int clusterCount;
+
+        /**
+         * Save histograms and perform checks on statistics.
+         */
+        @Override
+        public void endOfData() {
+
+            // Print some statistics.
+            System.out.println("clus count: " + clusterCount);
+            System.out.println("mean clus per event: " + clusCountH1D.mean());
+            System.out.println("mean clus energy: " + clusEnergyH1D.mean());
+            System.out.println("high energy clus mean: " + clusHighEnergyH1D.mean());
+            System.out.println("mean clus time: " + clusTimeH1D.mean());
+
+            // Save plots to AIDA file.
+            try {
+                aida.saveAs(new TestOutputFile(EcalSimReconTest.class, "plots.aida"));
+            } catch (final IOException e) {
+                throw new RuntimeException(e);
+            }
+
+            // Check high cluster energy mean.
+            TestCase.assertEquals("High cluster energy does not match.", CLUS_HIGH_MEAN_E, 
+                    clusHighEnergyH1D.mean(), 0.0004);
+
+            // Check high cluster time mean.
+            TestCase.assertEquals("High cluster mean time does not match.", CLUS_MEAN_T, 
+                    clusTimeH1D.mean(), 0.03);
+            
+            // Check mean number of clusters per event.
+            TestCase.assertEquals("Mean number of clusters per event does not match.", CLUS_COUNT_MEAN,
+                    clusCountH1D.mean(), 0.002);
+            
+            // Check total number of clusters.
+            TestCase.assertEquals("Number of clusters does not match.", CLUS_COUNT, clusterCount, 1);
+        }
+
+        /**
+         * Process events and fill histograms from cluster collection.
+         */
+        @Override
+        public void process(final EventHeader event) {
+            final List<Cluster> clusters = event.get(Cluster.class, "EcalClustersCorr");
+            clusterCount += clusters.size();
+            clusCountH1D.fill(clusters.size());
+            for (final Cluster cluster : clusters) {
+                clusEnergyH1D.fill(cluster.getEnergy());
+                if (cluster.getEnergy() == 0) {
+                    throw new RuntimeException("Cluster has 0. energy.");
+                }                
+            }
+
+            final Cluster highClus = ClusterUtilities.findHighestEnergyCluster(clusters);
+            clusHighEnergyH1D.fill(highClus.getEnergy());
+            clusTimeH1D.fill(highClus.getCalorimeterHits().get(0).getTime());
+        }
+    }
+
     /**
-     * Test input file name on lcsim.org site.
+     * Expected mean time of primary cluster in nanoseconds.
      */
-    private static final String FILE_NAME = "egsv3-triv2-g4v1_s2d6_HPS-EngRun2015-Nominal-v1_101.slcio";
+    private static final double CLUS_MEAN_T = 58.89;
+
+    /**
+     * Expected mean of high cluster energy in GeV.
+     */
+    private static final double CLUS_HIGH_MEAN_E = 1.071;
     
     /**
-     * Steering resource file for readout simulation.
-     */    
-    private static final String READOUT_STEERING = "/org/hps/steering/readout/EngineeringRun2015TrigSingles1.lcsim";
+     * Expected mean number of clusters per event.     
+     */
+    private static final double CLUS_COUNT_MEAN = 2.95;
     
+    /**
+     * Expected total number of clusters.
+     */
+    private static final int CLUS_COUNT = 2549;
+  
     /**
      * Steering resource file for running reconstruction.
      */
     private static final String RECON_STEERING = "/org/hps/steering/recon/EngineeringRun2015FullReconMC.lcsim";
-    
+
     /**
      * Run number for conditions system.
      */
     private static final Integer RUN = 5000;
     
     /**
-     * Expected mean of high cluster energy in GeV.
-     */
-    private static final double HIGH_CLUS_MEAN_E = 1.05;
-    
-    /**
-     * Acceptable delta of high cluster mean energy in GeV.
-     */
-    private static final double HIGH_CLUS_DELTA_E = 0.05;
-    
-    /**
-     * Expected mean time of primary cluster in nanoseconds.
-     */
-    private static final double CLUS_MEAN_T = 58.6;   
-    
-    /**
-     * Acceptable delta of cluster time in nanoseconds.
-     */    
-    private static final double CLUS_DELTA_T = 5;
-    
-    /**
-     * Expected number of triggers.
-     */
-    private static final int TRIGGERS = 880;
-    
-    /**
-     * Acceptable delta of trigger count.
-     */
-    private static final int TRIGGER_DELTA = 5;
-
-    
-    /**
      * Run the test.
-     * 
+     *
      * @throws Exception if there is an uncaught exception thrown
      */
     public void testEcalSimRecon() throws Exception {
-        
+
         // Get the input events file.
-        File inputFile = TestFileUrl.getInputFile(EcalSimReconTest.class, FILE_NAME);
-                
-        // Run readout simulation on MC input.
-        File readoutFile = new TestOutputFile(EcalSimReconTest.class, "readout.slcio");
+        final File readoutFile = TestFileUrl.getInputFile(EcalSimReconTest.class, "readout.slcio");
+       
+        // Run the recon on the readout output.
+        final File reconFile = new TestOutputFile(EcalSimReconTest.class, "recon.slcio");
         JobManager job = new JobManager();
-        job.addVariableDefinition("detector", "HPS-EngRun2015-Nominal-v1");
-        job.addVariableDefinition("outputFile", readoutFile.getPath().replace(".slcio", ""));
-        job.addVariableDefinition("run", RUN.toString());
-        job.addInputFile(inputFile);
-        job.setup(READOUT_STEERING);
-        job.configure();
-        job.run();
-        System.out.println("readout ran on " + job.getLCSimLoop().getTotalCountableConsumed() + " events");
-        
-        // Run the recon on the readout output.
-        File reconFile = new TestOutputFile(EcalSimReconTest.class, "recon.slcio");
-        job = new JobManager();
         job.addInputFile(readoutFile);
         job.addVariableDefinition("detector", "HPS-EngRun2015-Nominal-v1");
         job.addVariableDefinition("outputFile", reconFile.getPath().replace(".slcio", ""));
@@ -108,90 +170,14 @@
         job.setup(RECON_STEERING);
         job.run();
         System.out.println("recon ran on " + job.getLCSimLoop().getTotalCountableConsumed() + " events");
-        
+
         // Check the recon output.
-        LCSimLoop loop = new LCSimLoop();
+        final LCSimLoop loop = new LCSimLoop();
         loop.setLCIORecordSource(reconFile);
-        EcalSimReconCheckDriver checkDriver = new EcalSimReconCheckDriver();
+        final EcalSimReconCheckDriver checkDriver = new EcalSimReconCheckDriver();
         loop.add(checkDriver);
         loop.loop(-1);
         loop.dispose();
         System.out.println("EcalSimReconCheckDriver ran on " + loop.getTotalCountableConsumed() + " events");
-        
-        // Check the number of triggers.
-        TestCase.assertEquals("Number of triggers out of range.", TRIGGERS, loop.getTotalCountableConsumed(), TRIGGER_DELTA);
     }
-    
-    /**
-     * Driver for checking test output.
-     * 
-     * @author Jeremy McCormick, SLAC
-     */
-    static class EcalSimReconCheckDriver extends Driver {
-        
-        /**
-         * Setup AIDA histogramming.
-         */
-        private final static AIDA aida = AIDA.defaultInstance();
-        
-        /**
-         * Count of clusters per event.
-         */
-        private final IHistogram1D clusCountH1D = aida.histogram1D("Cluster Count", 20, -0.5, 19.5);
-        
-        /**
-         * Individual cluster energies.
-         */
-        private final IHistogram1D clusEnergyH1D = aida.histogram1D("Cluster Energy", 100, -0.5, 9.5);
-        
-        /**
-         * Highest cluster energy in event.
-         */
-        private final IHistogram1D clusHighEnergyH1D = aida.histogram1D("Cluster Highest Energy", 100, -0.5, 9.5);
-        
-        /**
-         * First hit time in highest energy cluster.
-         */
-        private final IHistogram1D clusTimeH1D = aida.histogram1D("Cluster Time", 500, -0.5, 499.5);        
-              
-        /**
-         * Process events and fill histograms from cluster collection.
-         */
-        public void process(EventHeader event) {
-            List<Cluster> clusters = event.get(Cluster.class, "EcalClustersCorr");
-            clusCountH1D.fill(clusters.size());
-            for (Cluster cluster : clusters) {
-                clusEnergyH1D.fill(cluster.getEnergy());
-            }
-            
-            Cluster highClus = ClusterUtilities.findHighestEnergyCluster(clusters);
-            clusHighEnergyH1D.fill(highClus.getEnergy());
-            clusTimeH1D.fill(highClus.getCalorimeterHits().get(0).getTime());
-        }
-        
-        /**
-         * Save histograms and perform checks on statistics.
-         */
-        public void endOfData() {
-            
-            // Print some statistics.
-            System.out.println("clusCountH1D mean: " + clusCountH1D.mean());
-            System.out.println("clusEnergyH1D mean: " + clusEnergyH1D.mean());
-            System.out.println("clusHighEnergyH1D mean: " + clusHighEnergyH1D.mean());
-            System.out.println("clusTimeH1D mean: " + clusTimeH1D.mean());
-            
-            // Save plots to AIDA file.
-            try {
-                aida.saveAs(new TestOutputFile(EcalSimReconTest.class, "plots.aida"));
-            } catch (IOException e) {
-                throw new RuntimeException(e);
-            }
-            
-            // Check high cluster energy mean.
-            TestCase.assertEquals("High cluster energy was not within range.", HIGH_CLUS_MEAN_E, clusHighEnergyH1D.mean(), HIGH_CLUS_DELTA_E);
-            
-            // Check high cluster time mean.
-            TestCase.assertEquals("High cluster mean time was not within range.", CLUS_MEAN_T, clusTimeH1D.mean(), CLUS_DELTA_T);            
-        }
-    }    
 }