Print

Print


Commit in hps-java/src/main/java/org/lcsim/hps/recon/tracking on MAIN
TrackUtils.java+91-41.14 -> 1.15
Moved out local hit residual calculation to util class.

hps-java/src/main/java/org/lcsim/hps/recon/tracking
TrackUtils.java 1.14 -> 1.15
diff -u -r1.14 -r1.15
--- TrackUtils.java	23 Jan 2013 17:47:29 -0000	1.14
+++ TrackUtils.java	9 Feb 2013 00:34:16 -0000	1.15
@@ -3,6 +3,7 @@
 //--- hep ---//
 import hep.physics.matrix.SymmetricMatrix;
 import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Matrix;
 import hep.physics.vec.Hep3Vector;
 import hep.physics.vec.VecOp;
 import java.util.ArrayList;
@@ -14,16 +15,19 @@
 import org.lcsim.detector.solids.Point3D;
 import org.lcsim.detector.solids.Polygon3D;
 import org.lcsim.detector.tracker.silicon.SiSensor;
+import org.lcsim.event.RawTrackerHit;
 
 //--- org.lcsim ---//
 import org.lcsim.event.Track;
 import org.lcsim.fit.helicaltrack.*;
 import org.lcsim.hps.users.phansson.WTrack;
+import org.lcsim.recon.tracking.seedtracker.SeedCandidate;
+import org.lcsim.recon.tracking.seedtracker.SeedTrack;
 
 /**
  * 
  * @author Omar Moreno <[log in to unmask]>
- * @version $Id: TrackUtils.java,v 1.14 2013/01/23 17:47:29 phansson Exp $
+ * @version $Id: TrackUtils.java,v 1.15 2013/02/09 00:34:16 phansson Exp $
  * TODO: Switch to JLab coordinates
  */
 
@@ -264,7 +268,7 @@
             /*
              * Use code in WTrack to find the iterative solution to the interception
              */
-            boolean debug = true;
+            boolean debug = false;
             WTrack wtrack = new WTrack(helfit,bfield,true); // B-field sign is flipped so flip!
             if(debug) System.out.printf("getHelixPlaneIntercept:find intercept between plane defined by point on plane %s, unit vec %s, bfield %.3f, and WTrack \n%s \n",point_on_plane.toString(),unit_vec_normal_to_plane.toString(), bfield,wtrack.toString());
             Hep3Vector intercept_point =  wtrack.getHelixAndPlaneIntercept(wtrack,point_on_plane, unit_vec_normal_to_plane, new BasicHep3Vector(0,0,1));
@@ -449,8 +453,91 @@
             //System.out.printf("calculateTrackHitResidual: resz=%f eresz=%f dz_res=%f msdz=%f \n",resz,dz_res,Math.sqrt(dz_res2),msdz);
             
         
-        return residuals;
-    }
+            return residuals;
+        }
+        
+
+        public static Map<String,Double> calculateLocalTrackHitResiduals(Track track, HelicalTrackHit hth, HelicalTrackStrip strip, double bFieldInZ) {
+            
+            SeedTrack st = (SeedTrack) track;
+            SeedCandidate seed = st.getSeedCandidate();
+            HelicalTrackFit _trk = seed.getHelix();
+            Map<HelicalTrackHit,MultipleScatter> msmap = seed.getMSMap();
+            double msdrdphi = msmap.get(hth).drphi();
+            double msdz = msmap.get(hth).dz();
+            return calculateLocalTrackHitResiduals(_trk, strip,  msdrdphi,  msdz,  bFieldInZ);
+        }
+        
+        public static Map<String,Double> calculateLocalTrackHitResiduals(HelicalTrackFit _trk, HelicalTrackStrip strip, double msdrdphi, double msdz, double bFieldInZ) {
+        
+        
+            boolean debug = false;
+            boolean includeMS = true;
+            
+            
+            Hep3Vector u = strip.u();
+            Hep3Vector v = strip.v();
+            Hep3Vector w = strip.w();
+            Hep3Vector eta = VecOp.cross(u,v);
+            Hep3Vector corigin = strip.origin();
+            String side = SvtUtils.getInstance().isTopLayer((SiSensor)((RawTrackerHit)strip.rawhits().get(0)).getDetectorElement()) ? "top" : "bottom";
+
+            double bfield = bFieldInZ; //Math.abs(this._bfield.z());
+
+            //Find interception with plane that the strips belongs to
+            Hep3Vector trkpos = TrackUtils.getHelixPlaneIntercept(_trk, strip, bfield);
+        
+            if(debug) {
+                System.out.printf("calculateLocalTrackHitResiduals: found interception point at %s \n",trkpos.toString());
+            }
+        
+
+            if(Double.isNaN(trkpos.x()) || Double.isNaN(trkpos.y()) || Double.isNaN(trkpos.z())) {
+                System.out.printf("calculateLocalTrackHitResiduals: failed to get interception point (%s) \n",trkpos.toString());
+                System.out.printf("calculateLocalTrackHitResiduals: track params\n%s\n",_trk.toString());
+                System.out.printf("calculateLocalTrackHitResiduals: track pT=%.3f chi2=[%.3f][%.3f] \n",_trk.pT(bfield),_trk.chisq()[0],_trk.chisq()[1]);
+                trkpos = TrackUtils.getHelixPlaneIntercept(_trk, strip, bfield);
+                System.exit(1);
+            }
+        
+            double xint = trkpos.x();
+            double phi0 = _trk.phi0();
+            double R = _trk.R();
+            double s = HelixUtils.PathToXPlane(_trk, xint, 0, 0).get(0);
+            double phi = -s/R + phi0;
+
+            
+            Hep3Vector mserr = new BasicHep3Vector(msdrdphi * Math.sin(phi), msdrdphi * Math.sin(phi), msdz);
+            double msuError = VecOp.dot(mserr, u);
+
+            Hep3Vector vdiffTrk = VecOp.sub(trkpos, corigin);
+            TrackerHitUtils thu = new TrackerHitUtils(debug);
+            Hep3Matrix trkToStrip = thu.getTrackToStripRotation(strip);
+            Hep3Vector vdiff = VecOp.mult(trkToStrip, vdiffTrk);
+
+
+            double umc = vdiff.x();
+            double vmc = vdiff.y();
+            double wmc = vdiff.z();
+            double umeas = strip.umeas();
+            double uError = strip.du();
+            double vmeas = 0;
+            double vError = (strip.vmax() - strip.vmin()) / Math.sqrt(12);
+            double wmeas = 0;
+            double wError = 10.0/Math.sqrt(12); //0.001;
+
+            Map<String,Double> res = new HashMap<String,Double>();
+            res.put("ures", umeas-umc);
+            res.put("ureserr", includeMS ? Math.sqrt(uError * uError + msuError * msuError) : uError);
+            res.put("vres", vmeas-vmc);
+            res.put("vreserr", vError);
+            res.put("wres", wmeas-wmc);
+            res.put("wreserr", wError);
+            
+            res.put("vdiffTrky",vdiffTrk.y());
+
+            return res;
+        }
 
         
 }
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