Commit in hps-java/src on MAIN | |||
main/java/org/lcsim/hps/recon/tracking/HelicalTrackHitDriver.java | +1 | -23 | 1.8 -> 1.9 |
test/java/org/lcsim/hps/recon/tracking/HelicalTrackHitDriverTest.java | +112 | -29 | 1.1 -> 1.2 |
+113 | -52 |
Add histograms to compare "Common" and "Split" layer geometries; More minor cleanup
diff -u -r1.8 -r1.9 --- HelicalTrackHitDriver.java 17 Oct 2013 06:24:23 -0000 1.8 +++ HelicalTrackHitDriver.java 17 Oct 2013 22:05:29 -0000 1.9 @@ -300,6 +300,7 @@
} else if (LayerGeometryType.Split == _layerGeometryType) {
+
// If the event does not have hit clusters, skip it. if (!event.hasCollection(SiTrackerHit.class, _clusterCollectionName)){ if(_debug){
@@ -320,8 +321,6 @@
Map<SiSensor, List<HelicalTrackStrip>> striplistmap = new HashMap<SiSensor, List<HelicalTrackStrip>>(); for (SiTrackerHit hit : hitlist) {
- if (hit instanceof SiTrackerHitStrip1D) { -
// Cast the hit as a 1D strip hit and find the identifier // for the detector/layer combo SiTrackerHitStrip1D h = (SiTrackerHitStrip1D) hit;
@@ -354,15 +353,6 @@
if (_debug) System.out.printf("%s: added strip org %s layer %d\n", this.getClass().getSimpleName(), strip.origin().toString(), strip.layer()); }
- - } else { - - // If not a 1D strip hit, make a pixel hit - // This should be removed. - HelicalTrackHit hit3d = this.makeDigi3DHit(hit); - helhits.add(hit3d); - hitrelations.add(new MyLCRelation(hit3d, hit)); - }
} // Loop over SiTrackerHits
@@ -375,14 +365,6 @@
* relation between MC particle and stereo hit */
- // Is this check really necessary? This is guaranteed by the - // manner in which stereo pairs are created. - // If anything, this really belongs in a unit test. - if ((SvtUtils.getInstance().getLayerNumber(stereoPair.getAxialSensor()) + SvtUtils.getInstance().getLayerNumber(stereoPair.getStereoSensor())) % 2 == 0) { - throw new RuntimeException(String.format("%s: axial and stereo are both even layers (%d,%d)?!", this.getClass().getSimpleName(), - SvtUtils.getInstance().getLayerNumber(stereoPair.getAxialSensor()), SvtUtils.getInstance().getLayerNumber(stereoPair.getStereoSensor()))); - } -
List<HelicalTrackCross> helicalTrackCrosses = null; if (stereoPair.getDetectorVolume() == detectorVolume.Top) { helicalTrackCrosses = _crosser.MakeHits(striplistmap.get(stereoPair.getAxialSensor()), striplistmap.get(stereoPair.getStereoSensor()));
@@ -489,8 +471,6 @@
setStereoPair(_subdetectorName, pair[0], pair[1]); }
- } else { - throw new RuntimeException(this.getClass().getSimpleName() + ": this layer geometry is not implemented!");
} if (_debug)
@@ -586,7 +566,5 @@
event.put("Rotated" + _hitrelname, hthrelations, LCRelation.class, 0); event.put("Rotated" + _mcrelname, mcrelations, LCRelation.class, 0);
- // Create the LCRelations between HelicalTrackHits and MC particles -
} }
diff -u -r1.1 -r1.2 --- HelicalTrackHitDriverTest.java 17 Oct 2013 06:24:23 -0000 1.1 +++ HelicalTrackHitDriverTest.java 17 Oct 2013 22:05:29 -0000 1.2 @@ -1,11 +1,12 @@
package org.lcsim.hps.recon.tracking;
+import hep.aida.IAnalysisFactory;
import hep.aida.IHistogram1D;
+import hep.aida.ITree;
import java.io.File; import java.io.IOException; import java.net.URL;
-import java.net.MalformedURLException;
import java.util.List; import java.util.logging.Level; import java.util.logging.Logger;
@@ -13,73 +14,96 @@
import junit.framework.TestCase; import org.lcsim.event.EventHeader;
-import org.lcsim.hps.monitoring.CalibrationDriver; -import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit; -import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHitStrip1D; -import org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
import org.lcsim.util.Driver; import org.lcsim.util.loop.LCSimLoop; import org.lcsim.util.aida.AIDA; import org.lcsim.util.cache.FileCache;
-import org.freehep.record.loop.RecordLoop.Command;
+import org.lcsim.recon.tracking.digitization.sisim.SiTrackerHit; +import org.lcsim.recon.tracking.digitization.sisim.config.RawTrackerHitSensorSetup; +import org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver;
import org.lcsim.util.test.TestUtil.TestOutputFile;
+import org.lcsim.hps.monitoring.CalibrationDriver; +import org.lcsim.hps.util.CompareHistograms; + +import org.freehep.record.loop.RecordLoop.Command; +
/** * * @author Omar Moreno <[log in to unmask]>
- * $Id: HelicalTrackHitDriverTest.java,v 1.1 2013/10/17 06:24:23 omoreno Exp $
+ * $Id: HelicalTrackHitDriverTest.java,v 1.2 2013/10/17 22:05:29 omoreno Exp $
*/ public class HelicalTrackHitDriverTest extends TestCase {
+ File commonOutputFile; + File splitOutputFile; +
/** * */ public void setUp() throws Exception { System.out.println("setting up test");
- // Input File
+ // Get the input file that will be used for the test
String testURLPath = "http://www.slac.stanford.edu/~phansson/files/hps_java_test/HPSTestRunv3/hps-java-1.7-SNAPSHOT-050113"; String testFileName = "egs_5.5gev_0.016x0_500mb_recoil_recon_1_hpsTestRunTrackingTest.slcio"; URL testURL = new URL(testURLPath + "/" + testFileName); FileCache fileCache = new FileCache(); File lcioInputFile = fileCache.getCachedFile(testURL);
- int nEvents = 500;
+ + // Number of events to run over + int nEvents = 5000;
// Setup the drivers HPSRawTrackerHitFitterDriver hitFitter = new HPSRawTrackerHitFitterDriver(); hitFitter.setFitAlgorithm("Analytic"); hitFitter.setCorrectT0Shift(true);
- // Process the input file - LCSimLoop lcsimLoop = new LCSimLoop(); - lcsimLoop.setLCIORecordSource(lcioInputFile); - lcsimLoop.add(new CalibrationDriver()); - lcsimLoop.add(new RawTrackerHitSensorSetup()); - lcsimLoop.add(hitFitter); -
HelicalTrackHitDriver hthDriver = new HelicalTrackHitDriver(); hthDriver.setMaxSeperation(20.0); hthDriver.setTolerance(1.0); hthDriver.setLayerGeometryType("Common");
-
+ + + ReadoutCleanupDriver cleanupDriver = new ReadoutCleanupDriver(); + String[] collectionNames = { "TrackerHits", "SVTRawTrackerHits", "SVTFittedRawTrackerHits"}; + cleanupDriver.setCollectionNames(collectionNames); + + commonOutputFile = new TestOutputFile(testFileName.replace(".slcio", "_common.aida"));
ComparisonPlotsDriver plotsDriver = new ComparisonPlotsDriver();
+ plotsDriver.setOutputFileName(commonOutputFile);
+ // Specify the drivers that will run + LCSimLoop lcsimLoop = new LCSimLoop(); + lcsimLoop.setLCIORecordSource(lcioInputFile); + lcsimLoop.add(new CalibrationDriver()); + lcsimLoop.add(new RawTrackerHitSensorSetup()); + lcsimLoop.add(hitFitter); + lcsimLoop.add(new DataTrackerHitDriver()); + + // Process the events using the "Common" layer geometry
System.out.println("Running with Common geometry"); lcsimLoop.add(hthDriver); lcsimLoop.add(plotsDriver);
+ lcsimLoop.add(cleanupDriver);
lcsimLoop.loop(nEvents, null); lcsimLoop.execute(Command.REWIND);
+ lcsimLoop.remove(cleanupDriver);
lcsimLoop.remove(plotsDriver); lcsimLoop.remove(hthDriver);
+ // Process the events using the "Split" layer geometry
System.out.println("Running with Split geometry"); hthDriver.setLayerGeometryType("Split");
+ splitOutputFile = new TestOutputFile(testFileName.replace(".slcio", "_split.aida")); + plotsDriver.setOutputFileName(splitOutputFile);
lcsimLoop.add(hthDriver); lcsimLoop.add(plotsDriver);
+ lcsimLoop.add(cleanupDriver);
lcsimLoop.loop(nEvents, null); lcsimLoop.dispose();
-
} class ComparisonPlotsDriver extends Driver {
@@ -87,16 +111,43 @@
private AIDA aida = AIDA.defaultInstance(); private IHistogram1D nTopClusters = aida.histogram1D("Number of Top Clusters", 20, 0, 20); private IHistogram1D nBotClusters = aida.histogram1D("Number of Bottom Clusters", 20, 0, 20);
+ private IHistogram1D nTopStereoHits = aida.histogram1D("Number of Top Stereo Hits", 20, 0, 20); + private IHistogram1D nBotStereoHits = aida.histogram1D("Number of Bottom Stereo Hits", 20, 0, 20); +
private String clusterCollectionName = "StripClusterer_SiTrackerHitStrip1D";
- private String outputFileName = "default.aida";
+ private String stereoHitsCollectionName = "HelicalTrackHits"; + private File outputFile = null;
@Override protected void process(EventHeader event) { super.process(event);
- if(!event.hasCollection(SiTrackerHit.class, clusterCollectionName)); -
+ if(!event.hasCollection(SiTrackerHit.class, clusterCollectionName)) return;
List<SiTrackerHit> clusters = event.get(SiTrackerHit.class, clusterCollectionName);
+ + int numberTopClusters = 0; + int numberBotClusters = 0; + for(SiTrackerHit cluster : clusters){ + if(cluster.getPositionAsVector().y() > 0) + numberTopClusters++; + else numberBotClusters++; + } + + if(!event.hasCollection(HelicalTrackHit.class, stereoHitsCollectionName)) return; + List<HelicalTrackHit> stereoHits = event.get(HelicalTrackHit.class, stereoHitsCollectionName); + + int numberTopStereoHits = 0; + int numberBotStereoHits = 0; + for(HelicalTrackHit stereoHit : stereoHits){ + if(stereoHit.getPosition()[1] > 0) + numberTopStereoHits++; + else numberBotStereoHits++; + } + + nTopClusters.fill(numberTopClusters); + nBotClusters.fill(numberBotClusters); + nTopStereoHits.fill(numberTopStereoHits); + nBotStereoHits.fill(numberBotStereoHits);
}
@@ -104,25 +155,57 @@
protected void endOfData(){ super.endOfData();
- File outputFile = new TestOutputFile(outputFileName);
+ if(outputFile == null){ + Logger.getLogger(ComparisonPlotsDriver.class.getName()).log(Level.SEVERE, "Output file was not specified"); + return; + } +
try { aida.saveAs(outputFile); } catch(IOException exception){
- Logger.getLogger(ComparisonPlotsDriver.class.getName()).log(Level.SEVERE, "Unable to save to file " + outputFileName);
+ Logger.getLogger(ComparisonPlotsDriver.class.getName()).log(Level.SEVERE, "Unable to save to file " + outputFile.getName());
}
+ + nTopClusters.reset(); + nBotClusters.reset(); + nTopStereoHits.reset(); + nBotStereoHits.reset();
}
- public void setOutputFileName(String outputFileName) { - this.outputFileName = outputFileName;
+ public void setOutputFileName(File outputFile) { + this.outputFile = outputFile;
}
-
}
+ //--- Tests ---// + //-------------// +
/**
- *
+ * Test to check if the "Common" layer geometry and the + * "Split" layer geometry are equivalent
*/
- public void testLayerGeometry() {
+ public void testLayerGeometry() throws IOException, IllegalArgumentException { + + IAnalysisFactory analysisFactory = AIDA.defaultInstance().analysisFactory(); + + ITree commonTree = analysisFactory.createTreeFactory().create(commonOutputFile.getAbsolutePath()); + ITree splitTree = analysisFactory.createTreeFactory().create(splitOutputFile.getAbsolutePath()); + + double ksPvalue = CompareHistograms.getKolmogorovPValue( (IHistogram1D) splitTree.find("Number of Top Clusters"), + (IHistogram1D) commonTree.find("Number of Top Clusters")); + assertTrue("Number of top clusters is unequal!", ksPvalue > 0.05 ); + + ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Clusters"), + (IHistogram1D) splitTree.find("Number of Bottom Clusters")); + assertTrue("Number of bottom clusters is unequal!", ksPvalue > 0.05 ); + + ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Top Stereo Hits"), + (IHistogram1D) splitTree.find("Number of Top Stereo Hits")); + assertTrue("Number of top stereo hits is unequal!", ksPvalue > 0.05 ); + + ksPvalue = CompareHistograms.getKolmogorovPValue((IHistogram1D) commonTree.find("Number of Bottom Stereo Hits"), + (IHistogram1D) splitTree.find("Number of Bottom Stereo Hits")); + assertTrue("Number of bottom stereo hits is unequal!", ksPvalue > 0.05 );
}
-
}
Use REPLY-ALL to reply to list
To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1