Print

Print


Commit in lcsim/src/org/lcsim/fit/helicaltrack on MAIN
HelicalTrackCross.java+8-11.6 -> 1.7
Modify checking for unreasonable cross errors to account for possible round-off (concerned particularly about the case where dr=0) and add checking on dz in case stereo sensors to handle case where stereo sensors are not normal to z

lcsim/src/org/lcsim/fit/helicaltrack
HelicalTrackCross.java 1.6 -> 1.7
diff -u -r1.6 -r1.7
--- HelicalTrackCross.java	28 Aug 2008 01:20:58 -0000	1.6
+++ HelicalTrackCross.java	29 Aug 2008 00:06:22 -0000	1.7
@@ -87,11 +87,18 @@
      * @param hcov covariance matrix for helix parameters
      */
     public void setTrackDirection(TrackDirection trkdir, SymmetricMatrix hcov) {
+        //  Get the corrected position and covariance matrix
         Hep3Vector poscor = HitUtils.PositionOnHelix(trkdir, _strip1, _strip2);
         SymmetricMatrix covcor = HitUtils.CovarianceOnHelix(trkdir, hcov, _strip1, _strip2);
+        //  Retrieve the nominal position and covariance matrix (i.e., from the origin methods)
         Hep3Vector pos = new BasicHep3Vector(super.getPosition());
         SymmetricMatrix cov = new SymmetricMatrix(3, super.getCovMatrix(), true);
-        if (drphicalc(poscor, covcor) < drphicalc(pos, cov) && drcalc(poscor, covcor) < drcalc(pos, cov)) {
+        //  Check to make sure we have sane errors in r-phi, r, and z - problems can occur
+        //  if the track direction is nearly parallel to the sensor plane
+        boolean errok = (drphicalc(poscor, covcor) < drphicalc(pos, cov)   + _eps) &&
+                        (drcalc(poscor, covcor)    < drcalc(pos, cov)      + _eps) &&
+                        (Math.sqrt(covcor.e(2,2))  < Math.sqrt(cov.e(2,2)) + _eps);
+        if (errok) {
             super.setCorrectedPosition(poscor);
             super.setCorrectedCovMatrix(covcor);
             super.setChisq(ChisqPenalty(trkdir, hcov));
CVSspam 0.2.8