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); + } + } +}