Print

Print


Author: [log in to unmask]
Date: Wed Jan  7 17:12:08 2015
New Revision: 1897

Log:
Add more options to ClusterDriver.

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

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	Wed Jan  7 17:12:08 2015
@@ -31,6 +31,7 @@
  */
 public class ClusterDriver extends Driver {
     
+    protected static Logger logger = LogUtil.create(ClusterDriver.class, new BasicFormatter(ClusterDriver.class.getSimpleName()));
     protected String ecalName = "Ecal";    
     protected HPSEcal3 ecal;
     protected NeighborMap neighborMap;
@@ -42,14 +43,15 @@
     protected boolean skipNoClusterEvents = false;
     protected boolean writeClusterCollection = true;
     protected boolean storeHits = true;
-    protected double[] cutValues;
-    protected static Logger logger = LogUtil.create(ClusterDriver.class, new BasicFormatter(ClusterDriver.class.getSimpleName()));
-    
-    /**
-     * No arg constructor.
+    protected double[] cuts;
+    protected boolean sortHits = true;
+    protected boolean calculateProperties = true;
+    protected boolean applyCorrections = false;
+    
+    /**
+     * No argument constructor.
      */
     public ClusterDriver() {
-        logger.config("initializing");
     }
     
     /**
@@ -112,6 +114,30 @@
      */
     public void setStoreHits(boolean storeHits) {
         this.storeHits = storeHits;
+    }
+    
+    /**
+     * True to calculate cluster properties before writing to event.
+     * @param calculateProperties True to calculate cluster properties.
+     */
+    public void setCalculateProperties(boolean calculateProperties) {
+        this.calculateProperties = calculateProperties;
+    }
+    
+    /**
+     * True to sort the clusters' hits before writing to event.
+     * @param sortHits True to sort hits.
+     */
+    public void setSortHits(boolean sortHits) {
+        this.sortHits = sortHits;
+    }
+    
+    /**
+     * True to apply cluster position and energy corrections.
+     * @param applyCorrections True to apply corrections.
+     */
+    public void setApplyCorrections(boolean applyCorrections) {
+        this.applyCorrections = applyCorrections;
     }
     
     /**
@@ -148,7 +174,7 @@
      * @param cuts The numerical cuts.
      */
     public void setCuts(double[] cuts) {
-        this.cutValues = cuts;
+        this.cuts = cuts;
     }
     
     /**
@@ -175,15 +201,15 @@
         if (this.clusterer == null) {
             throw new RuntimeException("The clusterer was never initialized.");
         }
-        if (this.cutValues != null) {
+        if (this.cuts != null) {
             logger.config("setting cuts on clusterer");
-            this.clusterer.getCuts().setValues(cutValues);
+            this.clusterer.getCuts().setValues(cuts);
         } 
         logger.config("Clusterer has the following cuts ...");
         for (int cutIndex = 0; cutIndex < clusterer.getCuts().getValues().length; cutIndex++) {
             logger.config("  " + this.clusterer.getCuts().getNames()[cutIndex] + " = " + this.clusterer.getCuts().getValue(cutIndex));
         }            
-        logger.config("initializing clusterer");
+        logger.config("initializing clusterer " + clusterer.getClass().getName());
         this.clusterer.initialize();
     }
     
@@ -211,6 +237,19 @@
                 flags = 1 << LCIOConstants.CLBIT_HITS;
             }
             if (!clusters.isEmpty() || this.createEmptyClusterCollection) {
+                if (sortHits) {
+                    // Sort the hits.
+                    ClusterUtilities.sortReconClusterHits(clusters);
+                }
+                if (calculateProperties) {
+                    // Calculate properties using default property calculator.
+                    ClusterUtilities.calculateProperties(clusters);
+                }
+                if (applyCorrections) {
+                    // Apply additional position and energy corrections.
+                    ClusterUtilities.applyCorrections(clusters);
+                }
+                                                
                 logger.finer("writing " + clusters.size() + " clusters to collection " + outputClusterCollectionName);
                 event.put(outputClusterCollectionName, clusters, Cluster.class, flags);
                 if (!this.writeClusterCollection) {