lcsim/src/org/lcsim/fit/helicaltrack
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));