lcsim/src/org/lcsim/recon/cluster/structural
diff -u -r1.1 -r1.2
--- FragmentHandler.java 4 Jul 2006 23:59:53 -0000 1.1
+++ FragmentHandler.java 12 Oct 2007 20:34:52 -0000 1.2
@@ -19,7 +19,7 @@
*
* @see FragmentIdentifier
* @see FragmentMerger
- * @version $Id: FragmentHandler.java,v 1.1 2006/07/04 23:59:53 mcharles Exp $
+ * @version $Id: FragmentHandler.java,v 1.2 2007/10/12 20:34:52 mcharles Exp $
*/
public class FragmentHandler extends Driver
@@ -72,7 +72,20 @@
fragments.add(cl);
}
}
-
+
+ if ( ! m_allowAllFragments && nonFragments.size()==0 && fragments.size()>0 ) {
+ // If non-fragments list is empty, promote largest non-fragment.
+ Cluster largestCluster = null;
+ for (Cluster frag : fragments) {
+ int size = frag.getCalorimeterHits().size();
+ if (largestCluster==null || size>largestCluster.getCalorimeterHits().size()) {
+ largestCluster = frag;
+ }
+ }
+ fragments.remove(largestCluster);
+ nonFragments.add(largestCluster);
+ }
+
// Merge:
List<Cluster> mergedClusters = m_fragmentMerger.mergeFragments(fragments, nonFragments);
@@ -110,5 +123,16 @@
String m_outputHitMapName;
FragmentIdentifier m_fragmentID;
FragmentMerger m_fragmentMerger;
-
+
+ /**
+ * The FragmentIdentifier could identify every cluster
+ * as a fragment. Is that allowed? (If not, then the largest
+ * fragment will be promoted to non-fragment status.)
+ * Default is to allow the case where only fragments are
+ * present.
+ */
+ public void setAllowAllFragments(boolean allow) {
+ m_allowAllFragments = allow;
+ }
+ boolean m_allowAllFragments = true;
}