Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
TrackerReconDriver.java+187added 1.1
add tracker recon driver

hps-java/src/main/java/org/lcsim/hps/recon/tracking
TrackerReconDriver.java added at 1.1
diff -N TrackerReconDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TrackerReconDriver.java	19 Jan 2012 01:03:18 -0000	1.1
@@ -0,0 +1,187 @@
+package org.lcsim.hps.recon.tracking;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.geometry.Detector;
+import org.lcsim.hps.event.HPSTransformations;
+import org.lcsim.recon.tracking.digitization.sisim.config.ReadoutCleanupDriver;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.recon.tracking.seedtracker.SeedTracker;
+import org.lcsim.recon.tracking.seedtracker.StrategyXMLUtils;
+import org.lcsim.util.Driver;
+
+public final class TrackerReconDriver extends Driver 
+{
+    // FIXME: Hard-coded B-field value.  
+    //        Can we get this from the Detector object's BoxDipole instead???
+    private final double bfield = 0.5;
+    
+    // Default name of SimTrackerHit input collection.
+    private String simTrackerHitCollectionName = "TrackerHits";
+    
+    // Default tracking strategy path. 
+    private String strategyResource = "HPS-Test-1pt3.xml";
+        
+    // Name of Seedtracker's output collection.
+    private final String trackCollectionName = "MatchedTracks";
+    
+    // Name of Seedtracker's HelicalTrackHit input collection.
+    private final String stInputCollectionName = "RotatedHelicalTrackHits";
+    
+    // Name of HelicalTrackHitDriver's output hit collection.
+    private final String hthOutputCollectionName = "HelicalTrackHits";
+    
+    // Name of strip hits collection.
+    // FIXME: Hard-coded collection name depends on name of strip clusterer in another Driver.
+    private final String stripHitsCollectionName = "StripClusterer_SiTrackerHitStrip1D";
+    
+    public TrackerReconDriver()
+    {}
+        
+    /**
+     * Set the tracking strategy resource.
+     * @param strategyResource The absolute path to the strategy resource.
+     */        
+    public void setStrategyResource(String strategyResource)
+    {
+        this.strategyResource = strategyResource;
+    }
+    
+    /**
+     * Set the SimTrackerHit collection to be used for tracking.
+     * @param simTrackerHitCollectionName The name of the SimTrackerHit collection in the event.
+     */
+    public void setSimTrackerHitCollectionName(String simTrackerHitCollectionName)
+    {
+        this.simTrackerHitCollectionName = simTrackerHitCollectionName;
+    }
+    
+    /**
+     * This is used to setup the Drivers after XML config.
+     */
+    public void detectorChanged(Detector detector)
+    {
+        setup();
+        super.detectorChanged(detector);        
+    }
+    
+    /**
+     * Call super for child processing at start of data.
+     */
+    public void startOfData()
+    {
+        super.startOfData();
+    }    
+    
+    /** 
+     * Setup all the child Drivers necessary for track reconstruction.
+     */
+    private void setup()
+    {                
+        //
+        // 1) Driver to create HelicalTrackHits expected by Seedtracker.
+        //
+        
+        // Setup adjacent layer pairings.
+        List<int[]> pairs = new ArrayList();
+        int[] p1 = {1, 2};
+        int[] p2 = {3, 4};
+        int[] p3 = {5, 6};
+        int[] p4 = {7, 8};
+        int[] p5 = {9, 10};
+        pairs.add(p1);
+        pairs.add(p2);
+        pairs.add(p3);
+        pairs.add(p4);
+        pairs.add(p5);
+
+        // Setup the Driver.
+        HPSHelicalTrackHitDriver hthdriver = new HPSHelicalTrackHitDriver();
+        hthdriver.addCollection(stripHitsCollectionName);
+        hthdriver.OutputCollection(hthOutputCollectionName);
+        hthdriver.HitRelationName("HelicalTrackHitRelations"); // parameter
+        hthdriver.MCRelationName("HelicalTrackMCRelations"); // parameter       
+        for (int[] pair : pairs)
+        {
+            hthdriver.setStereoPair("Tracker", pair[0], pair[1]);
+        }       
+        hthdriver.setMaxSeperation(10.01);  
+        hthdriver.setTolerance(0.01); 
+        hthdriver.setTransformToTracking(true);
+        add(hthdriver);
+        
+        //
+        // 2) Driver to run Seedtracker.
+        //
+        if (!strategyResource.startsWith("/"))
+            strategyResource = "/" + strategyResource; 
+        List<SeedStrategy> sFinallist = StrategyXMLUtils.getStrategyListFromInputStream(
+                this.getClass().getResourceAsStream(strategyResource));
+        SeedTracker stFinal = new SeedTracker(sFinallist);
+        HPSTransformations hpstrans = new HPSTransformations();
+        stFinal.setMaterialManagerTransform(hpstrans.getTransform());
+        stFinal.setInputCollectionName(stInputCollectionName);
+        stFinal.setTrkCollectionName(trackCollectionName);
+        stFinal.setBField(bfield);
+        stFinal.setSectorParams(false);
+        add(stFinal);
+        
+        //
+        // 3) Cleanup the readouts for next event.
+        //
+        List<String> readoutCleanup = new ArrayList<String>();
+        readoutCleanup.add(this.simTrackerHitCollectionName);
+        add(new ReadoutCleanupDriver(readoutCleanup));
+    }   
+    
+    /**    
+     * This method is used to run the reconstruction and print debug information.
+     */
+    public void process(EventHeader event)
+    {
+        // This runs the track reconstruction.
+        super.process(event);
+        
+        // Check for digi hits.
+        List<TrackerHit> digi = event.get(TrackerHit.class, "TrackerHits");
+        if (digi.size() == 0)
+        {
+            System.out.println("WARNING: The sisim TrackerHit collection is empty!");
+        }
+        else
+        {
+            System.out.println("The sisim TrackerHit collection has " + digi.size() + " hits.");
+        }
+        
+        // Check for HelicalTrackHits.
+        List<TrackerHit> hth = event.get(TrackerHit.class, hthOutputCollectionName);
+        if (hth.size() == 0)
+        {
+            System.out.println("WARNING: The HelicalTrackHit collection " + hthOutputCollectionName + " is empty!");
+        }
+        else
+        {
+            System.out.println("The HelicalTrackHit collection " + hthOutputCollectionName + " has " + hth.size() + " hits.");
+        }       
+        
+        // Check for Tracks.
+        List<Track> tracks = event.get(Track.class, trackCollectionName);        
+        if (tracks.size() == 0)
+        {
+            System.out.println("WARNING: The Track collection " + trackCollectionName + " is empty!");
+        }
+        else
+        {
+            System.out.println("The Track collection " + trackCollectionName + " has " + tracks.size() + " tracks.");
+        }        
+        // Print out track info.
+        for (Track track : tracks)
+        {
+            System.out.println(track.toString());
+        }
+    }   
+}
\ No newline at end of file
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