lcsim/src/org/lcsim/contrib/uiowa/structural
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;
+}