Author: [log in to unmask]
Date: Wed Jun 10 16:05:22 2015
New Revision: 3123
Log:
Add cluster sorting methods to utility class.
Modified:
java/trunk/ecal-recon/src/main/java/org/hps/recon/ecal/cluster/ClusterUtilities.java
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 Wed Jun 10 16:05:22 2015
@@ -471,5 +471,64 @@
return cluster.getType() == ClusterType.CTP.getType() ||
cluster.getType() == ClusterType.GTP.getType() ||
cluster.getType() == ClusterType.GTP_ONLINE.getType();
- }
+ }
+
+ /**
+ * Comparator of cluster energies.
+ */
+ static final class ClusterEnergyComparator implements Comparator<Cluster> {
+
+ /**
+ * Compare cluster energies.
+ *
+ * @return -1, 0, or 1 if first cluster's energy is less than, equal to, or greater than the first's
+ */
+ @Override
+ public int compare(Cluster o1, Cluster o2) {
+ if (o1.getEnergy() < o2.getEnergy()) {
+ return -1;
+ } else if (o1.getEnergy() > o2.getEnergy()) {
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ }
+
+ /**
+ * Sort a list of clusters.
+ *
+ * @param clusters the list of clusters
+ * @param comparator the comparator to use for sorting
+ * @param inPlace <code>true</code> to sort the list in-place and not make a new list
+ * @param reverse <code>true</code> to use reverse comparator (results in list ordered highest to lowest energy)
+ * @return the sorted list of clusters
+ */
+ public static List<Cluster> sort(final List<Cluster> clusters, final Comparator<Cluster> comparator, boolean inPlace, boolean reverse) {
+ List<Cluster> sortedList = null;
+ if (inPlace) {
+ sortedList = clusters;
+ } else {
+ sortedList = new ArrayList<Cluster>(clusters);
+ }
+ if (reverse) {
+ Collections.sort(clusters, Collections.reverseOrder(comparator));
+ } else {
+ Collections.sort(clusters, comparator);
+ }
+ return sortedList;
+ }
+
+ /**
+ * Find the highest energy cluster from the list.
+ *
+ * @param clusters the list of clusters
+ * @return the highest energy cluster
+ */
+ public static Cluster findHighestEnergyCluster(final List<Cluster> clusters) {
+ if (clusters.isEmpty()) {
+ throw new IllegalArgumentException("The cluster list is empty.");
+ }
+ return sort(clusters, new ClusterEnergyComparator(), true, true).get(0);
+ }
}
|