Print

Print


Author: [log in to unmask]
Date: Wed Jul  6 18:07:21 2016
New Revision: 4417

Log:
read truth info for tridents/A'

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/tuple/FEETupleDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/tuple/MollerTupleDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TridentTupleDriver.java
    java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java
    java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/MakeTuplesMC.lcsim

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/FEETupleDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/tuple/FEETupleDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/tuple/FEETupleDriver.java	Wed Jul  6 18:07:21 2016
@@ -13,7 +13,8 @@
     private final String finalStateParticlesColName = "FinalStateParticles";
     private final double tupleTrkPCut = 0.7;
 
-    public FEETupleDriver() {
+    @Override
+    protected void setupVariables() {
         tupleVariables.clear();
         addEventVariables();
         addParticleVariables("fsp");

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/MollerTupleDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/tuple/MollerTupleDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/tuple/MollerTupleDriver.java	Wed Jul  6 18:07:21 2016
@@ -23,7 +23,8 @@
     private final double tupleMinSumCut = 0.7;
     private final double tupleMaxSumCut = 1.3;
 
-    public MollerTupleDriver() {
+    @Override
+    protected void setupVariables() {
         tupleVariables.clear();
         addEventVariables();
         addVertexVariables();

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TridentTupleDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TridentTupleDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TridentTupleDriver.java	Wed Jul  6 18:07:21 2016
@@ -20,14 +20,24 @@
 
     private final double tupleTrkPCut = 0.9;
     private final double tupleMaxSumCut = 1.3;
+    private boolean getMC = false;
 
-    public TridentTupleDriver() {
+    @Override
+    protected void setupVariables() {
+        tupleVariables.clear();
         addEventVariables();
         addVertexVariables();
         addParticleVariables("ele");
         addParticleVariables("pos");
         String[] newVars = new String[]{"minPositiveIso/D", "minNegativeIso/D", "minIso/D"};
         tupleVariables.addAll(Arrays.asList(newVars));
+        if (getMC) {
+            addMCTridentVariables();
+        }
+    }
+
+    public void setGetMC(boolean getMC) {
+        this.getMC = getMC;
     }
 
     @Override
@@ -84,6 +94,11 @@
             tupleMap.put("minPositiveIso/D", minPositiveIso);
             tupleMap.put("minNegativeIso/D", minNegativeIso);
             tupleMap.put("minIso/D", minIso);
+
+            if (getMC) {
+                fillMCTridentVariables(event);
+            }
+
             if (tupleWriter != null) {
                 boolean trkCut = tupleMap.get("eleP/D") < tupleTrkPCut * ebeam && tupleMap.get("posP/D") < tupleTrkPCut * ebeam;
                 boolean sumCut = tupleMap.get("eleP/D") + tupleMap.get("posP/D") < tupleMaxSumCut * ebeam;

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/tuple/TupleDriver.java	Wed Jul  6 18:07:21 2016
@@ -3,6 +3,7 @@
 import hep.physics.vec.BasicHep3Matrix;
 import hep.physics.vec.BasicHep3Vector;
 import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.HepLorentzVector;
 import hep.physics.vec.VecOp;
 import java.io.FileNotFoundException;
 import java.io.PrintWriter;
@@ -26,6 +27,7 @@
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.GenericObject;
+import org.lcsim.event.MCParticle;
 import org.lcsim.event.ReconstructedParticle;
 import org.lcsim.event.Track;
 import org.lcsim.event.TrackState;
@@ -41,10 +43,11 @@
  * @author mgraham on Apr 15, 2014 update mgraham on May 15, 2014 to include
  * calculateEndOfRunQuantities & printDQMData i.e. useful methods
  */
-public class TupleDriver extends Driver {
+public abstract class TupleDriver extends Driver {
 
     protected boolean debug = false;
 
+    protected String tupleFile = null;
     protected PrintWriter tupleWriter = null;
     protected final List<String> tupleVariables = new ArrayList<String>();
     protected final Map<String, Double> tupleMap = new HashMap<String, Double>();
@@ -139,6 +142,8 @@
         this.debug = debug;
     }
 
+    abstract protected void setupVariables();
+
     @Override
     protected void detectorChanged(Detector detector) {
         beamAxisRotation.setActiveEuler(Math.PI / 2, -0.0305, -Math.PI / 2);
@@ -148,6 +153,15 @@
                 = this.getConditionsManager().getCachedConditions(BeamEnergy.BeamEnergyCollection.class, "beam_energies").getCachedData();
         if (Double.isNaN(ebeam)) {
             ebeam = beamEnergyCollection.get(0).getBeamEnergy();
+        }
+        setupVariables();
+        if (tupleFile != null) {
+            try {
+                tupleWriter = new PrintWriter(tupleFile);
+            } catch (FileNotFoundException e) {
+                tupleWriter = null;
+            }
+            tupleWriter.println(StringUtils.join(tupleVariables, ":"));
         }
     }
 
@@ -194,12 +208,7 @@
     }
 
     public void setTupleFile(String tupleFile) {
-        try {
-            tupleWriter = new PrintWriter(tupleFile);
-        } catch (FileNotFoundException e) {
-            tupleWriter = null;
-        }
-        tupleWriter.println(StringUtils.join(tupleVariables, ":"));
+        this.tupleFile = tupleFile;
 //        for (String variable : tupleVariables) {
 //            tupleWriter.format("%s:", variable);
 //        }
@@ -444,4 +453,95 @@
         tupleMap.put("vzcChisq/D", vzcV0.getStartVertex().getChi2());
         tupleMap.put("vzcM/D", vzcV0.getMass());
     }
+
+    protected void addMCTridentVariables() {
+        String[] newVars = new String[]{"triStartX/D", "triStartY/D", "triStartZ/D",
+            "triEndX/D", "triEndY/D", "triEndZ/D",
+            "triPX/D", "triPY/D", "triPZ/D", "triP/D", "triM/D", "triE/D",
+            "pair1PX/D", "pair1PY/D", "pair1PZ/D", "pair1P/D", "pair1M/D", "pair1E/D",
+            "pair2PX/D", "pair2PY/D", "pair2PZ/D", "pair2P/D", "pair2M/D", "pair2E/D"};
+        tupleVariables.addAll(Arrays.asList(newVars));
+    }
+
+    protected void fillMCTridentVariables(EventHeader event) {
+        List<MCParticle> MCParticles = event.getMCParticles();
+
+        MCParticle trident = null;
+
+        MCParticle ele1 = null;//highest-energy electron daughter
+        MCParticle ele2 = null;//second-highest-energy electron daughter (if any)
+        MCParticle pos = null;//highest-energy positron daughter
+
+        List<MCParticle> tridentParticles = null;
+
+        for (MCParticle particle : MCParticles) {
+            if (particle.getPDGID() == 622) {
+                trident = particle;
+                tridentParticles = particle.getDaughters();
+                break;
+            }
+        }
+        if (trident == null) {
+            return;
+        }
+
+        Hep3Vector tridentStart = VecOp.mult(beamAxisRotation, trident.getOrigin());
+        Hep3Vector tridentEnd = VecOp.mult(beamAxisRotation, trident.getEndPoint());
+        Hep3Vector tridentP = VecOp.mult(beamAxisRotation, trident.getMomentum());
+
+        tupleMap.put("triStartX/D", tridentStart.x());
+        tupleMap.put("triStartY/D", tridentStart.y());
+        tupleMap.put("triStartZ/D", tridentStart.z());
+        tupleMap.put("triEndX/D", tridentEnd.x());
+        tupleMap.put("triEndY/D", tridentEnd.y());
+        tupleMap.put("triEndZ/D", tridentEnd.z());
+        tupleMap.put("triPX/D", tridentP.x());
+        tupleMap.put("triPY/D", tridentP.y());
+        tupleMap.put("triPZ/D", tridentP.z());
+        tupleMap.put("triP/D", tridentP.magnitude());
+        tupleMap.put("triM/D", trident.getMass());
+        tupleMap.put("triE/D", trident.getEnergy());
+
+        for (MCParticle particle : tridentParticles) {
+            switch (particle.getPDGID()) {
+                case -11:
+                    if (pos == null || particle.getEnergy() > pos.getEnergy()) {
+                        pos = particle;
+                    }
+                    break;
+                case 11:
+                    if (ele1 == null || particle.getEnergy() > ele1.getEnergy()) {
+                        ele2 = ele1;
+                        ele1 = particle;
+                    } else if (ele2 == null || particle.getEnergy() > ele2.getEnergy()) {
+                        ele2 = particle;
+                    }
+                    break;
+            }
+        }
+
+        if (pos != null && ele1 != null) {
+            {
+                HepLorentzVector vtx = VecOp.add(pos.asFourVector(), ele1.asFourVector());
+                Hep3Vector vtxP = VecOp.mult(beamAxisRotation, vtx.v3());
+                tupleMap.put("pair1PX/D", vtxP.x());
+                tupleMap.put("pair1PY/D", vtxP.y());
+                tupleMap.put("pair1PY/D", vtxP.z());
+                tupleMap.put("pair1P/D", vtxP.magnitude());
+                tupleMap.put("pair1M/D", vtx.magnitude());
+                tupleMap.put("pair1E/D", vtx.t());
+            }
+            if (ele2 != null) {
+                HepLorentzVector vtx = VecOp.add(pos.asFourVector(), ele2.asFourVector());
+                Hep3Vector vtxP = VecOp.mult(beamAxisRotation, vtx.v3());
+                tupleMap.put("pair2PX/D", vtxP.x());
+                tupleMap.put("pair2PY/D", vtxP.y());
+                tupleMap.put("pair2PY/D", vtxP.z());
+                tupleMap.put("pair2P/D", vtxP.magnitude());
+                tupleMap.put("pair2M/D", vtx.magnitude());
+                tupleMap.put("pair2E/D", vtx.t());
+            }
+        }
+
+    }
 }

Modified: java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/MakeTuplesMC.lcsim
 =============================================================================
--- java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/MakeTuplesMC.lcsim	(original)
+++ java/trunk/steering-files/src/main/resources/org/hps/steering/analysis/MakeTuplesMC.lcsim	Wed Jul  6 18:07:21 2016
@@ -23,6 +23,7 @@
             <isGBL>true</isGBL>
             <tupleFile>${outputFile}_tri.txt</tupleFile>
             <cutTuple>true</cutTuple>
+            <getMC>true</getMC>
         </driver>
         <driver name="MollerTuple" type="org.hps.analysis.tuple.MollerTupleDriver">
             <triggerType>all</triggerType>