lcsim/sandbox/JanStrube
diff -N FitterTestDriver_ReconTrack.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ FitterTestDriver_ReconTrack.java 14 Feb 2007 20:28:13 -0000 1.1
@@ -0,0 +1,84 @@
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+import org.lcsim.contrib.JanStrube.tracking.LCIOTrackParameters;
+import org.lcsim.contrib.JanStrube.tracking.NewFastMCTrackFactory;
+import org.lcsim.contrib.JanStrube.tracking.NewTrack;
+import org.lcsim.contrib.JanStrube.vtxFitter.Fitter;
+import org.lcsim.contrib.JanStrube.vtxFitter.Vertex;
+import org.lcsim.event.EventHeader;
+import org.lcsim.event.MCParticle;
+import org.lcsim.event.Track;
+import org.lcsim.mc.fast.tracking.ReconTrack;
+import org.lcsim.spacegeom.CartesianPoint;
+import org.lcsim.spacegeom.CartesianVector;
+import org.lcsim.spacegeom.SpacePoint;
+import org.lcsim.spacegeom.SpaceVector;
+import org.lcsim.util.Driver;
+import org.lcsim.util.aida.AIDA;
+
+import Jama.Matrix;
+
+import static java.lang.Math.abs;
+import static java.lang.Math.sqrt;
+
+class FitterTestDriver_ReconTrack extends Driver {
+ private AIDA aida = AIDA.defaultInstance();
+ private SpacePoint referencePoint;
+ private SpacePoint origin;
+ private Random rand;
+ private int count = 0;
+
+ public FitterTestDriver_ReconTrack() {
+ referencePoint = new CartesianPoint(0, 0, 0);
+ origin = new CartesianPoint(0, 0, 0);
+ rand = new Random(123);
+ }
+
+ public void process(EventHeader event) {
+ count++ ;
+ if (count % 500 == 0)
+ System.out.printf("Processing event %d\n", count);
+ // beamconstraint when smearing the tracks ?
+ NewFastMCTrackFactory tf = new NewFastMCTrackFactory(event, false);
+ MCParticle mother = null;
+ // K0: 310, J/Psi: 443
+ for (MCParticle p : event.getMCParticles()) {
+ if (abs(p.getPDGID()) == 443) {
+ mother = p;
+ }
+ }
+ List<org.lcsim.contrib.JanStrube.tracking.Track> tracks = new ArrayList<org.lcsim.contrib.JanStrube.tracking.Track>();
+ for (Track t : event.getTracks()) {
+ ReconTrack rt = (ReconTrack) t;
+ MCParticle part = (MCParticle) rt.getMCParticle();
+
+ SpacePoint org = new CartesianPoint(t.getReferencePoint());
+ SpaceVector mom = new CartesianVector(t.getMomentum());
+ Matrix errors = new Matrix(t.getErrorMatrix());
+ LCIOTrackParameters parameters = LCIOTrackParameters.SpaceMomentum2Parameters(mom, org, referencePoint, t.getCharge(), 5);
+ tracks.add(new NewTrack(referencePoint, parameters, errors, t.getCharge()));
+ }
+ SpacePoint startingPoint = new SpacePoint();
+ Fitter fitter2 = new Fitter(event);
+ fitter2.setDelta_chi2(0);
+ Vertex newVtx2 = fitter2.fit(tracks, startingPoint);
+ double sigmaX = sqrt(newVtx2.getSpatialCovarianceMatrix().get(0, 0));
+ double sigmaY = sqrt(newVtx2.getSpatialCovarianceMatrix().get(1, 1));
+ double sigmaZ = sqrt(newVtx2.getSpatialCovarianceMatrix().get(2, 2));
+ double deltaX = newVtx2.location().x() - mother.getOrigin().x();
+ double deltaY = newVtx2.location().y() - mother.getOrigin().y();
+ double deltaZ = newVtx2.location().z() - mother.getOrigin().z();
+ aida.cloud1D("decayLength").fill(new SpacePoint(mother.getEndPoint()).magnitude());
+ aida.cloud1D("smeared_deltaX").fill(deltaX);
+ aida.cloud1D("smeared_deltaY").fill(deltaY);
+ aida.cloud1D("smeared_deltaZ").fill(deltaZ);
+ aida.cloud1D("sigma_x").fill(sigmaX);
+ aida.cloud1D("sigma_y").fill(sigmaY);
+ aida.cloud1D("sigma_z").fill(sigmaZ);
+ aida.cloud1D("pull_x").fill(deltaX/sigmaX);
+ aida.cloud1D("pull_y").fill(deltaY/sigmaY);
+ aida.cloud1D("pull_z").fill(deltaZ/sigmaZ);
+ }
+}