lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill
diff -N TrBMCorr.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TrBMCorr.java 14 Feb 2012 19:30:21 -0000 1.1
@@ -0,0 +1,87 @@
+package org.lcsim.contrib.SteveMagill;
+
+import java.util.*;
+import java.util.ArrayList;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.Driver;
+import org.lcsim.event.Track;
+import org.lcsim.spacegeom.*;
+import hep.physics.vec.Hep3Vector;
+import org.lcsim.util.aida.AIDA;
+
+/*
+ * Calculates effect of B-field by determining delta M from tracks
+ */
+
+public class TrBMCorr extends Driver
+{
+ private String _trname; // list of tracks to use
+ private String _delmname; // name of object containing deltaM value
+ private String _trspname; // name of track-spacepoint map to use
+ private AIDA aida = AIDA.defaultInstance();
+
+ public TrBMCorr()
+ {
+
+ }
+
+ protected void process(EventHeader event)
+ {
+ super.process(event);
+
+ // get tracks from event and track-spacepoint map to use
+ List<Track> tracks = event.get(Track.class, _trname);
+ Map<Track, SpacePoint> trep = (Map<Track, SpacePoint>) event.get(_trspname);
+ // make Nayeli's mass correction and store as event object
+ List<Double> Ddelm = new ArrayList<Double>();
+ double trpx = 0.;
+ double trpy = 0.;
+ double trpz = 0.;
+ double Etot = 0.;
+ double trpxprime = 0.;
+ double trpyprime = 0.;
+ double trpzprime = 0.;
+ for(Track tr : tracks)
+ {
+ trpx += tr.getPX();
+ trpy += tr.getPY();
+ trpz += tr.getPZ();
+ double etr = Math.sqrt(tr.getPX()*tr.getPX()+tr.getPY()*tr.getPY()+tr.getPZ()*tr.getPZ()+.0195); // use pion mass squared
+ Etot += etr;
+ SpacePoint endpSP = trep.get(tr);
+ Hep3Vector endp = new SpacePoint(endpSP);
+ double rmag = endp.magnitude();
+ trpxprime += etr*endp.x()/rmag;
+ trpyprime += etr*endp.y()/rmag;
+ trpzprime += etr*endp.z()/rmag;
+ }
+ double pptot = Math.sqrt(trpxprime*trpxprime+trpyprime*trpyprime+trpzprime*trpzprime);
+ double mprime = Math.sqrt(Etot*Etot-pptot*pptot);
+ double ptot = Math.sqrt(trpx*trpx+trpy*trpy+trpz*trpz);
+ double minv = Math.sqrt(Etot*Etot-ptot*ptot);
+ double delm = mprime-minv;
+ Ddelm.add(delm);
+ aida.cloud1D("All Track Invariant Mass").fill(minv);
+ aida.cloud1D("All Track Prime Invariant Mass").fill(mprime);
+ aida.cloud1D("Delta M All Track Mp M").fill(delm);
+// System.out.println("MC FS Invariant Mass " + minv);
+ event.put(_delmname, Ddelm);
+
+ }
+
+ public void setInputTrackList(String trname)
+ {
+ _trname = trname;
+ }
+
+ public void setTrackSpacepointMap(String trspname)
+ {
+ _trspname = trspname;
+ }
+
+ public void setDeltaMObjectName(String delmname)
+ {
+ _delmname = delmname;
+ }
+
+}