Print

Print


Commit in lcsim/src/org/lcsim/contrib/CosminDeaconu on MAIN
CombinationDriver.java+53added 1.1
TrackerHitTrackFinder.java+115-231.1 -> 1.2
OuterTrackFinder.java+13-61.3 -> 1.4
+181-29
1 added + 2 modified, total 3 files
no message

lcsim/src/org/lcsim/contrib/CosminDeaconu
CombinationDriver.java added at 1.1
diff -N CombinationDriver.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ CombinationDriver.java	20 Jul 2007 17:48:44 -0000	1.1
@@ -0,0 +1,53 @@
+/*
+ * CombinationDriver.java
+ *
+ * Created on July 19, 2007, 4:18 PM
+ *
+ * To change this template, choose Tools | Template Manager
+ * and open the template in the editor.
+ */
+
+package org.lcsim.contrib.CosminDeaconu;
+
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+
+/**
+ *
+ * @author Cosmin Deaconu
+ */
+public class CombinationDriver extends Driver{
+    
+
+    
+    /** Creates a new instance of CombinationDriver */  
+    public CombinationDriver() {
+    
+    //barrel
+    OuterTrackFinder barrel = new OuterTrackFinder();
+    barrel.useDefaultBarrelSettings();
+    barrel.setOutputHits("output_hits_barrel");
+    barrel.setID("_barrel");
+    add(barrel);
+    
+    //forward
+    OuterTrackFinder forward = new OuterTrackFinder();
+    forward.useDefaultForwardSettings();
+    forward.setOutputHits("output_hits_forward");
+    forward.setID("_forward");
+    add(forward);
+    
+    //whatever's left... '
+    TrackerHitTrackFinder leftovers = new TrackerHitTrackFinder();
+    leftovers.addInputCollection("output_hits_barrel");
+    leftovers.addInputCollection("output_hits_forward");
+    leftovers.setID("_leftovers");
+    add(leftovers);
+    }
+    
+    protected void process(EventHeader event)
+    {
+        super.process(event);
+    }
+    
+}

lcsim/src/org/lcsim/contrib/CosminDeaconu
TrackerHitTrackFinder.java 1.1 -> 1.2
diff -u -r1.1 -r1.2
--- TrackerHitTrackFinder.java	19 Jul 2007 23:16:32 -0000	1.1
+++ TrackerHitTrackFinder.java	20 Jul 2007 17:48:44 -0000	1.2
@@ -29,6 +29,26 @@
 import org.lcsim.util.aida.AIDA;
 
 /**
+ * This driver takes in input collections of TrackerHits (or SimTrackerHits which 
+ * will be converted to TrackerHits via TrackerHitCheater) and tries to find tracks. 
+ *
+ * 
+ *  Method:
+ *      * Sorts all hits by distance from center
+ *      * Goes through all combinations of 3 hits (starting from outside)
+ *      * For each combination of 3 hits, a helix is fit, and a list of candidate 
+ *        hits is generated that lie close to the helix but are not too close to 
+ *        other hits
+ *      * If the chisq for the candidates + the 3 seed hits is good enough, they 
+ *        form a track, otherwise the farthest hit from the helix is removed until 
+ *        either the chisq is good enough or there are too few hits. 
+ *      * Tracks must satisfy a minimum number of hits (and a maximum number of hits too, which can be set arbitrarily high)
+ *      * Optionally, hits may be required to be on different layers
+ *
+ *  Usage:
+ *      Generally, you'll want to use the public methods to give the driver an input collection of hits (from the event). 
+ *
+ *  
  *
  * @author Cosmin Deaconu
  */
@@ -38,12 +58,16 @@
 public class TrackerHitTrackFinder extends Driver{
     
     private ArrayList<TrackerHit> _input_hit_collection = null; 
+    
+    private ArrayList<String> event_input = new ArrayList<String>();
+    private ArrayList<String> sim_event_input = new ArrayList<String>();
+    
     private HashMap<TrackerHit,Double> _hit_separation = new HashMap<TrackerHit,Double>();
-
     private ArrayList<TrackerHit> _hitset = new ArrayList<TrackerHit>();     
     private ArrayList<StandaloneOuterTrack> _tracks = new ArrayList<StandaloneOuterTrack>();
     private ArrayList<TrackerHit> _used = new ArrayList<TrackerHit>();
     
+   
     private HelicalTrackFitter _fitter = new HelicalTrackFitter();
     private HelicalTrackFit _fit = null;
     
@@ -51,7 +75,7 @@
     double chisq_c = 10;
     
     int min_hits = 4;
-    int max_hits = 8;
+    int max_hits = 20;
     
     private AIDA _aida = AIDA.defaultInstance();
     private boolean _make_histograms = true;
@@ -75,10 +99,7 @@
     
     protected void process(EventHeader event) {
         
-  //      addSimTrackerHitInput((ArrayList<SimTrackerHit>) event.getSimTrackerHits("TkrBarrHits"));
-        addSimTrackerHitInput((ArrayList<SimTrackerHit>) event.getSimTrackerHits("TkrForwardHits"));
-        addSimTrackerHitInput((ArrayList<SimTrackerHit>) event.getSimTrackerHits("TkrEndcapHits"));
-        
+        updateEventInput(event);
         
         if (_input_hit_collection==null)
         {
@@ -89,7 +110,7 @@
         
         DistanceCompare<TrackerHit> c = new DistanceCompare<TrackerHit>();
         Collections.sort(_input_hit_collection,c); // sort from outside in... yeah this may take a while if there are a lot of hits
-        
+        generateHistogram("Number of Input Hits in collection",_input_hit_collection.size());
 
         // get hit separation
         for (TrackerHit hit : _input_hit_collection)
@@ -108,7 +129,7 @@
                 {
                     if (hit1==hit3 || hit2==hit3) continue; 
                     if (require_different_layers && (sameLayer(hit1,hit3) || sameLayer(hit2,hit3))) continue;
-                    if (_used.contains(hit1)||_used.contains(hit2)||_used.contains(hit3)) continue;
+                    if (_used.contains(hit1)||_used.contains(hit2)||_used.contains(hit3)) continue; //don't reuse hits that already have a home'
                     
                     _hitset.clear();
                     _hitset.add(hit1);
@@ -117,10 +138,10 @@
                     
                     _fit = doFit(_hitset);
                     
-                    makeHistogram("chisql_1",_fit.chisq()[1]);
+                    generateHistogram("chisql_1",_fit.chisq()[1]);
                     //check line chisquare to see if it's reasonable'
                     if (_fit.chisq()[1]/3.0>chisq_l) continue;
-                    makeHistogram("chisql_2",_fit.chisq()[1]);
+                    generateHistogram("chisql_2",_fit.chisq()[1]);
                     
                     ArrayList<TrackerHit> candidates = new ArrayList<TrackerHit>();
                     
@@ -156,7 +177,6 @@
                             {
                                 if (sameLayer(new_hit,i)) fail=true;
                             }
-
                             if (fail) continue;
                         }   
                         
@@ -165,7 +185,7 @@
                         _hitset.remove(new_hit);
                     }      
                     
-                    makeHistogram("candidates_size",candidates.size());
+                    generateHistogram("candidates_size",candidates.size());
                     
                     
                     ////first, try adding all candidates
@@ -175,8 +195,8 @@
                     
                     _fit = doFit(_hitset);
                     
-                    makeHistogram("chisql_3",_fit.chisq()[1]);
-                    makeHistogram("chisqc_1",_fit.chisq()[0]);
+                    generateHistogram("chisql_3",_fit.chisq()[1]);
+                    generateHistogram("chisqc_1",_fit.chisq()[0]);
                     
                     int while_loop_iterations = 0;
                     
@@ -210,7 +230,7 @@
                         _fit = doFit(_hitset);
                     }
                     
-                    makeHistogram("while loop iter",while_loop_iterations);
+                    generateHistogram("while loop iter",while_loop_iterations);
                     
                     //now, I think we have a track
                     if (_hitset.size()>=min_hits)
@@ -224,20 +244,23 @@
                         _tracks.add(track);
                         _used.addAll(_hitset);
                         
-                        makeHistogram("Number of hits per track",_hitset.size());
-                        makeHistogram("Purity",purity);
+                        generateHistogram("Number of hits per track",_hitset.size());
+                        generateHistogram("purity",purity);
                     }
                 }
             }
         }
         event.put(EventHeader.TRACKS, _tracks, Track.class, 0); //put tracks into event
-        makeHistogram("n_tracks",_tracks.size());
+        generateHistogram("ntracks",_tracks.size());
         purgeLists(); //do some cleanup
     }
     
     
     
 //-------------------------Public Controller Methods--------------------------------------------------------------    
+    
+    //TODO: write javadoc... 
+    
     public void addInput(ArrayList<TrackerHit> hits)
     {
         if (_input_hit_collection==null)
@@ -251,12 +274,58 @@
         }
     }
     
+    public void requireDifferentLayers(boolean b)
+    {require_different_layers=b;}
+    
+    public void setChisqL(double chisql)
+    {chisq_l=chisql;}
+    
+    public void setChisqC(double chisqc)
+    {chisq_c=chisqc;}
+    
+    public void set_dz(double newdz)
+    {dz = newdz;}
+    
+    public void set_drphi(double newdrphi)
+    {dz = newdrphi;}
+    
+    public void setRequiredDistance(double d)
+    {required_distance=d;}
+    
+    public void setRequiredSeparation(double s)
+    {required_separation=s;}
+    
+    public void setMinHits(int minhits)
+    {min_hits = minhits;}
+    
+    public void setMaxHits(int maxhits)
+    {max_hits = maxhits;}
+    
+    public void make_histograms()
+    {_make_histograms = true;}
+    
+    public void make_histograms(boolean histograms)
+    {_make_histograms = histograms;}
+    
     public void addSimTrackerHitInput(ArrayList<SimTrackerHit> hits)
     {
         TrackerHitCheater _cheat = new TrackerHitCheater();
         addInput ((ArrayList<TrackerHit>) _cheat.makeTrackerHits(hits));
     }
     
+    public void addSimTrackerInputCollection(String sim_tracker_hit_collection_name)
+    {
+        sim_event_input.add(sim_tracker_hit_collection_name);
+    }
+    
+    public void addInputCollection(String tracker_hit_collection_name)
+    {
+        event_input.add(tracker_hit_collection_name);
+    }
+    
+    public void setID(String s)
+    {_id = s;}
+    
 //--------------------------Private Helper Methods----------------------------------------------------- 
     
     private double findNearest(TrackerHit hit, List<TrackerHit> hits)
@@ -365,8 +434,8 @@
     
     private double findPurity(ArrayList<TrackerHit> hits, MCParticle mp)
     {
-        int denom = hits.size();
-        int num = 0;
+        int denom = hits.size(); //denominator
+        int num = 0; //numerator
         
         for (TrackerHit i : hits)
         {
@@ -379,7 +448,7 @@
         return ((double) num)/((double) denom);
     }
     
-    private void makeHistogram(String name, double value)
+    private void generateHistogram(String name, double value)
     {
         if (_make_histograms)
         {
@@ -396,9 +465,32 @@
            _used.clear();
            _tracks.clear();
     }
-}
+    
+    private void updateEventInput(final EventHeader event) {
+            
+        if (event_input.size()>0) //get any input from the event
+        {
+            for (String s : event_input)
+            {
+                ArrayList<TrackerHit> eventhits = (ArrayList) event.get(TrackerHit.class,s);
+                if (eventhits!=null) addInput(eventhits);
+            }
+        }
+        
+        if (sim_event_input.size()>0) // get any simtracker input from the event
+        {
+            for (String s : sim_event_input)
+            {
+                ArrayList<SimTrackerHit> simeventhits = (ArrayList) event.get(SimTrackerHit.class,s);
+                if (simeventhits!=null) addSimTrackerHitInput(simeventhits);
+            }
+        }
+    }
+    
+    
+} //end TrackerHitTrackFinder class 
 
-//comparator class used to sort points from outermost to innermost
+//============================comparator class used to sort points from outermost to innermost========================
 class DistanceCompare<TrackerHit> implements Comparator<TrackerHit>
 {        
     public int compare(Object a, Object b)

lcsim/src/org/lcsim/contrib/CosminDeaconu
OuterTrackFinder.java 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- OuterTrackFinder.java	19 Jul 2007 23:16:32 -0000	1.3
+++ OuterTrackFinder.java	20 Jul 2007 17:48:44 -0000	1.4
@@ -84,7 +84,7 @@
     
     private String _output_hit_collection = "";
     
-    private double _module_length = 100.0;
+    private double _module_length = 300.0;
     private double _seedhit_isolation = 0.5; //0; //0.5;
     private double _seed_ip_dca = 100.0;  //900000; //100.0;
     private double _pass1_hit_dca = 0.5;  //900000; //0.5;
@@ -114,7 +114,7 @@
     private double dz = 100; //
     private double drphi = 0.0316; //I think this is equivalent to having 1000 for weights on circle fit
     
-    private double[] _h_chisq_dof = {10.,10.};
+    private double[] _h_chisq_dof = {10.,20.};
     
     private boolean _debug_sysouts = false;
     private double _debug_sysout_level=6;
@@ -866,7 +866,7 @@
                                                             _aida.cloud1D("Found MCParticle momentum"+_id).fill(majority_particle.getMomentum().magnitude());
                                                         }
                                                     }
-                                                                                }
+                                                }
                                                 
                                                 double purity = (double)nhits_max/(double)nhits;
                                                 
@@ -1023,7 +1023,14 @@
     public void setUsedLayers(int[] usedLayers)
     {
         _usedLayers.clear();
-        _usedLayers = new ArrayList(Arrays.asList((usedLayers)));
+        Integer[] usedLayersInt = new Integer[usedLayers.length];
+        
+        for (int i = 0; i < usedLayers.length; i++)
+        {
+            usedLayersInt[i] = Integer.valueOf(usedLayers[i]);
+        }
+        
+        _usedLayers = new ArrayList(Arrays.asList((usedLayersInt)));
     }
     
     public void setCombinedLayers(int[][] combinedLayers)
@@ -1148,9 +1155,9 @@
         _useAllLayers=true;
         setInputHits("TkrBarrHits");
         setSubdetectors(new String[]{"TrackerBarrel"});
-        dz = ((double)_module_length)/(Math.sqrt(12.0));
+        dz = ((double)_module_length)/(Math.sqrt(12.0)); //I'm not actually sure this is how the dz works... 
         _phi_cut = true;
-        //_h_chisq_dof[1]=1000000000000000000000000000000000000000000.0; // emulate circle fit by setting ridiculously high line chisq cutoff for helical fit. 
+        _h_chisq_dof[1]=1000000000000000000000000000000000000000000.0; // emulate circle fit by setting ridiculously high line chisq cutoff for helical fit. 
         _zseg=true;
     }
     
CVSspam 0.2.8