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) {