Print

Print


Author: [log in to unmask]
Date: Tue Feb 24 15:49:58 2015
New Revision: 2187

Log:
Test signal reconstruction

Added:
    java/trunk/integration-tests/src/test/java/org/hps/APrimeReconTest.java   (contents, props changed)
      - copied, changed from r2182, java/trunk/integration-tests/src/test/java/org/hps/SimpleMCReconTest.java

Copied: java/trunk/integration-tests/src/test/java/org/hps/APrimeReconTest.java (from r2182, java/trunk/integration-tests/src/test/java/org/hps/SimpleMCReconTest.java)
 =============================================================================
--- java/trunk/integration-tests/src/test/java/org/hps/SimpleMCReconTest.java	(original)
+++ java/trunk/integration-tests/src/test/java/org/hps/APrimeReconTest.java	Tue Feb 24 15:49:58 2015
@@ -2,46 +2,51 @@
 
 import java.io.File;
 import java.io.IOException;
+import static java.lang.Math.sqrt;
 import java.net.URL;
+import java.util.List;
 import java.util.logging.Level;
 
 import junit.framework.TestCase;
+import static junit.framework.TestCase.assertEquals;
 
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.job.JobManager;
-import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
 import org.lcsim.event.ReconstructedParticle;
-import org.lcsim.event.SimCalorimeterHit;
 import org.lcsim.event.Track;
-import org.lcsim.event.TrackerHit;
+import org.lcsim.event.base.BaseTrackState;
 import org.lcsim.util.Driver;
 import org.lcsim.util.cache.FileCache;
 import org.lcsim.util.loop.LCSimLoop;
 import org.lcsim.util.test.TestUtil.TestOutputFile;
 
-public class SimpleMCReconTest extends TestCase {
+public class APrimeReconTest extends TestCase
+{
 
-    static final int nEvents = 100;
-    
-	public void testSimpleMCReconTest() throws Exception {
-		
+    static final int nEvents = 1000;
+
+    public void testSimpleMCReconTest() throws Exception
+    {
+
         new TestOutputFile(this.getClass().getSimpleName()).mkdir();
-		
+
         FileCache cache = new FileCache();
-        File inputFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/SimpleMCReconTest.slcio"));
-		
+        String fileName = "ap2.2gev150mev_slic-3.1.5_geant4-v9r6p1_QGSP_BERT_HPS-Proposal2014-v8-2pt2-42-1.slcio";
+//        fileName = "ap2.2gev150mev_slic-3.1.5_geant4-v9r6p1_QGSP_BERT_HPS-Proposal2014-v8-2pt2.slcio";
+        File inputFile = cache.getCachedFile(new URL("http://www.lcsim.org/test/hps-java/APrimeReconTest/" + fileName));
         // Run the reconstruction.
-		JobManager job = new JobManager();
-		DatabaseConditionsManager.getInstance().setLogLevel(Level.WARNING);
+        JobManager job = new JobManager();
+        DatabaseConditionsManager.getInstance().setLogLevel(Level.WARNING);
         File outputFile = new TestOutputFile(this.getClass().getSimpleName() + File.separator + this.getClass().getSimpleName() + "_recon");
         job.addVariableDefinition("outputFile", outputFile.getPath());
         job.addInputFile(inputFile);
         job.setup("/org/hps/steering/recon/SimpleMCRecon.lcsim");
         job.setNumberOfEvents(nEvents);
         job.run();
-        
+
         // Read in the LCIO event file and print out summary information.
         System.out.println("Running ReconCheckDriver on output ...");
         LCSimLoop loop = new LCSimLoop();
@@ -51,54 +56,121 @@
             loop.loop(-1);
         } catch (IOException e) {
             throw new RuntimeException(e);
-        }                
-        System.out.println("Loop processed " + loop.getTotalSupplied() + " events.");        
+        }
+        System.out.println("Loop processed " + loop.getTotalSupplied() + " events.");
         System.out.println("Done!");
-        
-	}
-	
-	static class ReconCheckDriver extends Driver {
-        
-        int nTracks;
-        int nClusters;        
-        int nTrackerHits;
-        int nSimCalorimeterHits;
-        int nCalorimeterHits;
-        int nReconstructedParticles;
-        int nEvents;
-        
-        public void process(EventHeader event) {
-            ++nEvents;
+
+    }
+
+    static class ReconCheckDriver extends Driver
+    {
+
+//        int nClusters;
+//        int nTrackerHits;
+//        int nSimCalorimeterHits;
+//        int nCalorimeterHits;
+//        int nReconstructedParticles;
+//        int nEvents;
+        public void process(EventHeader event)
+        {
+            int nTracks = 0;
+
             if (event.hasCollection(Track.class, "MatchedTracks")) {
-                nTracks += event.get(Track.class, "MatchedTracks").size();
+                nTracks = event.get(Track.class, "MatchedTracks").size();
             }
-            if (event.hasCollection(Cluster.class, "EcalClusters")) {
-                nClusters += event.get(Cluster.class, "EcalClusters").size();
+            //           if(nTracks < 2) throw new Driver.NextEventException();
+            assertEquals("Didn't find two tracks", 2, nTracks);
+            int nClusters = event.get(Cluster.class, "EcalClusters").size();
+            assertTrue("Didn't find at least two clusters", nClusters > 2);
+            int nReconstructedParticles = event.get(ReconstructedParticle.class, "FinalStateParticles").size();
+            System.out.println("nTracks = " + nTracks + " nClusters = " + nClusters + " NRP = " + nReconstructedParticles);
+
+            List<ReconstructedParticle> rps = event.get(ReconstructedParticle.class, "FinalStateParticles");
+            int nrp = rps.size();
+            assertTrue("Didn't find at least two particles", nrp > 2);
+            int nelectron = 0;
+            int npositron = 0;
+
+            ReconstructedParticle electron = null;
+            ReconstructedParticle positron = null;
+            for (ReconstructedParticle p : rps) {
+                if (p.getParticleIDUsed().getPDG() == 11) {
+                    electron = p;
+                    ++nelectron;
+                }
+                if (p.getParticleIDUsed().getPDG() == -11) {
+                    positron = p;
+                    ++npositron;
+                }
             }
-            if (event.hasCollection(TrackerHit.class, "RotatedHelicalTrackHits")) {
-                nTrackerHits += event.get(TrackerHit.class, "RotatedHelicalTrackHits").size();
+            assertEquals("didn't find one electron", 1, nelectron);
+            assertEquals("didn't find one positron", 1, npositron);
+
+            MCParticle electronMC = null;
+            MCParticle positronMC = null;
+            List<MCParticle> mcps = event.getMCParticles();
+            for(MCParticle mcp : mcps)
+            {
+                if(mcp.getPDGID() == 11 && mcp.getGeneratorStatus()==MCParticle.FINAL_STATE) electronMC = mcp;
+                if(mcp.getPDGID() == -11 && mcp.getGeneratorStatus()==MCParticle.FINAL_STATE) positronMC = mcp;
+                
             }
-            if (event.hasCollection(SimCalorimeterHit.class, "EcalHits")) {
-                nSimCalorimeterHits += event.get(SimCalorimeterHit.class, "EcalHits").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();
-            }
-        }        
-        
-        public void endOfData() {
-            System.out.println("ReconCheckDriver results ...");
-            System.out.println("  nEvents: " + nEvents);
-            System.out.println("  nSimCalorimeterHits: " + nSimCalorimeterHits);
-            System.out.println("  nClusters: " + nClusters);
-            System.out.println("  nTrackerHits: " + nTrackerHits);            
-            System.out.println("  nTracks: " + nTracks);                                    
-            System.out.println("  nReconstructedParticles: " + nReconstructedParticles);
-            System.out.println("  < nTracks / nEvents > = " + (double)nTracks / (double)nEvents);
-            System.out.println("  < nClusters / nEvents > = " + (double)nClusters / (double)nEvents);
+            checkParticle(electron, electronMC);
+            checkParticle(positron, positronMC);
+
+//            if (event.hasCollection(Cluster.class, "EcalClusters")) {
+//                nClusters += event.get(Cluster.class, "EcalClusters").size();
+//            }
+//            if (event.hasCollection(TrackerHit.class, "RotatedHelicalTrackHits")) {
+//                nTrackerHits += event.get(TrackerHit.class, "RotatedHelicalTrackHits").size();
+//            }
+//            System.out.println("event: " + event.getEventNumber() + " : " + event.get(TrackerHit.class, "RotatedHelicalTrackHits").size() + " hits :" + event.get(Track.class, "MatchedTracks").size() + " tracks");
+//
+//            if (event.hasCollection(SimCalorimeterHit.class, "EcalHits")) {
+//                nSimCalorimeterHits += event.get(SimCalorimeterHit.class, "EcalHits").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();
+//            }
         }
-    }              
-}
+
+        private void checkParticle(ReconstructedParticle p, MCParticle mcp)
+        {
+            assertEquals(1, p.getTracks().size());
+            assertEquals(1, p.getClusters().size());
+            Track t = p.getTracks().get(0);
+            BaseTrackState state = (BaseTrackState) t.getTrackStates().get(0);
+            //TODO fix this
+            double[] mom = state.computeMomentum(-.5);
+            double tmom = sqrt(mom[0] * mom[0] + mom[1] * mom[1] + mom[2] * mom[2]);
+            Cluster c = p.getClusters().get(0);
+            double energy = c.getEnergy();
+            System.out.println("tracks momentum: " + tmom + " cluster energy " + energy +" E/p : " + (energy/tmom));
+            //TODO assert e/p be within range
+
+            double mcMomentum = sqrt(mcp.getPX()*mcp.getPX() + mcp.getPY()*mcp.getPY() +mcp.getPZ()*mcp.getPZ());
+            double mcEnergy = mcp.getEnergy();
+            System.out.println("mcMomentum "+mcMomentum + " mcEneregy "+mcEnergy);
+            //TODO check that momentum and energy are within range
+            assertEquals("Track momentum does not match MC particle momentum", mcMomentum, tmom, .5);
+            assertEquals("Cluster energy does not match MC particle energy", mcEnergy, energy, .5);
+            
+        }
+
+        public void endOfData()
+        {
+//            System.out.println("ReconCheckDriver results ...");
+//            System.out.println("  nEvents: " + nEvents);
+//            System.out.println("  nSimCalorimeterHits: " + nSimCalorimeterHits);
+//            System.out.println("  nClusters: " + nClusters);
+//            System.out.println("  nTrackerHits: " + nTrackerHits);
+//            System.out.println("  nTracks: " + nTracks);
+//            System.out.println("  nReconstructedParticles: " + nReconstructedParticles);
+//            System.out.println("  < nTracks / nEvents > = " + (double) nTracks / (double) nEvents);
+//            System.out.println("  < nClusters / nEvents > = " + (double) nClusters / (double) nEvents);
+        }
+    }
+}