Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker on MAIN
IterativeSeedTracker.java+172added 1.1
SeedTracker.java+24-141.12 -> 1.13
HitManager.java+16-51.4 -> 1.5
+212-19
1 added + 2 modified, total 3 files
Implemented an iterative SeedTracker using multiple strategy lists.
Changed HitManager to use a list of HelicalTrackHits instead of the event header (which was only used to retrieve the hit collection)
Allow SeedTracker to change the name of the hit collection.

lcsim/src/org/lcsim/recon/tracking/seedtracker
IterativeSeedTracker.java added at 1.1
diff -N IterativeSeedTracker.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ IterativeSeedTracker.java	20 Jul 2010 17:51:36 -0000	1.1
@@ -0,0 +1,172 @@
+package org.lcsim.recon.tracking.seedtracker;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+
+/**
+ * This is a re-implementation of <code>SeedTracker</code> allowing consecutive track reconstruction with different startegy lists. 
+ * Hits of successfully reconstructed tracks using one strategy list will be removed from the available hits before running the next strategy list.
+ * @author cgrefe
+ */
+public class IterativeSeedTracker extends SeedTracker {
+	
+	protected List<List<SeedStrategy>> _strategyLists;
+	
+	public IterativeSeedTracker() {
+		_strategyLists = new ArrayList<List<SeedStrategy>>();
+		
+        //  Instantiate the material manager
+        _materialmanager = new MaterialManager();
+
+        //  Instantiate the hit manager
+        _hitmanager = new HitManager();
+
+        //  Initialize the detector sectoring
+        _hitmanager.getSectorManager().setSectorParams(_strategylist, _bfield, _rtrk);
+
+        //  Instantiate the helix finder
+        _helixfitter = new HelixFitter(_materialmanager);
+
+        //  Instantiate the Seed Finder
+        _finder = new SeedTrackFinder(_hitmanager, _helixfitter);
+
+        //  Instantiate the Track Maker
+        _maketracks = new MakeTracks();
+	}
+	
+	//--------------------------------------------------------------------------------
+	// Override driver methods
+	//--------------------------------------------------------------------------------
+	
+	@Override
+	protected void startOfData() {
+		
+		// check if any strategy list has been added
+		if (_strategyLists.size() == 0) {
+			throw new RuntimeException("IterativeSeedTracker: no strategy file given!");
+		}
+		
+		// get one of the strategies. This is just a workaround to not break the inherited methods. It does not affect actual reconstruction
+		_strategylist = _strategyLists.get(0);
+		
+		super.startOfData();
+	}
+	
+	@Override
+	protected void process(EventHeader event) {
+		
+        //  Pass the event to the diagnostics package
+        if (_diag != null) _diag.setEvent(event);
+
+        //  Initialize timing
+        long last_time = System.currentTimeMillis();
+        long start_time = last_time;
+        double dtime = 0.;
+
+        //  Get the hit collection from the event
+        List<HelicalTrackHit> hitcol = event.get(HelicalTrackHit.class, _inputCol);
+        
+        //  Prepare lists of seeded and confirmed MC Particles
+        List<MCParticle> seededmcp = new ArrayList<MCParticle>();
+        List<MCParticle> confirmedmcp = new ArrayList<MCParticle>();
+        
+        //  Prepare list of track seeds
+        List<SeedCandidate> trackseeds = new ArrayList<SeedCandidate>();
+        
+        for (List<SeedStrategy> strategyList : _strategyLists) {
+        	//  Sort the hits for this event
+        	_hitmanager.setSectorParams(strategyList, _bfield, _rtrk);
+            _hitmanager.OrganizeHits(hitcol);
+
+            String listPrefix = "Strategy list "+ _strategyLists.indexOf(strategyList);
+            
+            //  Make the timing plots if requested
+            start_time = System.currentTimeMillis();
+            dtime = ((double) (start_time - last_time)) / 1000.;
+            last_time = start_time;
+            if (_timing) aida.cloud1D(listPrefix+"/Organize Hits").fill(dtime);
+
+            //  Make sure that we have cleared the list of track seeds in the finder
+            _finder.clearTrackSeedList();
+
+            //  Loop over strategies and perform track finding
+            for (SeedStrategy strategy : strategyList) {
+
+                //  Set the strategy for the diagnostics
+                if (_diag != null) _diag.fireStrategyChanged(strategy);
+
+                //  Perform track finding under this strategy
+                _finder.FindTracks(strategy, _bfield);
+
+                //  Make the timing plots if requested
+                long time = System.currentTimeMillis();
+                dtime = ((double) (time - last_time)) / 1000.;
+                last_time = time;
+                if (_timing) aida.cloud1D(listPrefix+"/Tracking time for strategy "+strategy.getName()).fill(dtime);
+            }
+
+            //  Get the list of final list of SeedCandidates
+            List<SeedCandidate> newTrackSeeds = _finder.getTrackSeeds();
+            trackseeds.addAll(newTrackSeeds);
+            
+            //  Get the list of seeded MC Particles
+            seededmcp.addAll(_finder.getSeededMCParticles());
+            
+            //  Get the list of confirmed MC Particles
+            confirmedmcp.addAll(_finder.getConfirmedMCParticles());
+            
+            //  Find all the used hits and remove from the hit collection
+            for (SeedCandidate trackCandidate : newTrackSeeds) {
+            	for (HelicalTrackHit hit : trackCandidate.getHits()) {
+            		hitcol.remove(hit);
+            	}
+            }
+            
+            //  Make plot of number of found tracks per strategy list if requested
+            if (_timing) aida.cloud1D(listPrefix+"/Found Tracks").fill(newTrackSeeds.size());
+            
+            //  Clear the list of track seeds accumulated in the track finder
+            _finder.clearTrackSeedList();
+        }
+
+        //  Make tracks from the final list of track seeds
+        _maketracks.Process(event, trackseeds, _bfield);
+
+        //  Save the MC Particles that have been seeded
+        event.put("SeededMCParticles", seededmcp, MCParticle.class, 0);
+
+        //  Save the MC Particles that have been confirmed
+        event.put("ConfirmedMCParticles", confirmedmcp, MCParticle.class, 0);
+
+        //  Make the total time plot if requested
+        long end_time = System.currentTimeMillis();
+        dtime = ((double) (end_time - start_time)) / 1000.;
+        if (_timing) aida.cloud1D("Total tracking time").fill(dtime);
+
+        return;
+        
+	}
+
+	
+	//--------------------------------------------------------------------------------
+	// Adding strategy lists
+	//--------------------------------------------------------------------------------
+	
+	public void setStrategyFile(String fileName) {
+		setStrategyFile(new File(fileName));
+	}
+	
+	public void setStrategyFile(File file) {
+		_strategyLists.add(StrategyXMLUtils.getStrategyListFromFile(file));
+	}
+	
+	public void setStrategyResource(String resource) {
+		_strategyLists.add(StrategyXMLUtils.getStrategyListFromResource(resource));
+	}
+
+}

lcsim/src/org/lcsim/recon/tracking/seedtracker
SeedTracker.java 1.12 -> 1.13
diff -u -r1.12 -r1.13
--- SeedTracker.java	9 Sep 2009 04:23:53 -0000	1.12
+++ SeedTracker.java	20 Jul 2010 17:51:36 -0000	1.13
@@ -15,6 +15,7 @@
 import java.util.Set;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.geometry.Detector;
 import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
 import org.lcsim.util.Driver;
@@ -31,19 +32,20 @@
  */
 public class SeedTracker extends Driver {
 
-    private List<SeedStrategy> _strategylist;
-    private ISeedTrackerDiagnostics _diag = null;
-    private MaterialManager _materialmanager;
-    private HitManager _hitmanager;
-    private HelixFitter _helixfitter;
-    private SeedTrackFinder _finder;
-    private MakeTracks _maketracks;
-    private Hep3Vector _IP = new BasicHep3Vector(0., 0., 0.);
-    private double _bfield = 0.;
-    private double _rtrk = 1000.;
-    private boolean _autosectoring = true;
-    private AIDA aida = AIDA.defaultInstance();
-    private boolean _timing = false;
+    protected List<SeedStrategy> _strategylist;
+    protected ISeedTrackerDiagnostics _diag = null;
+    protected MaterialManager _materialmanager;
+    protected HitManager _hitmanager;
+    protected HelixFitter _helixfitter;
+    protected SeedTrackFinder _finder;
+    protected MakeTracks _maketracks;
+    protected Hep3Vector _IP = new BasicHep3Vector(0., 0., 0.);
+    protected double _bfield = 0.;
+    protected double _rtrk = 1000.;
+    protected boolean _autosectoring = true;
+    protected AIDA aida = AIDA.defaultInstance();
+    protected boolean _timing = false;
+    protected String _inputCol = "HelicalTrackHits";
 
     /** Creates a new instance of SeedTracker */
     public SeedTracker() {
@@ -86,8 +88,11 @@
         //  Initialize timing
         long last_time = System.currentTimeMillis();
 
+        //  Get the hit collection from the event
+        List<HelicalTrackHit> hitcol = event.get(HelicalTrackHit.class, _inputCol);
+        
         //  Sort the hits for this event
-        _hitmanager.OrganizeHits(event);
+        _hitmanager.OrganizeHits(hitcol);
 
         //  Make the timing plots if requested
         long start_time = System.currentTimeMillis();
@@ -186,6 +191,7 @@
         return;
     }
 
+    
     public void setDiagnostics(ISeedTrackerDiagnostics d) {
 
         //  Set the diagnostic package
@@ -208,6 +214,10 @@
     public void setTrkCollectionName(String name) {
         _maketracks.setTrkCollectionName(name);
     }
+    
+	public void setInputCollectionName(String name) {
+		_inputCol = name;
+	}
 
     /**
      * Set {@link TrackCheck} object to be used by the track finding algorithm.

lcsim/src/org/lcsim/recon/tracking/seedtracker
HitManager.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- HitManager.java	30 Jan 2009 15:34:42 -0000	1.4
+++ HitManager.java	20 Jul 2010 17:51:36 -0000	1.5
@@ -32,17 +32,28 @@
      * Sort the hits into distinct lists where each list has a unique detector name, layer number, and barrel endcap flag.
      * Also calculate the minimum and maximum hit radius and z coordinate for each list.
      * @param event EventHeader for the event to be organized
+     * @deprecated use OrganizeHits(List<HelicalTrackHit>) instead
      */
     public void OrganizeHits(EventHeader event) {
+    	
+        //  Retrieve the HelicalTrackHits
+        List<HelicalTrackHit> hitcol = event.get(HelicalTrackHit.class, "HelicalTrackHits");
 
-        //  Initialize the sector manager
+        OrganizeHits(hitcol);
+    }
+    
+    /**
+     * Sort the hits into distinct lists where each list has a unique detector name, layer number, and barrel endcap flag.
+     * Also calculate the minimum and maximum hit radius and z coordinate for each list.
+     * @param hitCol List of <code>HelicalTrackHits</code> to be organized
+     */
+    public void OrganizeHits(List<HelicalTrackHit> hitCol) {
+    	
+    	//  Initialize the sector manager
         _smanager.Initialize();
 
-        //  Retrieve the HelicalTrackHits
-        List<HelicalTrackHit> hitcol = (List<HelicalTrackHit>) event.get("HelicalTrackHits");
-
         //  Loop over the hits and let the SectorManager keep track of them
-        for (HelicalTrackHit hit : hitcol) {
+        for (HelicalTrackHit hit : hitCol) {
             //  Tell the sector manager about this hit
             _smanager.AddHit(hit);
         }
CVSspam 0.2.8