Print

Print


Commit in lcsim/src/org/lcsim/contrib/uiowa/structural on MAIN
TestFragmentIdentifier.java+130added 1.1
emergency commit 3

lcsim/src/org/lcsim/contrib/uiowa/structural
TestFragmentIdentifier.java added at 1.1
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  ;
+
+
+}
CVSspam 0.2.8