Print

Print


Author: [log in to unmask]
Date: Wed Jun 10 16:08:41 2015
New Revision: 3125

Log:
Add ECal MC test case (not working yet). HPSJAVA-545

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

Added: 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	(added)
+++ java/trunk/integration-tests/src/test/java/org/hps/test/it/EcalSimReconTest.java	Wed Jun 10 16:08:41 2015
@@ -0,0 +1,156 @@
+package org.hps.test.it;
+
+import hep.aida.IHistogram1D;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.hps.job.JobManager;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.hps.test.util.TestFileUrl;
+import org.hps.test.util.TestOutputFile;
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+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.
+ * 
+ * @author Jeremy McCormick, SLAC
+ */
+public class EcalSimReconTest extends TestCase {
+        
+    /**
+     * Test input file name on lcsim.org site.
+     */
+    private static final String FILE_NAME = "egsv3-triv2-g4v1_s2d6_HPS-EngRun2015-Nominal-v1_101.slcio";
+    
+    /**
+     * Steering resource file for readout simulation.
+     */    
+    private static final String READOUT_STEERING = "/org/hps/steering/readout/EngineeringRun2015TrigPairs1.lcsim";
+    
+    /**
+     * 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 = 0;
+    
+    /**
+     * 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");
+        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", ""));
+        job.addVariableDefinition("run", RUN.toString());
+        job.setup(RECON_STEERING);
+        job.run();
+        System.out.println("recon ran on " + job.getLCSimLoop().getTotalCountableConsumed() + " events");
+        
+        // Check the recon output.
+        LCSimLoop loop = new LCSimLoop();
+        loop.setLCIORecordSource(reconFile);
+        loop.add(new EcalSimReconCheckDriver());
+        loop.loop(-1);
+        loop.dispose();
+        System.out.println("EcalSimReconCheckDriver ran on " + loop.getTotalCountableConsumed() + " events");
+    }
+    
+    /**
+     * 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 histogram statistics.
+         */
+        public void endOfData() {
+            
+            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());
+            
+            // TODO: Add test assertions here.
+            
+            try {
+                aida.saveAs(new TestOutputFile(EcalSimReconTest.class, "plots.aida"));
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }    
+}