lcsim-contrib/src/main/java/org/lcsim/contrib/SteveMagill
diff -N TJetBMCorr.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TJetBMCorr.java 14 Feb 2012 19:31:48 -0000 1.1
@@ -0,0 +1,120 @@
+package org.lcsim.contrib.SteveMagill;
+
+import java.util.*;
+import java.util.ArrayList;
+import org.lcsim.util.Driver;
+import org.lcsim.recon.cluster.util.*;
+import org.lcsim.event.*;
+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 in jets
+ */
+
+public class TJetBMCorr extends Driver
+{
+ private String _jetname; // list of jets to use
+ private String _delmname; // name of object containing deltaM value
+ private String _trspname; // name of track-spacepoint map to use
+ private String _tdmapname; // name of track jet-deltaM map
+ private String _tcclname; // name of track cluster map for tracks matched to clusters
+ private AIDA aida = AIDA.defaultInstance();
+
+ public TJetBMCorr()
+ {
+
+ }
+
+ protected void process(EventHeader event)
+ {
+ super.process(event);
+
+ // get track jets from event
+ List<ReconstructedParticle> trjets = event.get(ReconstructedParticle.class, _jetname);
+ // get tracks from event and track-spacepoint map to use
+ Map<Track, SpacePoint> trep = (Map<Track, SpacePoint>) event.get(_trspname);
+ // get track cal clus map also
+ Map<Track, BasicCluster> tclmap = (Map<Track, BasicCluster>) event.get(_tcclname);
+ // make Nayeli's mass correction and store as event object
+ List<Double> Ddelm = new ArrayList<Double>();
+ // make a map linking track jet to its delta M value
+ Map<ReconstructedParticle, Double> tjDmap = new HashMap<ReconstructedParticle, Double>();
+ for(ReconstructedParticle trjet : trjets)
+ {
+ double trpx = 0.;
+ double trpy = 0.;
+ double trpz = 0.;
+ double Etot = 0.;
+ double trpxprime = 0.;
+ double trpyprime = 0.;
+ double trpzprime = 0.;
+
+ // first, need to get list of RPs in this jet
+ List<ReconstructedParticle> rps = trjet.getParticles();
+// System.out.println("Size of Tr Jet " + rps.size());
+ for (ReconstructedParticle rp : rps)
+ {
+ // get list of tracks for this particle - one to one for these jets
+ List<Track> trks = rp.getTracks();
+ for (Track trk : trks)
+ {
+ // check map of track cal clusters to see if track 4V used in RPs
+// if (tclmap.get(trk) != null) System.out.println("This track used");
+// if (tclmap.get(trk) != null) continue;
+ trpx += trk.getPX();
+ trpy += trk.getPY();
+ trpz += trk.getPZ();
+ double etr = Math.sqrt(trk.getPX()*trk.getPX()+trk.getPY()*trk.getPY()+trk.getPZ()*trk.getPZ()+.0195); // use pion mass squared
+ Etot += etr;
+ SpacePoint endpSP = trep.get(trk);
+ 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;
+ if (delm<0.) delm = 0.;
+ Ddelm.add(delm);
+ aida.cloud1D("All Track Invariant Mass per Jet").fill(minv);
+ aida.cloud1D("All Track Prime Invariant Mass per Jet").fill(mprime);
+ aida.cloud1D("Delta M All Track per Jet Mp M").fill(delm);
+ tjDmap.put(trjet, delm);
+ }
+ event.put(_delmname, Ddelm);
+ event.put(_tdmapname,tjDmap);
+ }
+
+ public void setInputJetList(String jetname)
+ {
+ _jetname = jetname;
+ }
+
+ public void setTrackSpacepointMap(String trspname)
+ {
+ _trspname = trspname;
+ }
+
+ public void setTrackDelMMap(String tdmapname)
+ {
+ _tdmapname = tdmapname;
+ }
+
+ public void setDeltaMObjectName(String delmname)
+ {
+ _delmname = delmname;
+ }
+
+ public void setTrCClusMapName(String tcclname)
+ {
+ _tcclname = tcclname;
+ }
+
+}