hps-java/src/main/java/org/lcsim/hps/recon/tracking
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
-
}
}
hps-java/src/test/java/org/lcsim/hps/recon/tracking
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 );
}
-
}