Author: [log in to unmask] Date: Thu Apr 9 09:12:30 2015 New Revision: 2666 Log: Update some diagnostic plots for the trigger diagnostics. Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/TriggerDiagnosticDriver.java Thu Apr 9 09:12:30 2015 @@ -105,7 +105,7 @@ private boolean printSinglesTriggerInternalFail = true; private boolean printPairTriggerEfficiencyFail = true; private boolean printPairTriggerInternalFail = true; - private int statPrintInterval = 100000; + private int statPrintInterval = Integer.MAX_VALUE; // Cut index arrays for trigger verification. private static final int ENERGY_MIN = TriggerDiagnosticUtil.SINGLES_ENERGY_MIN; @@ -260,6 +260,10 @@ pairCutsEnabled[i][3 + COPLANARITY] = pairs[i].getCoplanarityCutConfig().isEnabled(); } + // Update the trigger plots values. + globalTriggerPlots.setEnergySlopeParamF(0, daq.getSSPConfig().getPair1Config().getEnergySlopeCutConfig().getParameterF()); + globalTriggerPlots.setEnergySlopeParamF(1, daq.getSSPConfig().getPair2Config().getEnergySlopeCutConfig().getParameterF()); + // Print a DAQ configuration settings header. System.out.println(); System.out.println(); @@ -418,9 +422,6 @@ // ========================================================== // ==== Obtain SSP and TI Banks ============================= // ========================================================== - - // Output the event number and information. - OutputLogger.printf("Event Number %d (%d)%n", globalStats.getEventCount(), event.getEventNumber()); // Get the SSP clusters. if(event.hasCollection(GenericObject.class, bankCollectionName)) { @@ -485,6 +486,9 @@ System.err.println("TriggerDiagnosticDriver :: SEVERE WARNING :: TI bank or SSP bank missing from event!"); return; } + + // Output the event number and information. + OutputLogger.printf("Event Number %d (%d)%n", sspBank.getEventNumber(), event.getEventNumber()); @@ -1622,11 +1626,17 @@ // Run the SSP clusters through the singles trigger to determine // whether they pass it or not. for(SSPCluster cluster : sspClusters) { + // Add the cluster to the "NO_CUTS" plots for each singles + // TI bit that is active. + if(tiBank.isSingle0Trigger()) { globalTriggerPlots.sawCluster(0, cluster); } + if(tiBank.isSingle1Trigger()) { globalTriggerPlots.sawCluster(1, cluster); } + triggerLoop: for(int triggerNum = 0; triggerNum < 2; triggerNum++) { - // For a cluster to have formed it is assumed to have passed - // the cluster seed energy cuts. This can not be verified - // since the SSP bank does not report individual hit. + // For a cluster to have formed it is assumed to have + // passed the cluster seed energy cuts. This can not + // be verified since the SSP bank does not report + // individual hit. boolean passSeedLow = true; boolean passSeedHigh = true; @@ -1654,6 +1664,12 @@ continue triggerLoop; } + // If all the trigger cuts passed, plot this trigger + // in the "triggered" plots. + if(trigger.getTriggerState()) { + globalTriggerPlots.passedTrigger(trigger); + } + // If all the necessary checks passed, store the new // trigger for verification. sspSinglesTriggers.get(triggerNum).add(trigger); @@ -1663,6 +1679,11 @@ // Run the reconstructed clusters through the singles trigger // to determine whether they pass it or not. for(Cluster cluster : reconClusters) { + // Add the cluster to the "NO_CUTS" plots for each singles + // TI bit that is active. + if(tiBank.isSingle0Trigger()) { globalTriggerPlots.sawCluster(0, cluster); } + if(tiBank.isSingle1Trigger()) { globalTriggerPlots.sawCluster(1, cluster); } + // Simulate each of the cluster singles triggers. triggerLoop: for(int triggerNum = 0; triggerNum < 2; triggerNum++) { @@ -1694,6 +1715,12 @@ continue triggerLoop; } if(singlesCutsEnabled[triggerNum][HIT_COUNT] && !trigger.getStateHitCount()) { continue triggerLoop; + } + + // If all the trigger cuts passed, plot this trigger + // in the "triggered" plots. + if(trigger.getTriggerState()) { + globalTriggerPlots.passedTrigger(trigger); } // Store the trigger. @@ -1759,6 +1786,12 @@ // destroyed. if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(reconPair)) { continue pairTriggerLoop; + } + + // Add the cluster to the "NO_CUTS" plots for each + // singles TI bit that is active. + if((triggerIndex == 0 && tiBank.isPair0Trigger()) || (triggerIndex == 1 && tiBank.isPair1Trigger())) { + globalTriggerPlots.sawPair(triggerIndex, reconPair); } // For a cluster to have formed it is assumed to have passed @@ -1814,6 +1847,12 @@ continue pairTriggerLoop; } + // If all the trigger cuts passed, plot this trigger + // in the "triggered" plots. + if(trigger.getTriggerState()) { + globalTriggerPlots.passedTrigger(trigger); + } + // Add the trigger to the list. reconPairsTriggers.get(triggerIndex).add(trigger); } @@ -1827,6 +1866,12 @@ // destroyed. if(!pairsTrigger[triggerIndex].pairTimeCoincidenceCut(sspPair)) { continue pairTriggerLoop; + } + + // Add the cluster to the "NO_CUTS" plots for each + // singles TI bit that is active. + if((triggerIndex == 0 && tiBank.isPair0Trigger()) || (triggerIndex == 1 && tiBank.isPair1Trigger())) { + globalTriggerPlots.sawPair(triggerIndex, sspPair); } // For a cluster to have formed it is assumed to have passed @@ -1880,6 +1925,12 @@ continue pairTriggerLoop; } if(pairCutsEnabled[triggerIndex][3 + COPLANARITY] && !trigger.getStateCoplanarity()) { continue pairTriggerLoop; + } + + // If all the trigger cuts passed, plot this trigger + // in the "triggered" plots. + if(trigger.getTriggerState()) { + globalTriggerPlots.passedTrigger(trigger); } // Add the trigger to the list. Modified: java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java ============================================================================= --- java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java (original) +++ java/trunk/analysis/src/main/java/org/hps/analysis/trigger/event/TriggerPlotsModule.java Thu Apr 9 09:12:30 2015 @@ -16,27 +16,31 @@ */ public class TriggerPlotsModule { // Reference variables. - private static final int RECON = 0; - private static final int SSP = 1; - private static final int ALL = 0; - private static final int MATCHED = 1; - private static final int FAILED = 2; + private static final int RECON = 0; + private static final int SSP = 1; + private static final int ALL = 0; + private static final int MATCHED = 1; + private static final int FAILED = 2; + private static final int TRIGGERED = 3; + private static final int NO_CUTS = 4; // Class variables. private final double[] energySlopeParamF; // Plots. private AIDA aida = AIDA.defaultInstance(); - private IHistogram1D[][][] singlesClusterEnergyPlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] singlesHitCountPlot = new IHistogram1D[2][2][3]; - - private IHistogram1D[][][] pairClusterEnergyPlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairHitCountPlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairTimePlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairSumPlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairDiffPlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairSlopePlot = new IHistogram1D[2][2][3]; - private IHistogram1D[][][] pairCoplanarityPlot = new IHistogram1D[2][2][3]; + private IHistogram1D[][][] singlesClusterEnergyPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] singlesHitCountPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] singlesTriggerTimePlot = new IHistogram1D[2][2][5]; + + private IHistogram1D[][][] pairClusterEnergyPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairHitCountPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairTimePlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairSumPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairDiffPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairSlopePlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairCoplanarityPlot = new IHistogram1D[2][2][5]; + private IHistogram1D[][][] pairTriggerTimePlot = new IHistogram1D[2][2][5]; /** * Instantiates a new <code>TriggerPlotsModule</code> that will use @@ -56,7 +60,7 @@ // Define type string values. String[] sourceType = { "Recon", "SSP" }; - String[] resultType = { "All", "Matched", "Failed" }; + String[] resultType = { "All", "Matched", "Failed", "Triggered", "No Cuts" }; // Instantiate the trigger result plots for each trigger. for(int triggerNum = 0; triggerNum < 2; triggerNum++) { @@ -69,12 +73,14 @@ for(int source = 0; source < 2; source++) { // Instantiate the trigger result plots for each type // of trigger match result. - for(int result = 0; result < 3; result++) { + for(int result = 0; result < 5; result++) { // Instantiate the singles trigger plots. - singlesClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Singles Hit Count (%s)", + singlesClusterEnergyPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Singles Cluster Energy (%s)", + singlesDir, sourceType[source], resultType[result]), 300, 0.0, 3.0); + singlesHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Singles Hit Count (%s)", singlesDir, sourceType[source], resultType[result]), 9, 0.5, 9.5); - singlesHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Singles Cluster Energy (%s)", - singlesDir, sourceType[source], resultType[result]), 300, 0.0, 3.0); + singlesTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Singles Trigger Time (%s)", + singlesDir, sourceType[source], resultType[result]), 100, 0, 400); // Instantiate the pair trigger plots. pairHitCountPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Pair Hit Count (%s)", @@ -91,12 +97,57 @@ pairDir, sourceType[source], resultType[result]), 300, 0.0, 3.0); pairCoplanarityPlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Pair Coplanarity (%s)", pairDir, sourceType[source], resultType[result]), 180, 0, 180); + pairTriggerTimePlot[triggerNum][source][result] = aida.histogram1D(String.format("%s/%s Pair Trigger Time (%s)", + pairDir, sourceType[source], resultType[result]), 100, 0, 400); } } } } /** + * Populates the "failed" plots of the appropriate type with the + * cut results from the argument trigger. + * @param trigger - The trigger from which to populate the plots. + */ + public void failedTrigger(Trigger<?> trigger) { + processTrigger(trigger, FAILED); + } + + /** + * Populates the "matched" plots of the appropriate type with the + * cut results from the argument trigger. + * @param trigger - The trigger from which to populate the plots. + */ + public void matchedTrigger(Trigger<?> trigger) { + processTrigger(trigger, MATCHED); + } + + /** + * Populates the "triggered" plots of the appropriate type with the + * cut results from the argument trigger. + * @param trigger - The trigger from which to populate the plots. + */ + public void passedTrigger(Trigger<?> trigger) { + processTrigger(trigger, TRIGGERED); + } + + public void sawCluster(int triggerNum, Cluster cluster) { + processSingles(triggerNum, NO_CUTS, cluster); + } + + public void sawCluster(int triggerNum, SSPCluster cluster) { + processSingles(triggerNum, NO_CUTS, cluster); + } + + public void sawPair(int triggerNum, Cluster[] pair) { + processPair(triggerNum, NO_CUTS, pair); + } + + public void sawPair(int triggerNum, SSPCluster[] pair) { + processPair(triggerNum, NO_CUTS, pair); + } + + /** * Populates the "all" plots of the appropriate type with the cut * results from the argument trigger. * @param trigger - The trigger from which to populate the plots. @@ -106,23 +157,12 @@ } /** - * Populates the "matched" plots of the appropriate type with the - * cut results from the argument trigger. - * @param trigger - The trigger from which to populate the plots. - */ - public void matchedTrigger(Trigger<?> trigger) { - processTrigger(trigger, MATCHED); - } - - /** - * Populates the "failed" plots of the appropriate type with the - * cut results from the argument trigger. - * @param trigger - The trigger from which to populate the plots. - */ - public void failedTrigger(Trigger<?> trigger) { - processTrigger(trigger, FAILED); - } - + * Sets the energy slope conversion factor to be used to calculate + * the energy slope value for plots. + * @param triggerNum - The trigger for which the conversion factor + * should be used. + * @param value - The conversion factor in units of GeV/mm. + */ public void setEnergySlopeParamF(int triggerNum, double value) { // Make sure that the trigger number is valid. if(triggerNum < 0 || triggerNum > 1) { @@ -177,6 +217,7 @@ // Fill the cluster singles plots. singlesHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(cluster)); singlesClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster)); + singlesTriggerTimePlot[triggerNum][RECON][plotType].fill(cluster.getCalorimeterHits().get(0).getTime()); } /** @@ -191,6 +232,7 @@ // Fill the cluster singles plots. singlesHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(cluster)); singlesClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(cluster)); + singlesTriggerTimePlot[triggerNum][SSP][plotType].fill(cluster.getTime()); } /** @@ -207,6 +249,8 @@ pairHitCountPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1])); pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0])); pairClusterEnergyPlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1])); + pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[0].getCalorimeterHits().get(0).getTime()); + pairTriggerTimePlot[triggerNum][RECON][plotType].fill(pair[1].getCalorimeterHits().get(0).getTime()); // Fill the cluster pair plots. pairTimePlot[triggerNum][RECON][plotType].fill(TriggerModule.getValueTimeCoincidence(pair)); @@ -230,6 +274,8 @@ pairHitCountPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterHitCount(pair[1])); pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[0])); pairClusterEnergyPlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueClusterTotalEnergy(pair[1])); + pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[0].getTime()); + pairTriggerTimePlot[triggerNum][SSP][plotType].fill(pair[1].getTime()); // Fill the cluster pair plots. pairTimePlot[triggerNum][SSP][plotType].fill(TriggerModule.getValueTimeCoincidence(pair));