LISTSERV mailing list manager LISTSERV 16.5

Help for HPS-SVN Archives


HPS-SVN Archives

HPS-SVN Archives


HPS-SVN@LISTSERV.SLAC.STANFORD.EDU


View:

Message:

[

First

|

Previous

|

Next

|

Last

]

By Topic:

[

First

|

Previous

|

Next

|

Last

]

By Author:

[

First

|

Previous

|

Next

|

Last

]

Font:

Proportional Font

LISTSERV Archives

LISTSERV Archives

HPS-SVN Home

HPS-SVN Home

HPS-SVN  February 2015

HPS-SVN February 2015

Subject:

r2033 - in /java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster: GTPClusterDriver.java GTPOnlineClusterDriver.java GTPOnlineClusterer.java

From:

[log in to unmask]

Reply-To:

Notification of commits to the hps svn repository <[log in to unmask]>

Date:

Tue, 3 Feb 2015 21:58:38 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (484 lines)

Author: [log in to unmask]
Date: Tue Feb  3 13:58:32 2015
New Revision: 2033

Log:
Added a driver for the readout version of the GTP algorithm and made a few minor updates to the formatting of the algorithms. Algorithm functionality is unchanged.

Added:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java
Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.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/GTPClusterDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterDriver.java	Tue Feb  3 13:58:32 2015
@@ -15,11 +15,11 @@
  */
 public class GTPClusterDriver extends ClusterDriver {
     // The GTP clustering algorithm.
-	private final GTPClusterer gtp;
-	
-	/**
-	 * Instantiates a new <code>GTPClusterer</code>.
-	 */
+    private final GTPClusterer gtp;
+    
+    /**
+     * Instantiates a new <code>GTPClusterer</code>.
+     */
     public GTPClusterDriver() {
         clusterer = ClustererFactory.create("GTPClusterer");
         gtp = (GTPClusterer) clusterer;
@@ -37,7 +37,7 @@
     @Deprecated
     void setLimitClusterRange(boolean limitClusterRange) {
         gtp.setLimitClusterRange(limitClusterRange);
-    }        
+    }
     
     /**
      * Sets the number of clock-cycles (4 ns) before and after a hit
@@ -58,7 +58,7 @@
      * @param seedEnergyThreshold - The minimum seed energy in GeV.
      */
     public void setSeedEnergyThreshold(double seedEnergyThreshold) {
-    	gtp.getCuts().setValue("seedEnergyThreshold", seedEnergyThreshold);
+        gtp.getCuts().setValue("seedEnergyThreshold", seedEnergyThreshold);
     }
     
     /**
@@ -73,7 +73,7 @@
      * should not.
      */
     public void setAsymmetricWindow(boolean asymmetricWindow) {
-    	gtp.setLimitClusterRange(asymmetricWindow);
+        gtp.setLimitClusterRange(asymmetricWindow);
     }
     
     /**
@@ -83,6 +83,6 @@
      * output diagnostic text and <code>false</code> that it should not.
      */
     public void setVerbose(boolean verbose) {
-    	gtp.setVerbose(verbose);
+        gtp.setVerbose(verbose);
     }
-}
+}

Added: 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	(added)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPOnlineClusterDriver.java	Tue Feb  3 13:58:32 2015
@@ -0,0 +1,62 @@
+package org.hps.recon.ecal.cluster;
+
+/**
+ * Class <code>GTPOnlineClusterDriver</code> allows parameters for the
+ * readout variant of the GTP algorithm to be set.
+ * 
+ * @author Kyle McCarty <[log in to unmask]>
+ */
+public class GTPOnlineClusterDriver extends ClusterDriver {
+    // Store the cluistering algorithm.
+    private final GTPOnlineClusterer gtp;
+    
+    /**
+     * Instantiates a new clustering algorithm using the readout
+     * variant of the GTP clustering algorithm.
+     */
+    public GTPOnlineClusterDriver() {
+        clusterer = ClustererFactory.create("GTPOnlineClusterer");
+        gtp = (GTPOnlineClusterer) clusterer;
+    }
+    
+    /**
+     * Sets the minimum seed energy needed for a hit to be considered
+     * for forming a cluster.
+     * @param seedEnergyThreshold - The minimum cluster seed energy in
+     * GeV.
+     */
+    public void setSeedEnergyThreshold(double seedEnergyThreshold) {
+        gtp.getCuts().setValue("seedEnergyThreshold", seedEnergyThreshold);
+        gtp.setSeedLowThreshold(seedEnergyThreshold);
+    }
+    
+    /**
+     * Sets the number of clock-cycles to include in the clustering
+     * window before the seed hit. One clock-cycle is four nanoseconds.
+     * @param cyclesBefore - The length of the clustering window before
+     * the seed hit in clock cycles.
+     */
+    public void setWindowBefore(int cyclesBefore) {
+        gtp.setWindowBefore(cyclesBefore);
+    }
+    
+    /**
+     * Sets the number of clock-cycles to include in the clustering
+     * window after the seed hit. One clock-cycle is four nanoseconds.
+     * @param cyclesAfter - The length of the clustering window after
+     * the seed hit in clock cycles.
+     */
+    public void setWindowAfter(int cyclesAfter) {
+        gtp.setWindowAfter(cyclesAfter);
+    }
+    
+    /**
+     * Sets whether the clusterer should output diagnostic text or not.
+     * @param verbose - <code>true</code> indicates that the clusterer
+     * should output diagnostic text and <code>false</code> that it
+     * should not.
+     */
+    public void setVerbose(boolean verbose) {
+        gtp.setVerbose(verbose);
+    }
+}

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	Tue Feb  3 13:58:32 2015
@@ -36,9 +36,8 @@
  * 
  * @author Kyle McCarty <[log in to unmask]>
  */
-// TODO: Handle time window arguments.
 public class GTPOnlineClusterer extends AbstractClusterer {
-
+    
     // The size of the temporal window in nanoseconds. By default,
     // this is 1 clock-cycle before and 3 clock-cycles after.
     private double timeBefore = 4;
@@ -48,19 +47,18 @@
     // Cluster formation energy thresholds. Currently, the hardware
     // only supports a lower bound seed energy. Units are in GeV.
     private double seedThreshold = 0.050;
-
+    
     // Internal variables.
     private boolean verbose = false;
     
     GTPOnlineClusterer() {
-        super(new String[] { "seedThreshold" }, 
-                new double[] { 0.050 });
-    }
-
+        super(new String[] { "seedThreshold" }, new double[] { 0.050 });
+    }
+    
     public void initialize() {
         seedThreshold = getCuts().getValue("seedThreshold");
     }
-
+    
     /**
      * Reads in hits and processes them into clusters as per the GTP
      * clustering algorithm implemented in the hardware.
@@ -68,13 +66,13 @@
      */
     @Override
     public List<Cluster> createClusters(EventHeader event, List<CalorimeterHit> hitList) {
-
+    	
         // Track the valid clusters.
         List<Cluster> clusterList = new ArrayList<Cluster>();
-
+        
         // VERBOSE :: Indicate whether the event has hits.
         //if(verbose) { System.out.printf("Event %7d :: Has hits [%5b]%n", event.getEventNumber(), hasHits); }
-
+        
         // Sort the hits by time in reverse order.
         Collections.sort(hitList, new Comparator<CalorimeterHit>() {
             @Override
@@ -82,7 +80,7 @@
                 return Double.compare(secondHit.getTime(), firstHit.getTime());
             }
         }); 
-
+        
         // VERBOSE :: Print the hit information.
         if(verbose) { 
             for(CalorimeterHit hit : hitList) {
@@ -90,18 +88,18 @@
                 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);
             }
         }
-
+        
         // A seed hit is a hit that is the largest both within its
         // spatial range (+/- 1 in the ix and iy direction) and
         // within a certain temporal window. If a hit is a seed, all
         // hits within the 3x3 spatial range around it that are also
         // within the temporal window are considered part of the
         // cluster.
-
+        
         // Iterate over each hit and see if it qualifies as a seed hit.
         seedLoop:
             for(CalorimeterHit seed : hitList) {
@@ -110,26 +108,26 @@
                 if(seed.getCorrectedEnergy() < seedThreshold) {
                     continue seedLoop;
                 }
-
+                
                 // Create a cluster for the potential seed.
                 BaseCluster protoCluster = createBasicCluster();
                 protoCluster.addHit(seed);
                 protoCluster.setPosition(seed.getDetectorElement().getGeometry().getPosition().v());
                 protoCluster.setNeedsPropertyCalculation(false);
-
+                
                 // Iterate over the other hits and if the are within
                 // the clustering spatiotemporal window, compare their
                 // energies.
                 for(CalorimeterHit hit : hitList) {
                     // Do not perform the comparison if the hit is the
                     // current potential seed.
-                    if (hit != seed) {
+                    if(hit != seed) {
                         // Check if the hit is within the spatiotemporal
                         // clustering window.
-                        if (withinTimeVerificationWindow(seed, hit) && withinSpatialWindow(seed, hit)) {
+                        if(withinTimeVerificationWindow(seed, hit) && withinSpatialWindow(seed, hit)) {
                             // Check if the hit invalidates the potential
                             // seed.
-                            if (isValidSeed(seed, hit)) {
+                            if(isValidSeed(seed, hit)) {
                                 // Make sure that the hit is also within
                                 // the hit add window; this may not be
                                 // the same as the verification window
@@ -138,7 +136,7 @@
                                     protoCluster.addHit(hit);
                                 }
                             }
-
+                            
                             // If it is not, then skip the rest of the
                             // loop; the potential seed is not really
                             // a seed.
@@ -147,13 +145,13 @@
                     }
                 }
                 
-
+                
                 // 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);
             }
-
+        
         // VERBOSE :: Print out all the clusters in the event.
         if(verbose) { 
             for(Cluster cluster : clusterList) {
@@ -162,9 +160,9 @@
                 int iy = seedHit.getIdentifierFieldValue("iy");
                 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);
-
+                
                 for(CalorimeterHit hit : cluster.getCalorimeterHits()) {
                     int hix = hit.getIdentifierFieldValue("ix");
                     int hiy = hit.getIdentifierFieldValue("iy");
@@ -174,13 +172,13 @@
                 }
             }
         }
-                
+        
         // VERBOSE :: Print a new line.
         if(verbose) { System.out.println(); }
-
+        
         return clusterList;
     }
-
+    
     /**
      * Checks whether the hit <code>hit</code> keeps the hit <code>seed
      * </code> from meeting the criteria for being a seed hit. Note that
@@ -196,24 +194,24 @@
         // Get the hit and seed energies.
         double henergy = hit.getCorrectedEnergy();
         double senergy = seed.getCorrectedEnergy();
-
+        
         // If the hit energy is less than the seed, the seed is valid.
         if(henergy < senergy) {
             return true;
         }
-
+        
         // If the hit energy is the same as the seed energy, spatial
         // comparisons are used to ensure the uniqueness of the seed.
         if(henergy == senergy) {
             // Get the x-indices of the hits.
             int six = seed.getIdentifierFieldValue("ix");
             int hix = hit.getIdentifierFieldValue("ix");
-
+            
             // The hit closest to the electron-side of the detector
             // is considered the seed.
             if(six < hix) { return true; }
             else if(six > hix) { return false; }
-
+            
             // If both hits are at the same x-index, compare how close
             // they are to the beam gap.
             else {
@@ -222,11 +220,11 @@
                 // to the beam gap.
                 int siy = Math.abs(seed.getIdentifierFieldValue("iy"));
                 int hiy = Math.abs(seed.getIdentifierFieldValue("iy"));
-
+                
                 // If the seed is closer, it is valid.
                 if(siy < hiy) { return true; }
                 else if(siy > hiy) { return false; }
-
+                
                 // If the y-index is the same, these are the same hit.
                 // This case shouldn't really ever happen, but for the
                 // compiler's sake, it returns true. A hit can not render
@@ -234,11 +232,11 @@
                 else { return true; }
             }
         }
-
+        
         // Otherwise, the seed is invalid.
         else { return false; }
     }
-
+    
     /**
      * Checks whether the hit <code>hit</code> falls within the spatial
      * window of the hit <code>Seed</code>. This is defined as within
@@ -255,23 +253,23 @@
         // Get the x-indices of each hit.
         int six = seed.getIdentifierFieldValue("ix");
         int hix = hit.getIdentifierFieldValue("ix");
-
+        
         // Check that the x indices are either the same or within a
         // range of one of one another.
         if((six == hix) || (six + 1 == hix) || (six - 1 == hix)) {
             // Get the y-indices of each hit.
             int siy = seed.getIdentifierFieldValue("iy");
             int hiy = hit.getIdentifierFieldValue("iy");
-
+            
             // Ensure that the y-indices are either the same or are
             // within one of one another.
             return (siy == hiy) || (siy + 1 == hiy) || (siy - 1 == hiy);
         }
-
+        
         // If the x-index comparison fails, return false.
         return false;
     }
-
+    
     /**
      * Checks whether the hit <code>hit</code> is within the temporal
      * window of the hit <code>seed</code> for the purpose of seed
@@ -287,11 +285,11 @@
         if(Math.abs(seed.getTime() - hit.getTime()) <= timeWindow) {
             return true;
         }
-
+        
         // Otherwise, they are not.
         else { return false; }
     }
-
+    
     /**
      * Checks whether the hit <code>hit</code> is within the temporal
      * window of the hit <code>seed</code> for the purpose of adding
@@ -306,25 +304,25 @@
         // Get the hit time and seed time.
         double hitTime = hit.getTime();
         double seedTime = seed.getTime();
-
+        
         // If the hit is before the seed, use the before window.
         if(hitTime < seedTime) {
             return (seedTime - hitTime) <= timeBefore;
         }
-
+        
         // If the hit occurs after the seed, use the after window.
         else if(hitTime > seedTime) {
             return (hitTime - seedTime) <= timeAfter;
         }
-
+        
         // If the times are the same, the are within the window.
         if(hitTime == seedTime) { return true; }
-
+        
         // Otherwise, one or both times is undefined and should not be
         // treated as within time.
         else { return false; }
     }
- 
+    
     /**
      * Sets the minimum energy a hit must have before it will be
      * considered for cluster formation.
@@ -333,7 +331,7 @@
     public void setSeedLowThreshold(double seedThreshold) {
         this.seedThreshold = seedThreshold;
     }
-
+    
     /**
      * Sets the number of clock-cycles to include in the clustering
      * window before the seed hit. One clock-cycle is four nanoseconds.
@@ -344,7 +342,7 @@
         timeBefore = cyclesBefore * 4;
         timeWindow = Math.max(timeBefore, timeAfter);
     }
-
+    
     /**
      * Sets the number of clock-cycles to include in the clustering
      * window after the seed hit. One clock-cycle is four nanoseconds.
@@ -355,9 +353,19 @@
         timeAfter = cyclesAfter * 4;
         timeWindow = Math.max(timeBefore, timeAfter);
     }
-
+    
+    /**
+     * Sets whether the clusterer should output diagnostic text or not.
+     * @param verbose - <code>true</code> indicates that the clusterer
+     * should output diagnostic text and <code>false</code> that it
+     * should not.
+     */
+    public void setVerbose(boolean verbose) {
+        this.verbose = verbose;
+    }
+    
     @Override
     public ClusterType getClusterType() {
         return ClusterType.GTP_ONLINE;
     }
-}
+}

Top of Message | Previous Page | Permalink

Advanced Options


Options

Log In

Log In

Get Password

Get Password


Search Archives

Search Archives


Subscribe or Unsubscribe

Subscribe or Unsubscribe


Archives

November 2017
August 2017
July 2017
January 2017
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
December 2013
November 2013

ATOM RSS1 RSS2



LISTSERV.SLAC.STANFORD.EDU

Secured by F-Secure Anti-Virus CataList Email List Search Powered by the LISTSERV Email List Manager

Privacy Notice, Security Notice and Terms of Use