Print

Print


Commit in lcsim/test/org/lcsim/fit/helicaltrack on MAIN
HelicalTrackFitterTest.java+101added 1.1
first release.

lcsim/test/org/lcsim/fit/helicaltrack
HelicalTrackFitterTest.java added at 1.1
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);
+        }
+    }
+    
+}
CVSspam 0.2.8