Print

Print


Author: [log in to unmask]
Date: Fri Jan 30 17:08:20 2015
New Revision: 2018

Log:
Purged all tabs from SSPData and related classes. Spaces are no supreme.

Modified:
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCluster.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCosmicTrigger.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPData.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPPairTrigger.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPSinglesTrigger.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTrigger.java
    java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTriggerFactory.java

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCluster.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCluster.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCluster.java	Fri Jan 30 17:08:20 2015
@@ -12,77 +12,77 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public final class SSPCluster {
-	// Cluster definition variables.
-	private final int ix;
-	private final int iy;
-	private final int n;
-	private final int t;
-	private final double e;
-	
-	// Output potential errors or messages.
-	private static Logger logger = LogUtil.create(SSPCluster.class, new BasicFormatter(SSPCluster.class.getSimpleName()));
-	
-	/**
-	 * Creates a new <code>SSPCluster</code> object.
-	 * @param ix - The x-index of the cluster.
-	 * @param iy - The y-index of the cluster.
-	 * @param energy - The cluster energy in MeV.
-	 * @param hits - The cluster hit count.
-	 * @param time - The time at which the cluster occurred in ns.
-	 */
-	public SSPCluster(int ix, int iy, int energy, int hits, int time) {
-		// Make sure that the input values are valid.
-		if(ix == 0 || ix < -23 || ix > 23) {
-			logger.warning(String.format("Received out-of-bounds ix value of %d.", ix));
-		} if(iy == 0 || iy < -5 || iy > 5) {
-			logger.warning(String.format("Received out-of-bounds iy value of %d.", iy));
-		} if(energy < 0) {
-			logger.warning("Received negative energy for cluster.");
-		} if(hits <= 0) {
-			logger.warning("Received cluster with zero or fewer hits.");
-		} if(time < 0) {
-			logger.warning("Received cluster with negative time.");
-		}
-		
-		// Define the cluster parameters.
-		this.ix = ix;
-		this.iy = iy;
-		this.e = energy / 1000.0;
-		this.t = time;
-		this.n = hits;
-		
-		// Indicate that the cluster was made.
-		logger.fine(String.format("Constructed cluster at (%3d, %3d) at time %3d ns with energy %4d MeV and %d hits.",
-				ix, iy, time, energy, hits));
-	}
-	
-	/**
-	 * Gets the x-index of the cluster.
-	 * @return Returns the cluster x-index as an <code>int</code>.
-	 */
-	public int getXIndex() { return ix; }
-	
-	/**
-	 * Gets the y-index of the cluster.
-	 * @return Returns the cluster y-index as an <code>int</code>.
-	 */
-	public int getYIndex() { return iy; }
-	
-	/**
-	 * Gets the number of hits in the cluster.
-	 * @return Returns the cluster hit count as an <code>int</code>.
-	 */
-	public int getHitCount() { return n; }
-	
-	/**
-	 * Gets the cluster time in nanoseconds.
-	 * @return Returns the cluster time as an <code>int</code>.
-	 */
-	public int getTime() { return t; }
-	
-	/**
-	 * Gets the energy of the cluster in GeV.
-	 * @return Returns the cluster energy as a <code>double</code>.
-	 */
-	public double getEnergy() { return e; }
+    // Cluster definition variables.
+    private final int ix;
+    private final int iy;
+    private final int n;
+    private final int t;
+    private final double e;
+    
+    // Output potential errors or messages.
+    private static Logger logger = LogUtil.create(SSPCluster.class, new BasicFormatter(SSPCluster.class.getSimpleName()));
+    
+    /**
+     * Creates a new <code>SSPCluster</code> object.
+     * @param ix - The x-index of the cluster.
+     * @param iy - The y-index of the cluster.
+     * @param energy - The cluster energy in MeV.
+     * @param hits - The cluster hit count.
+     * @param time - The time at which the cluster occurred in ns.
+     */
+    public SSPCluster(int ix, int iy, int energy, int hits, int time) {
+        // Make sure that the input values are valid.
+        if(ix == 0 || ix < -23 || ix > 23) {
+            logger.warning(String.format("Received out-of-bounds ix value of %d.", ix));
+        } if(iy == 0 || iy < -5 || iy > 5) {
+            logger.warning(String.format("Received out-of-bounds iy value of %d.", iy));
+        } if(energy < 0) {
+            logger.warning("Received negative energy for cluster.");
+        } if(hits <= 0) {
+            logger.warning("Received cluster with zero or fewer hits.");
+        } if(time < 0) {
+            logger.warning("Received cluster with negative time.");
+        }
+        
+        // Define the cluster parameters.
+        this.ix = ix;
+        this.iy = iy;
+        this.e = energy / 1000.0;
+        this.t = time;
+        this.n = hits;
+        
+        // Indicate that the cluster was made.
+        logger.fine(String.format("Constructed cluster at (%3d, %3d) at time %3d ns with energy %4d MeV and %d hits.",
+                ix, iy, time, energy, hits));
+    }
+    
+    /**
+     * Gets the x-index of the cluster.
+     * @return Returns the cluster x-index as an <code>int</code>.
+     */
+    public int getXIndex() { return ix; }
+    
+    /**
+     * Gets the y-index of the cluster.
+     * @return Returns the cluster y-index as an <code>int</code>.
+     */
+    public int getYIndex() { return iy; }
+    
+    /**
+     * Gets the number of hits in the cluster.
+     * @return Returns the cluster hit count as an <code>int</code>.
+     */
+    public int getHitCount() { return n; }
+    
+    /**
+     * Gets the cluster time in nanoseconds.
+     * @return Returns the cluster time as an <code>int</code>.
+     */
+    public int getTime() { return t; }
+    
+    /**
+     * Gets the energy of the cluster in GeV.
+     * @return Returns the cluster energy as a <code>double</code>.
+     */
+    public double getEnergy() { return e; }
 }

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCosmicTrigger.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCosmicTrigger.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPCosmicTrigger.java	Fri Jan 30 17:08:20 2015
@@ -1,5 +1,4 @@
 package org.hps.readout.ecal.triggerbank;
-
 
 /**
  * Class <code>SSPCosmicTrigger</code> represents an SSP trigger for
@@ -8,32 +7,32 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPCosmicTrigger extends SSPTrigger {
-	/**
-	 * Instantiates a new <code>SSPCosmicTrigger</code>.
-	 * @param isTop - Indicates whether this trigger was caused by the
-	 * top crate in the SSP or not.
-	 * @param time - The time at which the trigger occurred.
-	 */
-	public SSPCosmicTrigger(boolean isTop, int time) {
-		// Instantiate the superclass object.
-		super(isTop ? SSPData.TRIG_TYPE_COSMIC_TOP : SSPData.TRIG_TYPE_COSMIC_BOT, time, 0);
-	}
-	
-	/**
-	 * Indicates whether the trigger was reported by the bottom SSP
-	 * crate or not.
-	 * @return Returns <code>true</code> if the trigger was reported
-	 * by the bottom crate and <code>false</code> if it was reported
-	 * by the top crate.
-	 */
-	public boolean isBottom() { return type == SSPData.TRIG_TYPE_COSMIC_BOT; }
-	
-	/**
-	 * Indicates whether the trigger was reported by the top SSP
-	 * crate or not.
-	 * @return Returns <code>true</code> if the trigger was reported
-	 * by the top crate and <code>false</code> if it was reported by
-	 * the bottom crate.
-	 */
-	public boolean isTop() { return type == SSPData.TRIG_TYPE_COSMIC_TOP; }
-}
+    /**
+     * Instantiates a new <code>SSPCosmicTrigger</code>.
+     * @param isTop - Indicates whether this trigger was caused by the
+     * top crate in the SSP or not.
+     * @param time - The time at which the trigger occurred.
+     */
+    public SSPCosmicTrigger(boolean isTop, int time) {
+        // Instantiate the superclass object.
+        super(isTop ? SSPData.TRIG_TYPE_COSMIC_TOP : SSPData.TRIG_TYPE_COSMIC_BOT, time, 0);
+    }
+    
+    /**
+     * Indicates whether the trigger was reported by the bottom SSP
+     * crate or not.
+     * @return Returns <code>true</code> if the trigger was reported
+     * by the bottom crate and <code>false</code> if it was reported
+     * by the top crate.
+     */
+    public boolean isBottom() { return type == SSPData.TRIG_TYPE_COSMIC_BOT; }
+    
+    /**
+     * Indicates whether the trigger was reported by the top SSP
+     * crate or not.
+     * @return Returns <code>true</code> if the trigger was reported
+     * by the top crate and <code>false</code> if it was reported by
+     * the bottom crate.
+     */
+    public boolean isTop() { return type == SSPData.TRIG_TYPE_COSMIC_TOP; }
+}

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPData.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPData.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPData.java	Fri Jan 30 17:08:20 2015
@@ -15,7 +15,7 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPData extends AbstractIntData {
-	// The EVIO header tag for SSP trigger banks.
+    // The EVIO header tag for SSP trigger banks.
     public static final int BANK_TAG = 0xe10c;
     
     // EVIO 5-bit word identifiers for cluster parameters.
@@ -72,38 +72,38 @@
     @Override
     protected final void decodeData() {
         // Parse over the integer EVIO words and handle each type. Block
-    	// headers and block trailers can be ignored because these are
-    	// disentangled in the secondary CODA readout list.
+        // headers and block trailers can be ignored because these are
+        // disentangled in the secondary CODA readout list.
         for (int ii = 0; ii < bank.length; ii++) {
             // Process the event number.
             if (((bank[ii] >> 27) & (0x1f)) == TRIG_HEADER) {
-            	eventNumber = bank[ii] & 0x7FFFFFF;
+                eventNumber = bank[ii] & 0x7FFFFFF;
             }
             
             // Process the trigger time.
             else if (((bank[ii] >> 27) & (0x1f)) == TRIG_TIME) {
-            	triggerTime = (bank[ii + 1] << 24) | (bank[ii] & 0xffffff);
+                triggerTime = (bank[ii + 1] << 24) | (bank[ii] & 0xffffff);
             }
             
             // Process SSP trigger data.
             else if (((bank[ii] >> 27) & (0x1f)) == TRIG_TYPE) {
-            	// Parse the trigger information. Note that type is
-            	// the trigger identification bits and ranges from
-            	// zero to seven.
-            	int type = (bank[ii] >> 23) & 0xf;
-            	int data = (bank[ii] >> 16) & 0x7f;
-            	int time = (bank[ii]) & 0x3ff; 
+                // Parse the trigger information. Note that type is
+                // the trigger identification bits and ranges from
+                // zero to seven.
+                int type = (bank[ii] >> 23) & 0xf;
+                int data = (bank[ii] >> 16) & 0x7f;
+                int time = (bank[ii]) & 0x3ff; 
                 
                 // Create an SSPTrigger and add it to the list.
-            	SSPTrigger trigger = SSPTriggerFactory.makeTrigger(type, time * 4, data);
-            	triggerList.add(trigger);
+                SSPTrigger trigger = SSPTriggerFactory.makeTrigger(type, time * 4, data);
+                triggerList.add(trigger);
             }
             
             // Process SSP clusters.
             else if (((bank[ii] >> 27) & (0x1f)) == CLUSTER_TYPE) {
                 // Get the number of hits in the cluster and add it
-            	// to the cluster hits list.
-            	int hits = (bank[ii] >> 23) & 0xf;
+                // to the cluster hits list.
+                int hits = (bank[ii] >> 23) & 0xf;
                 
                 // Get the cluster energy (which is in MeV) and add it
                 // to the cluster energy list.
@@ -115,12 +115,12 @@
                 // If the first bit of the index is 1, then it is a
                 // negative number and needs to be converted using
                 // two's complement to get the proper value.
-                if(((iy >> 3) & 0x1) == 0x1) {  	
-                	// Perform the two's complement. ('^' is the bit
-                	// wise inversion operator).
-                	iy = iy ^ (0xf);
-                	iy += 1;
-                	iy *=-1;
+                if(((iy >> 3) & 0x1) == 0x1) {      
+                    // Perform the two's complement. ('^' is the bit
+                    // wise inversion operator).
+                    iy = iy ^ (0xf);
+                    iy += 1;
+                    iy *=-1;
                 }
                 
                 // Get the x-index of the cluster.
@@ -130,17 +130,17 @@
                 // negative number and needs to be converted using
                 // two's complement to get the proper value.
                 if(((ix >> 5) & 0x1) == 0x1) {
-                	// Perform the two's complement. ('^' is the bit
-                	// wise inversion operator).
-                	ix = ix ^ (0x3f);
-                	ix += 1;
-                	ix *=-1;
-                	
-                	// Values are encoded from -22 to 23; since LCSIM
-                	// defines them from -23 to -1 and 1 to 23, negative
-                	// values need to be shifted down by an additional
-                	// step to be accurate.
-                	ix -= 1;
+                    // Perform the two's complement. ('^' is the bit
+                    // wise inversion operator).
+                    ix = ix ^ (0x3f);
+                    ix += 1;
+                    ix *=-1;
+                    
+                    // Values are encoded from -22 to 23; since LCSIM
+                    // defines them from -23 to -1 and 1 to 23, negative
+                    // values need to be shifted down by an additional
+                    // step to be accurate.
+                    ix -= 1;
                 }
                 
                 // Get the cluster time. Time is 4 ns clock-cycles.
@@ -148,8 +148,8 @@
                 
                 // Create an SSPCluster from the parsed information
                 // and add it to the cluster list.
-            	SSPCluster cluster = new SSPCluster(ix, iy, energy, hits, time * 4);
-            	clusterList.add(cluster);
+                SSPCluster cluster = new SSPCluster(ix, iy, energy, hits, time * 4);
+                clusterList.add(cluster);
             }
         }
     }
@@ -160,7 +160,7 @@
      * of <code>SSPCluster</code> objects.
      */
     public List<SSPCluster> getClusters() {
-    	return clusterList;
+        return clusterList;
     }
     
     /**
@@ -170,7 +170,7 @@
      * subclass they are, as appropriate to their type code.
      */
     public List<SSPTrigger> getTriggers() {
-    	return triggerList;
+        return triggerList;
     }
     
     /**
@@ -185,77 +185,88 @@
      */
     public int getEventNumber() { return eventNumber; }
     
-    /*
-     * Returns the trigger time, relative to the SSP window, of the
-     * FIRST Cluster singles trigger (0/1) (any crate). Returns in ns.
-     */
     // TODO: Get information from Andrea on what this is for. It seems
     //       to be something specialized. Maybe it should be placed in
     //       the analysis driver in which it is used?
+    /**
+     * Gets the first singles trigger that occurred in either crate.
+     * If no singles triggered occurred, a value of <code>1025 * 4 =
+     * 4100</code> will be returned.
+     * @return Returns the time in nanoseconds of the earliest singles
+     * trigger that occurred, or <code>4100</code> if no singles trigger
+     * has occurred.
+     */
     @Deprecated
     public int getOrTrig() {
-        int TopTime = this.getTopTrig();
-        int BotTime = this.getBotTrig();
-
-        if (TopTime <= BotTime) {
-            return TopTime;
-        } else {
-            return BotTime;
-        }
-    }
-    
-    /*
-     * Returns the trigger time, relative to the SSP window, of the
-     * FIRST Cluster singles trigger (0/1) from TOP crate. Returns in ns.
-     */
+        // Get the earliest time for both the top and bottom triggers.
+        int topTime = getTopTrig();
+        int bottomTime = getBotTrig();
+        
+        // Return whichever crate had the earliest trigger.
+        if (topTime <= bottomTime) { return topTime; }
+        else { return bottomTime; }
+    }
+    
     // TODO: Get information from Andrea on what this is for. It seems
     //       to be something specialized. Maybe it should be placed in
     //       the analysis driver in which it is used?
+    /**
+     * Gets the first singles trigger that occurred in the top crate.
+     * If no singles triggered occurred, a value of <code>1025 * 4 =
+     * 4100</code> will be returned.
+     * @return Returns the time in nanoseconds of the earliest singles
+     * trigger that occurred, or <code>4100</code> if no singles trigger
+     * has occurred.
+     */
     @Deprecated
     public int getTopTrig() {
-    	// Store the smallest found time. The time is a 10 bit value,
-    	// so it must always be less than 1024. Multiply by 4 to convert
-    	// from clock-cycles to nanoseconds.
+        // Store the smallest found time. The time is a 10 bit value,
+        // so it must always be less than 1024. Multiply by 4 to convert
+        // from clock-cycles to nanoseconds.
         int topTime = 1025 * 4;
         
         // Iterate over all triggers.
         for(SSPTrigger trigger : triggerList) {
-        	// Select only singles triggers from the top crate.
-        	if(trigger instanceof SSPSinglesTrigger && ((SSPSinglesTrigger) trigger).isTop()) {
-        		// Store the smallest trigger time found.
-        		if(trigger.getTime() < topTime) {
-        			topTime = trigger.getTime();
-        		}
-        	}
+            // Select only singles triggers from the top crate.
+            if(trigger instanceof SSPSinglesTrigger && ((SSPSinglesTrigger) trigger).isTop()) {
+                // Store the smallest trigger time found.
+                if(trigger.getTime() < topTime) {
+                    topTime = trigger.getTime();
+                }
+            }
         }
         
         // Return the smallest found time.
         return topTime;
     }
     
-    /*
-     * Returns the trigger time, relative to the SSP window, of the
-     * FIRST Cluster singles trigger (0/1) from BOT crate. Returns in ns.
-     */
     // TODO: Get information from Andrea on what this is for. It seems
     //       to be something specialized. Maybe it should be placed in
     //       the analysis driver in which it is used?
+    /**
+     * Gets the first singles trigger that occurred in the bottom crate.
+     * If no singles triggered occurred, a value of <code>1025 * 4 =
+     * 4100</code> will be returned.
+     * @return Returns the time in nanoseconds of the earliest singles
+     * trigger that occurred, or <code>4100</code> if no singles trigger
+     * has occurred.
+     */
     @Deprecated
     public int getBotTrig() {
-    	// Store the smallest found time. The time is a 10 bit value,
-    	// so it must always be less than 1024. Multiply by 4 to convert
-    	// from clock-cycles to nanoseconds.
+        // Store the smallest found time. The time is a 10 bit value,
+        // so it must always be less than 1024. Multiply by 4 to convert
+        // from clock-cycles to nanoseconds.
         int bottomTime = 1025 * 4;
         
         // Iterate over all triggers.
         for(SSPTrigger trigger : triggerList) {
-        	// Select only singles triggers from the bottom crate.
-        	if(trigger instanceof SSPSinglesTrigger && ((SSPSinglesTrigger) trigger).isBottom()) {
-        		// Store the smallest trigger time found.
-        		if(trigger.getTime() < bottomTime) {
-        			bottomTime = trigger.getTime();
-        		}
-        	}
+            // Select only singles triggers from the bottom crate.
+            if(trigger instanceof SSPSinglesTrigger && ((SSPSinglesTrigger) trigger).isBottom()) {
+                // Store the smallest trigger time found.
+                if(trigger.getTime() < bottomTime) {
+                    bottomTime = trigger.getTime();
+                }
+            }
         }
         
         // Return the smallest found time.
@@ -266,6 +277,6 @@
     //        is also not used anywhere.
     @Deprecated
     public int getAndTrig() {
-    	return 0;
-    }
-}
+        return 0;
+    }
+}

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPPairTrigger.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPPairTrigger.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPPairTrigger.java	Fri Jan 30 17:08:20 2015
@@ -8,54 +8,54 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPPairTrigger extends SSPTrigger {
-	/**
-	 * Instantiates a new <code>SSPPairTrigger</code>.
-	 * @param isFirstTrigger - Indicates whether the first or second
-	 * trigger produced this trigger.
-	 * @param time - The time at which the trigger occurred.
-	 * @param data - The trigger data associated with the trigger.
-	 */
-	public SSPPairTrigger(boolean isFirstTrigger, int time, int data) {
-		super(isFirstTrigger ? SSPData.TRIG_TYPE_PAIR0 : SSPData.TRIG_TYPE_PAIR1, time, data);
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the pair energy sum cut
-	 * or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutEnergySum() {
-		return (data & 1) == 1;
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the pair energy difference
-	 * cut or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutEnergyDifference() {
-		return ((data & 2) >> 1) == 1;
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the pair energy slope cut
-	 * or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutEnergySlope() {
-		return ((data & 4) >> 2) == 1;
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the pair coplanarity cut
-	 * or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutCoplanarity() {
-		return ((data & 8) >> 3) == 1;
-	}
-}
+    /**
+     * Instantiates a new <code>SSPPairTrigger</code>.
+     * @param isFirstTrigger - Indicates whether the first or second
+     * trigger produced this trigger.
+     * @param time - The time at which the trigger occurred.
+     * @param data - The trigger data associated with the trigger.
+     */
+    public SSPPairTrigger(boolean isFirstTrigger, int time, int data) {
+        super(isFirstTrigger ? SSPData.TRIG_TYPE_PAIR0 : SSPData.TRIG_TYPE_PAIR1, time, data);
+    }
+    
+    /**
+     * Indicates whether the trigger passed the pair energy sum cut
+     * or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutEnergySum() {
+        return (data & 1) == 1;
+    }
+    
+    /**
+     * Indicates whether the trigger passed the pair energy difference
+     * cut or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutEnergyDifference() {
+        return ((data & 2) >> 1) == 1;
+    }
+    
+    /**
+     * Indicates whether the trigger passed the pair energy slope cut
+     * or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutEnergySlope() {
+        return ((data & 4) >> 2) == 1;
+    }
+    
+    /**
+     * Indicates whether the trigger passed the pair coplanarity cut
+     * or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutCoplanarity() {
+        return ((data & 8) >> 3) == 1;
+    }
+}

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPSinglesTrigger.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPSinglesTrigger.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPSinglesTrigger.java	Fri Jan 30 17:08:20 2015
@@ -8,72 +8,72 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPSinglesTrigger extends SSPTrigger {
-	/**
-	 * Instantiates a new <code>SSPSinglesTrigger</code> object.
-	 * @param isTrigger0 - Indicates whether this is the first or second
-	 * of the singles triggers.
-	 * @param isTop - Indicates whether this trigger was thrown by the
-	 * top or the bottom SSP crate.
-	 * @param time - Indicates at what time the trigger occurred in ns.
-	 * @param data - The raw trigger data associated with this trigger.
-	 */
-	public SSPSinglesTrigger(boolean isTrigger0, boolean isTop, int time, int data) {
-		// Initialize the superclass object.
-		super(isTop ?
-				(isTrigger0 ? SSPData.TRIG_TYPE_SINGLES0_TOP : SSPData.TRIG_TYPE_SINGLES1_TOP) :
-				(isTrigger0 ? SSPData.TRIG_TYPE_SINGLES0_BOT : SSPData.TRIG_TYPE_SINGLES1_BOT),
-				time, data);
-	}
-	
-	/**
-	 * Indicates whether the trigger was reported by the bottom SSP
-	 * crate or not.
-	 * @return Returns <code>true</code> if the trigger was reported
-	 * by the bottom crate and <code>false</code> if it was reported
-	 * by the top crate.
-	 */
-	public boolean isBottom() {
-		return (type == SSPData.TRIG_TYPE_SINGLES0_BOT || type == SSPData.TRIG_TYPE_SINGLES1_BOT);
-	}
-	
-	/**
-	 * Indicates whether the trigger was reported by the top SSP
-	 * crate or not.
-	 * @return Returns <code>true</code> if the trigger was reported
-	 * by the top crate and <code>false</code> if it was reported by
-	 * the bottom crate.
-	 */
-	public boolean isTop() {
-		return (type == SSPData.TRIG_TYPE_SINGLES0_TOP || type == SSPData.TRIG_TYPE_SINGLES1_TOP);
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the cluster total energy
-	 * lower bound cut or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutEnergyMin() {
-		return (data & 1) == 1;
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the cluster total energy
-	 * upper bound cut or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutEnergyMax() {
-		return ((data & 2) >> 1) == 1;
-	}
-	
-	/**
-	 * Indicates whether the trigger passed the cluster hit count cut
-	 * or not.
-	 * @return Returns <code>true</code> if the cut passed and
-	 * <code>false</code> otherwise.
-	 */
-	public boolean passCutHitCount() {
-		return ((data & 4) >> 2) == 1;
-	}
+    /**
+     * Instantiates a new <code>SSPSinglesTrigger</code> object.
+     * @param isTrigger0 - Indicates whether this is the first or second
+     * of the singles triggers.
+     * @param isTop - Indicates whether this trigger was thrown by the
+     * top or the bottom SSP crate.
+     * @param time - Indicates at what time the trigger occurred in ns.
+     * @param data - The raw trigger data associated with this trigger.
+     */
+    public SSPSinglesTrigger(boolean isTrigger0, boolean isTop, int time, int data) {
+        // Initialize the superclass object.
+        super(isTop ?
+                (isTrigger0 ? SSPData.TRIG_TYPE_SINGLES0_TOP : SSPData.TRIG_TYPE_SINGLES1_TOP) :
+                (isTrigger0 ? SSPData.TRIG_TYPE_SINGLES0_BOT : SSPData.TRIG_TYPE_SINGLES1_BOT),
+                time, data);
+    }
+    
+    /**
+     * Indicates whether the trigger was reported by the bottom SSP
+     * crate or not.
+     * @return Returns <code>true</code> if the trigger was reported
+     * by the bottom crate and <code>false</code> if it was reported
+     * by the top crate.
+     */
+    public boolean isBottom() {
+        return (type == SSPData.TRIG_TYPE_SINGLES0_BOT || type == SSPData.TRIG_TYPE_SINGLES1_BOT);
+    }
+    
+    /**
+     * Indicates whether the trigger was reported by the top SSP
+     * crate or not.
+     * @return Returns <code>true</code> if the trigger was reported
+     * by the top crate and <code>false</code> if it was reported by
+     * the bottom crate.
+     */
+    public boolean isTop() {
+        return (type == SSPData.TRIG_TYPE_SINGLES0_TOP || type == SSPData.TRIG_TYPE_SINGLES1_TOP);
+    }
+    
+    /**
+     * Indicates whether the trigger passed the cluster total energy
+     * lower bound cut or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutEnergyMin() {
+        return (data & 1) == 1;
+    }
+    
+    /**
+     * Indicates whether the trigger passed the cluster total energy
+     * upper bound cut or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutEnergyMax() {
+        return ((data & 2) >> 1) == 1;
+    }
+    
+    /**
+     * Indicates whether the trigger passed the cluster hit count cut
+     * or not.
+     * @return Returns <code>true</code> if the cut passed and
+     * <code>false</code> otherwise.
+     */
+    public boolean passCutHitCount() {
+        return ((data & 4) >> 2) == 1;
+    }
 }

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTrigger.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTrigger.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTrigger.java	Fri Jan 30 17:08:20 2015
@@ -13,52 +13,52 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPTrigger {
-	// Trigger data.
-	protected final int type;
-	protected final int time;
-	protected final int data;
-	
-	// Logger to output status messages.
-	protected static Logger logger = LogUtil.create(SSPTrigger.class, new BasicFormatter(SSPTrigger.class.getSimpleName()));
-	
-	/**
-	 * Instantiates a new <code>SSPTrigger</code> with the indicated
-	 * trigger data.
-	 * @param type - The type of trigger.
-	 * @param time - The time at which the trigger occurred in ns.
-	 * @param data - The trigger bit data.
-	 */
-	public SSPTrigger(int type, int time, int data) {
-		// Log any issues with processing the trigger.
-		if(!SSPTriggerFactory.isKnownTriggerType(type)) {
-			logger.warning(String.format("Trigger type %d is not recognized.", type));
-		}
-		
-		// Store the trigger data.
-		this.type = type;
-		this.time = time;
-		this.data = data;
-		
-		// Note that a trigger was made.
-		logger.fine(String.format("Constructed trigger of type %d occurred at time %3d with data %d.",
-				type, time, data));
-	}
-	
-	/**
-	 * Gets the raw, unparsed trigger data bank for this trigger.
-	 * @return Returns the trigger data bank as an <code>int</code>.
-	 */
-	public int getData() { return data; }
-	
-	/**
-	 * Gets the type code for the trigger.
-	 * @return Returns the trigger type as an <code>int</code>.
-	 */
-	public int getType() { return type; }
-	
-	/**
-	 * Gets the time at which the trigger occurred.
-	 * @return Returns the trigger time as an <code>int</code>.
-	 */
-	public int getTime() { return time; }
-}
+    // Trigger data.
+    protected final int type;
+    protected final int time;
+    protected final int data;
+    
+    // Logger to output status messages.
+    protected static Logger logger = LogUtil.create(SSPTrigger.class, new BasicFormatter(SSPTrigger.class.getSimpleName()));
+    
+    /**
+     * Instantiates a new <code>SSPTrigger</code> with the indicated
+     * trigger data.
+     * @param type - The type of trigger.
+     * @param time - The time at which the trigger occurred in ns.
+     * @param data - The trigger bit data.
+     */
+    public SSPTrigger(int type, int time, int data) {
+        // Log any issues with processing the trigger.
+        if(!SSPTriggerFactory.isKnownTriggerType(type)) {
+            logger.warning(String.format("Trigger type %d is not recognized.", type));
+        }
+        
+        // Store the trigger data.
+        this.type = type;
+        this.time = time;
+        this.data = data;
+        
+        // Note that a trigger was made.
+        logger.fine(String.format("Constructed trigger of type %d occurred at time %3d with data %d.",
+                type, time, data));
+    }
+    
+    /**
+     * Gets the raw, unparsed trigger data bank for this trigger.
+     * @return Returns the trigger data bank as an <code>int</code>.
+     */
+    public int getData() { return data; }
+    
+    /**
+     * Gets the type code for the trigger.
+     * @return Returns the trigger type as an <code>int</code>.
+     */
+    public int getType() { return type; }
+    
+    /**
+     * Gets the time at which the trigger occurred.
+     * @return Returns the trigger time as an <code>int</code>.
+     */
+    public int getTime() { return time; }
+}

Modified: java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTriggerFactory.java
 =============================================================================
--- java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTriggerFactory.java	(original)
+++ java/trunk/ecal-readout-sim/src/main/java/org/hps/readout/ecal/triggerbank/SSPTriggerFactory.java	Fri Jan 30 17:08:20 2015
@@ -10,187 +10,187 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class SSPTriggerFactory {
-	/**
-	 * Creates an <code>SSPTrigger</code> object representing the given
-	 * trigger information. If the trigger type is unknown, this creates
-	 * a <code>SSPTrigger</code> object. Otherwise, an object for the
-	 * appropriate type of trigger is generated which will provide trigger
-	 * data parsing options.
-	 * @param type - The type of trigger.
-	 * @param time - The time at which the trigger occurred in ns.
-	 * @param data - The trigger data.
-	 * @return Returns an <code>SSPTrigger</code> object. This may be
-	 * a subclass appropriate to the trigger type.
-	 */
-	public static final SSPTrigger makeTrigger(int type, int time, int data) {
-		// Check for cosmic triggers.
-		if(isCosmicTrigger(type)) {
-			return new SSPCosmicTrigger(isTopTrigger(type), time);
-		}
-		
-		// Check for singles triggers.
-		else if(isSinglesTrigger(type)) {
-			return new SSPSinglesTrigger(isFirstTrigger(type), isTopTrigger(type), time, data);
-		}
-		
-		// Check for pair triggers.
-		else if(isPairTrigger(type)) {
-			return new SSPPairTrigger(isFirstTrigger(type), time, data);
-		}
-		
-		// Otherwise, this is an unknown trigger type.
-		else {
-			return new SSPTrigger(type, time, data);
-		}
-	}
-	
-	/**
-	 * Indicates whether the trigger type is a cosmic trigger.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if the trigger is a cosmic
-	 * trigger and <code>false</code> otherwise.
-	 */
-	public static final boolean isCosmicTrigger(int type) {
-		return (type == SSPData.TRIG_TYPE_COSMIC_BOT) || (type == SSPData.TRIG_TYPE_COSMIC_TOP);
-	}
-	
-	/**
-	 * Indicates whether the trigger type is a singles trigger.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if the trigger is a singles
-	 * trigger and <code>false</code> otherwise.
-	 */
-	public static final boolean isSinglesTrigger(int type) {
-		return (type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
-				(type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
-	}
-	
-	/**
-	 * Indicates whether the trigger type is a pair trigger.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if the trigger is a pair
-	 * trigger and <code>false</code> otherwise.
-	 */
-	public static final boolean isPairTrigger(int type) {
-		return (type == SSPData.TRIG_TYPE_PAIR0) || (type == SSPData.TRIG_TYPE_PAIR1);
-	}
-	
-	/**
-	 * Indicates whether this is the first trigger of a set of two
-	 * triggers of the same type. This always returns <code>true</code>
-	 * for cosmic triggers, since there is only one. It always returns
-	 * <code>false</code> for unknown trigger types.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if this is the first trigger
-	 * in a set of two and <code>false</code> otherwise.
-	 */
-	public static final boolean isFirstTrigger(int type) {
-		// There is only one cosmic trigger, so all cosmic triggers
-		// are the first trigger.
-		if(isCosmicTrigger(type)) { return true; }
-		
-		// Otherwise, singles trigger 0 (either top or bottom) and
-		// pair trigger 0 are first triggers.
-		else if((type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
-					(type == SSPData.TRIG_TYPE_PAIR0)) {
-			return true;
-		}
-		
-		// Anything else is not a first trigger.
-		else {
-			return false;
-		}
-	}
-	
-	/**
-	 * Indicates whether this is the second trigger of a set of two
-	 * triggers of the same type. This always returns <code>false</code>
-	 * for cosmic triggers, since there is only one. It also always
-	 * returns <code>false</code> for unknown trigger types.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if this is the second trigger
-	 * in a set of two and <code>false</code> otherwise.
-	 */
-	public static final boolean isSecondTrigger(int type) {
-		// There is only one cosmic trigger, so no cosmic triggers
-		// are the second trigger.
-		if(isCosmicTrigger(type)) { return false; }
-		
-		// Otherwise, singles trigger 1 (either top or bottom) and
-		// pair trigger 1 are second triggers.
-		else if((type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP) ||
-					(type == SSPData.TRIG_TYPE_PAIR1)) {
-			return true;
-		}
-		
-		// Anything else is not a second trigger.
-		else { return false; }
-	}
-	
-	/**
-	 * Indicates whether this trigger originated in the top SPP crate.
-	 * This always returns <code>true</code> for pair triggers, as they
-	 * require both crates, and always returns false for unknown trigger
-	 * types.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if this trigger originated
-	 * in the top crate and <code>false</code> otherwise.
-	 */
-	public static final boolean isTopTrigger(int type) {
-		// Pair triggers require both crates, so this is always true
-		// for all triggers of that type.
-		if(isPairTrigger(type)) { return true; }
-		
-		// For singles and cosmic triggers, check the type.
-		else if((type == SSPData.TRIG_TYPE_COSMIC_TOP) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
-				(type == SSPData.TRIG_TYPE_SINGLES1_TOP)) {
-			return true;
-		}
-		
-		// Otherwise, this is not a (known) top trigger.
-		else { return false; }
-	}
-	
-	/**
-	 * Indicates whether this trigger originated in the bottom SPP crate.
-	 * This always returns <code>true</code> for pair triggers, as they
-	 * require both crates, and always returns false for unknown trigger
-	 * types.
-	 * @param type - The trigger type.
-	 * @return Returns <code>true</code> if this trigger originated
-	 * in the bottom crate and <code>false</code> otherwise.
-	 */
-	public static final boolean isBottomTrigger(int type) {
-		// Pair triggers require both crates, so this is always true
-		// for all triggers of that type.
-		if(isPairTrigger(type)) { return true; }
-		
-		// For singles and cosmic triggers, check the type.
-		else if((type == SSPData.TRIG_TYPE_COSMIC_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_BOT) ||
-				(type == SSPData.TRIG_TYPE_SINGLES1_BOT)) {
-			return true;
-		}
-		
-		// Otherwise, this is not a (known) bottom trigger.
-		else { return false; }
-	}
-	
-	/**
-	 * Checks whether the trigger type is from a recognized trigger.
-	 * @param type - The type code.
-	 * @return Returns <code>true</code> if the trigger type is of a
-	 * recognized type and returns <code>false</code> if it is not.
-	 */
-	public static final boolean isKnownTriggerType(int type) {
-		// Check against all known trigger types.
-		if(type == SSPData.TRIG_TYPE_COSMIC_BOT || type == SSPData.TRIG_TYPE_COSMIC_TOP ||
-				type == SSPData.TRIG_TYPE_PAIR0 || type == SSPData.TRIG_TYPE_PAIR1 ||
-				type == SSPData.TRIG_TYPE_SINGLES0_BOT || type == SSPData.TRIG_TYPE_SINGLES0_TOP ||
-				type == SSPData.TRIG_TYPE_SINGLES1_BOT || type == SSPData.TRIG_TYPE_SINGLES1_TOP) {
-			return true;
-		}
-		
-		// If it does not match, it is unknown,
-		else { return false; }
-	}
+    /**
+     * Creates an <code>SSPTrigger</code> object representing the given
+     * trigger information. If the trigger type is unknown, this creates
+     * a <code>SSPTrigger</code> object. Otherwise, an object for the
+     * appropriate type of trigger is generated which will provide trigger
+     * data parsing options.
+     * @param type - The type of trigger.
+     * @param time - The time at which the trigger occurred in ns.
+     * @param data - The trigger data.
+     * @return Returns an <code>SSPTrigger</code> object. This may be
+     * a subclass appropriate to the trigger type.
+     */
+    public static final SSPTrigger makeTrigger(int type, int time, int data) {
+        // Check for cosmic triggers.
+        if(isCosmicTrigger(type)) {
+            return new SSPCosmicTrigger(isTopTrigger(type), time);
+        }
+        
+        // Check for singles triggers.
+        else if(isSinglesTrigger(type)) {
+            return new SSPSinglesTrigger(isFirstTrigger(type), isTopTrigger(type), time, data);
+        }
+        
+        // Check for pair triggers.
+        else if(isPairTrigger(type)) {
+            return new SSPPairTrigger(isFirstTrigger(type), time, data);
+        }
+        
+        // Otherwise, this is an unknown trigger type.
+        else {
+            return new SSPTrigger(type, time, data);
+        }
+    }
+    
+    /**
+     * Indicates whether the trigger type is a cosmic trigger.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if the trigger is a cosmic
+     * trigger and <code>false</code> otherwise.
+     */
+    public static final boolean isCosmicTrigger(int type) {
+        return (type == SSPData.TRIG_TYPE_COSMIC_BOT) || (type == SSPData.TRIG_TYPE_COSMIC_TOP);
+    }
+    
+    /**
+     * Indicates whether the trigger type is a singles trigger.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if the trigger is a singles
+     * trigger and <code>false</code> otherwise.
+     */
+    public static final boolean isSinglesTrigger(int type) {
+        return (type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
+                (type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP);
+    }
+    
+    /**
+     * Indicates whether the trigger type is a pair trigger.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if the trigger is a pair
+     * trigger and <code>false</code> otherwise.
+     */
+    public static final boolean isPairTrigger(int type) {
+        return (type == SSPData.TRIG_TYPE_PAIR0) || (type == SSPData.TRIG_TYPE_PAIR1);
+    }
+    
+    /**
+     * Indicates whether this is the first trigger of a set of two
+     * triggers of the same type. This always returns <code>true</code>
+     * for cosmic triggers, since there is only one. It always returns
+     * <code>false</code> for unknown trigger types.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if this is the first trigger
+     * in a set of two and <code>false</code> otherwise.
+     */
+    public static final boolean isFirstTrigger(int type) {
+        // There is only one cosmic trigger, so all cosmic triggers
+        // are the first trigger.
+        if(isCosmicTrigger(type)) { return true; }
+        
+        // Otherwise, singles trigger 0 (either top or bottom) and
+        // pair trigger 0 are first triggers.
+        else if((type == SSPData.TRIG_TYPE_SINGLES0_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
+                    (type == SSPData.TRIG_TYPE_PAIR0)) {
+            return true;
+        }
+        
+        // Anything else is not a first trigger.
+        else {
+            return false;
+        }
+    }
+    
+    /**
+     * Indicates whether this is the second trigger of a set of two
+     * triggers of the same type. This always returns <code>false</code>
+     * for cosmic triggers, since there is only one. It also always
+     * returns <code>false</code> for unknown trigger types.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if this is the second trigger
+     * in a set of two and <code>false</code> otherwise.
+     */
+    public static final boolean isSecondTrigger(int type) {
+        // There is only one cosmic trigger, so no cosmic triggers
+        // are the second trigger.
+        if(isCosmicTrigger(type)) { return false; }
+        
+        // Otherwise, singles trigger 1 (either top or bottom) and
+        // pair trigger 1 are second triggers.
+        else if((type == SSPData.TRIG_TYPE_SINGLES1_BOT) || (type == SSPData.TRIG_TYPE_SINGLES1_TOP) ||
+                    (type == SSPData.TRIG_TYPE_PAIR1)) {
+            return true;
+        }
+        
+        // Anything else is not a second trigger.
+        else { return false; }
+    }
+    
+    /**
+     * Indicates whether this trigger originated in the top SPP crate.
+     * This always returns <code>true</code> for pair triggers, as they
+     * require both crates, and always returns false for unknown trigger
+     * types.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if this trigger originated
+     * in the top crate and <code>false</code> otherwise.
+     */
+    public static final boolean isTopTrigger(int type) {
+        // Pair triggers require both crates, so this is always true
+        // for all triggers of that type.
+        if(isPairTrigger(type)) { return true; }
+        
+        // For singles and cosmic triggers, check the type.
+        else if((type == SSPData.TRIG_TYPE_COSMIC_TOP) || (type == SSPData.TRIG_TYPE_SINGLES0_TOP) ||
+                (type == SSPData.TRIG_TYPE_SINGLES1_TOP)) {
+            return true;
+        }
+        
+        // Otherwise, this is not a (known) top trigger.
+        else { return false; }
+    }
+    
+    /**
+     * Indicates whether this trigger originated in the bottom SPP crate.
+     * This always returns <code>true</code> for pair triggers, as they
+     * require both crates, and always returns false for unknown trigger
+     * types.
+     * @param type - The trigger type.
+     * @return Returns <code>true</code> if this trigger originated
+     * in the bottom crate and <code>false</code> otherwise.
+     */
+    public static final boolean isBottomTrigger(int type) {
+        // Pair triggers require both crates, so this is always true
+        // for all triggers of that type.
+        if(isPairTrigger(type)) { return true; }
+        
+        // For singles and cosmic triggers, check the type.
+        else if((type == SSPData.TRIG_TYPE_COSMIC_BOT) || (type == SSPData.TRIG_TYPE_SINGLES0_BOT) ||
+                (type == SSPData.TRIG_TYPE_SINGLES1_BOT)) {
+            return true;
+        }
+        
+        // Otherwise, this is not a (known) bottom trigger.
+        else { return false; }
+    }
+    
+    /**
+     * Checks whether the trigger type is from a recognized trigger.
+     * @param type - The type code.
+     * @return Returns <code>true</code> if the trigger type is of a
+     * recognized type and returns <code>false</code> if it is not.
+     */
+    public static final boolean isKnownTriggerType(int type) {
+        // Check against all known trigger types.
+        if(type == SSPData.TRIG_TYPE_COSMIC_BOT || type == SSPData.TRIG_TYPE_COSMIC_TOP ||
+                type == SSPData.TRIG_TYPE_PAIR0 || type == SSPData.TRIG_TYPE_PAIR1 ||
+                type == SSPData.TRIG_TYPE_SINGLES0_BOT || type == SSPData.TRIG_TYPE_SINGLES0_TOP ||
+                type == SSPData.TRIG_TYPE_SINGLES1_BOT || type == SSPData.TRIG_TYPE_SINGLES1_TOP) {
+            return true;
+        }
+        
+        // If it does not match, it is unknown,
+        else { return false; }
+    }
 }