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