Print

Print


Author: [log in to unmask]
Date: Wed Oct 26 07:39:01 2016
New Revision: 4529

Log:
Removed old driver that relied on old trigger diagnostics.

Removed:
    java/trunk/users/src/main/java/org/hps/users/kmccarty/TriggerProcessAnalysisDriver.java
Modified:
    java/trunk/users/src/main/java/org/hps/users/kmccarty/SimpleTriggerPlotsDriver.java
    java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java

Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/SimpleTriggerPlotsDriver.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/SimpleTriggerPlotsDriver.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/SimpleTriggerPlotsDriver.java	Wed Oct 26 07:39:01 2016
@@ -46,11 +46,14 @@
 public class SimpleTriggerPlotsDriver extends Driver {
 	private int nsa = Integer.MIN_VALUE;
 	private int nsb = Integer.MIN_VALUE;
-	private int events = 0;
+	private boolean useDAQConfig = false;
 	private int windowWidth = Integer.MIN_VALUE;
-	private boolean useDAQConfig = false;
+	private String clusterCollectionName = null;
+	private boolean requireLeftRightPair = false;
 	private double energySlopeParam = Double.NaN;
-	private String clusterCollectionName = null;
+	private double pairFEEThreshold = Double.NaN;
+	private double pairTimeThreshold = Double.NaN;
+	private boolean requireFiducialClusters = false;
 	
 	// Define cluster type and cut type reference variables.
 	private static final int CLUSTER_TOTAL_ENERGY  = 0;
@@ -93,25 +96,6 @@
 	// Define plotting objects.
 	private AIDA aida = AIDA.defaultInstance();
 	private static final String BASE_FOLDER_NAME = "Simple Trigger Cut Plots/";
-	
-	/**
-	 * Runs at the end of the run. Calculates the total event time
-	 * processed and scales all trigger cut plots by this value to
-	 * convert their y-axis scale to units of Hertz.
-	 */
-	@Override
-	public void endOfData() {
-		// Determine the total amount of time that was processed. This
-		// is calculated by multiplying the number of events by the size
-		// of the readout window that is not pulse-clipped.
-		double scalingFactor = 1.0 / (events * (windowWidth - nsa - nsb));
-		
-		// Scale each trigger plot by the amount of time it represents
-		// to convert the y-axis scale to units of Hertz.
-		for(int triggerCut = CLUSTER_TOTAL_ENERGY; triggerCut <= PAIR_TIME_COINCIDENCE; triggerCut++) {
-			aida.histogram1D(getTriggerPlotName(triggerCut)).scale(scalingFactor);
-		}
-	}
 	
 	/**
 	 * Runs at the beginning of the run. Instantiates all trigger cut
@@ -204,7 +188,17 @@
         // clipping region.
         List<Cluster> goodClusters = new ArrayList<Cluster>();
         for(Cluster cluster : clusters) {
-        	if(isVerifiable(cluster, nsa, nsb, windowWidth)) { goodClusters.add(cluster); }
+        	// First, check if the cluster is outside the pulse-clipping
+        	// region.
+        	if(isVerifiable(cluster, nsa, nsb, windowWidth)) {
+        		// Next, check that it is fiducial if the fiducial
+        		// requirement is active. If so, add the cluster to
+        		// the list of good clusters. Otherwise, just add the
+        		// the list immediately.
+        		if(!requireFiducialClusters || (requireFiducialClusters && TriggerModule.inFiducialRegion(cluster))) {
+        			goodClusters.add(cluster);
+        		}
+        	}
         }
         
         // Populate the cluster singles plots.
@@ -218,18 +212,47 @@
         List<Cluster[]> pairs = TriggerModule.getTopBottomPairs(clusters, Cluster.class);
         
         // Populate the cluster pair plots.
+        pairPlotsLoop:
         for(Cluster[] pair : pairs) {
+        	// If a left-right cluster pair is required, check that the
+        	// condition is met.
+        	if(requireLeftRightPair) {
+        		boolean hasLeft = (TriggerModule.getClusterXIndex(pair[0]) < 0|| TriggerModule.getClusterXIndex(pair[1]) < 0);
+        		boolean hasRight = (TriggerModule.getClusterXIndex(pair[0]) > 0|| TriggerModule.getClusterXIndex(pair[1]) > 0);
+        		if(!hasLeft || !hasRight) { continue pairPlotsLoop; }
+        	}
+        	
+        	// If FEE clusters are to be excluded, check if any are present.
+        	if(!Double.isNaN(pairFEEThreshold)) {
+        		for(Cluster cluster : pair) {
+        			// The FEE cut only applies to left clusters.
+        			if(TriggerModule.getClusterXIndex(cluster) < 0) {
+        				// The pair is invalid if the cluster has more
+        				// energy than the threshold.
+        				if(TriggerModule.getValueClusterTotalEnergy(cluster) > pairFEEThreshold) {
+        					continue pairPlotsLoop;
+        				}
+        			}
+        		}
+        	}
+        	
+        	// If the time coincidence threshold is active, check that
+        	// the pair meets the requirement.
+        	if(!Double.isNaN(pairTimeThreshold)) {
+        		if(TriggerModule.getValueTimeCoincidence(pair) > pairTimeThreshold) {
+        			continue pairPlotsLoop;
+        		}
+        	}
+        	
+        	// Populate the plots.
         	aida.histogram1D(getTriggerPlotName(PAIR_ENERGY_SUM)).fill(TriggerModule.getValueEnergySum(pair));
         	aida.histogram1D(getTriggerPlotName(PAIR_ENERGY_DIFF)).fill(TriggerModule.getValueEnergyDifference(pair));
         	aida.histogram1D(getTriggerPlotName(PAIR_ENERGY_SLOPE)).fill(TriggerModule.getValueEnergySlope(pair, energySlopeParam));
         	aida.histogram1D(getTriggerPlotName(PAIR_COPLANARITY)).fill(TriggerModule.getValueCoplanarity(pair));
         	aida.histogram1D(getTriggerPlotName(PAIR_TIME_COINCIDENCE)).fill(TriggerModule.getValueTimeCoincidence(pair));
         }
-        
-        // Increment the number of processed events.
-        events++;
 	}
-    
+	
     /**
      * Checks whether all of the hits in a cluster are within the safe
      * region of the FADC output window.
@@ -331,6 +354,44 @@
     	energySlopeParam = value;
     }
     
+    public void setRequireFiducialClusters(boolean state) {
+    	requireFiducialClusters = state;
+    }
+    
+    /**
+     * Sets whether plotted pairs should carry the additional requirement
+     * of having one cluster on the left side of the calorimeter and
+     * one cluster on the right. This is disabled by default.
+     * @param state - <code>true</code> requires one cluster on each
+     * and <code>false</code> does not.
+     */
+    public void setRequireLeftRightPair(boolean state) {
+    	requireLeftRightPair = state;
+    }
+    
+    /**
+     * Defines a threshold for FEE electrons for plotted pair values.
+     * Pairs with a left-side cluster exceeding this value will not be
+     * included in the plots. This can be disabled by setting the value
+     * to <code>Double.NaN</code>. This is the default behavior.
+     * @param value - The threshold above which left-side clusters are
+     * excluded.
+     */
+    public void setPairFEEThreshold(double value) {
+    	pairFEEThreshold = value;
+    }
+    
+    /**
+     * Defines a time-coincidence threshold in which cluster pairs must
+     * fall in order to be plotted. This can be disabled by setting the
+     * value to <code>Double.NaN</code>. This is the default behavior.
+     * @param value - The absolute difference in time clusters must fall
+     * within in order to be plotted in pair plots.
+     */
+    public void setPairTimeThreshold(double value) {
+    	pairTimeThreshold = value;
+    }
+    
     public void setClusterSeedEnergyXMax(double value)   { xMax[CLUSTER_SEED_ENERGY]   = value; }
     public void setClusterTotalEnergyXMax(double value)  { xMax[CLUSTER_TOTAL_ENERGY]  = value; }
     public void setClusterHitCountXMax(double value)     { xMax[CLUSTER_HIT_COUNT]     = value; }

Modified: java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java
 =============================================================================
--- java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java	(original)
+++ java/trunk/users/src/main/java/org/hps/users/kmccarty/plots/AddPlots.java	Wed Oct 26 07:39:01 2016
@@ -182,7 +182,13 @@
             // and add each bin entry to the compiled plot.
             for(int i = 0; i < histogramNames1D.size(); i++) {
                 // Get the histogram object.
-                IHistogram1D histogram = (IHistogram1D) fileTree.find(histogramNames1D.get(i));
+            	IHistogram1D histogram = null;
+                try { histogram = (IHistogram1D) fileTree.find(histogramNames1D.get(i)); }
+                catch(Exception e) {
+                	e.printStackTrace();
+                	System.err.println("Could not find required plot in file " + file.getName());
+                	System.exit(1);
+                }
                 
                 // Iterate over the bins.
                 for(int x = 0; x < xBins1D.get(i); x++) {