Print

Print


Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker on MAIN
MergeSeedLists.java+13-181.2 -> 1.3
Changed merge code to fix loophole where a track that >1 hits in common with two tracks on the merge list the second track wasn't checked.

lcsim/src/org/lcsim/recon/tracking/seedtracker
MergeSeedLists.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- MergeSeedLists.java	9 Oct 2008 17:47:30 -0000	1.2
+++ MergeSeedLists.java	26 Oct 2008 18:44:46 -0000	1.3
@@ -7,22 +7,19 @@
 
 package org.lcsim.recon.tracking.seedtracker;
 
-import hep.physics.vec.Hep3Vector;
-
 import java.util.List;
 import java.util.ListIterator;
 
 import org.lcsim.fit.helicaltrack.HelicalTrackHit;
 import org.lcsim.recon.tracking.seedtracker.diagnostic.ISeedTrackerDiagnostics;
-import org.lcsim.util.aida.AIDA;
 
 /**
  *
- * @author partridge
- * @version __VERSION__
+ * @author Richard Partridge
+ * @version 1.0
  */
 public class MergeSeedLists {
-   
+    
     private ISeedTrackerDiagnostics diag = null;
     
     /** Creates a new instance of MergeSeedLists */
@@ -30,35 +27,35 @@
     }
     
     public void setDiagnostic(ISeedTrackerDiagnostics diagnostic){
-        diag = diagnostic; 
+        diag = diagnostic;
     }
     
     public void Merge(List<SeedCandidate> seedlist, List<SeedCandidate> newseedlist, SeedStrategy strategy) {
-       // System.out.println(" Extended seeds before merging"+newseedlist.size());
         if(diag!=null) diag.fireMergeStartDiagnostics(newseedlist);
         for (SeedCandidate newseed : newseedlist ) {
             ListIterator<SeedCandidate> itr = seedlist.listIterator();
-            boolean duplicate = false;
+            boolean best = true;
+            int ndup = 0;
             while (itr.hasNext()) {
                 SeedCandidate seed = itr.next();
                 boolean dupe = isDuplicate(newseed, seed);
                 if(diag!=null) diag.fireMergeIsDuplicateDiagnostics(newseed, seed, dupe);
                 if (dupe) {
-                    duplicate = true;
+                    ndup++;
                     boolean better = isBetter(newseed,seed,strategy);
                     if(diag!=null) diag.fireMergeIsBetterDiagnostics(newseed, seed, better);
                     if (better) {
-                        itr.set(newseed);
+                        itr.remove();
+                    } else {
+                        best = false;
                     }
-                    break;
                 }
             }
-            if (!duplicate) seedlist.add(newseed);
-        }        
+            if (best) seedlist.add(newseed);
+        }
         return;
     }
     
-    
     private boolean isDuplicate(SeedCandidate seed1, SeedCandidate seed2) {
         int nduplicate = 0;
         for (HelicalTrackHit hit1 : seed1.getHits()) {
@@ -81,6 +78,4 @@
         if (hitdif == -1) return chisqdif < -strategy.getBadHitChisq();
         return false;
     }
-
-}
- 
\ No newline at end of file
+}
\ No newline at end of file
CVSspam 0.2.8