Print

Print


Commit in lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder on MAIN
NonPromptFilter.java+35added 1.1
StrategyBuilderUtils.java+3-21.1 -> 1.2
RunStrategyBuilder.java+51.7 -> 1.8
StrategyBuilder.java+56-511.10 -> 1.11
LayerWeight.java+141.7 -> 1.8
DefaultLayerWeight.java+14-11.4 -> 1.5
+127-54
1 added + 5 modified, total 6 files
CD - change order of extension hits + refactoring

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
NonPromptFilter.java added at 1.1
diff -N NonPromptFilter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ NonPromptFilter.java	27 Aug 2008 17:26:47 -0000	1.1
@@ -0,0 +1,35 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.seedtracker.strategybuilder;
+
+import org.lcsim.contrib.seedtracker.analysis.HelixParamCalculator;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+
+/**
+ *
+ * @author cozzy
+ */
+public class NonPromptFilter implements IParticleFilter {
+    
+    private EventHeader event; 
+    private double minDist = 10.0; 
+    private double minPT = 1.0; 
+    public boolean passes(MCParticle p) {
+        
+        HelixParamCalculator calc = new HelixParamCalculator(p, event); 
+        
+        if (calc.getDCA() < minDist && calc.getZ0() < minDist) return false; 
+        if (calc.getMCTransverseMomentum() < minPT) return false; 
+        return true; 
+        
+    }
+    
+    public void setEvent(EventHeader event){
+        this.event = event; 
+    }
+
+}

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
StrategyBuilderUtils.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- StrategyBuilderUtils.java	18 Aug 2008 18:54:05 -0000	1.1
+++ StrategyBuilderUtils.java	27 Aug 2008 17:26:47 -0000	1.2
@@ -6,6 +6,7 @@
 package org.lcsim.contrib.seedtracker.strategybuilder;
 
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -129,8 +130,8 @@
         }   
         return ret; 
     }
-    
-    
+  
+       
     /**
      * Returns all possible subsets of a given size of the set allObjects
      * @param allObjects The set to find subsets of

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
RunStrategyBuilder.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- RunStrategyBuilder.java	18 Aug 2008 18:54:05 -0000	1.7
+++ RunStrategyBuilder.java	27 Aug 2008 17:26:47 -0000	1.8
@@ -123,6 +123,8 @@
         if (lwfn.length() > 0)
             builder.setLayerWeight(LayerWeight.getLayerWeightFromFile(new File(lwfn)));
         
+        
+        // if a non-default MCParticle Filter is set, then try to load it and assign it. 
         if (filterClassName.length() > 0){
             try {
                 builder.setParticleFilter((IParticleFilter) Class.forName(filterClassName).newInstance());
@@ -141,6 +143,7 @@
             }
         }
         
+        // check data file existence
         File file = new File(filename);
         if (!file.exists()) {
             System.out.println("Cannot find data file "+file.toString()+". Exiting. "); 
@@ -152,6 +155,8 @@
             System.out.println("Starting... Reading Geometry"); 
         }
         
+        
+        //load the driver and run it. 
         try {
 
             LCSimLoop loop = new LCSimLoop(); 

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
StrategyBuilder.java 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- StrategyBuilder.java	18 Aug 2008 18:54:05 -0000	1.10
+++ StrategyBuilder.java	27 Aug 2008 17:26:47 -0000	1.11
@@ -86,8 +86,8 @@
         }
     }
     
-    //In the process step, we build two maps lists of sets:
-    //      The set list is a list of the sets of layers hit by MCParticles hitting over 7 layers
+    //In the process step, we build two lists of collections:
+    //      The set list is a list of the sets of layers hit by MCParticles hitting over min layers layers
     //      The adjacence list is a list of a list of hits that are determined to be adjacent based on MCParticle trajectory
     @Override
     protected void process(EventHeader event){
@@ -101,39 +101,8 @@
         
         filter.setEvent(event);
         
-        //Build MC Map from SimTrackerHits
-        Map<MCParticle, List<SimTrackerHit>> mcmap = new HashMap<MCParticle, List<SimTrackerHit>>(); 
-        List<SimTrackerHit> allhits = new ArrayList<SimTrackerHit>(); 
-
-
-        for (List<SimTrackerHit> l : event.get(SimTrackerHit.class)) {
-
-           /**
-            * We simulate inefficiency in SimTrackerHit => TrackerHit conversion, 
-            * otherwise the strategies will miss certain classes of hits
-            */
-
-            EventHeader.LCMetaData meta = event.getMetaData(l); 
-            String readout = meta.getName();
-            double efficiency = weighter.getReadoutEfficiency(readout); 
-            for (SimTrackerHit h : l) {
-                if (random.nextDouble() < efficiency)
-                    allhits.add(h); 
-            }
-        } 
-       
-        for (SimTrackerHit h : allhits){
-            MCParticle p = h.getMCParticle(); 
-            List<SimTrackerHit> these_hits; 
-            if (mcmap.containsKey(p)) {
-                these_hits = mcmap.get(p); 
-            } else {
-                these_hits = new ArrayList<SimTrackerHit>(); 
-            }
-
-            these_hits.add(h); 
-            mcmap.put(p, these_hits); 
-        }
+        //Build MCMap from SimTrackerHits, including inefficiency modeling
+        Map<MCParticle, List<SimTrackerHit>> mcmap = buildMCMap(event);
         
         //filter MCs 
         Iterator<MCParticle> mciter = mcmap.keySet().iterator(); 
@@ -148,7 +117,7 @@
         for(List<SimTrackerHit> l : mcmap.values()) {
             Set<DumbLayer> set = new HashSet<DumbLayer>(); 
             
-            //sort by time, which allows creation of adjacent lists. 
+            //sort by time, which allows creation of adjacence lists. 
             Collections.sort(l, new Comparator() {
 
                 public int compare(Object o1, Object o2) {
@@ -353,18 +322,9 @@
             //if these layers aren't adjacent, just use the weights to figure out which layers to confirm with
             if (adjacenceInfo == null || oldConfirm) {
                 //sort the list from smallest to largest weight. Use smallest weight(s) for confirmation layer(s). 
-                Collections.sort(dlyrlst, new Comparator() {
-                
-                    public int compare(Object o1, Object o2) {
-                        DumbLayer dl1 = (DumbLayer) o1;
-                        DumbLayer dl2 = (DumbLayer) o2; 
-                        double s1 = weighter.getWeight(dl1);
-                        double s2 = weighter.getWeight(dl2);
-                        return Double.compare(s1, s2); 
-                    }
-                }); 
-                
+                Collections.sort(dlyrlst, weighter.getComparator()); 
             } 
+            
             //If all layers are adjacent, we use either the first or last layers to confirm, depending on the layer weights
             else if (adjacenceInfo.size() == dlyrlst.size()) { 
                 dlyrlst = adjacenceInfo; 
@@ -381,11 +341,18 @@
 
             List<SeedLayer> lyrlst = new ArrayList<SeedLayer>(); 
 
-            //get extension layers
-            for (DumbLayer lyr : extendmap.get(s)){
-                lyrlst.add(new SeedLayer(lyr.detectorName, lyr.layer, lyr.be, SeedType.Extend)); 
+            //get extension layers...sort from smallest weight to largest weight
+            //                      because the list will be reversed. 
+            List<SeedLayer> extendlyr = new ArrayList<SeedLayer>(); 
+            List<DumbLayer> dumbextendlyr = new ArrayList<DumbLayer>(); 
+            dumbextendlyr.addAll(extendmap.get(s)); 
+            Collections.sort(dumbextendlyr, weighter.getComparator()); 
+            
+            for (DumbLayer lyr : dumbextendlyr) {
+                extendlyr.add(new SeedLayer(lyr.detectorName, lyr.layer, lyr.be, SeedType.Extend)); 
             }
             
+            lyrlst.addAll(extendlyr);             
             //get seed/confirmation layers
             for (DumbLayer lyr : dlyrlst){
                 SeedType type;
@@ -484,8 +451,46 @@
         symmetrize = set; 
     }
 
-   
     //========privates ============//
+    private Map<MCParticle, List<SimTrackerHit>> buildMCMap(EventHeader event) {
+
+        //Build MC Map from SimTrackerHits
+        Map<MCParticle, List<SimTrackerHit>> mcmap = new HashMap<MCParticle, List<SimTrackerHit>>();
+        List<SimTrackerHit> allhits = new ArrayList<SimTrackerHit>();
+
+
+        for (List<SimTrackerHit> l : event.get(SimTrackerHit.class)) {
+
+            /**
+             * We simulate inefficiency in SimTrackerHit => TrackerHit conversion,
+             * otherwise the strategies will miss certain classes of hits
+             */
+
+            EventHeader.LCMetaData meta = event.getMetaData(l);
+            String readout = meta.getName();
+            double efficiency = weighter.getReadoutEfficiency(readout);
+            for (SimTrackerHit h : l) {
+                if (random.nextDouble() < efficiency) {
+                    allhits.add(h);
+                }
+            }
+        }
+
+        for (SimTrackerHit h : allhits) {
+            MCParticle p = h.getMCParticle();
+            List<SimTrackerHit> these_hits;
+            if (mcmap.containsKey(p)) {
+                these_hits = mcmap.get(p);
+            } else {
+                these_hits = new ArrayList<SimTrackerHit>();
+            }
+
+            these_hits.add(h);
+            mcmap.put(p, these_hits);
+        }
+
+        return mcmap;
+    }
     
     private boolean startingCanFind(Set<DumbLayer> set){
         

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
LayerWeight.java 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- LayerWeight.java	18 Aug 2008 18:54:05 -0000	1.7
+++ LayerWeight.java	27 Aug 2008 17:26:48 -0000	1.8
@@ -9,6 +9,7 @@
 import java.io.FileWriter;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
@@ -174,6 +175,19 @@
         }
         
         
+        public Comparator getComparator(){
+            return new Comparator(){
+                public int compare(Object o1, Object o2) {
+                    DumbLayer dl1 = (DumbLayer) o1;
+                    DumbLayer dl2 = (DumbLayer) o2; 
+                    double s1 = LayerWeight.this.getWeight(dl1);
+                    double s2 = LayerWeight.this.getWeight(dl2);
+                    return Double.compare(s1, s2); 
+                }
+            };
+        }
+        
+        
         /**
          * Loads LayerWeight definitions from the specified input stream
          * @param in an input stream corresponding to a valid XML file 

lcsim/src/org/lcsim/contrib/seedtracker/strategybuilder
DefaultLayerWeight.java 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- DefaultLayerWeight.java	18 Aug 2008 18:54:05 -0000	1.4
+++ DefaultLayerWeight.java	27 Aug 2008 17:26:48 -0000	1.5
@@ -21,13 +21,26 @@
     private LayerWeight weight;
     public DefaultLayerWeight(String detectorName){
         try { 
+
+            // This is kind of screwy: if the detector name has a period in it,
+            // then loading the resource would normally throw an exception. 
+            // We can fix this by replacing "." with "%2E" (URL encoding).  
+            // It's probably best to avoid having periods in detector names
+            // though. 
+            
+            detectorName = detectorName.replace(".","%2E"); 
             weight = LayerWeight.getLayerWeightFromResource(LayerWeight.getDefaultResourcePrefix()+prefix+detectorName+suffix);
         } catch(Exception e) {
             System.out.println("WARNING: could not find default layer weights for detector "+detectorName+". Falling back to empty layer weights with possibly insane default parameters.");
             weight = new LayerWeight(); 
         }
     }   
-    
+    /**
+     * Return the constructed weight for the detector. 
+     * @return The default weight for the detector name specified in the 
+     * constructor, or, if nothing is found, then an unmodified LayerWeight 
+     * object. 
+     */
     public LayerWeight getWeight(){
         return weight; 
     }
CVSspam 0.2.8