Print

Print


Author: [log in to unmask]
Date: Thu Feb  5 18:40:39 2015
New Revision: 2054

Log:
Minor updates and fixes to the GTPOnline driver.

Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java	Thu Feb  5 18:40:39 2015
@@ -7,7 +7,7 @@
  * @author Kyle McCarty <[log in to unmask]>
  */
 public class GTPOnlineClusterDriver extends ClusterDriver {
-    // Store the cluistering algorithm.
+    // Store the clustering algorithm.
     private final GTPOnlineClusterer gtp;
     
     /**
@@ -26,7 +26,7 @@
      * GeV.
      */
     public void setSeedEnergyThreshold(double seedEnergyThreshold) {
-        gtp.getCuts().setValue("seedEnergyThreshold", seedEnergyThreshold);
+        getClusterer().getCuts().setValue("seedThreshold", seedEnergyThreshold);
         gtp.setSeedLowThreshold(seedEnergyThreshold);
     }
     

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterer.java	Thu Feb  5 18:40:39 2015
@@ -1,4 +1,7 @@
 package org.hps.recon.ecal.cluster;
+
+import hep.aida.IHistogram1D;
+import hep.aida.IHistogram2D;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -9,6 +12,7 @@
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
 import org.lcsim.event.base.BaseCluster;
+import org.lcsim.util.aida.AIDA;
 
 /**
  * Class <code>GTPOnlineClusterer</code> is an implementation of the
@@ -51,10 +55,27 @@
     // Internal variables.
     private boolean verbose = false;
     
+    // Diagnostic plots.
+    private AIDA aida = AIDA.defaultInstance();
+    IHistogram1D hitEnergy = aida.histogram1D("GTP(O) Cluster Plots :: Hit Energy Distribution", 256, -1.0, 2.2);
+    IHistogram1D clusterSeedEnergy = aida.histogram1D("GTP(O) Cluster Plots :: Cluster Seed Energy Distribution", 176, 0.0, 2.2);
+    IHistogram1D clusterHitCount = aida.histogram1D("GTP(O) Cluster Plots :: Cluster Hit Count Distribution", 9, 1, 10);
+    IHistogram1D clusterTotalEnergy = aida.histogram1D("GTP(O) Cluster Plots :: Cluster Total Energy Distribution", 176, 0.0, 2.2);
+    IHistogram2D hitDistribution = aida.histogram2D("GTP(O) Cluster Plots :: Hit Distribution", 46, -23, 23, 11, -5.5, 5.5);
+    IHistogram2D clusterDistribution = aida.histogram2D("GTP(O) Cluster Plots :: Cluster Seed Distribution", 46, -23, 23, 11, -5.5, 5.5);
+    IHistogram1D energyDistribution = aida.histogram1D("GTP(O) Cluster Plots :: Percent Negative Energy Distribution", 100, 0.0, 1.0);
+    
+    /**
+     * Instantiates a new instance of a readout GTP clustering algorithm.
+     */
     GTPOnlineClusterer() {
         super(new String[] { "seedThreshold" }, new double[] { 0.050 });
     }
     
+    /**
+     * Gets any relevant cuts from the superclass and sets the local
+     * clusterer variables accordingly. 
+     */
     public void initialize() {
         seedThreshold = getCuts().getValue("seedThreshold");
     }
@@ -82,15 +103,28 @@
         }); 
         
         // VERBOSE :: Print the hit information.
-        if(verbose) { 
+        if(verbose) {
+        	Collections.sort(hitList, new Comparator<CalorimeterHit>() {
+				@Override
+				public int compare(CalorimeterHit firstHit, CalorimeterHit secondHit) {
+					int[] ix = { firstHit.getIdentifierFieldValue("ix"), secondHit.getIdentifierFieldValue("ix") };
+					if(ix[0] != ix[1]) { return Integer.compare(ix[0], ix[1]); }
+					else {
+						int iy[] = { firstHit.getIdentifierFieldValue("iy"), secondHit.getIdentifierFieldValue("iy") };
+						return Integer.compare(iy[0], iy[1]);
+					}
+				}
+        	});
+        	System.out.println("Event Hit Collection:");
             for(CalorimeterHit hit : hitList) {
                 int ix = hit.getIdentifierFieldValue("ix");
                 int iy = hit.getIdentifierFieldValue("iy");
                 double energy = hit.getCorrectedEnergy();
                 double time = hit.getTime();
                 
-                System.out.printf("\tHit --> %.3f GeV at (%3d, %3d) and at t = %.2f%n", energy, ix, iy, time);
+                System.out.printf("\tHit --> %6.3f GeV at (%3d, %3d) and at t = %.2f%n", energy, ix, iy, time);
             }
+            System.out.println();
         }
         
         // A seed hit is a hit that is the largest both within its
@@ -103,6 +137,10 @@
         // Iterate over each hit and see if it qualifies as a seed hit.
         seedLoop:
             for(CalorimeterHit seed : hitList) {
+            	// Put the hit energy into the hit energy distribution.
+            	hitEnergy.fill(seed.getCorrectedEnergy());
+            	hitDistribution.fill(seed.getIdentifierFieldValue("ix"), seed.getIdentifierFieldValue("iy"));
+            	
                 // Check whether the potential seed passes the seed
                 // energy cut.
                 if(seed.getCorrectedEnergy() < seedThreshold) {
@@ -145,15 +183,32 @@
                     }
                 }
                 
-                
                 // If this point is reached, then the seed was not
                 // invalidated by any of the other hits and is really
                 // a cluster center. Add the cluster to the list.
                 clusterList.add(protoCluster);
+                
+                // Populate the cluster distribution plots.
+                clusterSeedEnergy.fill(protoCluster.getCalorimeterHits().get(0).getCorrectedEnergy());
+                clusterTotalEnergy.fill(protoCluster.getEnergy());
+                clusterHitCount.fill(protoCluster.getCalorimeterHits().size());
+                clusterDistribution.fill(protoCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("ix"),
+                		protoCluster.getCalorimeterHits().get(0).getIdentifierFieldValue("iy"));
+                
+                // Determine how much energy in the cluster is negative
+                // and how is positive.
+                double nenergy = 0.0;
+                double penergy = 0.0;
+                for(CalorimeterHit hit : protoCluster.getCalorimeterHits()) {
+                	if(hit.getCorrectedEnergy() > 0) { penergy += hit.getCorrectedEnergy(); }
+                	else { nenergy += hit.getCorrectedEnergy(); }
+                }
+                energyDistribution.fill(Math.abs(nenergy) / (penergy + Math.abs(nenergy)));
             }
         
         // VERBOSE :: Print out all the clusters in the event.
-        if(verbose) { 
+        if(verbose) {
+        	System.out.println("Event Cluster Collection:");
             for(Cluster cluster : clusterList) {
                 CalorimeterHit seedHit = cluster.getCalorimeterHits().get(0);
                 int ix = seedHit.getIdentifierFieldValue("ix");
@@ -161,7 +216,7 @@
                 double energy = cluster.getEnergy();
                 double time = seedHit.getTime();
                 
-                System.out.printf("\tCluster --> %.3f GeV at (%3d, %3d) and at t = %.2f%n", energy, ix, iy, time);
+                System.out.printf("\tCluster --> %6.3f GeV at (%3d, %3d) and at t = %.2f%n", energy, ix, iy, time);
                 
                 for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
                     int hix = hit.getIdentifierFieldValue("ix");
@@ -171,6 +226,7 @@
                     System.out.printf("\t\tCompHit --> %.3f GeV at (%3d, %3d) and at t = %.2f%n", henergy, hix, hiy, htime);
                 }
             }
+        	System.out.println();
         }
         
         // VERBOSE :: Print a new line.