Print

Print


Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker/example on MAIN
AnalysisDriver.java+142added 1.1
MyStrategy.java+256added 1.1
MyTrackerDriver.java+71added 1.1
SeedTrackerDiagnostics.java+250added 1.1
VSExampleDriver.java+128added 1.1
VSExampleSegmenter.java+64added 1.1
+911
6 added files
Refactor seedtracker to recon.tracking

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
AnalysisDriver.java added at 1.1
diff -N AnalysisDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ AnalysisDriver.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,142 @@
+/*
+ * AnalysisDriver.java
+ *
+ * Created on February 11, 2008, 11:47 AM
+ *
+ */
+
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import hep.aida.IHistogram1D;
+import hep.physics.vec.Hep3Vector;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.lcsim.constants.Constants;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.fit.helicaltrack.HelicalTrackFit;
+import org.lcsim.event.TrackerHit;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.Track;
+import org.lcsim.event.MCParticle;
+import org.lcsim.util.aida.AIDA;
+import org.lcsim.util.Driver;
+
+
+/**
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class AnalysisDriver extends Driver {
+    private AIDA aida = AIDA.defaultInstance();
+    private IHistogram1D h1;
+    private IHistogram1D h2;
+    
+    /** Creates a new instance of AnalysisDriver */
+    public AnalysisDriver() {
+        h1 = aida.histogramFactory().createHistogram1D("pT Efficiency", "", 100, 0., 50., "type=efficiency");
+        h2 = aida.histogramFactory().createHistogram1D("theta Efficiency", "", 90, 0., 180., "type=efficiency");
+        
+    }
+    
+    /**
+     * Process the current event
+     * @param event EventHeader for this event
+     */
+    public void process(EventHeader event) {
+        List<Track> tracklist = event.getTracks();
+        Map<MCParticle, Track> trkmap = new HashMap<MCParticle, Track>();
+        for (Track track : tracklist) {
+            List<TrackerHit> hitlist = track.getTrackerHits();
+            Map<MCParticle, Integer> mcmap = new HashMap<MCParticle, Integer>();
+            if (track instanceof SeedTrack) {
+                SeedCandidate seed = ((SeedTrack) track).getSeedCandidate();
+                for (HelicalTrackHit hit : seed.getHits()) {
+                    double x = hit.getCorrectedPosition().x();
+                    double y = hit.getCorrectedPosition().y();
+                    HelicalTrackFit helix = seed.getHelix();
+                    MCParticle particle = hit.getMCParticles().get(0);
+                    Hep3Vector p = particle.getMomentum();
+                    double phi = Math.atan2(p.y(), p.x());
+                    double R = Math.sqrt(p.x()*p.x() + p.y()*p.y()) / (5. * Constants.fieldConversion);
+                    double RS = R;
+                    if (particle.getCharge() < 0.) RS = -1. * RS;
+                    Hep3Vector start = particle.getOrigin();
+                    double xc = start.x() + RS * Math.sin(phi);
+                    double yc = start.y() - RS * Math.cos(phi);
+//                    double xc = helix.xc();
+//                    double yc = helix.yc();
+//                    double R = Math.abs(helix.R());
+                    double RHit = Math.sqrt((x-xc)*(x-xc) + (y-yc)*(y-yc));
+                    double drphi_ms = 0.;
+                    if (helix.ScatterMap().containsKey(hit)) drphi_ms = helix.ScatterMap().get(hit).drphi();
+                    double drphi_res = hit.drphi();
+                    double drphi = Math.sqrt(drphi_ms*drphi_ms + drphi_res*drphi_res);
+                    aida.cloud1D("r-phi residual for layer "+hit.getLayerIdentifier()).fill(RHit-R);
+                    aida.cloud1D("Pull for layer "+hit.getLayerIdentifier()).fill((RHit - R)/drphi);
+                    aida.cloud1D("Hit resolution for layer "+hit.getLayerIdentifier()).fill(drphi_res);
+                    aida.cloud2D("Hit MS resolution for layer "+hit.getLayerIdentifier()).fill(drphi_ms, helix.pT(5.));
+                    List<MCParticle> mclist = hit.getMCParticles();
+                    for (MCParticle mcp : mclist) {
+                        if (mcmap.containsKey(mcp)) {
+                            int entries = mcmap.get(mcp) + 1;
+                            mcmap.put(mcp, entries);
+                        } else
+                            mcmap.put(mcp, 1);
+                    }
+                }
+                MCParticle mcmatch = null;
+                int nmatch = 0;
+                for (Map.Entry<MCParticle, Integer> me : mcmap.entrySet()) {
+                    if (me.getValue() > nmatch) {
+                        nmatch = me.getValue();
+                        mcmatch = me.getKey();
+                    }
+                }
+                if (trkmap.containsKey(mcmatch)) System.out.println("more than one track associated with an MCParticle!!");
+                else trkmap.put(mcmatch, track);
+            }
+        }
+        
+        List<MCParticle> mclist = event.getMCParticles();
+        for (MCParticle mcp : mclist) {
+            if (mcp.getCharge() == 0) continue;
+            if (mcp.getGeneratorStatus() != mcp.FINAL_STATE) continue;
+            double px = mcp.getPX();
+            double py = mcp.getPY();
+            double pz = mcp.getPZ();
+            double pt = Math.sqrt(px*px + py*py);
+            double p = Math.sqrt(pt*pt + pz*pz);
+            double cth = pz / p;
+            double theta = 180. * Math.acos(cth) / Math.PI;
+            double wgt = 0.;
+            if (trkmap.containsKey(mcp)) wgt = 1.;
+            if (pt > 1.1) {
+                aida.profile1D("Efficiency vs theta", 90, 0., 180.).fill(theta, wgt);
+                h2.fill(theta, wgt);
+                aida.histogram1D("MC angle", 90, 0., 180.).fill(theta);
+            }
+            if (Math.abs(cth) < 0.985) {
+                aida.profile1D("Efficiency vs pT", 100, 0., 50.).fill(pt, wgt);
+                h1.fill(pt,wgt);
+                aida.histogram1D("MC pT", 100, 0., 50.).fill(pt);
+            }
+            if (!trkmap.containsKey(mcp)) {
+                List<HelicalTrackHit> hits = event.get(HelicalTrackHit.class, "HelicalTrackHits");
+                if (hits.size() > 6) {
+                    System.out.println("Failed to find track.  Found "+hits.size()+" hits @ theta = "
+                            +180.*Math.acos(mcp.getMomentum().z() / mcp.getMomentum().magnitude())/Math.PI);
+                    for (HelicalTrackHit hit : hits) {
+                        System.out.println("Hit in "+hit.getLayerIdentifier()+" at x= "+hit.x()+" y= "+hit.y()+" z= "+hit.z());
+                    }
+                }
+            }
+        }
+        return;
+    }
+}
\ No newline at end of file

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
MyStrategy.java added at 1.1
diff -N MyStrategy.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MyStrategy.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,256 @@
+/*
+ * MyStrategy.java
+ *
+ * Created on April 12, 2008, 8:42 PM
+ *
+ */
+
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.lcsim.recon.tracking.seedtracker.SeedLayer;
+import org.lcsim.recon.tracking.seedtracker.SeedLayer.SeedType;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.geometry.subdetector.BarrelEndcapFlag;
+
+public class MyStrategy {
+    private List<SeedStrategy> _strategylist = new ArrayList<SeedStrategy>();
+    
+    public MyStrategy() {
+        
+        BarrelEndcapFlag barrel = BarrelEndcapFlag.BARREL;
+        BarrelEndcapFlag nend = BarrelEndcapFlag.ENDCAP_NORTH;
+        BarrelEndcapFlag send = BarrelEndcapFlag.ENDCAP_SOUTH;
+        
+        List<BarrelEndcapFlag> beflags = new ArrayList<BarrelEndcapFlag>();
+        beflags.add(nend);
+        beflags.add(send);
+        
+        //  Create an outside-in strategy for the barrel
+        List<SeedLayer> lyrlist = new ArrayList<SeedLayer>();
+        lyrlist.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexEndcap",0,nend,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexEndcap",1,nend,SeedType.Extend));
+        lyrlist.add(new SeedLayer("TrackerForward",0,nend,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexEndcap",0,send,SeedType.Extend));
+        lyrlist.add(new SeedLayer("VertexEndcap",1,send,SeedType.Extend));
+        lyrlist.add(new SeedLayer("TrackerForward",0,send,SeedType.Extend));
+        lyrlist.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+        lyrlist.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+        lyrlist.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+        lyrlist.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Seed));
+        lyrlist.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Seed));
+        SeedStrategy outsideinbarrel = new SeedStrategy("OutsideInBarrel",lyrlist);
+        _strategylist.add(outsideinbarrel);
+        
+        for (BarrelEndcapFlag endcap : beflags) {
+            
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist2 = new ArrayList<SeedLayer>();
+            lyrlist2.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+            lyrlist2.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+            lyrlist2.add(new SeedLayer("TrackerEndcap",0,endcap,SeedType.Confirm));
+            lyrlist2.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+            lyrlist2.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+            lyrlist2.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap = new SeedStrategy("OutsideInEndcap",lyrlist2);
+            _strategylist.add(outsideinendcap);
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist3 = new ArrayList<SeedLayer>();
+            lyrlist3.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+            lyrlist3.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+            lyrlist3.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+            lyrlist3.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Seed));
+            lyrlist3.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap3 = new SeedStrategy("OutsideInEndcap3",lyrlist3);
+            _strategylist.add(outsideinendcap3);
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist4 = new ArrayList<SeedLayer>();
+            lyrlist4.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+            lyrlist4.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+            lyrlist4.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Seed));
+            lyrlist4.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+            lyrlist4.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap4 = new SeedStrategy("OutsideInEndcap4",lyrlist4);
+            _strategylist.add(outsideinendcap4);
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist5 = new ArrayList<SeedLayer>();
+            lyrlist5.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+            lyrlist5.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+            lyrlist5.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+            lyrlist5.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+            lyrlist5.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap5 = new SeedStrategy("OutsideInEndcap5",lyrlist5);
+            _strategylist.add(outsideinendcap5);
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist6 = new ArrayList<SeedLayer>();
+            lyrlist6.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist6.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Confirm));
+            lyrlist6.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Confirm));
+            lyrlist6.add(new SeedLayer("TrackerEndcap",1,endcap,SeedType.Seed));
+            lyrlist6.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+            lyrlist6.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap6 = new SeedStrategy("OutsideInEndcap6",lyrlist6);
+            _strategylist.add(outsideinendcap6);
+            
+            //  Create an outside-in strategy for the disks
+            List<SeedLayer> lyrlist7 = new ArrayList<SeedLayer>();
+            lyrlist7.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist7.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Confirm));
+            lyrlist7.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Seed));
+            lyrlist7.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Seed));
+            lyrlist7.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Seed));
+            SeedStrategy outsideinendcap7 = new SeedStrategy("OutsideInEndcap7",lyrlist7);
+            _strategylist.add(outsideinendcap7);
+            
+            //  Create an inside out for the forward region
+            List<SeedLayer> lyrlist8 = new ArrayList<SeedLayer>();
+            lyrlist8.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+            lyrlist8.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+            lyrlist8.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+            lyrlist8.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Confirm));
+            lyrlist8.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+            lyrlist8.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+            SeedStrategy outsideinendcap8 = new SeedStrategy("InsideOutEndcap1",lyrlist8);
+            _strategylist.add(outsideinendcap8);
+            
+            //  Create an inside out for the forward region
+            List<SeedLayer> lyrlist9 = new ArrayList<SeedLayer>();
+            lyrlist9.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Seed));
+            lyrlist9.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+            lyrlist9.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+            lyrlist9.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+            lyrlist9.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+            lyrlist9.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+            SeedStrategy outsideinendcap9 = new SeedStrategy("InsideOutEndcap2",lyrlist9);
+            _strategylist.add(outsideinendcap9);
+            
+            //  Create an inside out for the forward region
+            List<SeedLayer> lyrlist10 = new ArrayList<SeedLayer>();
+            lyrlist10.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Seed));
+            lyrlist10.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Seed));
+            lyrlist10.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Seed));
+            lyrlist10.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Confirm));
+            lyrlist10.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+            lyrlist10.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+            SeedStrategy outsideinendcap10 = new SeedStrategy("InsideOutEndcap3",lyrlist10);
+            _strategylist.add(outsideinendcap10);
+            
+            //  Create an inside out for the forward region
+            List<SeedLayer> lyrlist11 = new ArrayList<SeedLayer>();
+            lyrlist11.add(new SeedLayer("VertexBarrel",0,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexBarrel",1,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexBarrel",2,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexBarrel",3,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexBarrel",4,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerBarrel",0,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerBarrel",1,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerBarrel",2,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerBarrel",3,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerBarrel",4,barrel,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexEndcap",0,endcap,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("VertexEndcap",1,endcap,SeedType.Seed));
+            lyrlist11.add(new SeedLayer("VertexEndcap",2,endcap,SeedType.Seed));
+            lyrlist11.add(new SeedLayer("VertexEndcap",3,endcap,SeedType.Seed));
+            lyrlist11.add(new SeedLayer("TrackerForward",0,endcap,SeedType.Confirm));
+            lyrlist11.add(new SeedLayer("TrackerForward",1,endcap,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerForward",2,endcap,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerEndcap",2,endcap,SeedType.Extend));
+            lyrlist11.add(new SeedLayer("TrackerEndcap",3,endcap,SeedType.Extend));
+            SeedStrategy outsideinendcap11 = new SeedStrategy("InsideOutEndcap4",lyrlist11);
+            _strategylist.add(outsideinendcap11);
+            
+        }
+        
+        for (SeedStrategy strategy : _strategylist) {
+            //  Set parameters for this strategy
+            strategy.putMinPT(1.0);        //  Set minimum pT at 1 GeV
+            strategy.putMaxDCA(10.0);       //  Set maximum d0 at 1 mm
+            strategy.putMaxZ0(10.0);        //  Set maximum z0 at 1 mm
+            strategy.putMinConfirm(1);     //  Require at least 1 confirm hit
+            strategy.putMinHits(7);        //  Require at least 7 total hits
+            strategy.putMaxChisq(50.);     //  Set maximum chi^2 at 50
+            strategy.putBadHitChisq(15.);  //  Set chi^2 change that gives preference to excluding the hit
+        }
+    }
+    
+    public List<SeedStrategy> getStrategies() {
+        return _strategylist;
+    }
+}

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
MyTrackerDriver.java added at 1.1
diff -N MyTrackerDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ MyTrackerDriver.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,71 @@
+/*
+ * MyTrackerDriver.java
+ *
+ * Created on March 29, 2006, 4:58 PM
+ *
+ */
+
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import java.util.List;
+import org.lcsim.contrib.Pelham.Example1.HistogramAnalysisDriver;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.recon.tracking.seedtracker.SeedTracker;
+//import org.lcsim.contrib.seedtracker.diagnostic.SeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.StrategyXMLUtils;
+import org.lcsim.event.EventHeader;
+import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver;
+import org.lcsim.fit.helicaltrack.HelicalTrackHitDriver.HitType;
+import org.lcsim.util.Driver;
+
+/**
+ * Driver for testing the SeedTracker track finding algorithm.  This driver causes
+ * the SmearMCHits and SeedTracker drivers to be invoked for each event.
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class MyTrackerDriver extends Driver
+{  
+   public MyTrackerDriver()
+    {
+        //  Add the hit digitization driver (this example uses the virtual segment digitization code)
+        add(new VSExampleDriver());
+        
+        //  Add a driver to create HelicalTrackHits from the digitized hits
+        HelicalTrackHitDriver hitdriver = new HelicalTrackHitDriver();
+        hitdriver.addCollection("NewTrackerHits",HitType.VirtualSegmentation);
+        add(hitdriver);
+        
+        // Obtain a trained list of strategies from a saved resource. 
+        // Because resources are loaded from inside the compiled JAR file, 
+        // it is necessary to recompile when modifying a saved resource.
+        // StrategyXMLUtils.getDefaultStrategiesPrefix() will provide the correct
+        // prefix in the resource tree (i.e. "/org/lcsim/contrib/seedtracker/strategybuilder/strategies/")
+        List<SeedStrategy> stratlist = StrategyXMLUtils.getStrategyListFromResource(StrategyXMLUtils.getDefaultStrategiesPrefix()+"autogen_zpole_sid01.xml");
+
+        // For development / modifications, one may choose to load a strategy 
+        // list from a local file instead of a resource. The line below shows
+        // an example of how to do this
+        
+//        List<SeedStrategy> stratlist = StrategyXMLUtils.getStrategyListFromFile(new File("/path/to/file/strategies.xml")); 
+        
+        
+        //  Add a driver to do the track finding
+        SeedTracker st = new SeedTracker(stratlist);
+        
+        //Enable diagnostics
+//        st.setDiagnostics(new SeedTrackerDiagnostics());
+        
+        //Add the Driver
+        add(st);
+
+	//  Add an example analysis driver
+//      add (new HistogramAnalysisDriver()); 
+	
+    }
+    public void process(EventHeader event)
+    {
+        super.process(event);
+        return;     
+    }    
+}

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
SeedTrackerDiagnostics.java added at 1.1
diff -N SeedTrackerDiagnostics.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SeedTrackerDiagnostics.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,250 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import org.lcsim.contrib.seedtracker.*;
+import hep.physics.vec.Hep3Vector;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import org.lcsim.recon.tracking.seedtracker.ConfirmerExtender.Task;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.EmptySeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.FindableTracks;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
+import org.lcsim.recon.tracking.seedtracker.diagnostic.SeedValidator;
+import org.lcsim.event.MCParticle;
+import org.lcsim.fit.helicaltrack.HelicalTrackHit;
+import org.lcsim.math.chisq.ChisqProb;
+import org.lcsim.recon.tracking.seedtracker.HelixFitter;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedStrategy;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author cozzy
+ */
+public class SeedTrackerDiagnostics extends EmptySeedTrackerDiagnostics implements ISeedTrackerDiagnostics{
+
+    AIDA aida = AIDA.defaultInstance();
+     
+    private double purity_cutoff = 0.0; 
+    private String prefix = ""; 
+    private boolean debugOut = true; 
+    
+    public SeedTrackerDiagnostics(){
+
+    }
+    
+    /**
+     * Generates diagnostic plots given a list of seed candidates and a strategy.
+     * @param seedlist
+     * @param strategy
+     */
+    @Override
+    public void fireFinalDiagnostics(List<SeedCandidate> seedlist){
+        
+        System.out.println(" After merging: "+seedlist.size());
+        Map<SeedCandidate,SeedValidator> vmap = generateValidators(seedlist);
+        makePurityPlots(vmap);        
+        Set<MCParticle> likelyMCs = generateLikelyMCSet(vmap);
+        makeEfficiencyPlots(likelyMCs,currentStrategy);
+    }
+    
+   /**
+    * Sets the purity cutoff for a track's MC to be considered found when 
+    * calculating efficiency. Default is 0.0. 
+    * @param new_purity_cutoff
+    */
+    public void setPurityCutoff(double new_purity_cutoff){
+        purity_cutoff = new_purity_cutoff; 
+    }
+    
+    /**
+     * Sets the prefix to be appended to the beginning of each plot (for example, a strategy name
+     * @param str the new prefix
+     */
+    public void setPrefix(String str){
+        this.prefix = str; 
+    }
+    
+    
+    @Override
+    public void fireStrategyChanged(SeedStrategy strategy) {
+        setPrefix("chisq cut = "+strategy.getMaxChisq()+"/");
+        super.fireStrategyChanged(strategy);
+    }
+
+
+    @Override
+    public void fireMergeIsBetterDiagnostics(SeedCandidate newSeed, SeedCandidate oldSeed, boolean returnValue) {
+        if (returnValue){
+            
+            SeedValidator oldV = new SeedValidator(oldSeed);
+            SeedValidator newV = new SeedValidator(newSeed);
+
+                if (oldV.getPurity() > newV.getPurity()){
+                     makeBadDecisionPlots(newSeed,oldSeed, oldV,newV);
+                }
+        }
+    }
+
+    @Override
+    public void fireFinderDone(int maxseeds, int nseed, int nfit, int nconfirm, List<SeedCandidate> confirmedSeeds) {
+//        System.out.println("Possible seeds: "+maxseeds);
+//        System.out.print(" Trial seeds: "+nseed);
+//        System.out.println(" Fitted seeds: "+nfit);
+//        System.out.println(" Confirmed seeds: "+nconfirm);
+//        System.out.println(" Confirmed seed candidates: "+confirmedSeeds.size());
+    }
+    
+    @Override
+    public void fireConfirmerExtenderWorkingSeedInfo(Task task, SeedCandidate seed, List<HelicalTrackHit> hitlist) {
+        if (debugOut) {
+            System.out.println("Oldcirclechisq: "+seed.getHelix().chisq()[0]);
+            System.out.println("Oldchisq: "+seed.getHelix().chisqtot());
+            System.out.println("Oldhits: "+seed.getHits().size());
+            System.out.println("Old Helix: "+seed.getHelix().toString()); 
+        }
+        return;
+    }
+
+    @Override
+    public void fireConfirmerExtenderFitNoSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter,  boolean optimize) {
+        if (debugOut) System.out.println("Circlechissq" + fitter.getCircleFit().chisq());
+    }
+
+    @Override
+   public void fireConfirmerExtenderFitSuccess(Task task, SeedCandidate Seed, HelicalTrackHit hit, HelixFitter fitter, double chisqbest, boolean optimize) {
+        if (debugOut) {
+            System.out.println("Good fit");
+            System.out.println("Chisq: "+fitter.getHelix().chisqtot());
+            System.out.println("Circle Chisq: "+fitter.getHelix().chisq()[0]);
+            System.out.println("New Helix: "+fitter.getHelix().toString());
+        }
+    }
+
+    @Override
+    public void fireConfirmerExtenderLayerDone(Task task, int numSeeds, List<SeedCandidate> seedlist) {
+        if (debugOut){
+            System.out.println(" "+task.toString()+" seeds: "+numSeeds);
+            System.out.println(" "+task.toString()+" seed candidates: "+seedlist.size());
+        }
+    }
+    
+        private void makeBadDecisionPlots(SeedCandidate newseed, SeedCandidate seed, SeedValidator oldV, SeedValidator newV) {
+
+        aida.cloud1D(prefix+"Bad Decision newseed chisq").fill(newseed.getHelix().chisqtot());
+        aida.cloud1D(prefix+"Bad Decision oldseed chisq").fill(seed.getHelix().chisqtot());
+        aida.cloud2D(prefix+"Bad Decision newseed vs. oldseed chisq").fill(newseed.getHelix().chisqtot(), seed.getHelix().chisqtot());
+        aida.cloud1D(prefix+"Bad Decision old seedpurity").fill(oldV.getPurity());
+        aida.cloud1D(prefix+"Bad Decision new seedpurity").fill(newV.getPurity());
+        
+        
+        if(oldV.getVerdict().isGoodValue()){
+            Hep3Vector p = oldV.getLikelyMC().getMomentum();
+            double pt = Math.sqrt(p.x() * p.x() + p.y() * p.y());
+            aida.cloud1D(prefix+"Bad Decision real particle transverse momentum").fill(pt);
+        
+            Hep3Vector r = oldV.getLikelyMC().getOrigin();
+            double rc = Math.sqrt(r.x()*r.x()+r.y()*r.y()); 
+            aida.cloud1D(prefix + "Bad Decision real particle start radius (cylindrical)").fill(rc);
+        }
+        
+    }
+
+ 
+    //makes purity plots
+    private void makePurityPlots(Map<SeedCandidate, SeedValidator> vmap) {
+        
+        for (SeedCandidate s : vmap.keySet()) {
+
+            SeedValidator v = vmap.get(s);
+   
+            if (v.getVerdict().isGoodValue()) {
+                aida.cloud1D(prefix+"Good seeds chisq").fill(s.getHelix().chisqtot());
+                aida.cloud1D(prefix+"Good seeds numhits").fill(s.getHits().size());
+                aida.cloud1D(prefix+"Good seeds pt").fill(s.getHelix().pT(5.0));
+            } else {
+                aida.cloud1D(prefix+"Bad seeds chisq").fill(s.getHelix().chisqtot());
+                aida.cloud1D(prefix+"Bad seeds numhits").fill(s.getHits().size());
+                aida.cloud1D(prefix+"Bad seeds pt").fill(s.getHelix().pT(5.0));
+            }
+            
+            aida.cloud1D(prefix+"purity").fill(v.getPurity());
+            aida.cloud2D(prefix+"purity vs. numHits").fill(v.getPurity(), s.getHits().size());
+            aida.cloud2D(prefix+"purity vs. pt").fill(v.getPurity(), s.getHelix().pT(5.0));
+            aida.cloud2D(prefix+"purity vs. cth").fill(v.getPurity(), s.getHelix().cth());
+            aida.cloud2D(prefix+"purity vs. chisq").fill(v.getPurity(), s.getHelix().chisqtot());
+            
+            double chisqdof = ChisqProb.gammq(s.getHelix().chisqtot(), s.getHits().size()-1); 
+            
+            aida.cloud2D(prefix+"purity vs. (1 - chisq_cdf(chisq,ndof)").fill(v.getPurity(), chisqdof);
+            aida.cloud2D(prefix+"purity cs. dca").fill(v.getPurity(), s.getHelix().dca());
+        }
+    }
+    
+    private void makeEfficiencyPlots(Set<MCParticle> likelyMCs, SeedStrategy strat){
+        
+        FindableTracks findable = new FindableTracks(strat, hitManager);
+        findable.setBField(bField);
+        
+        List<MCParticle> MCs = new ArrayList<MCParticle>(); 
+        MCs.addAll(event.getMCParticles());
+        
+        Iterator iter = MCs.iterator();
+
+            //remove all none findable MCs
+            while(iter.hasNext()){
+                if(!findable.isFindable((MCParticle)iter.next()))
+                    iter.remove();
+            }
+
+            int numFindable = MCs.size(); 
+            aida.cloud1D(prefix+"Number findable").fill(numFindable);
+
+            
+            // remove all the MC's we've found... this gives us findable - found
+            MCs.removeAll(likelyMCs);
+
+            int numFound = numFindable - MCs.size(); // findable - (findable - found) = found 
+            
+            aida.cloud1D(prefix+"Num found (purity cutoff="+purity_cutoff+") ").fill(numFound);
+            
+            if(numFindable > 0){
+                double eff = (double) numFound / (double) numFindable;
+                aida.cloud1D(prefix+"Efficiency").fill(eff);
+            }
+        
+    }
+    
+    
+    private Map<SeedCandidate,SeedValidator> generateValidators(List<SeedCandidate> seedlist) {
+        
+        Map<SeedCandidate,SeedValidator> ret = new HashMap<SeedCandidate,SeedValidator>(); 
+        for (SeedCandidate s : seedlist) {
+            ret.put(s, new SeedValidator(s));
+        }
+        
+        return ret;
+    }
+    
+    private Set<MCParticle> generateLikelyMCSet(Map<SeedCandidate, SeedValidator> vmap) {
+        
+        Set<MCParticle> set = new HashSet<MCParticle>(); 
+        
+        for (SeedValidator v : vmap.values()) {
+            if(v.getPurity()<purity_cutoff) continue; 
+            set.add(v.getLikelyMC());
+        }
+        return set; 
+    }   
+}
+    
\ No newline at end of file

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
VSExampleDriver.java added at 1.1
diff -N VSExampleDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ VSExampleDriver.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,128 @@
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import java.util.*;
+
+import hep.aida.*;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.SimTrackerHit;
+import org.lcsim.recon.cat.util.NoSuchParameterException;
+import org.lcsim.units.clhep.SystemOfUnits;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+import org.lcsim.contrib.onoprien.tracking.clustering.ClusteringDriver;
+import org.lcsim.contrib.onoprien.tracking.clustering.clusterers.NearestNeighborClusterer;
+import org.lcsim.contrib.onoprien.tracking.digitization.SimToDigiDriver;
+import org.lcsim.contrib.onoprien.tracking.digitization.SimToDigiConverter;
+import org.lcsim.contrib.onoprien.tracking.digitization.algorithms.ConverterSimple;
+import org.lcsim.contrib.onoprien.tracking.geom.SegmentationManager;
+import org.lcsim.contrib.onoprien.tracking.geom.Segmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.Sensor;
+import org.lcsim.contrib.onoprien.tracking.geom.SensorType;
+import org.lcsim.contrib.onoprien.tracking.hit.DigiTrackerHit;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerCluster;
+import org.lcsim.contrib.onoprien.tracking.hit.TrackerHit;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.HitMakingDriver;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.TrackerHitConverter;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.TrackerHitMaker;
+import org.lcsim.contrib.onoprien.tracking.hitmaking.hitmakers.TrackerHitMakerBasic;
+import org.lcsim.contrib.onoprien.tracking.mctruth.MCTruth;
+import org.lcsim.contrib.onoprien.tracking.mctruth.MCTruthDriver;
+import org.lcsim.contrib.onoprien.tracking.mctruth.SimGroup;
+
+/**
+ * An Example of how to define virtual segmentation of the tracker, 
+ * and use {@link TrackerHitConverter} to create
+ * "standard" <tt>org.lcsim.event.TrackerHits</tt>.
+ * Parameters are chosen to define reasonable segmentation for SiD01.
+ * 
+ * 
+ * 
+ * @author D. Onoprienko
+ * @version $Id: VSExampleDriver.java,v 1.1 2008/08/27 17:56:36 partridge Exp $
+ */
+public class VSExampleDriver extends Driver {
+  
+// -- Constructors :  ----------------------------------------------------------
+  
+  public VSExampleDriver() {
+
+    add(new MCTruthDriver());
+    
+    // Segmentation description :
+    
+    Segmenter segmenter = new VSExampleSegmenter();
+    SegmentationManager segMan = new SegmentationManager(segmenter);
+    SegmentationManager.setDefaultInstance(segMan);
+    add(segMan);
+    
+    // Digitization :
+
+    SimToDigiConverter converter = new ConverterSimple();
+    SimToDigiDriver conversionDriver = new SimToDigiDriver(converter);
+    conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrBarrHits");
+    conversionDriver.set("ADD_INPUT_LIST_NAME", "VtxBarrHits");
+    conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrEndcapHits");
+    conversionDriver.set("ADD_INPUT_LIST_NAME", "VtxEndcapHits");
+    conversionDriver.set("ADD_INPUT_LIST_NAME", "TkrForwardHits");
+    conversionDriver.set("OUTPUT_MAP_NAME", "DigiTrackerHits");
+    add(conversionDriver);
+
+    // Clustering :
+    
+    ClusteringDriver clusteringDriver = new ClusteringDriver(new NearestNeighborClusterer());
+    clusteringDriver.set("INPUT_MAP_NAME","DigiTrackerHits");
+    clusteringDriver.set("OUTPUT_MAP_NAME","TrackerClusters");
+    add(clusteringDriver);
+    
+    // Hit making :
+    
+    TrackerHitMaker hitMaker = new TrackerHitMakerBasic();
+    HitMakingDriver hitMakingDriver = new HitMakingDriver(hitMaker);
+    hitMakingDriver.set("INPUT_MAP_NAME","TrackerClusters");
+    hitMakingDriver.set("OUTPUT_MAP_NAME","NewTrackerHits");
+    add(hitMakingDriver);
+     
+    // Conversion to "standard" org.lcsim.event.TrackerHit :  ------------------
+    
+//    TrackerHitConverter hitConverter = new TrackerHitConverter();
+//    hitConverter.set("INPUT_CLUSTER_MAP_NAME", "TrackerClusters");
+//    hitConverter.set("OUTPUT_HIT_LIST_NAME", "StandardTrackerHits");
+//    add(hitConverter);
+  }
+  
+  
+// -- Event processing :  ------------------------------------------------------
+
+  public void process(EventHeader event) {
+    
+//    System.out.println(" ");
+//    System.out.println("Event "+event.getEventNumber());
+
+    super.process(event);
+    
+    MCTruth mcTruth = (MCTruth) event.get("MCTruth");
+    
+//    System.out.println(" ");
+    
+    int n = 0;
+    HashMap<Sensor, List<DigiTrackerHit>> digiMap = 
+            (HashMap<Sensor, List<DigiTrackerHit>>) event.get("DigiTrackerHits");
+    for (List<DigiTrackerHit> digiList : digiMap.values()) n += digiList.size();
+    System.out.println("Created " + n + " DigiTrackerHits on " + digiMap.keySet().size() + " sensors");
+    
+    n = 0;
+    HashMap<Sensor, List<TrackerCluster>> clusterMap = 
+            (HashMap<Sensor, List<TrackerCluster>>) event.get("TrackerClusters");
+    for (List<TrackerCluster> clusterList : clusterMap.values()) n += clusterList.size();
+    System.out.println("Created " + n + " TrackerClusters on " + clusterMap.keySet().size() + " sensors");
+    
+//    n = 0;
+//    List<org.lcsim.event.TrackerHit> oldHitList = (List<org.lcsim.event.TrackerHit>) event.get("StandardTrackerHits");
+//    System.out.println("Created " + oldHitList.size() + " org.lcsim.event.TrackerHits");
+  }
+
+}

lcsim/src/org/lcsim/recon/tracking/seedtracker/example
VSExampleSegmenter.java added at 1.1
diff -N VSExampleSegmenter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ VSExampleSegmenter.java	27 Aug 2008 17:56:36 -0000	1.1
@@ -0,0 +1,64 @@
+package org.lcsim.recon.tracking.seedtracker.example;
+
+import org.lcsim.units.clhep.SystemOfUnits;
+
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.CylindricalBarrelSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.DiskTrackerToWedgesSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.DiskTrackerToRingsSegmenter;
+import org.lcsim.contrib.onoprien.tracking.geom.segmenters.SubdetectorBasedSegmenter;
+
+/**
+ * 
+ * 
+ * 
+ * 
+ * @author D. Onoprienko
+ * @version $Id: VSExampleSegmenter.java,v 1.1 2008/08/27 17:56:36 partridge Exp $
+ */
+public class VSExampleSegmenter extends SubdetectorBasedSegmenter {
+  
+// -- Constructors :  ----------------------------------------------------------
+  
+  public VSExampleSegmenter() {
+    
+    // 25 um pixels in VTX Barrel
+    
+    CylindricalBarrelSegmenter vtxBarrelSegmenter = new CylindricalBarrelSegmenter("VertexBarrel");
+    vtxBarrelSegmenter.setStripLength(25.*SystemOfUnits.micrometer);
+    vtxBarrelSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+    setSegmenter("VertexBarrel", vtxBarrelSegmenter);
+    
+    // 10 cm x 25 um strips in outer Tracker Barrel
+    
+    CylindricalBarrelSegmenter trackerBarrelSegmenter = new CylindricalBarrelSegmenter("TrackerBarrel");
+    trackerBarrelSegmenter.setStripLength(10.*SystemOfUnits.cm);
+    trackerBarrelSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+    setSegmenter("TrackerBarrel", trackerBarrelSegmenter);
+    
+    // 25 um pixels in VTX Endcap
+    
+    DiskTrackerToRingsSegmenter vtxEndcapSegmenter = new DiskTrackerToRingsSegmenter("VertexEndcap");
+    vtxEndcapSegmenter.setStripLength(25.*SystemOfUnits.micrometer);
+    vtxEndcapSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+    setSegmenter("VertexEndcap", vtxEndcapSegmenter);
+    
+    // 15 degrees stereo wedges in Forward Tracker
+    
+    DiskTrackerToWedgesSegmenter trackerForwardSegmenter = new DiskTrackerToWedgesSegmenter("TrackerForward");
+    trackerForwardSegmenter.setStripLength(10.*SystemOfUnits.cm);
+    trackerForwardSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+    trackerForwardSegmenter.setNumberOfPhiSlices(24);
+    setSegmenter("TrackerForward", trackerForwardSegmenter);
+    
+    // 15 degrees stereo wedges in outer Tracker Endcap
+    
+    DiskTrackerToWedgesSegmenter trackerEndcapSegmenter = new DiskTrackerToWedgesSegmenter("TrackerEndcap");
+    trackerEndcapSegmenter.setNumberOfRadialSlices(new int[]{3,5,8,10, 10});
+    trackerEndcapSegmenter.setStripWidth(25.*SystemOfUnits.micrometer);
+    trackerEndcapSegmenter.setNumberOfPhiSlices(24);
+    setSegmenter("TrackerEndcap", trackerEndcapSegmenter);
+  }
+  
+// -- Private parts :  ---------------------------------------------------------
+  
+}
CVSspam 0.2.8