Commit in hps-java/src/main/java/org/lcsim/hps on MAIN
users/phansson/TwoTrackAnlysis.java+13-71.15 -> 1.16
recon/tracking/TrackUtils.java+121-51.16 -> 1.17
+134-12
2 modified files
Use event quality.

hps-java/src/main/java/org/lcsim/hps/users/phansson
TwoTrackAnlysis.java 1.15 -> 1.16
diff -u -r1.15 -r1.16
--- TwoTrackAnlysis.java	16 Apr 2013 22:06:21 -0000	1.15
+++ TwoTrackAnlysis.java	20 Apr 2013 04:00:25 -0000	1.16
@@ -76,7 +76,9 @@
         }
         @Override
         public int compareTo(CmpTrack t) {
-                return _track.getTrackStates().get(0).getMomentum()[0]>t._track.getTrackStates().get(0).getMomentum()[0]?0:1;
+                int v = ((Double)(t._track.getTrackStates().get(0).getMomentum()[0]*100000 - _track.getTrackStates().get(0).getMomentum()[0]*100000)).intValue();
+                //System.out.printf("%s: _track = %f _t = %f  => %d \n",this.getClass().getSimpleName(),_track.getTrackStates().get(0).getMomentum()[0],t._track.getTrackStates().get(0).getMomentum()[0],v);
+                return v;
         }
     }
     
@@ -156,16 +158,15 @@
         //    return;
         //}
         
-        TrackUtils trkutil = new TrackUtils();
         ArrayList<CmpTrack> tracks = new ArrayList<CmpTrack>();
         for(int i=0;i<tracklist.size();++i) {
             Track trk = tracklist.get(i);
+            if(TrackUtils.passTrackSelection(trk, tracklist, EventQuality.Quality.MEDIUM)) {
             if(_debug) 
                 System.out.printf("%s: trk momentum (%.3f,%.3f,%.3f) chi2=%.3f\n",this.getClass().getSimpleName(),trk.getTrackStates().get(0).getMomentum()[0],trk.getTrackStates().get(0).getMomentum()[1],trk.getTrackStates().get(0).getMomentum()[2],trk.getChi2());
-            if(trk.getTrackStates().get(0).getMomentum()[0]>0.) {
                 tracks.add(new CmpTrack(trk));
             } else {
-               if(_debug) System.out.println(this.getClass().getSimpleName() + ": trk failed momentum cut " + event.getEventNumber() + "\n" + trk.toString());
+               if(_debug) System.out.println(this.getClass().getSimpleName() + ": trk failed track selections " + event.getEventNumber() + "\n" + trk.toString());
             }
         }
         
@@ -176,7 +177,10 @@
             for(CmpTrack trk:tracks) {
                 if(trk_prev!=null) {
                     if(trk_prev._track.getTrackStates().get(0).getMomentum()[0]<trk._track.getTrackStates().get(0).getMomentum()[0]) {
-                        throw new RuntimeException(String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
+                        //throw new RuntimeException(String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
+                        System.out.printf("%s\n",String.format("%s: ERROR prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
+                    } else {
+                        System.out.printf("%s\n",String.format("%s: OK prev px=%f trk=%f",this.getClass().getSimpleName(),trk_prev._track.getTrackStates().get(0).getMomentum()[0],trk._track.getTrackStates().get(0).getMomentum()[0]));
                     }
                 }
                 trk_prev = trk;
@@ -599,7 +603,7 @@
     private TriggerData getTriggerInfo(EventHeader event) {
         if(!event.hasCollection(TriggerData.class, triggerDecisionCollectionName)) {
             if(_debug) 
-                System.out.printf( "%s: Event %d has NO trigger bank\n",this.getClass().getSimpleName());
+                System.out.printf( "%s: Event %d has NO trigger bank\n",this.getClass().getSimpleName(),event.getEventNumber());
             return null;
         } else {
             List<TriggerData> triggerDataList = event.get(TriggerData.class, "TriggerBank");
@@ -621,7 +625,9 @@
         for(TrackerHit hit : hits) {
             HelicalTrackHit hth = (HelicalTrackHit) hit;
             HelicalTrackCross htc = (HelicalTrackCross) hth;
-            htc.setTrackDirection(helix);
+            //System.out.printf("%s: getHitMap: hth position before trkdir: (%.3f,%.3f,%.3f)\n",this.getClass().getSimpleName(),hth.x(),hth.y(),hth.z());
+            //htc.setTrackDirection(helix);
+            //System.out.printf("%s: getHitMap: hth position after  trkdir: (%.3f,%.3f,%.3f)\n",this.getClass().getSimpleName(),hth.x(),hth.y(),hth.z());
             map.put(hth.Layer(), hth);
         }
         return map;

hps-java/src/main/java/org/lcsim/hps/recon/tracking
TrackUtils.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- TrackUtils.java	13 Feb 2013 18:20:54 -0000	1.16
+++ TrackUtils.java	20 Apr 2013 04:00:25 -0000	1.17
@@ -19,6 +19,7 @@
 
 //--- org.lcsim ---//
 import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
 import org.lcsim.fit.helicaltrack.*;
 import org.lcsim.hps.users.phansson.WTrack;
 import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
@@ -27,7 +28,7 @@
 /**
  * 
  * @author Omar Moreno <[log in to unmask]>
- * @version $Id: TrackUtils.java,v 1.16 2013/02/13 18:20:54 phansson Exp $
+ * @version $Id: TrackUtils.java,v 1.17 2013/04/20 04:00:25 phansson Exp $
  * TODO: Switch to JLab coordinates
  */
 
@@ -37,7 +38,7 @@
 	private boolean isTrackSet = false;
 	private double[] trackParameters;
         
-	
+        
 	/**
 	 * 
 	 */
@@ -405,6 +406,8 @@
         }
         
         public static Map<String,Double> calculateTrackHitResidual(HelicalTrackHit hth,HelicalTrackFit track, boolean includeMS ) {
+            
+            boolean debug = false;
             Map<String,Double> residuals = new HashMap<String,Double>();
 
             Map<HelicalTrackHit, MultipleScatter> msmap = track.ScatterMap();
@@ -464,9 +467,14 @@
             residuals.put("dz_res",Math.sqrt(dz_res2));
             residuals.put("msdz",msdz);
             
-            //System.out.printf("calculateTrackHitResidual: for hit (%f,%f,%f) on helix at s=%f with chi2=%f \n",hth.x(),hth.y(),hth.z(),s,track.chisqtot(),track.chisqtot());
-            //System.out.printf("calculateTrackHitResidual: resy=%f eresy=%f drphi=%f msdrphi=%f \n",resy,erry,drphi_res,msdrphi);
-            //System.out.printf("calculateTrackHitResidual: resz=%f eresz=%f dz_res=%f msdz=%f \n",resz,dz_res,Math.sqrt(dz_res2),msdz);
+            
+            if(debug) {
+                System.out.printf("calculateTrackHitResidual: HTH hit at (%f,%f,%f)\n",hth.x(),hth.y(),hth.z());
+                System.out.printf("calculateTrackHitResidual: helix params d0=%f phi0=%f R=%f z0=%f slope=%f chi2=%f/%f chi2tot=%f\n",track.dca(),track.phi0(),track.R(),track.z0(),track.slope(),track.chisq()[0],track.chisq()[1],track.chisqtot());
+                System.out.printf("calculateTrackHitResidual: => resz=%f resy=%f at s=%f\n",resz,resy,s);
+                //System.out.printf("calculateTrackHitResidual: resy=%f eresy=%f drphi=%f msdrphi=%f \n",resy,erry,drphi_res,msdrphi);
+                //System.out.printf("calculateTrackHitResidual: resz=%f eresz=%f dz_res=%f msdz=%f \n",resz,dz_res,Math.sqrt(dz_res2),msdz);
+            }          
             
         
             return residuals;
@@ -554,6 +562,114 @@
 
             return res;
         }
+        
+        
+    public static int[] getHitsInTopBottom(Track track) {
+        int n[] = {0,0};
+        List<TrackerHit> hitsOnTrack = track.getTrackerHits();
+        for(TrackerHit hit : hitsOnTrack) {
+            HelicalTrackHit hth = (HelicalTrackHit) hit;
+            if(SvtUtils.getInstance().isTopLayer((SiSensor)((RawTrackerHit)hth.getRawHits().get(0)).getDetectorElement())) {
+                n[0] = n[0] + 1;
+            } else {
+                n[1] = n[1] + 1;
+            }
+        }
+        return n;
+    }
+    
+    public static boolean isTopTrack(Track track,int minhits) {
+        return isTopOrBottomTrack(track,minhits)==1?true:false;
+    }
+
+    public static boolean isBottomTrack(Track track,int minhits) {
+        return isTopOrBottomTrack(track,minhits)==0?true:false;
+    }
+
+    public static int isTopOrBottomTrack(Track track,int minhits) {
+        int nhits[] = getHitsInTopBottom(track);
+        if (nhits[0]>=minhits && nhits[1]==0) {
+            return 1;
+        } else if (nhits[1]>=minhits && nhits[0]==0) {
+            return 0;
+        } else {
+            return -1;
+        }
+    }
+    
+    public static boolean hasTopBotHit(Track track) {
+        int nhits[] = getHitsInTopBottom(track);
+        if (nhits[0]>0 && nhits[1]>0) return true;
+        else return false;
+    }
+
+    public static boolean isSharedHit(TrackerHit hit, List<Track> othertracks) {
+        HelicalTrackHit hth = (HelicalTrackHit) hit;
+        for(Track track : othertracks) {
+            List<TrackerHit> hitsOnTrack = track.getTrackerHits();
+            boolean shared = false;
+            for(TrackerHit loop_hit : hitsOnTrack) {
+                HelicalTrackHit loop_hth = (HelicalTrackHit) loop_hit;
+                if(hth.equals(loop_hth)) {
+                    //System.out.printf("share hit at layer %d at %s (%s) with track w/ chi2=%f\n",hth.Layer(),hth.getCorrectedPosition().toString(),loop_hth.getCorrectedPosition().toString(),track.getChi2());
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    
+    public static int numberOfSharedHits(Track track, List<Track> tracklist) {
+        List<Track> tracks = new ArrayList<>();
+        //System.out.printf("%d tracks in event\n",tracklist.size());
+        //System.out.printf("look for another track with chi2=%f and px=%f \n",track.getChi2(),track.getTrackStates().get(0).getMomentum()[0]);
+        for(Track t: tracklist) {
+            //System.out.printf("add track with chi2=%f and px=%f ?\n",t.getChi2(),t.getTrackStates().get(0).getMomentum()[0]);
+            if(t.equals(track)) {
+                //System.out.printf("NOPE\n");
+                continue;
+            }
+            //System.out.printf("YEPP\n");
+            tracks.add(t);
+        }
+        List<TrackerHit> hitsOnTrack = track.getTrackerHits();
+        int n_shared = 0;
+        for(TrackerHit hit : hitsOnTrack) {
+            if (isSharedHit(hit,tracks)) {
+                ++n_shared;
+            }
+        }
+        return n_shared;
+    }
+    
+    public static boolean hasSharedHits(Track track,List<Track> tracklist) {
+        return numberOfSharedHits( track, tracklist)==0?false:true;
+    }
+    
+    public static void cut(int cuts[],EventQuality.Cut bit) {
+            cuts[0] = cuts[0] | (1 << bit.getValue());
+    }
+    
+    
+    public static boolean passTrackSelection(Track track, List<Track> tracklist, EventQuality.Quality trk_quality) {
+        int cuts[] = {0};
+        if(track.getTrackStates().get(0).getMomentum()[0] < EventQuality.instance().getCutValue(EventQuality.Cut.PZ, trk_quality)) 
+            cut(cuts,EventQuality.Cut.PZ);
+        if(track.getTrackStates().get(0).getMomentum()[0]>= EventQuality.instance().getCutValue(EventQuality.Cut.CHI2, trk_quality)) 
+            cut(cuts,EventQuality.Cut.CHI2);
+        if(numberOfSharedHits(track,tracklist) > ((int)Math.round(EventQuality.instance().getCutValue(EventQuality.Cut.SHAREDHIT, trk_quality))))
+            cut(cuts,EventQuality.Cut.SHAREDHIT);
+        if(hasTopBotHit(track))
+            cut(cuts,EventQuality.Cut.TOPBOTHIT);
+        if(track.getTrackerHits().size()< ((int)Math.round(EventQuality.instance().getCutValue(EventQuality.Cut.NHITS, trk_quality))))
+            cut(cuts,EventQuality.Cut.NHITS);
+        
+        
+        //System.out.printf("pz=%f chi2=%f nsh=%d nhits=%d topbot=%d => %s\n%s",track.getTrackStates().get(0).getMomentum()[0],track.getChi2(),numberOfSharedHits(track,tracklist),track.getTrackerHits().size(),hasTopBotHit(track)?1:0,Integer.toBinaryString(cuts[0]),EventQuality.instance().print(cuts[0]));
+        
+        
+        return cuts[0]==0?true:false;
+    }
 
         
 }
CVSspam 0.2.12


Use REPLY-ALL to reply to list

To unsubscribe from the LCD-CVS list, click the following link:
https://listserv.slac.stanford.edu/cgi-bin/wa?SUBED1=LCD-CVS&A=1