lcsim/test/org/lcsim/fit/helicaltrack
diff -N HelicalTrackFitterTest.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ HelicalTrackFitterTest.java 28 Mar 2006 20:18:01 -0000 1.1
@@ -0,0 +1,101 @@
+/*
+ * HelicalTrackFitterTest.java
+ *
+ * Created on March 27, 2006, 11:02 PM
+ *
+ * $Id: HelicalTrackFitterTest.java,v 1.1 2006/03/28 20:18:01 ngraf Exp $
+ */
+
+package org.lcsim.fit.helicaltrack;
+
+import hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import java.util.Random;
+import junit.framework.TestCase;
+import org.lcsim.event.Track;
+import org.lcsim.event.base.BaseTrack;
+import org.lcsim.util.swim.HelixSwimmer;
+
+/**
+ *
+ * @author Norman Graf
+ */
+public class HelicalTrackFitterTest extends TestCase
+{
+
+ /** Creates a new instance of HelicalTrackFitterTest */
+ public void testHelicalTrackFitter()
+ {
+ Random ran = new Random(137);
+ // define a "detector"
+ double[] radii = {1.2, 1.4, 1.6, 1.8, 2.0};
+ double[] lengths = {10., 10., 10., 10., 10.};
+ double rPhiRes = .005;
+ double zRes = .005;
+
+ int nmeas = radii.length;
+
+ // solenoidal magnetic field strength
+ double bField = 5.;
+
+ // swimmer to create hits
+ HelixSwimmer swimmer = new HelixSwimmer(bField);
+
+ // define a track
+ // start at the origin...
+ Hep3Vector pos = new BasicHep3Vector(0,0,0);
+ // note: should always have some non-zero pT.
+ double[] momentum = {0.2, 0.1, 0.1};
+ Hep3Vector mom = new BasicHep3Vector(momentum);
+ // positive charge
+ int charge = 1;
+
+ swimmer.setTrack(mom, pos, charge);
+
+ // containers for the hits...
+ double[] x = new double[nmeas];
+ double[] y = new double[nmeas];
+ double[] z = new double[nmeas];
+ double[] rPhiErr = new double[nmeas];
+ double[] zErr = new double[nmeas];
+
+ // swim the track and make some hits...
+ for(int i=0; i<nmeas; ++i)
+ {
+// System.out.println("r= "+radii[i]+" z= "+lengths[i]);
+ double s = swimmer.getDistanceToCylinder(radii[i],lengths[i]);
+// System.out.println("s= "+s);
+ Hep3Vector point = swimmer.getPointAtDistance(s);
+// System.out.println(point);
+ // TODO smear these points...
+ x[i] = point.x();
+ y[i] = point.y();
+ z[i] = point.z();
+ rPhiErr[i] = rPhiRes;
+ zErr[i] = zRes;
+ }
+
+ // fit these points...
+ HelicalTrackFitter fitter = new HelicalTrackFitter();
+ boolean success = fitter.fit(x, y, z, rPhiErr, zErr, nmeas);
+ assertTrue(success);
+ HelicalTrackFit fit = fitter.getFit();
+ System.out.println(fit);
+
+ BaseTrack t = new BaseTrack();
+ t.setTrackParameters(fit.parameters(), bField);
+
+ // TODO seeing some oddness in the calculations of pz, need to investigate.
+ System.out.println(t);
+ System.out.println("track: px="+t.getPX()+" py= "+t.getPY()+" pz= "+t.getPZ());
+ System.out.println("track: q= "+t.getCharge());
+ double[] trackP = t.getMomentum();
+ for(int i=0; i<3; ++i)
+ {
+ // TODO change this to some number of sigmas in the cov matrix.
+ double eps = .1;
+ assertEquals(trackP[i], momentum[i], eps);
+ }
+ }
+
+}