Commit in lcsim on MAIN
src/org/lcsim/recon/tracking/seedtracker/strategybuilder/LayerWeight.java-121.4 -> 1.5
                                                        /StrategyBuilder.java+6-131.4 -> 1.5
                                                        /SubsetScorer.java+15-71.3 -> 1.4
                                                        /SubsetScore.java+2-21.1 -> 1.2
resources/org/lcsim/recon/tracking/seedtracker/strategybuilder/weights/default_weights_sid01.xml+2-71.3 -> 1.4
                                                                      /default_weights_sid02.xml+8-211.2 -> 1.3
                                                                      /default_weights_sid01_planar_tracker.xml+2-61.3 -> 1.4
resources/org/lcsim/recon/tracking/seedtracker/strategybuilder/layerweights.xsd-11.2 -> 1.3
+35-69
8 modified files
CD - Changed weighting method for StrategyBuilder yet again

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
LayerWeight.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- LayerWeight.java	22 Oct 2008 04:11:54 -0000	1.4
+++ LayerWeight.java	24 Oct 2008 19:33:50 -0000	1.5
@@ -33,7 +33,6 @@
 public class LayerWeight {
     
         private double default_weight = 1.0;
-        private double adjacence_constant = 2.0;
         private double adjacence_multiplier = 1.0;
         private Map<DumbLayer, Double> weights; 
         private Map<String, Double> readout_efficiencies; 
@@ -115,10 +114,6 @@
             return ret; 
         }
         
-        public double getAdjacenceConstant() {
-            return adjacence_constant;
-        }       
-
         public double getAdjacenceMultiplier() {
             return adjacence_multiplier;
         }
@@ -126,11 +121,6 @@
         public void setAdjacenceMultiplier(double adjacence_multiplier) {
             this.adjacence_multiplier = adjacence_multiplier;
         }
-        
-        public void setAdjacenceConstant(double adjacence_constant) {
-            this.adjacence_constant = adjacence_constant;
-        }
-        
 
         public boolean isDivideByTwoInTrackerEndcap() {
             return divideByTwoInTrackerEndcap;
@@ -251,7 +241,6 @@
                 lw.setDefaultWeight(Double.valueOf(root.getChildText("DefaultWeight")).doubleValue());
                 lw.setDefaultReadoutEfficiency(Double.valueOf(root.getChildText("DefaultReadoutEfficiency")));
                 try {lw.setAdjacenceMultiplier(Double.valueOf(root.getChildText("AdjacenceMultiplier")).doubleValue());} catch(NullPointerException npe){}
-                try {lw.setAdjacenceConstant(Double.valueOf(root.getChildText("AdjacenceConstant")).doubleValue());} catch(NullPointerException npe){}
                 try {lw.setTargetDetector(root.getChildText("TargetDetector"));} catch(NullPointerException npe){}
                 try {lw.setDivideByTwoInTrackerEndcap(Boolean.valueOf(root.getChild("TargetDetector").getAttributeValue("divide_by_two_in_tracker_endcap")));} catch(NullPointerException npe){}
                 try {lw.setDivideByTwoInTrackerForward(Boolean.valueOf(root.getChild("TargetDetector").getAttributeValue("divide_by_two_in_tracker_forward")));} catch(NullPointerException npe){}
@@ -299,7 +288,6 @@
             root.addContent(new Element("DefaultReadoutEfficiency").addContent(String.valueOf(defaultEfficiency)));          
             root.addContent(new Element("TargetDetector").addContent(String.valueOf(targetDetector)).setAttribute("divide_by_two_in_tracker_endcap", String.valueOf(divideByTwoInTrackerEndcap))); 
             root.addContent(new Element("TargetDetector").addContent(String.valueOf(targetDetector)).setAttribute("divide_by_two_in_tracker_forward", String.valueOf(divideByTwoInTrackerForward))); 
-            root.addContent(new Element("AdjacenceConstant").addContent(String.valueOf(adjacence_constant))); 
             root.addContent(new Element("AdjacenceMultiplier").addContent(String.valueOf(adjacence_multiplier))); 
             
             Element ro = new Element("ReadoutEfficiencies"); 

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
StrategyBuilder.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- StrategyBuilder.java	22 Oct 2008 04:11:55 -0000	1.4
+++ StrategyBuilder.java	24 Oct 2008 19:33:50 -0000	1.5
@@ -130,7 +130,7 @@
             
             //this will store all the working adjacent lists
             LinkedList<List<DumbLayer>> tempAdjacentLayersList = new LinkedList<List<DumbLayer>>(); 
-            
+            LinkedList<List<DumbLayer>> pendingAdjacentLayersList = new LinkedList<List<DumbLayer>>(); 
             for (SimTrackerHit h : l) {
                 IDetectorElementContainer cont = DetectorElementStore.getInstance().find(h.getIdentifier());
                 if(cont.isEmpty()) continue; 
@@ -143,7 +143,7 @@
                 if (weighter.isDivideByTwoInTrackerForward() && be.isEndcap() && 
                         (detname.indexOf("TrackerForward") > -1 || detname.indexOf("TkrForward") > -1) ) {
                         lyr/=2;  // sid01/sid02 doubles up on layer numbering in the endcap. 
-                } else if (weighter.isDivideByTwoInTrackerForward() && be.isEndcap() && 
+                } else if (weighter.isDivideByTwoInTrackerEndcap() && be.isEndcap() && 
                         (detname.indexOf("TrackerEndcap") > -1 || detname.indexOf("TkrEndcap") > -1) ) {
                         lyr/=2;  // sid01 doubles up on layer numbering in the forward. 
                 }
@@ -166,15 +166,17 @@
                     List<DumbLayer> s = it.next(); 
                     if(!s.contains(dl)) s.add(dl); //otherwise we get doubled layers in the forward region of the tracker 
                     if (s.size() == confirm_layers + seed_layers) {
-                        adjacentlist.add(s); 
+                        pendingAdjacentLayersList.add(s); 
                         it.remove(); 
                     }
                 }
             }
                         
             //Ensure layer set has minimum number of layers
-            if (set.size() >= min_layers)
+            if (set.size() >= min_layers) {
                 setlist.add(set); 
+                adjacentlist.addAll(pendingAdjacentLayersList);
+            }
         }
     }
     
@@ -196,15 +198,6 @@
         }
         if (verbose) System.out.println(startingStrategies.size()+" starting strategies defined.");
        
-       //If any of the starting strategies can find a set, discard it.
-//        Iterator<Set<DumbLayer>> iter = setlist.iterator(); 
-//        while (iter.hasNext()){
-//            Set<DumbLayer> this_set = iter.next();     
-//            if (startingCanFind(this_set)) {
-//                iter.remove(); 
-//            }
-//         }
-      
         //Generate the scorer and assign its weighter
         SubsetScorer scorer = new SubsetScorer(setlist,adjacentlist); 
         scorer.setLayerWeight(weighter); 

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
SubsetScorer.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- SubsetScorer.java	22 Oct 2008 04:11:55 -0000	1.3
+++ SubsetScorer.java	24 Oct 2008 19:33:50 -0000	1.4
@@ -19,7 +19,7 @@
         
         Map<Set<DumbLayer>,Integer> setmap = new HashMap<Set<DumbLayer>,Integer>(); 
         LayerWeight weighter = new LayerWeight(); 
-        Map<Set<DumbLayer>,Integer> adjacencemap = new HashMap<Set<DumbLayer>,Integer>(); 
+        Map<Set<DumbLayer>,Double> adjacencemap = new HashMap<Set<DumbLayer>,Double>(); 
         
         public SubsetScorer(List<Set<DumbLayer>> setlist, List<List<DumbLayer>> adjacentSets) {
             
@@ -36,11 +36,19 @@
                Set<DumbLayer> set = new HashSet<DumbLayer>(list.size());
                set.addAll(list); 
                 if(adjacencemap.containsKey(set)){
-                    adjacencemap.put(set,adjacencemap.get(set).intValue()+1);  
+                    adjacencemap.put(set,adjacencemap.get(set).doubleValue()+1.0);  
                 } else {
-                    adjacencemap.put(set,1); 
+                    adjacencemap.put(set,1.0); 
                 }
             }
+
+           //Normalize adjacencies
+           for(Set<DumbLayer> s : adjacencemap.keySet()) {
+               double pct = adjacencemap.get(s) / getUnweightedScore(s);
+               if (pct>1.0) pct = 1.0; //Fix anomalous cases where the numerator is slightly (by no more than a few) bigger than the denominator
+//             System.out.println(adjacencemap.get(s) + " , "+ getUnweightedScore(s) + ", " + s.toString());
+               adjacencemap.put(s, pct);
+           }
         }
         
         public void setLayerWeight(LayerWeight lw) {
@@ -55,12 +63,12 @@
         }
         
         
-        //s * Pi(w) * (a + b * ln (adjacence))
+        //s * Pi(w) * (1 + a*(adjacence))
         //
         public double getScore(Set<DumbLayer> testSet) {
           return getUnweightedScore(testSet) * weighter.getWeight(testSet)
-                  * (  weighter.getAdjacenceConstant() + 
-                        Math.log(getAdjacence(testSet))
+                  * (  1 + 
+                       (getAdjacence(testSet))
                          * weighter.getAdjacenceMultiplier() 
                     ); 
         }
@@ -76,7 +84,7 @@
             return ret;
         }
         
-        public int getAdjacence(Set<DumbLayer> testSet){
+        public double getAdjacence(Set<DumbLayer> testSet){
             if (adjacencemap.containsKey(testSet)){
                 return adjacencemap.get(testSet); 
             } 

lcsim/src/org/lcsim/recon/tracking/seedtracker/strategybuilder
SubsetScore.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- SubsetScore.java	10 Oct 2008 06:10:46 -0000	1.1
+++ SubsetScore.java	24 Oct 2008 19:33:51 -0000	1.2
@@ -13,9 +13,9 @@
     
     private double score; 
     private int numTracks; 
-    private int adjacency; 
+    private double adjacency; 
     
-    public SubsetScore(double score, int numTracks, int adjacency){
+    public SubsetScore(double score, int numTracks, double adjacency){
         this.score =score; 
         this.numTracks = numTracks; 
         this.adjacency = adjacency; 

lcsim/resources/org/lcsim/recon/tracking/seedtracker/strategybuilder/weights
default_weights_sid01.xml 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- default_weights_sid01.xml	22 Oct 2008 04:11:55 -0000	1.3
+++ default_weights_sid01.xml	24 Oct 2008 19:33:51 -0000	1.4
@@ -13,17 +13,14 @@
     black magic... 
     
     Scoring formula: 
-    N*w*(c+m*ln(a))
+    N*w*(1+m*a)
     
     N = Number of new tracks that could theoretically be found
     w =Product of weights of subset layers
     a = Adjacence, the number of times in the training event that the 
         subset layers are adjacent (i.e., they are hit consecutively by an
-        MCParticle). 
-    c = AdjacenceConstant
+        MCParticle) divided by the number of times a particle goes through the 4 layers.  
     m = AdjacenceMultiplier
-    
-    
         
     -->
     
@@ -35,8 +32,6 @@
      
       <TargetDetector divide_by_two_in_tracker_endcap="true" divide_by_two_in_tracker_forward="true">sid01</TargetDetector>
       
-      <!-- Adjacence modifiers (see above for formula)-->
-      <AdjacenceConstant>2</AdjacenceConstant>
       <AdjacenceMultiplier>1</AdjacenceMultiplier>
   
   <Layers>

lcsim/resources/org/lcsim/recon/tracking/seedtracker/strategybuilder/weights
default_weights_sid02.xml 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- default_weights_sid02.xml	16 Oct 2008 21:40:29 -0000	1.2
+++ default_weights_sid02.xml	24 Oct 2008 19:33:51 -0000	1.3
@@ -5,25 +5,15 @@
 <!-- 
     By Cosmin Deaconu
     
-    These weights were found to work satisfactorily with ngle
-    muon events. They should certainly not be condered optimal... 
-    
-    Unfortunately, coming up with good weights seems to be a little bit of
-    black magic... 
-    
-    Score is calculated with the following formula:
-    
-    N*w*(c+m*a^e)
+    Scoring formula: 
+    N*w*(1+m*a)
     
     N = Number of new tracks that could theoretically be found
-    w = Average weight of subset layers
+    w =Product of weights of subset layers
     a = Adjacence, the number of times in the training event that the 
         subset layers are adjacent (i.e., they are hit consecutively by an
-        MCParticle). 
-    c = AdjacenceConstant
+        MCParticle) divided by the number of times a particle goes through the 4 layers.  
     m = AdjacenceMultiplier
-    e = AdjacenceExponent
-    
         
     -->
       <!--Default used for any not already defined-->
@@ -42,11 +32,8 @@
       <DefaultWeight>1.0</DefaultWeight>
      
       <TargetDetector divide_by_two_in_tracker_endcap="true">sid02</TargetDetector>
-      
-      <!-- Adjacence modifiers (see above for formula)-->
-      <AdjacenceConstant>2</AdjacenceConstant>
-      <AdjacenceMultiplier>1</AdjacenceMultiplier>
-      <AdjacenceExponent>0.1</AdjacenceExponent>
+
+      <AdjacenceMultiplier>0.5</AdjacenceMultiplier>
   
   <Layers>
        
@@ -59,8 +46,8 @@
         <Layer layer_number="4" detector_name="VertexBarrel" be_flag="BARREL">0.504</Layer>
         <Layer layer_number="3" detector_name="VertexBarrel" be_flag="BARREL">0.503</Layer>
         <Layer layer_number="2" detector_name="VertexBarrel" be_flag="BARREL">0.502</Layer>
-        <Layer layer_number="1" detector_name="VertexBarrel" be_flag="BARREL">0.501</Layer>
-        <Layer layer_number="0" detector_name="VertexBarrel" be_flag="BARREL">0.500</Layer>
+        <Layer layer_number="1" detector_name="VertexBarrel" be_flag="BARREL">0</Layer>
+        <Layer layer_number="0" detector_name="VertexBarrel" be_flag="BARREL">0</Layer>
       <!--North Endcap-->
         <Layer layer_number="3" detector_name="TrackerEndcap" be_flag="ENDCAP_NORTH">1.011</Layer>
         <Layer layer_number="2" detector_name="TrackerEndcap" be_flag="ENDCAP_NORTH">1.010</Layer>

lcsim/resources/org/lcsim/recon/tracking/seedtracker/strategybuilder/weights
default_weights_sid01_planar_tracker.xml 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- default_weights_sid01_planar_tracker.xml	22 Oct 2008 04:11:55 -0000	1.3
+++ default_weights_sid01_planar_tracker.xml	24 Oct 2008 19:33:51 -0000	1.4
@@ -13,17 +13,15 @@
     black magic... 
     
     Scoring formula: 
-    N*w*(c+m*ln(a))
+    N*w*(1+m*a)
     
     N = Number of new tracks that could theoretically be found
     w =Product of weights of subset layers
     a = Adjacence, the number of times in the training event that the 
         subset layers are adjacent (i.e., they are hit consecutively by an
-        MCParticle). 
-    c = AdjacenceConstant
+        MCParticle) divided by the number of times a particle goes through the 4 layers.  
     m = AdjacenceMultiplier
     
-    
         
     -->
     
@@ -33,8 +31,6 @@
       <DefaultReadoutEfficiency>0.99</DefaultReadoutEfficiency>
       <DefaultWeight>1.0</DefaultWeight>
       <TargetDetector>sid01_planar_tracker</TargetDetector>
-      <!-- Adjacence modifiers (see above for formula)-->
-      <AdjacenceConstant>2</AdjacenceConstant>
       <AdjacenceMultiplier>1</AdjacenceMultiplier>
 
       

lcsim/resources/org/lcsim/recon/tracking/seedtracker/strategybuilder
layerweights.xsd 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- layerweights.xsd	22 Oct 2008 04:11:55 -0000	1.2
+++ layerweights.xsd	24 Oct 2008 19:33:51 -0000	1.3
@@ -7,7 +7,6 @@
        
                     <xsd:element name="TargetDetector" type="TargetDetectorType" minOccurs="0"/>
                     <xsd:element name="DivideByTwoInTrackerEndcap" type="xsd:boolean" minOccurs="0"/>
-                    <xsd:element name="AdjacenceConstant" type="xsd:double" minOccurs="0"/>		
                     <xsd:element name="AdjacenceMultiplier" type="xsd:double" minOccurs="0"/>		
                     <xsd:element name="DefaultWeight" type="xsd:double"/>
                     <xsd:element name="ReadoutEfficiencies" type="ReadoutEfficienciesType" minOccurs="0"/>
CVSspam 0.2.8