lcsim/sandbox/Partridge/SegmentTest
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