lcsim/src/org/lcsim/contrib/uiowa/structural
diff -N TestFragmentIdentifier.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ TestFragmentIdentifier.java 24 Dec 2005 19:22:58 -0000 1.1
@@ -0,0 +1,130 @@
+package structural;
+
+import org.lcsim.event.Cluster;
+import org.lcsim.event.EventHeader;
+
+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 hep.physics.vec.BasicHep3Vector;
+import hep.physics.vec.Hep3Vector;
+import hep.physics.vec.VecOp;
+
+/**
+ * Test the performance of a FragmentIdentifier by
+ * comparing it to another, cheating FragmentIdentifier.
+ *
+ * @version $Id: TestFragmentIdentifier.java,v 1.1 2005/12/24 19:22:58 mcharles Exp $
+ */
+
+public class TestFragmentIdentifier implements FragmentIdentifier
+{
+ public TestFragmentIdentifier(FragmentIdentifier testID, FragmentIdentifier cheatID)
+ {
+ m_testID = testID;
+ m_cheatID = cheatID;
+ IAnalysisFactory af = IAnalysisFactory.create();
+ try {
+ m_tree = af.createTreeFactory().create("FragmentID.aida","xml",false,true);
+ m_histoFactory = af.createHistogramFactory(m_tree);
+ m_hcorrectID = m_histoFactory.createHistogram1D("correctID", 2, -0.5, 1.5);
+ m_hnumHitsWhenFragFrag = m_histoFactory.createCloud1D("numHitsWhenCorrect (test=frag, cheat=frag)");
+ m_hnumHitsWhenFragNon = m_histoFactory.createCloud1D("numHitsWhenWrong (test=frag, cheat=nonfrag)");
+ m_hnumHitsWhenNonFrag = m_histoFactory.createCloud1D("numHitsWhenWrong (test=nonfrag, cheat=frag)");
+ m_hnumHitsWhenNonNon = m_histoFactory.createCloud1D("numHitsWhenCorrect (test=nonfrag, cheat=nonfrag)");
+ m_hdocaWhenFragFrag = m_histoFactory.createCloud1D("docaWhenCorrect (test=frag, cheat=frag)");
+ m_hdocaWhenFragNon = m_histoFactory.createCloud1D("docaWhenWrong (test=frag, cheat=nonfrag)");
+ m_hdocaWhenNonFrag = m_histoFactory.createCloud1D("docaWhenWrong (test=nonfrag, cheat=frag)");
+ m_hdocaWhenNonNon = m_histoFactory.createCloud1D("docaWhenCorrect (test=nonfrag, cheat=nonfrag)");
+ m_hnumHitsVsDocaWhenFragFrag = m_histoFactory.createCloud2D("numHitsVsDocaWhenCorrect (test=frag, cheat=frag)");
+ m_hnumHitsVsDocaWhenFragNon = m_histoFactory.createCloud2D("numHitsVsDocaWhenWrong (test=frag, cheat=nonfrag)");
+ m_hnumHitsVsDocaWhenNonFrag = m_histoFactory.createCloud2D("numHitsVsDocaWhenWrong (test=nonfrag, cheat=frag)");
+ m_hnumHitsVsDocaWhenNonNon = m_histoFactory.createCloud2D("numHitsVsDocaWhenCorrect (test=nonfrag, cheat=nonfrag)");
+ } catch (IOException ioe1) {
+ ioe1.printStackTrace();
+ }
+ }
+
+ /**
+ * Check whether the cluster is a fragment.
+ * Both the test and cheat FragmentIdentifiers are
+ * applied, but the return value is from the test
+ * FragmentIdentifier.
+ */
+ public boolean isFragment(Cluster clus, EventHeader event)
+ {
+ boolean test_isFragment = m_testID.isFragment(clus, event);
+ boolean cheat_isFragment = m_cheatID.isFragment(clus, event);
+
+ String debugString = new String("DEBUG: Fragment ID ");
+ if (test_isFragment == cheat_isFragment) {
+ m_hcorrectID.fill(1);
+ debugString += "correct";
+ } else {
+ m_hcorrectID.fill(0);
+ debugString += "wrong";
+ }
+ debugString += ": ";
+ debugString += test_isFragment;
+ debugString += " vs ";
+ debugString += cheat_isFragment;
+ System.out.println(debugString);
+
+ int numHits = clus.getCalorimeterHits().size();
+ double doca = -1.0;
+ if (numHits>=4) {
+ BasicHep3Vector originPoint = new BasicHep3Vector(0,0,0);
+ Hep3Vector[] linePosAndDir = MiscUtilities.getPositionAndDirection(clus);
+ doca = MiscUtilities.findDOCAToPoint(linePosAndDir[0], linePosAndDir[1], originPoint);
+ }
+
+ if (test_isFragment && cheat_isFragment) {
+ m_hnumHitsWhenFragFrag.fill(numHits);
+ if (numHits>=4) { m_hdocaWhenFragFrag.fill(doca); m_hnumHitsVsDocaWhenFragFrag.fill(numHits,doca); }
+ } else if (test_isFragment && !cheat_isFragment) {
+ m_hnumHitsWhenFragNon.fill(numHits);
+ if (numHits>=4) { m_hdocaWhenFragNon.fill(doca); m_hnumHitsVsDocaWhenFragNon.fill(numHits,doca); }
+ } else if (!test_isFragment && cheat_isFragment) {
+ m_hnumHitsWhenNonFrag.fill(numHits);
+ if (numHits>=4) { m_hdocaWhenNonFrag.fill(doca); m_hnumHitsVsDocaWhenNonFrag.fill(numHits,doca); }
+ } else if (!test_isFragment && !cheat_isFragment) {
+ m_hnumHitsWhenNonNon.fill(numHits);
+ if (numHits>=4) { m_hdocaWhenNonNon.fill(doca); m_hnumHitsVsDocaWhenNonNon.fill(numHits,doca); }
+ }
+
+ try {
+ m_tree.commit();
+ } catch(IOException ioe1) {
+ ioe1.printStackTrace();
+ }
+
+ return test_isFragment;
+ }
+
+ protected FragmentIdentifier m_testID;
+ protected FragmentIdentifier m_cheatID;
+
+ ITree m_tree = null;
+ IHistogramFactory m_histoFactory = null;
+ IHistogram1D m_hcorrectID;
+
+ ICloud1D m_hnumHitsWhenFragFrag;
+ ICloud1D m_hnumHitsWhenFragNon ;
+ ICloud1D m_hnumHitsWhenNonFrag ;
+ ICloud1D m_hnumHitsWhenNonNon ;
+ ICloud1D m_hdocaWhenFragFrag;
+ ICloud1D m_hdocaWhenFragNon ;
+ ICloud1D m_hdocaWhenNonFrag ;
+ ICloud1D m_hdocaWhenNonNon ;
+ ICloud2D m_hnumHitsVsDocaWhenFragFrag;
+ ICloud2D m_hnumHitsVsDocaWhenFragNon ;
+ ICloud2D m_hnumHitsVsDocaWhenNonFrag ;
+ ICloud2D m_hnumHitsVsDocaWhenNonNon ;
+
+
+}