Commit in hps-java/src on MAIN
main/java/org/lcsim/hps/recon/tracking/HelicalTrackHitDriver.java+1-231.8 -> 1.9
test/java/org/lcsim/hps/recon/tracking/HelicalTrackHitDriverTest.java+112-291.1 -> 1.2
+113-52
2 modified files
Add histograms to compare "Common" and "Split" layer geometries; More minor cleanup

hps-java/src/main/java/org/lcsim/hps/recon/tracking
HelicalTrackHitDriver.java 1.8 -> 1.9
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
HelicalTrackHitDriverTest.java 1.1 -> 1.2
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 );
     }
-
 }
CVSspam 0.2.12


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