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("******************************************************************************************"); }