Print

Print


Author: [log in to unmask]
Date: Fri Sep 25 08:27:07 2015
New Revision: 3714

Log:
more cuts

Modified:
    java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java

Modified: java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java
 =============================================================================
--- java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	(original)
+++ java/trunk/analysis/src/main/java/org/hps/analysis/dataquality/TridentMonitoring.java	Fri Sep 25 08:27:07 2015
@@ -12,6 +12,8 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map.Entry;
+import org.hps.recon.ecal.cluster.ClusterUtilities;
+import org.hps.recon.particle.ReconParticleDriver;
 import org.hps.recon.tracking.TrackType;
 import org.hps.recon.tracking.TrackUtils;
 import org.lcsim.event.EventHeader;
@@ -32,7 +34,7 @@
 
     private double ebeam = 1.05;
     private BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
-    private static final int nCuts = 6;
+    private static final int nCuts = 8;
     private static final int PASS = 0;
     private static final int FAIL = 1;
 
@@ -98,7 +100,8 @@
     private double trkPxMax = 0.2;
     private double radCut = 0.8 * ebeam;
     private double trkTimeDiff = 16.0;
-    
+    private double clusterTimeDiffCut = 2.5;
+
     private double l1IsoMin = 1.0;
 //cluster matching
     private boolean reqCluster = false;
@@ -112,8 +115,10 @@
     private float nPassTrkQualityCuts = 0;
     private float nPassV0QualityCuts = 0;
     private float nPassV0Cuts = 0;
+    private float nPassTimeCuts = 0;
     private float nPassTrkCuts = 0;
-    private float nPassTimeCuts = 0;
+    private float nPassClusterMatchCuts = 0;
+    private float nPassFrontHitsCuts = 0;
     private float nPassIsoCuts = 0;
 
     private float nPassClusterCuts = 0;
@@ -251,19 +256,10 @@
             Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, uncVert.getPosition());
 
             List<Track> tracks = new ArrayList<Track>();
-            ReconstructedParticle electron = null, positron = null;
-            for (ReconstructedParticle particle : uncV0.getParticles()) //                tracks.addAll(particle.getTracks());  //add add electron first, then positron...down below
-            {
-                if (particle.getCharge() > 0) {
-                    positron = particle;
-                } else if (particle.getCharge() < 0) {
-                    electron = particle;
-                } else {
-                    throw new RuntimeException("expected only electron and positron in vertex, got something with charge 0");
-                }
-            }
-            if (electron == null || positron == null) {
-                throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
+            ReconstructedParticle electron = uncV0.getParticles().get(ReconParticleDriver.ELECTRON);
+            ReconstructedParticle positron = uncV0.getParticles().get(ReconParticleDriver.POSITRON);
+            if (!(electron.getCharge() < 0 && positron.getCharge() > 0)) {
+                throw new RuntimeException("incorrect charge on v0 daughters");
             }
             tracks.add(electron.getTracks().get(0));
             tracks.add(positron.getTracks().get(0));
@@ -355,7 +351,34 @@
             cutNum++;
             nPassTrkCuts++;
 
+            boolean clusterMatchCut = !electron.getClusters().isEmpty() && !positron.getClusters().isEmpty();
+            boolean clusterTimeCut = clusterMatchCut && Math.abs(ClusterUtilities.getSeedHitTime(electron.getClusters().get(0)) - ClusterUtilities.getSeedHitTime(positron.getClusters().get(0))) < clusterTimeDiffCut;
+            if (!clusterMatchCut || !clusterTimeCut) {
+                cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
+                cutVertexMass[cutNum][FAIL].fill(uncV0.getMass());
+                cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z());
+                continue;
+            }
+            cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
+            cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
+            cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+            cutNum++;
+            nPassClusterMatchCuts++;
+
             candidateList.add(uncV0);
+
+            boolean frontHitsCut = eleIso[0] != null && posIso[0] != null && eleIso[2] != null && posIso[2] != null;
+            if (!frontHitsCut) {
+                cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
+                cutVertexMass[cutNum][FAIL].fill(uncV0.getMass());
+                cutVertexZVsMass[cutNum][FAIL].fill(uncV0.getMass(), v0Vtx.z());
+                continue;
+            }
+            cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
+            cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
+            cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+            cutNum++;
+            nPassFrontHitsCuts++;
 
             boolean isoCut = minL1Iso > l1IsoMin;
             if (!isoCut) {
@@ -369,7 +392,7 @@
             cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
             cutNum++;
             nPassIsoCuts++;
-            
+
             vertCandidateList.add(uncV0);
         }
 
@@ -453,10 +476,12 @@
         System.out.println("V0 Vertex   Cuts:\t\t" + nPassV0Cuts + "\t\t\t" + nPassV0Cuts / nPassV0QualityCuts + "\t\t\t" + nPassV0Cuts / nRecoEvents);
         System.out.println("Timing      Cuts:\t\t" + nPassTimeCuts + "\t\t\t" + nPassTimeCuts / nPassV0Cuts + "\t\t\t" + nPassTimeCuts / nRecoEvents);
         System.out.println("Tracking    Cuts:\t\t" + nPassTrkCuts + "\t\t\t" + nPassTrkCuts / nPassTimeCuts + "\t\t\t" + nPassTrkCuts / nRecoEvents);
-        
+        System.out.println("Cluster    Cuts:\t\t" + nPassClusterMatchCuts + "\t\t\t" + nPassClusterMatchCuts / nPassTrkCuts + "\t\t\t" + nPassClusterMatchCuts / nRecoEvents);
+
         System.out.println("\t\t\tVertex Selection Summary");
         System.out.println("******************************************************************************************");
-        System.out.println("Isolation   Cuts:\t\t" + nPassIsoCuts + "\t\t\t" + nPassIsoCuts / nPassTrkCuts + "\t\t\t" + nPassIsoCuts / nRecoEvents);
+        System.out.println("Front Hits  Cuts:\t\t" + nPassFrontHitsCuts + "\t\t\t" + nPassFrontHitsCuts / nPassClusterMatchCuts + "\t\t\t" + nPassFrontHitsCuts / nRecoEvents);
+        System.out.println("Isolation   Cuts:\t\t" + nPassIsoCuts + "\t\t\t" + nPassIsoCuts / nPassFrontHitsCuts + "\t\t\t" + nPassIsoCuts / nRecoEvents);
         System.out.println("******************************************************************************************");
     }