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