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  January 2015

HPS-SVN January 2015

Subject:

r1914 - in /java/trunk/ecal-recon/src: main/java/org/hps/recon/ecal/cluster/ test/java/org/hps/recon/ecal/cluster/

From:

[log in to unmask]

Reply-To:

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

Date:

Sat, 10 Jan 2015 02:01:56 -0000

Content-Type:

text/plain

Parts/Attachments:

Parts/Attachments

text/plain (693 lines)

Author: [log in to unmask]
Date: Fri Jan  9 18:01:48 2015
New Revision: 1914

Log:
Add type encoding for different types of clusters.

Added:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterType.java
Modified:
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/AbstractClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/CTPClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterDriver.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterUtilities.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/Clusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/DualThresholdCosmicClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java
    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/LegacyClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/NearestNeighborClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterDriver.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleCosmicClusterer.java
    java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleReconClusterer.java
    java/trunk/ecal-recon/src/test/java/org/hps/recon/ecal/cluster/ClustererTest.java

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/AbstractClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/AbstractClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/AbstractClusterer.java	Fri Jan  9 18:01:48 2015
@@ -8,6 +8,7 @@
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.base.BaseCluster;
 import org.lcsim.geometry.subdetector.HPSEcal3;
 import org.lcsim.geometry.subdetector.HPSEcal3.NeighborMap;
 
@@ -71,6 +72,20 @@
     public abstract List<Cluster> createClusters(EventHeader event, List<CalorimeterHit> hits);
     
     /**
+     * Get the type code for the clusters produced by this algorithm.
+     * @return The type code of the cluster.
+     */
+    public abstract ClusterType getClusterType();
+    
+    /**
+     * Get the integer encoding of the <code>Cluster</code> type.
+     * @return The integer encoding of the Cluster type.
+     */
+    public final int getClusterTypeEncoding() {
+        return getClusterType().getType();
+    }
+    
+    /**
      * Detector setup performed here to get reference to ECAL subdetector and neighbor mapping.
      */
     @Override
@@ -92,7 +107,7 @@
      * Get the numerical cut settings.
      * @return The numerical cuts.
      */
-    public NumericalCuts getCuts() {
+    public final NumericalCuts getCuts() {
         return this.cuts;
     }
     
@@ -100,7 +115,16 @@
      * Convenience method to get the identifier helper from the ECAL subdetector.
      * @return The identifier helper.
      */
-    protected IIdentifierHelper getIdentifierHelper() {
+    protected final IIdentifierHelper getIdentifierHelper() {
         return ecal.getDetectorElement().getIdentifierHelper();
     }
+    
+    /**
+     * Create a basic <code>Cluster</code> with the correct type.
+     */
+    public BaseCluster createBasicCluster() {
+        BaseCluster cluster = new BaseCluster();
+        cluster.setType(getClusterType().getType());
+        return cluster;
+    }
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/CTPClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/CTPClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/CTPClusterer.java	Fri Jan  9 18:01:48 2015
@@ -304,7 +304,7 @@
                 CalorimeterHit seedHit = (BaseCalorimeterHit)CalorimeterHitUtilities.create(0.0, clusterTime, possibleCluster, hits.get(0).getMetaData());
 
                 // Generate a new cluster from the seed hit.
-                BaseCluster cluster = new BaseCluster();
+                BaseCluster cluster = createBasicCluster();
                 cluster.addHit(seedHit);
                 // Populate the cluster with each of the chosen neighbors.
                 for (CalorimeterHit clusterHit : hits) {
@@ -329,4 +329,9 @@
             }
         }
     }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.CTP;
+    }
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterDriver.java	Fri Jan  9 18:01:48 2015
@@ -44,9 +44,9 @@
     protected boolean writeClusterCollection = true;
     protected boolean storeHits = true;
     protected double[] cuts;
-    protected boolean sortHits = true;
-    protected boolean calculateProperties = true;
-    protected boolean applyCorrections = false;
+    protected boolean sortHits;
+    protected boolean calculateProperties;
+    protected boolean applyCorrections;
     
     /**
      * No argument constructor.

Added: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterType.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterType.java	(added)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterType.java	Fri Jan  9 18:01:48 2015
@@ -0,0 +1,58 @@
+package org.hps.recon.ecal.cluster;
+
+/**
+ * Type codes for different kinds of ECAL clusters.
+ * @author Jeremy McCormick <[log in to unmask]>
+ */
+public enum ClusterType {
+    
+    // Do not change the value assignments!
+    RECON(1000),
+    SIMPLE_RECON(1001),
+    LEGACY(1002),
+    GTP(1003),
+    GTP_ONLINE(1004),
+    CTP(1005),
+    NN(1006),
+    SIMPLE_COSMIC(1007),
+    DUAL_THRESHOLD_COSMIC(1008);   
+    // Any additional types should be added at end of the list.
+                
+    private int type;
+    
+    ClusterType(int type) {
+        this.type = type;
+    }
+        
+    public int getType() {
+        return type;
+    }
+    
+    public static ClusterType getClusterType(int type) {                
+        if (type == RECON.getType()) {
+            return RECON;
+        } else if (type == SIMPLE_RECON.getType()) {
+            return SIMPLE_RECON;
+        } else if (type == LEGACY.getType()) {
+            return LEGACY;
+        } else if (type == GTP.getType()) {
+            return GTP;
+        } else if (type == GTP_ONLINE.getType()) {
+            return GTP_ONLINE;
+        } else if (type == CTP.getType()) {
+            return CTP;
+        } else if (type == NN.getType()) {
+            return NN;
+        } else if (type == SIMPLE_COSMIC.getType()) {
+            return SIMPLE_COSMIC;
+        } else if (type == DUAL_THRESHOLD_COSMIC.getType()) {
+            return DUAL_THRESHOLD_COSMIC;
+        } else {
+            return null;
+        }
+    }
+    
+    public boolean equals(ClusterType clusterType) {
+        return clusterType.getType() == getType();
+    }
+}

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterUtilities.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterUtilities.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterUtilities.java	Fri Jan  9 18:01:48 2015
@@ -23,6 +23,9 @@
  * @see org.lcsim.event.base.BaseCluster
  */
 public final class ClusterUtilities {
+    
+    // Use the HPS specific property calculator.
+    private static final ReconClusterPropertyCalculator propertyCalculator = new ReconClusterPropertyCalculator();
     
     private ClusterUtilities() {        
     }
@@ -326,10 +329,7 @@
      * @see ReconClusterEnergyCorrection
      */
     public static void applyCorrections(List<Cluster> clusters) {
-        
-        // Use the HPS specific property calculator.
-        ReconClusterPropertyCalculator calc = new ReconClusterPropertyCalculator();
-        
+                
         // Loop over the clusters.
         for (Cluster cluster : clusters) {
             
@@ -340,7 +340,7 @@
                 // First calculate the cluster properties, if needed.
                 if (baseCluster.needsPropertyCalculation()) {                
                     // Calculate the properties of the cluster.
-                    baseCluster.setPropertyCalculator(calc);
+                    baseCluster.setPropertyCalculator(propertyCalculator);
                     baseCluster.calculateProperties();
                 }
             
@@ -351,6 +351,31 @@
                 ReconClusterEnergyCorrection.setCorrectedEnergy(baseCluster);
             }
         }
+    }
+    
+    /**
+     * Apply HPS-specific energy and position corrections to a single Cluster.
+     * 
+     * @see ReconClusterPropertyCalculator
+     * @see ReconClusterPositionCorrection
+     * @see ReconClusterEnergyCorrection
+     */
+    public static void applyCorrections(Cluster cluster) {
+
+        BaseCluster baseCluster = (BaseCluster)cluster;            
+
+        // First calculate the cluster properties, if needed.
+        if (baseCluster.needsPropertyCalculation()) {                
+            // Calculate the properties of the cluster.
+            baseCluster.setPropertyCalculator(propertyCalculator);
+            baseCluster.calculateProperties();
+        }
+
+        // Apply position correction, which should happen before final energy correction.
+        ReconClusterPositionCorrection.setCorrectedPosition(baseCluster);
+
+        // Apply energy correction.
+        ReconClusterEnergyCorrection.setCorrectedEnergy(baseCluster);              
     }
     
     /**

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/Clusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/Clusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/Clusterer.java	Fri Jan  9 18:01:48 2015
@@ -6,6 +6,7 @@
 import org.lcsim.event.CalorimeterHit;
 import org.lcsim.event.Cluster;
 import org.lcsim.event.EventHeader;
+import org.lcsim.event.base.BaseCluster;
 
 /**
  * This is an interface for creating clusters and providing cut values
@@ -51,4 +52,23 @@
      * @return The numerical cut settings.
      */
     NumericalCuts getCuts();
+    
+    /**
+     * Get the type of <code>Cluster</code> created by this algorithm.
+     * @return The type of the Cluster.
+     */
+    ClusterType getClusterType();
+    
+    /**
+     * Get the integer encoding of the <code>Cluster</code> type.
+     * This is a convenience method, and it is declared as final in the abstract implementation.
+     * @return The integer encoding of the Cluster type.
+     */
+    int getClusterTypeEncoding();
+    
+    /**
+     * Create a basic <code>Cluster</code> with the correct type for this algorithm. 
+     * @return The basic Cluster.
+     */
+    BaseCluster createBasicCluster();
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/DualThresholdCosmicClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/DualThresholdCosmicClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/DualThresholdCosmicClusterer.java	Fri Jan  9 18:01:48 2015
@@ -113,5 +113,9 @@
         }        
         return set;
     }
-    
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.DUAL_THRESHOLD_COSMIC;
+    }    
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/GTPClusterer.java	Fri Jan  9 18:01:48 2015
@@ -120,7 +120,7 @@
             
             // Store the crystals that are part of this potential cluster, 
             // starting with the cluster seed candidate.
-            BaseCluster cluster = new BaseCluster();            
+            BaseCluster cluster = createBasicCluster();            
             cluster.addHit(currentHit);
             
             // Get the set of neighbors for this hit.
@@ -267,5 +267,10 @@
         else {
             this.seedEnergyThreshold = seedEnergyThreshold;
         }
+    }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.GTP;
     }     
 }

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	Fri Jan  9 18:01:48 2015
@@ -112,7 +112,7 @@
                 }
 
                 // Create a cluster for the potential seed.
-                BaseCluster protoCluster = new BaseCluster();
+                BaseCluster protoCluster = createBasicCluster();
                 protoCluster.addHit(seed);
 
                 // Iterate over the other hits and if the are within
@@ -353,4 +353,9 @@
         timeAfter = cyclesAfter * 4;
         timeWindow = Math.max(timeBefore, timeAfter);
     }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.GTP_ONLINE;
+    }
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/LegacyClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/LegacyClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/LegacyClusterer.java	Fri Jan  9 18:01:48 2015
@@ -80,7 +80,7 @@
             // Did we find a seed?
             if (isSeed) {
                 // Make a cluster from the hit list.
-                BaseCluster cluster = new BaseCluster();
+                BaseCluster cluster = createBasicCluster();
                 cluster.addHit(hit);
                 for (CalorimeterHit clusHit : neighborHits) {
                     cluster.addHit(clusHit);
@@ -90,4 +90,9 @@
         }
         return clusters;
     }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.LEGACY;
+    }
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/NearestNeighborClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/NearestNeighborClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/NearestNeighborClusterer.java	Fri Jan  9 18:01:48 2015
@@ -59,7 +59,7 @@
      * @param neighborMap The map of HPS crystal neighbors.
      */    
     BaseCluster createCluster(Map<Long, CalorimeterHit> map, CalorimeterHit hit) {
-        BaseCluster cluster = new BaseCluster();
+        BaseCluster cluster = createBasicCluster();
         // start by adding this hit to the cluster
         cluster.addHit(hit);
         // remove this hit from the map so it can't be used again
@@ -88,4 +88,8 @@
         }
         return cluster;
     }
+    
+    public ClusterType getClusterType() {
+        return ClusterType.NN;
+    }
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterDriver.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterDriver.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterDriver.java	Fri Jan  9 18:01:48 2015
@@ -24,8 +24,13 @@
     boolean writeRejectedHitCollection = false;
             
     public ReconClusterDriver() {
+        // Setup the Clusterer with the correct type.
         clusterer = ClustererFactory.create("ReconClusterer");
-        this.applyCorrections = true;
+        
+        // Apply default Driver settings for the ReconClusterer algorithm.
+        //this.applyCorrections = true;
+        this.calculateProperties = false; // Not needed if corrections will be applied.
+        this.sortHits = true; // Need this for correct seed hit position in list.
     }
     
     public void setClusterer(Clusterer clusterer) {

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ReconClusterer.java	Fri Jan  9 18:01:48 2015
@@ -480,8 +480,12 @@
                     }
 
                     else {
+                        
+                        // FIXME: All of the following should be converted to use the BaseCluster API. --JM
+                        
                         // New cluster
                         HPSEcalClusterIC cluster = new HPSEcalClusterIC(entry2.getKey());
+                        cluster.setType(this.getClusterTypeEncoding());
                         clusterList.add(cluster);
                         // Loop over hits belonging to seeds
                         for (Map.Entry<CalorimeterHit, CalorimeterHit> entry3 : hitSeedMap.entrySet()) {
@@ -618,4 +622,8 @@
         return isSeed;
     }
     
+    public ClusterType getClusterType() {
+        return ClusterType.RECON;
+    }
+    
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleCosmicClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleCosmicClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleCosmicClusterer.java	Fri Jan  9 18:01:48 2015
@@ -155,5 +155,10 @@
             }
         }
         return selectedClusters;
+    }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.SIMPLE_COSMIC;
     }    
 }

Modified: java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleReconClusterer.java
 =============================================================================
--- java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleReconClusterer.java	(original)
+++ java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/SimpleReconClusterer.java	Fri Jan  9 18:01:48 2015
@@ -107,7 +107,7 @@
             }
             if (biggestSeed == null) { // if no neighbors had more energy than this hit, this hit is a seed
                 hitToSeed.put(hit, hit);
-                BaseCluster cluster = new BaseCluster();
+                BaseCluster cluster = createBasicCluster();
                 clusters.add(cluster);
                 seedToCluster.put(hit, cluster);
             } else {
@@ -124,4 +124,9 @@
         
         return clusters;
     }
+
+    @Override
+    public ClusterType getClusterType() {
+        return ClusterType.SIMPLE_RECON;
+    }
 }

Modified: java/trunk/ecal-recon/src/test/java/org/hps/recon/ecal/cluster/ClustererTest.java
 =============================================================================
--- java/trunk/ecal-recon/src/test/java/org/hps/recon/ecal/cluster/ClustererTest.java	(original)
+++ java/trunk/ecal-recon/src/test/java/org/hps/recon/ecal/cluster/ClustererTest.java	Fri Jan  9 18:01:48 2015
@@ -39,6 +39,42 @@
     static final String fileLocation = "http://www.lcsim.org/test/hps-java/MockDataReconTest.slcio";
     File inputFile;
     File testOutputDir;
+    
+    static class ClustererTestSetup {
+        
+        boolean writeLcioFile = false;
+        boolean checkSeedHit = false;
+        boolean applyCorrections = false;        
+        double[] cuts = null;
+        ClusterType clusterType; 
+        
+        ClustererTestSetup(double[] cuts) {
+            this.cuts = cuts;            
+        }
+        
+        ClustererTestSetup() {            
+        }
+        
+        ClustererTestSetup writeLcioFile() {
+            writeLcioFile = true;
+            return this;
+        }
+        
+        ClustererTestSetup checkSeedHit() {
+            checkSeedHit = true;
+            return this;
+        }
+        
+        ClustererTestSetup applyCorrections() {
+            applyCorrections = true;
+            return this;
+        }        
+        
+        ClustererTestSetup checkClusterType(ClusterType clusterType) {
+            this.clusterType = clusterType;
+            return this;
+        }
+    }
          
     public void setUp() {
         // Cache the input file.
@@ -57,36 +93,60 @@
         DatabaseConditionsManager.getInstance().setLogLevel(Level.WARNING);
     }
     
-    public void testReconClusterer() {
-        //runClustererTest("ReconClusterer", new double[] { 0.0075, 0.1, 0.3, 0.0, 20.0 }, true);
-        runClustererTest("ReconClusterer", null, true, true);
-    }
-    
+    /**
+     * Test the recon clustering algorithm, formerly called the IC clusterer.
+     */
+    public void testReconClusterer() {        
+        runClustererTest("ReconClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkSeedHit().applyCorrections().checkClusterType(ClusterType.RECON));
+    }
+    
+    /**
+     * Test a simple version of the recon clustering.
+     */
     public void testSimpleReconClusterer() {
-        //runClustererTest("SimpleReconClusterer", new double[] { 0.0, 0.0, 9999.0, 0. }, true);
-        runClustererTest("SimpleReconClusterer", null, true, true);
-    }
-    
+        runClustererTest("SimpleReconClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkSeedHit().checkClusterType(ClusterType.SIMPLE_RECON));
+    }
+    
+    /**
+     * Test a simplistic NN clustering algorithm.
+     */
     public void testNearestNeighborClusterer() {    
-        //runClustererTest("NearestNeighborClusterer", new double[] { 0.0, 2.0 }, true);
-        runClustererTest("NearestNeighborClusterer", null, true, false);
-    }
-    
+        runClustererTest("NearestNeighborClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkClusterType(ClusterType.NN));
+    }
+    
+    /**
+     * Test the clustering algorithm from the Test Run proposal document.
+     */
     public void testLegacyClusterer() {
-        //runClustererTest("LegacyClusterer", new double[] { 0.0, 0.0 }, true);
-        runClustererTest("LegacyClusterer", null, true, false);
-    }
-    
+        runClustererTest("LegacyClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkClusterType(ClusterType.LEGACY));
+    }
+    
+    /**
+     * Test the online version of the GTP algorithm.
+     */
     public void testGTPOnlineClusterer() {
-        runClustererTest("GTPOnlineClusterer", null, true, true);
-    }
-    
+        runClustererTest("GTPOnlineClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkSeedHit().checkClusterType(ClusterType.GTP_ONLINE));
+    }
+    
+    /**
+     * Test the CTP clustering algorithm.
+     */
     public void testCTPClusterer() {
-        runClustererTest("CTPClusterer", null, true, false);
-    }
-    
+        runClustererTest("CTPClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkClusterType(ClusterType.CTP));
+    }
+    
+    /**
+     * Test the GTP clustering algorithm.
+     */
     public void testGTPClusterer() {
-        runClustererTest("GTPClusterer", null, true, false);
+        runClustererTest("GTPClusterer", 
+                new ClustererTestSetup().writeLcioFile().checkSeedHit().checkClusterType(ClusterType.GTP));
     }
     
     /**
@@ -95,7 +155,7 @@
      * @param cuts The cut values.
      * @param writeLcioFile Whether or not to write an LCIO output file.
      */
-    private void runClustererTest(String clustererName, double[] cuts, boolean writeLcioFile, boolean checkSeedHit) {
+    private void runClustererTest(String clustererName, ClustererTestSetup setup) {
         
         System.out.println("testing Clusterer " + clustererName + " ...");
                 
@@ -117,8 +177,8 @@
         String clusterCollectionName = clustererName + "Clusters";
         ClusterDriver clusterDriver = new ClusterDriver();
         clusterDriver.setClustererName(clustererName);
-        if (cuts != null) {
-            clusterDriver.setCuts(cuts);
+        if (setup.cuts != null) {
+            clusterDriver.setCuts(setup.cuts);
         }
         clusterDriver.getLogger().setLevel(Level.ALL);
         clusterDriver.setInputHitCollectionName("EcalHits");       
@@ -126,13 +186,14 @@
         clusterDriver.setRaiseErrorNoHitCollection(true);
         clusterDriver.setCalculateProperties(true);
         clusterDriver.setSortHits(true);
+        clusterDriver.setApplyCorrections(setup.applyCorrections);
         clusterDriver.getLogger().setLevel(Level.CONFIG);
         loop.add(clusterDriver);                         
         
         // This Driver generates plots and the output LCIO file.
-        loop.add(new ClusterCheckDriver(clusterCollectionName, checkSeedHit));
-        
-        if (writeLcioFile) {
+        loop.add(new ClusterCheckDriver(clusterCollectionName, setup.checkSeedHit, setup.clusterType));
+        
+        if (setup.writeLcioFile) {
             loop.add(new LCIODriver(testOutputDir.getPath() + File.separator + clustererName + ".slcio"));
         }
         
@@ -177,10 +238,12 @@
         String clusterCollectionName;
         String clustererName;        
         boolean checkSeedHit = true;
-        
-        ClusterCheckDriver(String clusterCollectionName, boolean checkSeedHit) {
+        ClusterType clusterType;
+        
+        ClusterCheckDriver(String clusterCollectionName, boolean checkSeedHit, ClusterType clusterType) {
             this.clusterCollectionName = clusterCollectionName;
             this.checkSeedHit = checkSeedHit;
+            this.clusterType = clusterType;
         }        
         
         public void startOfData() {
@@ -212,6 +275,9 @@
                     assertEquals("First hit is not seed.", cluster.getCalorimeterHits().get(0), ClusterUtilities.findHighestEnergyHit(cluster));
                 }
                 assertTrue("Cluster properties not calculated.", !((BaseCluster)cluster).needsPropertyCalculation());
+                if (clusterType != null) {
+                    assertEquals("Cluster type is not correct.", clusterType, ClusterType.getClusterType(cluster.getType()));
+                }
                 energyH1D.fill(cluster.getEnergy());
                 double rawEnergy = ClusterUtilities.computeRawEnergy(cluster);
                 uncorrectedEnergyH1D.fill(rawEnergy);

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