Commit in lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder on MAIN
StrategyBuilderUtils.java+25-11.2 -> 1.3
StrategyBuilder.java+51-391.5 -> 1.6
+76-40
2 modified files
CD - Make sure same input always produces same ouput by sorting list obtained from event.get(SimTrackerHit.class)

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
StrategyBuilderUtils.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- StrategyBuilderUtils.java	10 Oct 2008 06:10:46 -0000	1.2
+++ StrategyBuilderUtils.java	25 Oct 2008 00:56:07 -0000	1.3
@@ -135,7 +135,31 @@
         return ret; 
     }
   
-       
+     /**
+     * Returns a set of DumbLayers consisting of the seed and confirm layers of the given SeedStrategy
+     * @param strategy SeedStrategy to extract layers from
+     * @param ignoreNorthSouth Whether or not the DumbLayers should know about North or South
+     * @return A set of DumbLayers
+     */
+    public static Set<DumbLayer> getRelevantSet(SeedStrategy strategy, boolean ignoreNorthSouth) {
+        Set<DumbLayer> subset = new HashSet<DumbLayer>();
+        for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Seed)) {
+            
+            BarrelEndcapFlag be = lyr.getBarrelEndcapFlag(); 
+            if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP; 
+            subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
+           
+        }
+        for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Confirm)) {
+            BarrelEndcapFlag be = lyr.getBarrelEndcapFlag(); 
+            if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP; 
+            subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
+        }
+        return subset;
+    }
+    
+    
+    
     /**
      * Returns all possible subsets of a given size of the set allObjects
      * @param allObjects The set to find subsets of

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
StrategyBuilder.java 1.5 -> 1.6
diff -u -r1.5 -r1.6
--- StrategyBuilder.java	24 Oct 2008 19:33:50 -0000	1.5
+++ StrategyBuilder.java	25 Oct 2008 00:56:07 -0000	1.6
@@ -84,7 +84,7 @@
       //Use default filter if none is specified
         if (filter==null) {
             filter = new StrategyBasedFilter(prototype); 
-        }
+        }       
     }
     
     //In the process step, we build two lists of collections:
@@ -193,7 +193,7 @@
         
        //create startingSet... this will be used so that new strategies aren't extraneously generated
        for (SeedStrategy strategy : startingStrategies){
-            Set<DumbLayer> subset = getRelevantSet(strategy, true);
+            Set<DumbLayer> subset = StrategyBuilderUtils.getRelevantSet(strategy, true);
             startingSet.add(subset); 
         }
         if (verbose) System.out.println(startingStrategies.size()+" starting strategies defined.");
@@ -231,6 +231,7 @@
         //Figure out a "good" set of four-layer combinations by brute force...
         //We have a scoring algorithm and we find the maximal scoring one. 
         while (true){
+            if (verbose) System.out.println(setset.size() - usedSets.size() + " entries left to be covered."); 
             if (usedSets.size() == setset.size()) break; //if we've used all sets, then we're done! 
             
             Set<DumbLayer> max = all_subsets.get(0); 
@@ -269,7 +270,7 @@
                 }
             }
             
-            if (verbose) System.out.println(setset.size() - usedSets.size() + " entries left to be covered."); 
+            
         }
         if(verbose) System.out.println("Done finding strategies"); 
         if(verbose) System.out.println(final_sets.toString());  
@@ -281,8 +282,10 @@
         
         List<SeedStrategy> strat_list = new ArrayList<SeedStrategy>(); 
         strat_list.addAll(startingStrategies); 
+        
+        //Write comments for starting strategies
         for (SeedStrategy starter : startingStrategies) {
-            int unw_score = scoremap.get(getRelevantSet(starter,true)).numTracks(); 
+            int unw_score = scoremap.get(StrategyBuilderUtils.getRelevantSet(starter,true)).numTracks(); 
             meta.strategyComments.put(starter, "Num findable tracks (total, not additional): "+unw_score);
         }
         
@@ -400,15 +403,14 @@
         }
         
         //sort Strategy list
-        
         if (verbose) System.out.println("Sorting output"); 
         Collections.sort(strat_list, new Comparator() {
 
             public int compare(Object o1, Object o2) {
                 SeedStrategy one = (SeedStrategy) o1; 
                 SeedStrategy two = (SeedStrategy) o2;
-                return Double.compare(scoremap.get(getRelevantSet(two,true)).numTracks(), 
-                        scoremap.get(getRelevantSet(one,true)).numTracks());
+                return Double.compare(scoremap.get(StrategyBuilderUtils.getRelevantSet(two,true)).numTracks(), 
+                        scoremap.get(StrategyBuilderUtils.getRelevantSet(one,true)).numTracks());
             }
         }); 
         
@@ -479,15 +481,55 @@
     }
 
     //========privates ============//
-    private Map<MCParticle, List<SimTrackerHit>> buildMCMap(EventHeader event) {
+    private Map<MCParticle, List<SimTrackerHit>> buildMCMap(final EventHeader event) {
 
         //Build MC Map from SimTrackerHits
         Map<MCParticle, List<SimTrackerHit>> mcmap = new HashMap<MCParticle, List<SimTrackerHit>>();
         List<SimTrackerHit> allhits = new ArrayList<SimTrackerHit>();
 
+        
+        //This will return the list of lists in a random order... we want the order 
+        // to be consistent so that the same hits are ignored due to inefficiency each time
+        List<List<SimTrackerHit>> simhits = event.get(SimTrackerHit.class); 
+        
+        
+        //Each collection should have a unique name, so sorting by name works here
+        Collections.sort(simhits, new Comparator() {
 
-        for (List<SimTrackerHit> l : event.get(SimTrackerHit.class)) {
+            public int compare(Object o1, Object o2) {
+                List<SimTrackerHit> l1 = (List<SimTrackerHit>)o1; 
+                List<SimTrackerHit> l2 = (List<SimTrackerHit>)o2; 
+                
+                return String.CASE_INSENSITIVE_ORDER.compare(event.getMetaData(l1).getName(), event.getMetaData(l2).getName()); 
+            }
+        }); 
+        
+        for (List<SimTrackerHit> l : simhits) {
+
+            Collections.sort(l, new Comparator() {
 
+                //This might be a little overkill... but it should have a very
+                //high probability of distinguishing between SimTrackerHits... 
+                public int compare(Object o1, Object o2) {
+                    SimTrackerHit h1 = (SimTrackerHit) o1;
+                    SimTrackerHit h2 = (SimTrackerHit) o2; 
+                    
+                    if (h1.getTime()!=h2.getTime()) {
+                        return Double.compare(h1.getTime(), h2.getTime()); 
+                    } 
+                    
+                    if (h1.getCellID()!=h2.getCellID()) {
+                        return Double.compare(h1.getCellID(), h2.getCellID()); 
+                    }
+                    
+                    if (h1.getdEdx()!=h2.getdEdx()) {
+                        return Double.compare(h1.getdEdx(), h2.getdEdx()); 
+                    }
+                    
+                    return Double.compare(h1.getPathLength(), h2.getPathLength()); 
+                }
+            });
+            
             /**
              * We simulate inefficiency in SimTrackerHit => TrackerHit conversion,
              * otherwise the strategies will miss certain classes of hits
@@ -519,34 +561,4 @@
         return mcmap;
     }
 
-    private Set<DumbLayer> getRelevantSet(SeedStrategy strategy, boolean ignoreNorthSouth) {
-        Set<DumbLayer> subset = new HashSet<DumbLayer>();
-        for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Seed)) {
-            
-            BarrelEndcapFlag be = lyr.getBarrelEndcapFlag(); 
-            if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP; 
-            subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
-           
-        }
-        for (SeedLayer lyr : strategy.getLayers(SeedLayer.SeedType.Confirm)) {
-            BarrelEndcapFlag be = lyr.getBarrelEndcapFlag(); 
-            if (ignoreNorthSouth && be.isEndcap()) be = BarrelEndcapFlag.ENDCAP; 
-            subset.add(new DumbLayer(lyr.getDetName(), lyr.getLayer(), be));
-        }
-        return subset;
-    }
-    
-    
-    
-//    private boolean startingCanFind(Set<DumbLayer> set){
-//        
-//        for (Set<DumbLayer> s : startingSet){
-//            if (set.containsAll(s))
-//                return true; 
-//        }
-//        
-//        return false; 
-//    }
-    
-
 }
CVSspam 0.2.8