lcsim/src/org/lcsim/mc/fast/tracking
diff -N SimpleTables.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SimpleTables.java 9 Aug 2005 18:34:03 -0000 1.1
@@ -0,0 +1,33 @@
+
+package org.lcsim.mc.fast.tracking;
+
+
+import org.lcsim.conditions.ConditionsSet;
+
+/**
+ *
+ * @author Daniel
+ */
+public class SimpleTables {
+
+ private double ConstantTerm;
+ private double ThetaTerm;
+
+ /** Creates a new instance of SimpleTables */
+ SimpleTables(ConditionsSet set)
+ {
+ ConstantTerm = set.getDouble("ConstantTerm");
+ ThetaTerm = set.getDouble("ThetaTerm");
+ }
+
+ public double getConstantTerm()
+ {
+ return ConstantTerm;
+ }
+
+ public double getThetaTerm()
+ {
+ return ThetaTerm;
+ }
+
+}
lcsim/src/org/lcsim/mc/fast/tracking
diff -N SmearTrackSimple.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ SmearTrackSimple.java 9 Aug 2005 18:34:03 -0000 1.1
@@ -0,0 +1,87 @@
+package org.lcsim.mc.fast.tracking;
+
+import java.util.Random;
+import org.lcsim.mc.fast.tracking.SimpleTables;
+import org.lcsim.util.aida.AIDA;
+
+/**
+ *
+ * @author Daniel
+ */
+public class SmearTrackSimple
+ {
+
+ /** Creates a new instance of SmearTrackSimple */
+ /**
+ * Smear track parameters according to the track's stored error matrix.
+ *
+ * @see TrackParameters
+ */
+ private static AIDA aida = AIDA.defaultInstance();
+
+ static DocaTrackParameters smearTrackSimple(double bField, TrackParameters noSmear, Random rand, SimpleTables SmTbl, double pt, boolean hist)
+ {
+ // get error matrix and do a sanity check
+
+ double[] dev = noSmear.getTrackParameters();
+ for (int i = 0; i < 5; i++)
+ {
+ if (noSmear.getErrorMatrix()[i][i] <= 0)
+ {
+ throw new RuntimeException("Non-positive Eigenvalue seen!");
+ }
+
+
+ if (i == 2)
+ {
+ double th = Math.atan(1/(noSmear.getTanL()));
+
+ double a = SmTbl.getConstantTerm();
+ double b = SmTbl.getThetaTerm()/(pt*Math.sin(th));
+
+ double smmat = (Math.sqrt(noSmear.getErrorMatrix()[i][i])) / (Math.abs(pt * dev[i]));
+ double p = Math.sqrt( noSmear.getPX()*noSmear.getPX() + noSmear.getPY()*noSmear.getPY() + noSmear.getPZ()*noSmear.getPZ() );
+
+ if ((p < 102) && (p > 98) &&(hist))
+ {
+ aida.histogram2D("theta dependence of matrix element", 400, 0, 2, 400, .000005, .0005).fill(-Math.log10(1-Math.cos(th)),smmat);
+ aida.histogram2D("theta dependence of parameterization", 400, 0, 2, 400, .000005, .0005).fill(-Math.log10(1-Math.cos(th)),Math.sqrt(a*a + b*b));
+ }
+
+ dev[i] = dev[i] + dev[i] * pt * Math.sqrt(a*a + b*b) * rand.nextGaussian();
+
+ //dev[i] = dev[i] + Math.sqrt(noSmear.getErrorMatrix()[i][i]) * rand.nextGaussian();
+
+ } else {
+
+ dev[i] = dev[i] + Math.sqrt(noSmear.getErrorMatrix()[i][i]) * rand.nextGaussian();
+
+ }
+
+
+ }
+
+
+ // adjust new phi value to [-pi,pi] if necessary
+ if (dev[1] > Math.PI)
+ {
+ dev[1] -= (2. * Math.PI);
+ }
+ if (dev[1] < -Math.PI)
+ {
+ dev[1] += (2. * Math.PI);
+ }
+
+ // Chi2 calculation
+ double chi2 = dev[0]*dev[0]*noSmear.getErrorMatrix()[0][0];
+
+ DocaTrackParameters smeared = new DocaTrackParameters(bField, dev, noSmear.getErrorMatrix(), chi2);
+ if (noSmear instanceof DocaTrackParameters)
+ {
+ smeared.setL0(((DocaTrackParameters) noSmear).getL0());
+ }
+
+ return smeared;
+ }
+
+}