Print

Print


Commit in lcsim/src/org/lcsim on MAIN
contrib/seedtracker/ConfirmSeeds.java+4-21.3 -> 1.4
                   /DefaultStrategy.java+26-121.6 -> 1.7
                   /ExtendSeeds.java+4-11.2 -> 1.3
                   /FindSeeds.java+35-181.3 -> 1.4
                   /HelixFitter.java+1-11.3 -> 1.4
                   /SeedStrategy.java+1-11.4 -> 1.5
                   /SeedTracker.java+1-11.8 -> 1.9
fit/helicaltrack/HelicalTrackFitter.java+4-21.16 -> 1.17
+76-38
8 modified files
Updates to improve track finding speed and fix a bug in the chisq calculation

lcsim/src/org/lcsim/contrib/seedtracker
ConfirmSeeds.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- ConfirmSeeds.java	7 Feb 2008 18:20:50 -0000	1.3
+++ ConfirmSeeds.java	12 Feb 2008 17:10:10 -0000	1.4
@@ -43,7 +43,7 @@
         
         //  Loop over the confirmation layers
         for (SeedLayer lyr : confirmlyrs) {
-            
+            int nconfirm = 0;
             //  Get the hits on this confirmation layer
             List<HelicalTrackHit> hitlist = _hitmanager.getTrackerHits(lyr);
             
@@ -75,10 +75,12 @@
                 //  If all fit tries for this layer are potentially bad hits, include the starting seed in the list
                 if (chisqbest - oldchisq > strategy.getBadHitChisq()) {
                     newlist.add(seedin);
-                }
+                } else nconfirm++;
             }
             //  Use the new list of seeds as input to the next layer search
             seedlist = newlist;
+//            System.out.println(" Number of confirmed seeds: "+nconfirm);
+//            System.out.println(" Number of seed candidates: "+seedlist.size());
         }
         
         //  Check for seeds with sufficient numbers of confirmed hits

lcsim/src/org/lcsim/contrib/seedtracker
DefaultStrategy.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- DefaultStrategy.java	6 Feb 2008 02:33:25 -0000	1.6
+++ DefaultStrategy.java	12 Feb 2008 17:10:10 -0000	1.7
@@ -26,19 +26,33 @@
     public DefaultStrategy() {
         _strategylist = new ArrayList();
         // Barrel only strategies
-        List<SeedLayer> tv012layers = new ArrayList();
-        tv012layers.add(new SeedLayer("VertexBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Seed));
-        tv012layers.add(new SeedLayer("VertexBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Seed));
-        tv012layers.add(new SeedLayer("VertexBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Seed));
-        tv012layers.add(new SeedLayer("VertexBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Confirm));
-        tv012layers.add(new SeedLayer("VertexBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Confirm));
-        tv012layers.add(new SeedLayer("TrackerBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Extend));
-        tv012layers.add(new SeedLayer("TrackerBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Extend));
-        tv012layers.add(new SeedLayer("TrackerBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Extend));
-        tv012layers.add(new SeedLayer("TrackerBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Extend));
-        tv012layers.add(new SeedLayer("TrackerBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Extend));
+//        List<SeedLayer> tv012layers = new ArrayList();
+//        tv012layers.add(new SeedLayer("VertexBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Seed));
+//        tv012layers.add(new SeedLayer("VertexBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Seed));
+//        tv012layers.add(new SeedLayer("VertexBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Seed));
+//        tv012layers.add(new SeedLayer("VertexBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Confirm));
+//        tv012layers.add(new SeedLayer("VertexBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Confirm));
+//        tv012layers.add(new SeedLayer("TrackerBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Extend));
+//        tv012layers.add(new SeedLayer("TrackerBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Extend));
+//        tv012layers.add(new SeedLayer("TrackerBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Extend));
+//        tv012layers.add(new SeedLayer("TrackerBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Extend));
+//        tv012layers.add(new SeedLayer("TrackerBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Extend));
         
-        _strategylist.add(new SeedStrategy("TV012",tv012layers));
+//        _strategylist.add(new SeedStrategy("TV012",tv012layers));
+
+        List<SeedLayer> tb345layers = new ArrayList();
+        tb345layers.add(new SeedLayer("VertexBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Extend));
+        tb345layers.add(new SeedLayer("VertexBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Extend));
+        tb345layers.add(new SeedLayer("VertexBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Extend));
+        tb345layers.add(new SeedLayer("VertexBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Extend));
+        tb345layers.add(new SeedLayer("VertexBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Extend));
+        tb345layers.add(new SeedLayer("TrackerBarrel", 0, BarrelEndcapFlag.BARREL, SeedType.Confirm));
+        tb345layers.add(new SeedLayer("TrackerBarrel", 1, BarrelEndcapFlag.BARREL, SeedType.Confirm));
+        tb345layers.add(new SeedLayer("TrackerBarrel", 2, BarrelEndcapFlag.BARREL, SeedType.Seed));
+        tb345layers.add(new SeedLayer("TrackerBarrel", 3, BarrelEndcapFlag.BARREL, SeedType.Seed));
+        tb345layers.add(new SeedLayer("TrackerBarrel", 4, BarrelEndcapFlag.BARREL, SeedType.Seed));
+        
+        _strategylist.add(new SeedStrategy("TB345",tb345layers));
         
         List<BarrelEndcapFlag> belist = new ArrayList();
         belist.add(BarrelEndcapFlag.ENDCAP_NORTH);

lcsim/src/org/lcsim/contrib/seedtracker
ExtendSeeds.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- ExtendSeeds.java	7 Feb 2008 18:20:50 -0000	1.2
+++ ExtendSeeds.java	12 Feb 2008 17:10:10 -0000	1.3
@@ -36,6 +36,7 @@
         
         //  Loop over the confirmed seeds
         for (SeedCandidate seed : confirmed) {
+            int nextend = 0;
             
             //  Start a working seed list and add the input seed
             List<SeedCandidate> seedlist = new ArrayList<SeedCandidate>();
@@ -76,10 +77,12 @@
                     //  If all fit tries for this layer are potentially bad hits, include the starting seed in the list
                     if (chisqbest - oldchisq > strategy.getBadHitChisq()) {
                         newlist.add(seedin);
-                    }
+                    } else nextend++;
                 }
                 //  Use the new list of seeds as input to the next layer search
                 seedlist = newlist;
+//                System.out.println(" Extended seeds: "+nextend);
+//                System.out.println(" Extended seed candidates: "+seedlist.size());
             }
             
             //  Check for seeds with sufficient numbers of confirmed hits

lcsim/src/org/lcsim/contrib/seedtracker
FindSeeds.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- FindSeeds.java	7 Feb 2008 18:20:50 -0000	1.3
+++ FindSeeds.java	12 Feb 2008 17:10:10 -0000	1.4
@@ -30,51 +30,68 @@
         _confirmseeds = new ConfirmSeeds(hitmanager, helixfitter);
     }
     
-    public boolean FindConfirmedSeeds(SeedStrategy strategy) {
+    public boolean FindConfirmedSeeds(SeedStrategy strategy, double bfield) {
         
         //  Get the SeedLayers for this strategy
         List<SeedLayer> seedlayerlist = strategy.getLayers(SeedLayer.SeedType.Seed);
         if (seedlayerlist.size() != 3) return false;
-
+        
         _confirmedseeds = new ArrayList<SeedCandidate>();
         
-//        double RMin = strategy.getMinPT() / (0.0003 * _BField);
-//        double dMax = strategy.getMaxDCA();
+        double RMin = strategy.getMinPT() / (0.0003 * bfield);
+        double dMax = strategy.getMaxDCA();
         
         // Todo: add code to limit seeds to those that satisfy cuts
         
+        int nfit = 0;
+        int nseed = 0;
+        int nconfirm = 0;
+        int maxseeds = _hitmanager.getTrackerHits(seedlayerlist.get(0)).size() *
+                       _hitmanager.getTrackerHits(seedlayerlist.get(1)).size() *
+                       _hitmanager.getTrackerHits(seedlayerlist.get(2)).size();
+        
         for (HelicalTrackHit hit1 : _hitmanager.getTrackerHits(seedlayerlist.get(0))) {
-//            double[] pos1 = s1.getPosition();
-//            double r1 = Math.sqrt(pos1[0]*pos1[0] + pos1[1]*pos1[1]);
-//            double phi1 = Math.atan2(pos1[1],pos1[0]);
-//            double dphi1 = Math.asin((2*RMin*dMax - dMax*dMax-r1*r1)/(2*r1*(RMin-dMax)));
+            double r1 = hit1.r();
+            double phi1 = hit1.phi();
+            double dphi1mx = Math.asin((2*RMin*dMax - dMax*dMax-r1*r1)/(2*r1*(RMin-dMax)));
             for (HelicalTrackHit hit2 : _hitmanager.getTrackerHits(seedlayerlist.get(1))) {
-//                double[] pos2 = s2.getPosition();
-//                double r2 = Math.sqrt(pos2[0]*pos2[0] + pos2[1]*pos2[1]);
-//                double phi2 = Math.atan2(pos2[1],pos2[0]);
-//                double dphi2 = Math.asin((2*RMin*dMax - dMax*dMax-r2*r2)/(2*r2*(RMin-dMax)));
-//                if (Math.abs(phi2-phi1) > Math.abs(dphi2-dphi1)) continue;
+                double r2 = hit2.r();
+                double phi2 = hit2.phi();
+                double dphi2mx = Math.asin((2*RMin*dMax - dMax*dMax-r2*r2)/(2*r2*(RMin-dMax)));
+                double dphi2 = Math.abs(phi2 - phi1);
+                if (dphi2 > Math.PI) dphi2 = 2. * Math.PI - dphi2;
+                if (dphi2 > Math.abs(dphi2mx-dphi1mx)) continue;
                 for (HelicalTrackHit hit3 : _hitmanager.getTrackerHits(seedlayerlist.get(2))) {
-//                    double[] pos3 = s3.getPosition();
-//                    double r3 = Math.sqrt(pos3[0]*pos3[0] + pos3[1]*pos3[1]);
-//                    double phi3 = Math.atan2(pos3[1],pos3[0]);
-//                   double dphi3 = Math.asin((2*RMin*dMax - dMax*dMax-r3*r3)/(2*r3*(RMin-dMax)));
-//                    if (Math.abs(phi3-phi2) > Math.abs(dphi3-dphi2)) continue;
+                    double r3 = hit3.r();
+                    double phi3 = hit3.phi();
+                    double dphi3mx = Math.asin((2*RMin*dMax - dMax*dMax-r3*r3)/(2*r3*(RMin-dMax)));
+                    double dphi3 = phi3 - phi2;
+                    if (dphi3 > Math.PI) dphi3 = 2. * Math.PI - dphi3;
+                    if (dphi3 > Math.abs(dphi3mx-dphi2mx)) continue;
                     SeedCandidate seed = new SeedCandidate();
                     seed.addHit(hit1);
                     seed.addHit(hit2);
                     seed.addHit(hit3);
+                    nseed++;
                     boolean success = _helixfitter.FitCandidate(seed, strategy);
                     if (!success) continue;
                     seed.setHelix(_helixfitter.getHelix());
+                    nfit++;
                     
                     success = _confirmseeds.Confirm(seed, strategy);
                     if (!success) continue;
                     
                     _confirmedseeds.addAll(_confirmseeds.getConfirmedSeeds());
+                    nconfirm++;
                 }
             }
         }
+        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());
+        
         return true;
     }
     

lcsim/src/org/lcsim/contrib/seedtracker
HelixFitter.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- HelixFitter.java	7 Feb 2008 18:20:50 -0000	1.3
+++ HelixFitter.java	12 Feb 2008 17:10:10 -0000	1.4
@@ -106,7 +106,7 @@
         double curvmax = 0.0003 * _bfield / strategy.getMinPT();
         double curv = Math.abs(params[2]);
         if (curv > curvmax) {
-            chisq += Math.pow(curv - curvmax, 2) / helix.covariance().e(1, 1);
+            chisq += Math.pow(curv - curvmax, 2) / helix.covariance().e(2, 2);
         }
         
         //  Inflate chisq if |DCA| is too large

lcsim/src/org/lcsim/contrib/seedtracker
SeedStrategy.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- SeedStrategy.java	7 Feb 2008 18:20:50 -0000	1.4
+++ SeedStrategy.java	12 Feb 2008 17:10:10 -0000	1.5
@@ -20,7 +20,7 @@
 public class SeedStrategy {
     private String _Name;
     private List<SeedLayer> _LayerList = new ArrayList<SeedLayer>();
-    private double _MinPT = 0.5;
+    private double _MinPT = 1.0;
     private double _MaxDCA = 10.0;
     private double _MaxZ0 = 10.0;
     private double _MaxChisq = 100.;

lcsim/src/org/lcsim/contrib/seedtracker
SeedTracker.java 1.8 -> 1.9
diff -u -r1.8 -r1.9
--- SeedTracker.java	7 Feb 2008 18:20:50 -0000	1.8
+++ SeedTracker.java	12 Feb 2008 17:10:10 -0000	1.9
@@ -82,7 +82,7 @@
         for (SeedStrategy strategy : _strategylist) {
             
             //  Find the confirmed seeds for this strategy
-            boolean success = finder.FindConfirmedSeeds(strategy);
+            boolean success = finder.FindConfirmedSeeds(strategy, bfield);
             if (!success) continue;
             List<SeedCandidate> confirmed = finder.getConfirmedSeeds();
             

lcsim/src/org/lcsim/fit/helicaltrack
HelicalTrackFitter.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- HelicalTrackFitter.java	7 Feb 2008 18:20:51 -0000	1.16
+++ HelicalTrackFitter.java	12 Feb 2008 17:10:11 -0000	1.17
@@ -4,7 +4,7 @@
  *
  * Created on March 25, 2006, 6:11 PM
  *
- * $Id: HelicalTrackFitter.java,v 1.16 2008/02/07 18:20:51 partridge Exp $
+ * $Id: HelicalTrackFitter.java,v 1.17 2008/02/12 17:10:11 partridge Exp $
  */
 
 import hep.physics.matrix.SymmetricMatrix;
@@ -214,7 +214,9 @@
                 double dz = Math.sqrt(Math.pow(hit.dz(),2)+Math.pow(dz_ms,2));
                 double zmin = hit.z() - dz;
                 double zmax = hit.z() + dz;
-                strip_hits.add(new HelicalTrack2DHit(hit.x(), hit.y(), hit.z(), hit.drphi(), zmin, zmax));
+                HelicalTrack2DHit fakestriphit = new HelicalTrack2DHit(hit.x(), hit.y(), hit.z(), hit.drphi(), zmin, zmax);
+                strip_hits.add(fakestriphit);
+                smap.put(fakestriphit, smap.get(hit));
             }
             
             //  Setup for the ZSegment fit
CVSspam 0.2.8