Commit in lcsim/src/org/lcsim/contrib/uiowa/structural on MAIN
TestFragmentMerger.java+101added 1.1
Wrapper to make plots while merging fragments

lcsim/src/org/lcsim/contrib/uiowa/structural
TestFragmentMerger.java added at 1.1
diff -N TestFragmentMerger.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ TestFragmentMerger.java	6 Jan 2006 23:02:01 -0000	1.1
@@ -0,0 +1,101 @@
+package structural;
+
+import java.util.List;
+import hep.aida.ITree;
+import hep.aida.IAnalysisFactory; 
+import hep.aida.IHistogramFactory; 
+import hep.aida.IHistogram1D; 
+import hep.aida.ICloud1D;
+import hep.aida.ICloud2D;
+import java.io.IOException; 
+
+import org.lcsim.event.Cluster;
+import org.lcsim.recon.cluster.util.BasicCluster;
+import org.lcsim.event.EventHeader;
+
+public class TestFragmentMerger extends FragmentMerger
+{
+    public TestFragmentMerger(String inputClusterListName, String outputClusterListName, FragmentIdentifier fragmentID, CheatFragmentMerger cheater)
+    {
+	super(inputClusterListName, outputClusterListName, fragmentID);
+	m_cheater = cheater;
+
+	IAnalysisFactory af = IAnalysisFactory.create();
+	try {
+            m_tree = af.createTreeFactory().create("FragmentMerge.aida","xml",false,true); 
+	    System.out.println(this.getClass().getName()+": Writing to output file FragmentMerge.aida...");
+	    m_histoFactory = af.createHistogramFactory(m_tree); 
+	    m_histoMergedGoodECAL   = m_histoFactory.createCloud1D("m_histoMergedGoodECAL");
+	    m_histoMergedBadECAL    = m_histoFactory.createCloud1D("m_histoMergedBadECAL");
+	    m_histoMergedGoodHCAL   = m_histoFactory.createCloud1D("m_histoMergedGoodHCAL");
+	    m_histoMergedBadHCAL    = m_histoFactory.createCloud1D("m_histoMergedBadHCAL");
+	    m_fractionMergedBadECAL = m_histoFactory.createCloud1D("m_fractionMergedBadECAL");
+	    m_fractionMergedBadHCAL = m_histoFactory.createCloud1D("m_fractionMergedBadHCAL");
+	}  catch (IOException ioe1) {
+            ioe1.printStackTrace(); 
+	}
+    }
+
+    protected double m_hitsMergedGoodHCAL;
+    protected double m_hitsMergedBadHCAL;
+    protected double m_energyMergedGoodECAL;
+    protected double m_energyMergedBadECAL;
+    protected ICloud1D m_histoMergedGoodECAL;
+    protected ICloud1D m_histoMergedBadECAL;
+    protected ICloud1D m_histoMergedGoodHCAL;
+    protected ICloud1D m_histoMergedBadHCAL;
+    protected ICloud1D m_fractionMergedBadECAL;
+    protected ICloud1D m_fractionMergedBadHCAL;
+    ITree m_tree = null;
+    IHistogramFactory m_histoFactory = null;
+
+    public void suspend() {
+	try {
+	    m_tree.commit();
+	} catch(IOException ioe1) {
+            ioe1.printStackTrace(); 
+        }
+	super.suspend();
+    }
+
+    public void process(EventHeader event)
+    {
+	m_hitsMergedGoodHCAL = 0.0;
+	m_hitsMergedBadHCAL = 0.0;
+	m_energyMergedGoodECAL = 0.0;
+	m_energyMergedBadECAL = 0.0;
+	super.process(event);
+	m_histoMergedGoodECAL.fill(m_energyMergedGoodECAL);
+	m_histoMergedBadECAL.fill(m_energyMergedBadECAL);
+	m_histoMergedGoodHCAL.fill(m_hitsMergedGoodHCAL);
+	m_histoMergedBadHCAL.fill(m_hitsMergedBadHCAL);
+	m_fractionMergedBadECAL.fill(m_energyMergedBadECAL / (m_energyMergedBadECAL+m_energyMergedGoodECAL) );
+	m_fractionMergedBadHCAL.fill(m_hitsMergedBadHCAL / (m_hitsMergedBadHCAL+m_hitsMergedGoodHCAL) );
+    }
+
+    protected BasicCluster findBestMerge(Cluster fragment, List<Cluster> nonFragments, List<Cluster> fragments)
+    {
+	// Here is the non-cheating answer we'll give:
+	BasicCluster nonCheatingAnswer = super.findBestMerge(fragment, nonFragments, fragments);
+	// Here is the cheating answer:
+	m_cheater.m_event = m_event;
+	BasicCluster cheatingAnswer = m_cheater.findBestMerge(fragment, nonFragments, fragments);
+
+	double energyECAL = MiscUtilities.correctedEnergyInClusterECAL(null, fragment);
+	double hitsHCAL = MiscUtilities.countHitsInClusterHCAL(null, fragment);
+
+	if (nonCheatingAnswer == cheatingAnswer) {
+	    //System.out.println("DEBUG: GOOD merge ("+fragment.getCalorimeterHits().size()+" hit fragment -> "+cheatingAnswer.getCalorimeterHits().size()+" hit parent); HCAL "+hitsHCAL+" hits, ECAL "+energyECAL+" GeV.");
+	    m_hitsMergedGoodHCAL += hitsHCAL;
+	    m_energyMergedGoodECAL += energyECAL;
+	} else {
+	    //System.out.println("DEBUG: BAD merge ("+fragment.getCalorimeterHits().size()+" hit fragment -> "+nonCheatingAnswer.getCalorimeterHits().size()+" hit fake instead of "+cheatingAnswer.getCalorimeterHits().size()+" hit parent); HCAL "+hitsHCAL+" hits, ECAL "+energyECAL+" GeV.");
+	    m_hitsMergedBadHCAL += hitsHCAL;
+	    m_energyMergedBadECAL += energyECAL;
+	}
+
+	return nonCheatingAnswer;
+    }
+
+    CheatFragmentMerger m_cheater;
+}
CVSspam 0.2.8