Commit in lcsim/src/org/lcsim/recon/cluster/structural on MAIN
FragmentHandler.java+27-31.1 -> 1.2
MJC: For fragment merging, cover pathological case with no non-fragments found in event.

lcsim/src/org/lcsim/recon/cluster/structural
FragmentHandler.java 1.1 -> 1.2
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;
 }
CVSspam 0.2.8