Commit in hps-java/src/main/java/org/lcsim/hps on MAIN | |||
users/phansson/TwoTrackAnlysis.java | +13 | -7 | 1.15 -> 1.16 |
recon/tracking/TrackUtils.java | +121 | -5 | 1.16 -> 1.17 |
+134 | -12 |
Use event quality.
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;
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; + }
}
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