Print

Print


Commit in lcsim/sandbox/Partridge/SegmentTest on MAIN
SegmentTest.java+75added 1.1
Backup into sandbox

lcsim/sandbox/Partridge/SegmentTest
SegmentTest.java added at 1.1
diff -N SegmentTest.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ SegmentTest.java	29 Nov 2007 19:43:36 -0000	1.1
@@ -0,0 +1,75 @@
+/*
+ * SegmentTest.java
+ *
+ * Created on November 28, 2007
+ *
+ */
+
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.aida.AIDA;
+
+import hep.aida.ICloud1D;
+import org.lcsim.fit.zsegment.ZSegmentFitter;
+import org.lcsim.fit.zsegment.ZSegmentFit;
+
+/**
+ * Find the occupancy in the core of a jet
+ *
+ * @author Richard Partridge
+ * @version 1.0
+ */
+public class SegmentTest extends Driver {
+    private AIDA aida = AIDA.defaultInstance();
+    
+    /** Creates a new instance of SeedTracker */
+    public SegmentTest() {
+    }
+    
+    protected void process(EventHeader event) {
+        double[] rcyl = {218., 468., 718., 968., 1218.};
+        double dz = 100.;
+        for (int count=0; count<100000; count++) {
+            double R = 1000. / Math.random();
+            double z0 = 1000. * (2. * Math.random() - 1.);
+//            double z0 = 0.;
+            double slope = 2. * (2. * Math.random() - 1.);
+            double[] s = new double[5];
+            double[] zmin = new double[5];
+            double[] zmax = new double[5];
+            for (int i=0; i<5; i++) {
+                s[i] = R * Math.acos(1. - 0.5*Math.pow(rcyl[i]/R,2));
+                double z = z0 + s[i] * slope;
+                int iz = (int) (Math.abs(z) / dz);
+                if (z>0) {
+                    zmin[i] = iz * dz;
+                } else {
+                    zmin[i] = -(iz+1) * dz;
+                }
+                zmax[i] = zmin[i] + dz;
+                if (z<zmin[i] || z>zmax[i]) System.out.println(" z error "+z+" "+zmin+" "+zmax);
+            }
+            ZSegmentFitter zfit = new ZSegmentFitter();
+            boolean status = zfit.fit(s, zmin, zmax);
+            if (status) {
+                ZSegmentFit fit = zfit.getFit();
+                double z0f = fit.getCentroid()[0];
+                double slopef = fit.getCentroid()[1];
+                double z0err = Math.sqrt(fit.getCovariance().e(0, 0));
+                double slopeerr = Math.sqrt(fit.getCovariance().e(1, 1));
+                double corr = fit.getCovariance().e(0,1)/(z0err*slopeerr);
+                aida.histogram1D("Fitted z0", 200, -1250, 1250).fill(z0f);
+                aida.histogram1D("Fitted slope", 200, -2.5, 2.5).fill(slopef);
+                aida.histogram1D("Residual for z0", 200, -100., 100.).fill(z0f-z0);
+                aida.histogram1D("Residual for slope", 200, -0.15, 0.15).fill(slopef-slope);
+                aida.histogram1D("Error in z0", 200, 0., 50.).fill(z0err);
+                aida.histogram1D("Error in slope", 200, 0., 0.05).fill(slopeerr);
+                aida.histogram1D("Correlation coeefficient", 200, -1., 1.).fill(corr);
+                aida.histogram1D("Pull for z0", 200, -3., 3.).fill((z0f-z0)/z0err);
+                aida.histogram1D("Pull for slope", 200, -3., 3.).fill((slopef-slope)/slopeerr);
+                aida.histogram1D("Polygon sides", 15, 0, 15).fill(fit.getPolygon().size());
+            } else {System.out.println("Fit failed");
+            }
+        }
+    }
+}
\ No newline at end of file
CVSspam 0.2.8