Author: [log in to unmask]
Date: Fri Oct 2 11:12:28 2015
New Revision: 3753
Log:
lots of useless plots
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 Oct 2 11:12:28 2015
@@ -20,6 +20,7 @@
import org.lcsim.event.ReconstructedParticle;
import org.lcsim.event.RelationalTable;
import org.lcsim.event.Track;
+import org.lcsim.event.TrackerHit;
import org.lcsim.event.Vertex;
import org.lcsim.geometry.Detector;
@@ -33,51 +34,145 @@
public class TridentMonitoring extends DataQualityMonitor {
private double ebeam = 1.05;
- private BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
- private static final int nCuts = 8;
+ private final BasicHep3Matrix beamAxisRotation = new BasicHep3Matrix();
+ private static final int nCuts = 9;
+ private final String[] cutNames = {"Trk Quality",
+ "V0 Quality",
+ "V0 Vertex",
+ "Timing",
+ "Tracking",
+ "Cluster",
+ "Event",
+ "Front Hits",
+ "Isolation"};
+ private int firstVertexingCut = 0;
private static final int PASS = 0;
private static final int FAIL = 1;
- private String finalStateParticlesColName = "FinalStateParticles";
- private String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
- private String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
- private String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
- private String trackListName = "MatchedTracks";
+ private final String finalStateParticlesColName = "FinalStateParticles";
+ private final String unconstrainedV0CandidatesColName = "UnconstrainedV0Candidates";
+// private final String beamConV0CandidatesColName = "BeamspotConstrainedV0Candidates";
+// private final String targetV0ConCandidatesColName = "TargetConstrainedV0Candidates";
+// private final String trackListName = "MatchedTracks";
private String[] fpQuantNames = {"nV0_per_Event", "avg_BSCon_mass", "avg_BSCon_Vx", "avg_BSCon_Vy", "avg_BSCon_Vz", "sig_BSCon_Vx", "sig_BSCon_Vy", "sig_BSCon_Vz", "avg_BSCon_Chi2"};
private final String plotDir = "TridentMonitoring/";
- private IHistogram2D trackTime2D;
- private IHistogram1D trackTimeDiff;
- private IHistogram2D vertexMassMomentum;
- private IHistogram2D vertexZVsMomentum;
- private IHistogram2D vertexedTrackMomentum2D;
- private IHistogram2D pyEleVspyPos;
- private IHistogram2D pxEleVspxPos;
- private IHistogram2D vertexPxPy;
- private IHistogram1D goodVertexMass;
- private IHistogram2D goodVertexZVsMass;
- private IHistogram1D vertexX;
- private IHistogram1D vertexY;
- private IHistogram1D vertexZ;
- private IHistogram1D vertexPx;
- private IHistogram1D vertexPy;
- private IHistogram1D vertexPz;
- private IHistogram1D vertexU;
- private IHistogram1D vertexV;
- private IHistogram1D nCand;
+
+ private IHistogram2D triTrackTime2D;
+ private IHistogram1D triTrackTimeDiff;
+ private IHistogram2D triMassMomentum;
+ private IHistogram2D triZVsMomentum;
+ private IHistogram2D triTrackMomentum2D;
+ private IHistogram2D triPyEleVsPyPos;
+ private IHistogram2D triPxEleVsPxPos;
+ private IHistogram1D triDeltaP;
+ private IHistogram1D triSumP;
+ private IHistogram1D triMass;
+ private IHistogram2D triZVsMass;
+ private IHistogram1D triX;
+ private IHistogram1D triY;
+ private IHistogram1D triZ;
+ private IHistogram2D triZY;
+ private IHistogram2D triXY;
+ private IHistogram1D triPx;
+ private IHistogram1D triPy;
+ private IHistogram1D triPz;
+ private IHistogram2D triPxPy;
+ private IHistogram1D triU;
+ private IHistogram1D triV;
+
+ private IHistogram2D triRadTrackTime2D;
+ private IHistogram1D triRadTrackTimeDiff;
+ private IHistogram2D triRadMassMomentum;
+ private IHistogram2D triRadZVsMomentum;
+ private IHistogram2D triRadTrackMomentum2D;
+ private IHistogram2D triRadPyEleVsPyPos;
+ private IHistogram2D triRadPxEleVsPxPos;
+ private IHistogram1D triRadDeltaP;
+ private IHistogram1D triRadSumP;
+ private IHistogram1D triRadMass;
+ private IHistogram2D triRadZVsMass;
+ private IHistogram1D triRadX;
+ private IHistogram1D triRadY;
+ private IHistogram1D triRadZ;
+ private IHistogram2D triRadZY;
+ private IHistogram2D triRadXY;
+ private IHistogram1D triRadPx;
+ private IHistogram1D triRadPy;
+ private IHistogram1D triRadPz;
+ private IHistogram2D triRadPxPy;
+ private IHistogram1D triRadU;
+ private IHistogram1D triRadV;
+
+ private IHistogram2D vertTrackTime2D;
+ private IHistogram1D vertTrackTimeDiff;
+ private IHistogram2D vertMassMomentum;
+ private IHistogram2D vertZVsMomentum;
+ private IHistogram2D vertTrackMomentum2D;
+ private IHistogram2D vertPyEleVsPyPos;
+ private IHistogram2D vertPxEleVsPxPos;
+ private IHistogram1D vertDeltaP;
+ private IHistogram1D vertSumP;
+ private IHistogram1D vertMass;
+ private IHistogram2D vertZVsMass;
+ private IHistogram1D vertX;
+ private IHistogram1D vertY;
+ private IHistogram1D vertZ;
+ private IHistogram2D vertZY;
+ private IHistogram2D vertXY;
+ private IHistogram1D vertPx;
+ private IHistogram1D vertPy;
+ private IHistogram1D vertPz;
+ private IHistogram2D vertPxPy;
+ private IHistogram1D vertU;
+ private IHistogram1D vertV;
+
+ private IHistogram2D vertRadTrackTime2D;
+ private IHistogram1D vertRadTrackTimeDiff;
+ private IHistogram2D vertRadMassMomentum;
+ private IHistogram2D vertRadZVsMomentum;
+ private IHistogram2D vertRadTrackMomentum2D;
+ private IHistogram2D vertRadPyEleVsPyPos;
+ private IHistogram2D vertRadPxEleVsPxPos;
+ private IHistogram1D vertRadDeltaP;
+ private IHistogram1D vertRadSumP;
+ private IHistogram1D vertRadMass;
+ private IHistogram2D vertRadZVsMass;
+ private IHistogram1D vertRadX;
+ private IHistogram1D vertRadY;
+ private IHistogram1D vertRadZ;
+ private IHistogram2D vertRadZY;
+ private IHistogram2D vertRadXY;
+ private IHistogram1D vertRadPx;
+ private IHistogram1D vertRadPy;
+ private IHistogram1D vertRadPz;
+ private IHistogram2D vertRadPxPy;
+ private IHistogram1D vertRadU;
+ private IHistogram1D vertRadV;
+
+ private IHistogram1D nTriCand;
private IHistogram1D nVtxCand;
// IHistogram1D vertexW;
// IHistogram2D vertexVZ;
- private IHistogram2D vertexZY;
-
- private IHistogram1D[][] cutVertexMass = new IHistogram1D[nCuts][2];
- private IHistogram1D[][] cutVertexZ = new IHistogram1D[nCuts][2];
- private IHistogram2D[][] cutVertexZVsMass = new IHistogram2D[nCuts][2];
-
- private IHistogram1D deltaP;
- private IHistogram1D deltaPRad;
- private IHistogram1D sumP;
- private IHistogram2D vertexedTrackMomentum2DRad;
+
+ private IHistogram1D maxTrkChi2;
+ private IHistogram2D zVsMaxTrkChi2;
+ private IHistogram1D v0Chi2;
+ private IHistogram2D zVsV0Chi2;
+ private IHistogram1D trackTimeDiff;
+ private IHistogram2D zVsTrackTimeDiff;
+ private IHistogram1D hitTimeStdDev;
+ private IHistogram2D zVsHitTimeStdDev;
+ private IHistogram1D eventTrkCount;
+ private IHistogram1D eventPosCount;
+ private IHistogram2D zVsEventTrkCount;
+ private IHistogram2D zVsEventPosCount;
+ private IHistogram1D l1Iso;
+ private IHistogram2D zVsL1Iso;
+
+ private final IHistogram1D[][] cutVertexMass = new IHistogram1D[nCuts][2];
+ private final IHistogram1D[][] cutVertexZ = new IHistogram1D[nCuts][2];
+ private final IHistogram2D[][] cutVertexZVsMass = new IHistogram2D[nCuts][2];
//clean up event first
private int nTrkMax = 5;
@@ -90,8 +185,8 @@
//v0 cuts
private double v0PzMax = 1.25 * ebeam;//GeV
private double v0PzMin = 0.1;// GeV
- private double v0PyMax = 0.2;//GeV absolute value
- private double v0PxMax = 0.2;//GeV absolute value
+ private double v0PyMax = 0.04;//GeV absolute value
+ private double v0PxMax = 0.04;//GeV absolute value
private double v0VzMax = 50.0;// mm from target...someday make mass dependent
private double v0VyMax = 1.0;// mm from target...someday make mass dependent
private double v0VxMax = 2.0;// mm from target...someday make mass dependent
@@ -101,7 +196,7 @@
// private double trkPyMax = 0.2;
// private double trkPxMax = 0.2;
private double radCut = 0.8 * ebeam;
- private double trkTimeDiff = 16.0;
+ private double trkTimeDiff = 5.0;
private double clusterTimeDiffCut = 2.5;
private double l1IsoMin = 1.0;
@@ -114,15 +209,7 @@
//counters
private float nEvents = 0;
private float nRecoV0 = 0;
- private float nPassBasicCuts = 0;
- private float nPassTrkQualityCuts = 0;
- private float nPassV0QualityCuts = 0;
- private float nPassV0Cuts = 0;
- private float nPassTimeCuts = 0;
- private float nPassTrkCuts = 0;
- private float nPassClusterMatchCuts = 0;
- private float nPassFrontHitsCuts = 0;
- private float nPassIsoCuts = 0;
+ private final float[] nPassCut = new float[nCuts];
public void setEbeam(double ebeam) {
this.ebeam = ebeam;
@@ -153,49 +240,143 @@
// IHistogram1D tarconVy = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Vy (mm)", 50, -1, 1);
// IHistogram1D tarconVz = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Vz (mm)", 50, -10, 10);
// IHistogram1D tarconChi2 = aida.histogram1D(plotDir + triggerType + "/"+ triggerType + "/"+"Target Constrained Chi2", 25, 0, 25);
- pyEleVspyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- pxEleVspxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
- trackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Track time difference", 100, -10, 10);
- trackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Track time vs. track time", 100, -10, 10, 100, -10, 10);
- vertexMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex mass vs. vertex momentum", 100, 0, 1.1, 100, 0, 0.1);
- vertexZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Z vs. vertex momentum", 100, 0, 0.1, 100, -v0VzMax, v0VzMax);
- vertexedTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Positron vs. electron momentum", 100, 0, 1.1, 100, 0, 1.1);
- vertexedTrackMomentum2DRad = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Positron vs. electron momentum: radiative", 100, 0, 1.1, 100, 0, 1.1);
- vertexPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Py vs. Px", 100, -0.04, 0.04, 100, -0.04, 0.04);
- goodVertexMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Good vertex mass", 100, 0, 0.11);
- goodVertexZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Good vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
- nCand = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Number of Trident Candidates", 5, 0, 4);
+ nTriCand = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Number of Trident Candidates", 5, 0, 4);
+
+ triTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Track time difference", 100, -10, 10);
+ triTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
+
+ triTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+ triDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron - electron momentum", 100, -1., 1.0);
+ triSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+ triPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+ triPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+
+ triMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
+ triZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+ triMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex mass", 100, 0, 0.11);
+ triZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
+ triX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex X", 100, -v0VxMax, v0VxMax);
+ triY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y", 100, -v0VyMax, v0VyMax);
+ triZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z", 100, -v0VzMax, v0VzMax);
+ triXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+ triZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+ triPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px", 100, -v0PxMax, v0PxMax);
+ triPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py", 100, -v0PyMax, v0PyMax);
+ triPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Pz", 100, v0PzMin, v0PzMax);
+ triPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+ triU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Px over Ptot", 100, -0.1, 0.1);
+ triV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Trident: Vertex Py over Ptot", 100, -0.1, 0.1);
+
+ triRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time difference", 100, -10, 10);
+ triRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Track time vs. track time", 100, -10, 10, 100, -10, 10);
+
+ triRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+ triRadDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron - electron momentum", 100, -1., 1.0);
+ triRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+ triRadPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+ triRadPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+
+ triRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
+ triRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+ triRadMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex mass", 100, 0, 0.11);
+ triRadZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
+ triRadX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex X", 100, -v0VxMax, v0VxMax);
+ triRadY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y", 100, -v0VyMax, v0VyMax);
+ triRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z", 100, -v0VzMax, v0VzMax);
+ triRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+ triRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+ triRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px", 100, -v0PxMax, v0PxMax);
+ triRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py", 100, -v0PyMax, v0PyMax);
+ triRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Pz", 100, v0PzMin, v0PzMax);
+ triRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+ triRadU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Px over Ptot", 100, -0.1, 0.1);
+ triRadV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative trident: Vertex Py over Ptot", 100, -0.1, 0.1);
+
+ vertTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Track time difference", 100, -10, 10);
+ vertTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
+
+ vertTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+ vertDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron - electron momentum", 100, -1., 1.0);
+ vertSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+ vertPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+ vertPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+
+ vertMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
+ vertZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+ vertMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex mass", 100, 0, 0.11);
+ vertZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
+ vertX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex X", 100, -v0VxMax, v0VxMax);
+ vertY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y", 100, -v0VyMax, v0VyMax);
+ vertZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z", 100, -v0VzMax, v0VzMax);
+ vertXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+ vertZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+ vertPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px", 100, -v0PxMax, v0PxMax);
+ vertPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py", 100, -v0PyMax, v0PyMax);
+ vertPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Pz", 100, v0PzMin, v0PzMax);
+ vertPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+ vertU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Px over Ptot", 100, -0.1, 0.1);
+ vertV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex: Vertex Py over Ptot", 100, -0.1, 0.1);
+
+ vertRadTrackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time difference", 100, -10, 10);
+ vertRadTrackTime2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Track time vs. track time", 100, -10, 10, 100, -10, 10);
+
+ vertRadTrackMomentum2D = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron vs. electron momentum", 100, 0, v0PzMax, 100, 0, v0PzMax);
+ vertRadDeltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron - electron momentum", 100, -1., 1.0);
+ vertRadSumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Positron + electron momentum", 100, v0PzMin, v0PzMax);
+ vertRadPyEleVsPyPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Py(e) vs Py(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+ vertRadPxEleVsPxPos = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Px(e) vs Px(p)", 50, -0.04, 0.04, 50, -0.04, 0.04);
+
+ vertRadMassMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex mass vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, 0, 0.1);
+ vertRadZVsMomentum = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. vertex momentum", 100, v0PzMin, v0PzMax, 100, -v0VzMax, v0VzMax);
+ vertRadMass = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex mass", 100, 0, 0.11);
+ vertRadZVsMass = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. mass", 100, 0, 0.11, 100, -v0VzMax, v0VzMax);
+ vertRadX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex X", 100, -v0VxMax, v0VxMax);
+ vertRadY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Y", 100, -v0VyMax, v0VyMax);
+ vertRadZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z", 100, -v0VzMax, v0VzMax);
+ vertRadXY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Y vs. X", 100, -v0VxMax, v0VxMax, 100, -v0VyMax, v0VyMax);
+ vertRadZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+ vertRadPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Px", 100, -v0PxMax, v0PxMax);
+ vertRadPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py", 100, -v0PyMax, v0PyMax);
+ vertRadPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Pz", 100, v0PzMin, v0PzMax);
+ vertRadPxPy = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py vs. Px", 100, -v0PxMax, v0PxMax, 100, -v0PyMax, v0PyMax);
+ vertRadU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Px over Ptot", 100, -0.1, 0.1);
+ vertRadV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Radiative vertex: Vertex Py over Ptot", 100, -0.1, 0.1);
+
nVtxCand = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Number of Vertexing Candidates", 5, 0, 4);
- deltaP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron - electron momentum", 100, -1., 1.0);
- deltaPRad = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron - electron momentum: radiative", 100, -1., 1.0);
- sumP = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Positron + electron momentum", 100, v0PzMin, v0PzMax);
- vertexX = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex X Position (mm)", 100, -v0VxMax, v0VxMax);
- vertexY = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Y Position (mm)", 100, -v0VyMax, v0VyMax);
- vertexZ = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Z Position (mm)", 100, -v0VzMax, v0VzMax);
- vertexPx = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Px (GeV)", 100, -v0PxMax, v0PxMax);
- vertexPy = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Py (GeV)", 100, -v0PyMax, v0PyMax);
- vertexPz = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Pz (GeV)", 100, v0PzMin, v0PzMax);
- vertexU = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Px over Ptot (GeV)", 100, -0.1, 0.1);
- vertexV = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Vertex Py over Ptot (GeV)", 100, -0.1, 0.1);
-// vertexW = aida.histogram1D(plotDir +trkType+ triggerType + "/" + "Vertex Pz overPtot (GeV)", 100, 0.95, 1.0);
-// vertexVZ = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Py over Ptot vs. Z", 100, -v0VzMax, v0VzMax, 100, -0.1, 0.1);
- vertexZY = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Vertex Z vs. Y", 100, -v0VyMax, v0VyMax, 100, -v0VzMax, v0VzMax);
+
+ maxTrkChi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: Trk Chi2", 50, 0.0, 50.0);
+ zVsMaxTrkChi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs Trk Chi2", 50, 0.0, 50.0, 50, -v0VzMax, v0VzMax);
+
+ v0Chi2 = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: V0 Chi2", 50, 0.0, 25.0);
+ zVsV0Chi2 = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs V0 Chi2", 50, 0.0, 25.0, 50, -v0VzMax, v0VzMax);
+
+ trackTimeDiff = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: Trk Time Diff", 50, 0.0, 10.0);
+ hitTimeStdDev = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: Hit Time Std Dev", 50, 0.0, 10.0);
+ zVsTrackTimeDiff = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs Trk Time Diff", 50, 0.0, 10.0, 50, -v0VzMax, v0VzMax);
+ zVsHitTimeStdDev = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs Hit Time Std Dev", 50, 0.0, 10.0, 50, -v0VzMax, v0VzMax);
+
+ eventTrkCount = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: Num Tracks", 10, 0.5, 10.5);
+ eventPosCount = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: Num Positrons", 5, 0.5, 5.5);
+ zVsEventTrkCount = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs Num Tracks", 10, 0.5, 10.5, 50, -v0VzMax, v0VzMax);
+ zVsEventPosCount = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs Num Positrons", 5, 0.5, 5.5, 50, -v0VzMax, v0VzMax);
+
+ l1Iso = aida.histogram1D(plotDir + trkType + triggerType + "/" + "Cut: L1 Isolation", 50, 0.0, 5.0);
+ zVsL1Iso = aida.histogram2D(plotDir + trkType + triggerType + "/" + "Cut: Vz vs L1 Isolation", 50, 0.0, 5.0, 50, -v0VzMax, v0VzMax);
for (int i = 0; i < nCuts; i++) {
for (int pass = 0; pass < 2; pass++) {
- cutVertexZ[i][pass] = aida.histogram1D(String.format("%s%s%s/cut%d/%s: Vertex Z position (mm)", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"),
+ cutVertexZ[i][pass] = aida.histogram1D(String.format("%s%s%s/cut %d: %s/%s: Vertex Z position (mm)", plotDir, trkType, triggerType, i, cutNames[i], pass == PASS ? "pass" : "fail"),
100, -v0VzMax, v0VzMax);
- cutVertexMass[i][pass] = aida.histogram1D(String.format("%s%s%s/cut%d/%s: Vertex mass (GeV)", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"),
+ cutVertexMass[i][pass] = aida.histogram1D(String.format("%s%s%s/cut %d: %s/%s: Vertex mass (GeV)", plotDir, trkType, triggerType, i, cutNames[i], pass == PASS ? "pass" : "fail"),
100, 0, 0.1 * ebeam);
- cutVertexZVsMass[i][pass] = aida.histogram2D(String.format("%s%s%s/cut%d/%s: Vertex Z vs. mass", plotDir, trkType, triggerType, i, pass == PASS ? "pass" : "fail"),
+ cutVertexZVsMass[i][pass] = aida.histogram2D(String.format("%s%s%s/cut %d: %s/%s: Vertex Z vs. mass", plotDir, trkType, triggerType, i, cutNames[i], pass == PASS ? "pass" : "fail"),
100, 0, 0.1 * ebeam, 100, -v0VzMax, v0VzMax);
}
}
}
@Override
- public void process(EventHeader event
- ) {
+ public void process(EventHeader event) {
/* make sure everything is there */
if (!event.hasCollection(ReconstructedParticle.class, finalStateParticlesColName)) {
return;
@@ -203,15 +384,12 @@
if (!event.hasCollection(ReconstructedParticle.class, unconstrainedV0CandidatesColName)) {
return;
}
- if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) {
- return;
- }
- if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) {
- return;
- }
- if (!event.hasCollection(Track.class, trackListName)) {
- return;
- }
+// if (!event.hasCollection(ReconstructedParticle.class, beamConV0CandidatesColName)) {
+// return;
+// }
+// if (!event.hasCollection(ReconstructedParticle.class, targetV0ConCandidatesColName)) {
+// return;
+// }
//check to see if this event is from the correct trigger (or "all");
if (!matchTrigger(event)) {
@@ -246,14 +424,6 @@
npos++;
}
}
- if (ntrk < 2 || ntrk > nTrkMax) {
- return;
- }
- if (npos < 1 || npos > nPosMax) {
- return;
- }
-
- nPassBasicCuts += nV0;//passed some basic event-level cuts...
List<ReconstructedParticle> candidateList = new ArrayList<>();
List<ReconstructedParticle> vertCandidateList = new ArrayList<>();
@@ -278,9 +448,22 @@
throw new RuntimeException("expected two tracks in vertex, got " + tracks.size());
}
List<Double> trackTimes = new ArrayList<Double>();
+ List<Double> hitTimes = new ArrayList<Double>();
+ double mean = 0;
for (Track track : tracks) {
trackTimes.add(TrackUtils.getTrackTime(track, hitToStrips, hitToRotated));
- }
+ for (TrackerHit hit : TrackUtils.getStripHits(track, hitToStrips, hitToRotated)) {
+ mean += hit.getTime();
+ hitTimes.add(hit.getTime());
+ }
+ }
+ mean /= hitTimes.size();
+ double stdDev = 0;
+ for (Double time : hitTimes) {
+ stdDev += Math.pow(time - mean, 2);
+ }
+ stdDev /= (hitTimes.size() - 1);
+ stdDev = Math.sqrt(stdDev);
Double[] eleIso = TrackUtils.getIsolations(electron.getTracks().get(0), hitToStrips, hitToRotated);
Double[] posIso = TrackUtils.getIsolations(positron.getTracks().get(0), hitToStrips, hitToRotated);
@@ -289,11 +472,13 @@
double eleL1Iso = Math.min(Math.abs(eleIso[0]), Math.abs(eleIso[1]));
double posL1Iso = Math.min(Math.abs(posIso[0]), Math.abs(posIso[1]));
minL1Iso = Math.min(eleL1Iso, posL1Iso);
-// VtxZVsL1Iso.fill(minL1Iso, uncVert.getPosition().z());
- }
-
+ }
+
+ //start applying cuts
int cutNum = 0;
boolean trackQualityCut = Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()) < (isGBL ? maxChi2GBLTrack : maxChi2SeedTrack);
+ maxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()));
+ zVsMaxTrkChi2.fill(Math.max(tracks.get(0).getChi2(), tracks.get(1).getChi2()), v0Vtx.z());
if (!trackQualityCut) {
cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
cutVertexMass[cutNum][FAIL].fill(uncV0.getMass());
@@ -303,10 +488,12 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassTrkQualityCuts++;
boolean v0QualityCut = uncVert.getChi2() < maxVertChi2;
+ v0Chi2.fill(uncVert.getChi2());
+ zVsV0Chi2.fill(uncVert.getChi2(), v0Vtx.z());
if (!v0QualityCut) {
cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
cutVertexMass[cutNum][FAIL].fill(uncV0.getMass());
@@ -316,8 +503,8 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassV0QualityCuts++;
boolean vertexMomentumCut = v0MomRot.z() < v0PzMax && v0MomRot.z() > v0PzMin && Math.abs(v0MomRot.x()) < v0PxMax && Math.abs(v0MomRot.y()) < v0PyMax;
boolean vertexPositionCut = Math.abs(v0Vtx.x()) < v0VxMax && Math.abs(v0Vtx.y()) < v0VyMax && Math.abs(v0Vtx.z()) < v0VzMax;
@@ -330,11 +517,14 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassV0Cuts++;
boolean trackTimeDiffCut = Math.abs(trackTimes.get(0) - trackTimes.get(1)) < trkTimeDiff;
-
+ trackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)));
+ hitTimeStdDev.fill(stdDev);
+ zVsTrackTimeDiff.fill(Math.abs(trackTimes.get(0) - trackTimes.get(1)), v0Vtx.z());
+ zVsHitTimeStdDev.fill(stdDev, v0Vtx.z());
if (!trackTimeDiffCut) {
cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
cutVertexMass[cutNum][FAIL].fill(uncV0.getMass());
@@ -344,8 +534,8 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassTimeCuts++;
boolean topBottomCut = electron.getMomentum().y() * positron.getMomentum().y() < 0;
boolean pMinCut = electron.getMomentum().magnitude() > minPCut && positron.getMomentum().magnitude() > minPCut;
@@ -359,8 +549,8 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
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;
@@ -373,10 +563,29 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassClusterMatchCuts++;
+
+ boolean eventTrkCountCut = ntrk >= 2 && ntrk <= nTrkMax;
+ boolean eventPosCountCut = npos >= 1 && npos <= nPosMax;
+ eventTrkCount.fill(ntrk);
+ eventPosCount.fill(npos);
+ zVsEventTrkCount.fill(ntrk, v0Vtx.z());
+ zVsEventPosCount.fill(npos, v0Vtx.z());
+ if (!eventTrkCountCut || !eventPosCountCut) {
+ 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());
+ nPassCut[cutNum]++;
+ cutNum++;
candidateList.add(uncV0);
+ firstVertexingCut = cutNum;
boolean frontHitsCut = eleIso[0] != null && posIso[0] != null && eleIso[2] != null && posIso[2] != null;
if (!frontHitsCut) {
@@ -388,9 +597,11 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassFrontHitsCuts++;
-
+
+ l1Iso.fill(minL1Iso);
+ zVsL1Iso.fill(minL1Iso, v0Vtx.z());
boolean isoCut = minL1Iso > l1IsoMin;
if (!isoCut) {
cutVertexZ[cutNum][FAIL].fill(v0Vtx.z());
@@ -401,64 +612,150 @@
cutVertexZ[cutNum][PASS].fill(v0Vtx.z());
cutVertexMass[cutNum][PASS].fill(uncV0.getMass());
cutVertexZVsMass[cutNum][PASS].fill(uncV0.getMass(), v0Vtx.z());
+ nPassCut[cutNum]++;
cutNum++;
- nPassIsoCuts++;
vertCandidateList.add(uncV0);
}
- nCand.fill(candidateList.size());
+ nTriCand.fill(candidateList.size());
nVtxCand.fill(vertCandidateList.size());
- if (candidateList.isEmpty()) {
- return;
- }
- // pick the best candidate...for now just pick a random one.
- ReconstructedParticle bestCandidate = candidateList.get((int) (Math.random() * candidateList.size()));
-
- //fill some stuff:
- ReconstructedParticle electron = bestCandidate.getParticles().get(ReconParticleDriver.ELECTRON);
- ReconstructedParticle positron = bestCandidate.getParticles().get(ReconParticleDriver.POSITRON);
- if (electron.getCharge() != -1 || positron.getCharge() != 1) {
- throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
- }
-
- double tEle = TrackUtils.getTrackTime(electron.getTracks().get(0), hitToStrips, hitToRotated);
- double tPos = TrackUtils.getTrackTime(positron.getTracks().get(0), hitToStrips, hitToRotated);
- Hep3Vector pBestV0Rot = VecOp.mult(beamAxisRotation, bestCandidate.getMomentum());
- Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, electron.getMomentum());
- Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, positron.getMomentum());
- Vertex uncVert = bestCandidate.getStartVertex();
- Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, uncVert.getPosition());
-
- trackTime2D.fill(tEle, tPos);
- trackTimeDiff.fill(tEle - tPos);
- vertexZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
- vertexMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
- vertexedTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
- pyEleVspyPos.fill(pEleRot.y(), pPosRot.y());
- pxEleVspxPos.fill(pEleRot.x(), pPosRot.x());
- sumP.fill(bestCandidate.getMomentum().magnitude());
- deltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
-
- vertexPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
- goodVertexMass.fill(bestCandidate.getMass());
- goodVertexZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
- vertexX.fill(v0Vtx.x());
- vertexY.fill(v0Vtx.y());
- vertexZ.fill(v0Vtx.z());
- vertexPx.fill(pBestV0Rot.x());
- vertexPy.fill(pBestV0Rot.y());
- vertexPz.fill(pBestV0Rot.z());
- vertexU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
- vertexV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
-// vertexW.fill(bestCandidate.getMomentum().z()/bestCandidate.getMomentum().magnitude());
-// vertexVZ.fill(v0Vtx.z(), pBestV0Rot.y() / pBestV0Rot.magnitude());
- vertexZY.fill(v0Vtx.y(), v0Vtx.z());
- if (bestCandidate.getMomentum().magnitude() > radCut) {
- vertexedTrackMomentum2DRad.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
- deltaPRad.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
- }
-
+
+ if (!candidateList.isEmpty()) {
+ // pick the best candidate...for now just pick a random one.
+ ReconstructedParticle bestCandidate = candidateList.get((int) (Math.random() * candidateList.size()));
+
+ //fill some stuff:
+ ReconstructedParticle electron = bestCandidate.getParticles().get(ReconParticleDriver.ELECTRON);
+ ReconstructedParticle positron = bestCandidate.getParticles().get(ReconParticleDriver.POSITRON);
+ if (electron.getCharge() != -1 || positron.getCharge() != 1) {
+ throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
+ }
+
+ double tEle = TrackUtils.getTrackTime(electron.getTracks().get(0), hitToStrips, hitToRotated);
+ double tPos = TrackUtils.getTrackTime(positron.getTracks().get(0), hitToStrips, hitToRotated);
+ Hep3Vector pBestV0Rot = VecOp.mult(beamAxisRotation, bestCandidate.getMomentum());
+ Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, electron.getMomentum());
+ Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, positron.getMomentum());
+ Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, bestCandidate.getStartVertex().getPosition());
+
+ triTrackTime2D.fill(tEle, tPos);
+ triTrackTimeDiff.fill(tEle - tPos);
+ triZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
+ triMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
+ triTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
+ triPyEleVsPyPos.fill(pEleRot.y(), pPosRot.y());
+ triPxEleVsPxPos.fill(pEleRot.x(), pPosRot.x());
+ triSumP.fill(bestCandidate.getMomentum().magnitude());
+ triDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
+
+ triPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+ triMass.fill(bestCandidate.getMass());
+ triZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
+ triX.fill(v0Vtx.x());
+ triY.fill(v0Vtx.y());
+ triZ.fill(v0Vtx.z());
+ triPx.fill(pBestV0Rot.x());
+ triPy.fill(pBestV0Rot.y());
+ triPz.fill(pBestV0Rot.z());
+ triU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+ triV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+ triXY.fill(v0Vtx.x(), v0Vtx.y());
+ triZY.fill(v0Vtx.y(), v0Vtx.z());
+ if (bestCandidate.getMomentum().magnitude() > radCut) {
+ triRadTrackTime2D.fill(tEle, tPos);
+ triRadTrackTimeDiff.fill(tEle - tPos);
+ triRadZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
+ triRadMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
+ triRadTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
+ triRadPyEleVsPyPos.fill(pEleRot.y(), pPosRot.y());
+ triRadPxEleVsPxPos.fill(pEleRot.x(), pPosRot.x());
+ triRadSumP.fill(bestCandidate.getMomentum().magnitude());
+ triRadDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
+
+ triRadPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+ triRadMass.fill(bestCandidate.getMass());
+ triRadZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
+ triRadX.fill(v0Vtx.x());
+ triRadY.fill(v0Vtx.y());
+ triRadZ.fill(v0Vtx.z());
+ triRadPx.fill(pBestV0Rot.x());
+ triRadPy.fill(pBestV0Rot.y());
+ triRadPz.fill(pBestV0Rot.z());
+ triRadU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+ triRadV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+ triRadXY.fill(v0Vtx.x(), v0Vtx.y());
+ triRadZY.fill(v0Vtx.y(), v0Vtx.z());
+ }
+ }
+
+ if (!vertCandidateList.isEmpty()) {
+ // pick the best candidate...for now just pick a random one.
+ ReconstructedParticle bestCandidate = vertCandidateList.get((int) (Math.random() * vertCandidateList.size()));
+
+ //fill some stuff:
+ ReconstructedParticle electron = bestCandidate.getParticles().get(ReconParticleDriver.ELECTRON);
+ ReconstructedParticle positron = bestCandidate.getParticles().get(ReconParticleDriver.POSITRON);
+ if (electron.getCharge() != -1 || positron.getCharge() != 1) {
+ throw new RuntimeException("vertex needs e+ and e- but is missing one or both");
+ }
+
+ double tEle = TrackUtils.getTrackTime(electron.getTracks().get(0), hitToStrips, hitToRotated);
+ double tPos = TrackUtils.getTrackTime(positron.getTracks().get(0), hitToStrips, hitToRotated);
+ Hep3Vector pBestV0Rot = VecOp.mult(beamAxisRotation, bestCandidate.getMomentum());
+ Hep3Vector pEleRot = VecOp.mult(beamAxisRotation, electron.getMomentum());
+ Hep3Vector pPosRot = VecOp.mult(beamAxisRotation, positron.getMomentum());
+ Hep3Vector v0Vtx = VecOp.mult(beamAxisRotation, bestCandidate.getStartVertex().getPosition());
+
+ vertTrackTime2D.fill(tEle, tPos);
+ vertTrackTimeDiff.fill(tEle - tPos);
+ vertZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
+ vertMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
+ vertTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
+ vertPyEleVsPyPos.fill(pEleRot.y(), pPosRot.y());
+ vertPxEleVsPxPos.fill(pEleRot.x(), pPosRot.x());
+ vertSumP.fill(bestCandidate.getMomentum().magnitude());
+ vertDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
+
+ vertPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+ vertMass.fill(bestCandidate.getMass());
+ vertZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
+ vertX.fill(v0Vtx.x());
+ vertY.fill(v0Vtx.y());
+ vertZ.fill(v0Vtx.z());
+ vertPx.fill(pBestV0Rot.x());
+ vertPy.fill(pBestV0Rot.y());
+ vertPz.fill(pBestV0Rot.z());
+ vertU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+ vertV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+ vertXY.fill(v0Vtx.x(), v0Vtx.y());
+ vertZY.fill(v0Vtx.y(), v0Vtx.z());
+ if (bestCandidate.getMomentum().magnitude() > radCut) {
+ vertRadTrackTime2D.fill(tEle, tPos);
+ vertRadTrackTimeDiff.fill(tEle - tPos);
+ vertRadZVsMomentum.fill(bestCandidate.getMomentum().magnitude(), v0Vtx.z());
+ vertRadMassMomentum.fill(bestCandidate.getMomentum().magnitude(), bestCandidate.getMass());
+ vertRadTrackMomentum2D.fill(electron.getMomentum().magnitude(), positron.getMomentum().magnitude());
+ vertRadPyEleVsPyPos.fill(pEleRot.y(), pPosRot.y());
+ vertRadPxEleVsPxPos.fill(pEleRot.x(), pPosRot.x());
+ vertRadSumP.fill(bestCandidate.getMomentum().magnitude());
+ vertRadDeltaP.fill(positron.getMomentum().magnitude() - electron.getMomentum().magnitude());
+
+ vertRadPxPy.fill(pBestV0Rot.x(), pBestV0Rot.y());
+ vertRadMass.fill(bestCandidate.getMass());
+ vertRadZVsMass.fill(bestCandidate.getMass(), v0Vtx.z());
+ vertRadX.fill(v0Vtx.x());
+ vertRadY.fill(v0Vtx.y());
+ vertRadZ.fill(v0Vtx.z());
+ vertRadPx.fill(pBestV0Rot.x());
+ vertRadPy.fill(pBestV0Rot.y());
+ vertRadPz.fill(pBestV0Rot.z());
+ vertRadU.fill(pBestV0Rot.x() / pBestV0Rot.magnitude());
+ vertRadV.fill(pBestV0Rot.y() / pBestV0Rot.magnitude());
+ vertRadXY.fill(v0Vtx.x(), v0Vtx.y());
+ vertRadZY.fill(v0Vtx.y(), v0Vtx.z());
+ }
+ }
}
@Override
@@ -469,23 +766,20 @@
}
System.out.println("*******************************");
- System.out.println("TridendMonitoring::Tridend Selection Summary");
+ System.out.println("TridendMonitoring::Tridend Selection Summary: " + (isGBL ? "GBLTrack" : "SeedTrack"));
System.out.println("\t\t\tTridend Selection Summary");
System.out.println("******************************************************************************************");
- System.out.println("Number of V0:\t\t" + nRecoV0 + "\t\t\t" + nRecoV0 / nRecoV0 + "\t\t\t" + nRecoV0 / nRecoV0 + "\t\t\t" + nRecoV0 / nEvents);
- System.out.println("N(particle) Cuts:\t\t" + nPassBasicCuts + "\t\t\t" + nPassBasicCuts / nRecoV0 + "\t\t\t" + nPassBasicCuts / nRecoV0 + "\t\t\t" + nPassBasicCuts / nEvents);
- System.out.println("Trk Quality Cuts:\t\t" + nPassTrkQualityCuts + "\t\t\t" + nPassTrkQualityCuts / nPassBasicCuts + "\t\t\t" + nPassTrkQualityCuts / nRecoV0 + "\t\t\t" + nPassTrkQualityCuts / nEvents);
- System.out.println("V0 Quality Cuts:\t\t" + nPassV0QualityCuts + "\t\t\t" + nPassV0QualityCuts / nPassTrkQualityCuts + "\t\t\t" + nPassV0QualityCuts / nRecoV0 + "\t\t\t" + nPassV0QualityCuts / nEvents);
- System.out.println("V0 Vertex Cuts:\t\t" + nPassV0Cuts + "\t\t\t" + nPassV0Cuts / nPassV0QualityCuts + "\t\t\t" + nPassV0Cuts / nRecoV0 + "\t\t\t" + nPassV0Cuts / nEvents);
- System.out.println("Timing Cuts:\t\t" + nPassTimeCuts + "\t\t\t" + nPassTimeCuts / nPassV0Cuts + "\t\t\t" + nPassTimeCuts / nRecoV0 + "\t\t\t" + nPassTimeCuts / nEvents);
- System.out.println("Tracking Cuts:\t\t" + nPassTrkCuts + "\t\t\t" + nPassTrkCuts / nPassTimeCuts + "\t\t\t" + nPassTrkCuts / nRecoV0 + "\t\t\t" + nPassTrkCuts / nEvents);
- System.out.println("Cluster Cuts:\t\t" + nPassClusterMatchCuts + "\t\t\t" + nPassClusterMatchCuts / nPassTrkCuts + "\t\t\t" + nPassClusterMatchCuts / nRecoV0 + "\t\t\t" + nPassClusterMatchCuts / nEvents);
-
- System.out.println("\t\t\tVertex Selection Summary");
- System.out.println("******************************************************************************************");
- System.out.println("Front Hits Cuts:\t\t" + nPassFrontHitsCuts + "\t\t\t" + nPassFrontHitsCuts / nPassClusterMatchCuts + "\t\t\t" + nPassFrontHitsCuts / nRecoV0 + "\t\t\t" + nPassFrontHitsCuts / nEvents);
- System.out.println("Isolation Cuts:\t\t" + nPassIsoCuts + "\t\t\t" + nPassIsoCuts / nPassFrontHitsCuts + "\t\t\t" + nPassIsoCuts / nRecoV0 + "\t\t\t" + nPassIsoCuts / nEvents);
+ System.out.format("Number of V0:\t%8.0f\t%8.6f\t%8.6f\t%8.6f\n", nRecoV0, nRecoV0 / nRecoV0, nRecoV0 / nRecoV0, nRecoV0 / nEvents);
+
+ for (int i = 0; i < nCuts; i++) {
+ if (i == firstVertexingCut) {
+ System.out.println("******************************************************************************************");
+ System.out.println("\t\t\tVertex Selection Summary");
+ System.out.println("******************************************************************************************");
+ }
+ System.out.format("%-12s Cuts:\t%8.0f\t%8.6f\t%8.6f\t%8.6f\n", cutNames[i], nPassCut[i], nPassCut[i] / (i == 0 ? nRecoV0 : nPassCut[i == 0 ? 0 : (i - 1)]), nPassCut[i] / nRecoV0, nPassCut[i] / nEvents);
+ }
System.out.println("******************************************************************************************");
}
|