Author: [log in to unmask]
Date: Mon Feb 23 16:07:36 2015
New Revision: 2177
Log:
Added some new plots to the trigger diagnostics. These will probably be moved to a different driver eventually.
Modified:
java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerDiagnosticDriver.java
Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerDiagnosticDriver.java
=============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerDiagnosticDriver.java (original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerDiagnosticDriver.java Mon Feb 23 16:07:36 2015
@@ -106,6 +106,13 @@
IHistogram1D sspClusterHitCountPlot;
IHistogram2D sspClusterDistribution;
+ IHistogram1D cyclesRemoved;
+ IHistogram2D cyclesRemovedEnergy;
+ IHistogram2D cyclesRemovedSeed;
+ IHistogram2D[] hitsInCycle = new IHistogram2D[9];
+ IHistogram1D repeatedHitsPlot;
+ IHistogram2D cyclesRemovedEnergyPercent;
+
// Internal state variables.
private static final int STATE_CLUSTER_UNDEFINED = -1;
private static final int STATE_CLUSTER_FAIL_ENERGY = 1;
@@ -140,13 +147,23 @@
clusterEnergyDiffPlotA = aida.histogram1D("Trigger Diagnostics :: All Cluster Energy Difference Distribution", 25, 0.75, 1.25);
reconClusterTotalEnergyPlot = aida.histogram1D("Trigger Diagnostics :: Recon Cluster Total Energy Distribution", 55, 0.0, 2.2);
- reconClusterHitCountPlot= aida.histogram1D("Trigger Diagnostics :: Recon Cluster Hit Count Distribution", 10, 0, 10);
+ reconClusterHitCountPlot= aida.histogram1D("Trigger Diagnostics :: Recon Cluster Hit Count Distribution", 10, -0.5, 9.5);
reconClusterTimePlot = aida.histogram1D("Trigger Diagnostics :: Recon Cluster Time Distribution", 2 * windowWidth / 5, 0, windowWidth);
reconClusterDistribution = aida.histogram2D("Trigger Diagnostics :: Recon Cluster Distribution", 46, -23, 23, 11, -5.5, 5.5);
sspClusterTotalEnergyPlot = aida.histogram1D("Trigger Diagnostics :: SSP Cluster Total Energy Distribution", 55, 0.0, 2.2);
- sspClusterHitCountPlot= aida.histogram1D("Trigger Diagnostics :: SSP Cluster Hit Count Distribution", 10, 0, 10);
+ sspClusterHitCountPlot= aida.histogram1D("Trigger Diagnostics :: SSP Cluster Hit Count Distribution", 10, -0.5, 9.5);
sspClusterDistribution = aida.histogram2D("Trigger Diagnostics :: SSP Cluster Distribution", 46, -23, 23, 11, -5.5, 5.5);
+ cyclesRemoved = aida.histogram1D("Trigger Diagnostics :: Hit Cycles Removed From Seed", 10, -0.5, 9.5);
+ cyclesRemovedEnergy = aida.histogram2D("Trigger Diagnostics :: Energy Percent vs. Clock Cycles Removed", 10, -0.5, 9.5, 100, 0.0, 1.0);
+ cyclesRemovedSeed = aida.histogram2D("Trigger Diagnostics :: Seed Percent vs. Clock Cycles Removed", 10, -0.5, 9.5, 100, 0.0, 1.5);
+
+ repeatedHitsPlot = aida.histogram1D("Trigger Diagnostics :: Repeated Crystal Positions in Cluster", 16, -0.5, 15.5);
+ cyclesRemovedEnergyPercent = aida.histogram2D("Trigger Diagnostics :: Cycle Energy Percent vs. Clock Cycles Removed", 10, -0.5, 9.5, 100, 0.0, 1.0);
+ for(int i = 0; i < hitsInCycle.length; i++) {
+ hitsInCycle[i] = aida.histogram2D("Trigger Diagnostics :: Hits in Cycle vs. Cycles Removed (Cluster Size " + i + ")", 5, -0.5, 4.5, 10, -0.5, 9.5);
+ }
+
// Print the cluster verification header.
System.out.println();
System.out.println();
@@ -364,6 +381,39 @@
if(isVerifiable(reconCluster)) {
reconClusters.add(reconCluster);
println(" [ verifiable ]");
+
+ int repeatedHits = 0;
+ double seedTime = getReconTime(reconCluster);
+ Map<Integer, Double> cycleMap = new HashMap<Integer, Double>();
+ Map<Integer, Integer> hitCountMap = new HashMap<Integer, Integer>();
+ Set<Point> hasHitSet = new HashSet<Point>();
+ for(CalorimeterHit hit : reconCluster.getCalorimeterHits()) {
+ double timeDiff = (hit.getTime() - seedTime) / 4.0;
+ cyclesRemoved.fill(timeDiff);
+ cyclesRemovedEnergy.fill(timeDiff, hit.getCorrectedEnergy() / reconCluster.getEnergy());
+ cyclesRemovedSeed.fill(timeDiff, hit.getCorrectedEnergy() / reconCluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+ Point hitLocation = new Point(hit.getIdentifierFieldValue("ix"), hit.getIdentifierFieldValue("iy"));
+ if(hasHitSet.contains(hitLocation)) { repeatedHits++; }
+ else { hasHitSet.add(hitLocation); }
+ Integer positionHits = hitCountMap.get((int) timeDiff);
+ if(positionHits != null) { hitCountMap.put((int) timeDiff, positionHits + 1); }
+ else { hitCountMap.put((int) timeDiff, 1); }
+ Double cycleEnergy = cycleMap.get((int) timeDiff);
+ if(cycleEnergy != null) { cycleMap.put((int) timeDiff, cycleEnergy + hit.getCorrectedEnergy()); }
+ else { cycleMap.put((int) timeDiff, hit.getCorrectedEnergy()); }
+ }
+ repeatedHitsPlot.fill(repeatedHits);
+ for(Entry<Integer, Double> entry : cycleMap.entrySet()) {
+ cyclesRemovedEnergyPercent.fill(entry.getKey(), entry.getValue());
+ }
+
+ int hitCount = reconCluster.getCalorimeterHits().size() - 1;
+ if(hitCount >= 0 && hitCount < 9) {
+ for(Entry<Integer, Integer> entry : hitCountMap.entrySet()) {
+ hitsInCycle[hitCount].fill(entry.getKey(), entry.getValue());
+ }
+ }
+
} else { println(" [ unverifiable ]"); }
}
|