Print

Print


Commit in lcsim/src/org/lcsim on MAIN
contrib/uiowa/ExampleReadPFA.java+20added 1.1
             /ExampleRunAndWriteOutPFA.java+45added 1.1
             /NonTrivialPFA.java+17-101.16 -> 1.17
recon/cluster/structural/likelihood/LikelihoodEvaluatorWrapper.java+153added 1.1
                                   /LikelihoodEvaluatorImplementation.java+303added 1.1
                                   /LikelihoodConditionsConverter.java+28added 1.1
                                   /LikelihoodEvaluator.java+18-3051.2 -> 1.3
                                   /LikelihoodEvaluatorCheckpointDriver.java+2-21.2 -> 1.3
+586-317
5 added + 3 modified, total 8 files
MJC: Make NonTrivialPFA able to write out and read in LCIO. Warning: breaks backward compatibility of likelihood files!

lcsim/src/org/lcsim/contrib/uiowa
ExampleReadPFA.java added at 1.1
diff -N ExampleReadPFA.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ExampleReadPFA.java	4 Sep 2007 17:27:56 -0000	1.1
@@ -0,0 +1,20 @@
+package org.lcsim.contrib.uiowa;
+
+import java.util.*;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+
+/**
+ * Very simple example driver to make some PFA benchmark plots
+ * without actually running the PFA -- this would be
+ * used if you had previously run the PFA and written
+ * the output to an LCIO file, and were now reading that 
+ * LCIO file back in.
+ */
+
+public class ExampleReadPFA extends Driver
+{
+    public ExampleReadPFA() {
+	add(new MassPlots("PFAReconstructedParticles", "output-read.aida"));
+    }
+}

lcsim/src/org/lcsim/contrib/uiowa
ExampleRunAndWriteOutPFA.java added at 1.1
diff -N ExampleRunAndWriteOutPFA.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ ExampleRunAndWriteOutPFA.java	4 Sep 2007 17:27:56 -0000	1.1
@@ -0,0 +1,45 @@
+package org.lcsim.contrib.uiowa;
+
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.contrib.uiowa.NonTrivialPFA;
+import org.lcsim.event.EventHeader;
+import org.lcsim.util.loop.LCIODriver;
+import org.lcsim.util.*;
+import org.lcsim.event.*;
+
+/**
+ * Example driver to create PFA output with a list of
+ * ReconstructedParticle objects. The output is written
+ * to "test.slcio". In addition, some dijet mass plots
+ * are written to "output-write.aida".
+ * 
+ * Beware that the LCIO output file will be large!
+ */
+
+public class ExampleRunAndWriteOutPFA extends Driver
+{
+    /** Constructor sets up daughter drivers. */
+    public ExampleRunAndWriteOutPFA()
+    {
+        add(new org.lcsim.contrib.uiowa.NonTrivialPFA(false)); // Run the PFA, output is a List<ReconstructedParticle> named "PFAReconstructedParticles"
+	add(new org.lcsim.contrib.uiowa.MassPlots("PFAReconstructedParticles", "output-write.aida")); // Make some histograms and write them to a file
+	add(new LocalRemoveMCPColls()); // Remove nonstandard MCParticle lists (needed to ensure internally consistent output)
+        add(new org.lcsim.util.loop.LCIODriver("test.slcio")); // Write out to an LCIO file
+    }
+
+    /** Class by Ron, designed to remove nonstandard MCParticle lists. */
+    private class LocalRemoveMCPColls extends Driver {
+	public LocalRemoveMCPColls() {}
+	public void process(EventHeader event) {
+	    List<MCParticle> particles = event.get(MCParticle.class,event.MC_PARTICLES);
+	    List<List<MCParticle>> collections = event.get(MCParticle.class);
+	    for (List<MCParticle> collection : collections) {
+		if(collection != particles) {
+		    String name = event.getMetaData(collection).getName();
+		    event.remove(name);
+		}
+	    }
+	}
+    }
+}

lcsim/src/org/lcsim/contrib/uiowa
NonTrivialPFA.java 1.16 -> 1.17
diff -u -r1.16 -r1.17
--- NonTrivialPFA.java	27 Aug 2007 21:03:58 -0000	1.16
+++ NonTrivialPFA.java	4 Sep 2007 17:27:56 -0000	1.17
@@ -275,9 +275,11 @@
 	    addLikelihoodWriter("likwrite__", eventLargeClusters, eventMips, eventClumps, inputHitListsForAssociator, inputClusterListsForAssociator, mcListName);
 	} else {
 	    // Read in likelihood:
-	    LikelihoodEvaluator eval = null;
+	    LikelihoodEvaluatorWrapper evalWrapper = null;
 	    try {
-		eval = LikelihoodEvaluator.readFromFile("likelihood.bin");
+		//eval = LikelihoodEvaluator.readFromFile("likelihood.bin");
+		evalWrapper = new LikelihoodEvaluatorWrapper();
+		m_evalWrapper = evalWrapper;
 	    } catch (AssertionError x) {
 		System.out.println("ERROR: Failed to read in the likelihood control file <likelihood.bin> from the working directory.");
 		System.out.println("To generate this file, run this Driver in write mode on a similar sample of events.");
@@ -289,11 +291,12 @@
 		System.out.println("  http://www.slac.stanford.edu/~mcharles/tmp/sid/acme0605_steel_rpc/likelihood.bin");
 		System.out.println("  http://www.slac.stanford.edu/~mcharles/tmp/sid/acme0605_steel_scint/likelihood.bin");
 		System.out.println("  http://www.slac.stanford.edu/~mcharles/tmp/sid/acme0605_w_rpc/likelihood.bin");
-		System.exit(-1);
+		//System.exit(-1);
+		throw(x);
 	    }
 	    // Some likelihood quantities need per-event info:
-	    makeEventInfoList(eval);
-	    eval.setDebug(false); // lots of debug printout if enabled!
+	    //makeEventInfoList(eval);
+	    evalWrapper.setDebug(false); // lots of debug printout if enabled!
 
 	    // Link MIPs, clumps
 	    String eventSkeletonClusters = "skeletons";
@@ -309,9 +312,9 @@
 	    } else {
 		boolean makeExtraLikelihoodPlots = false;
 		if (makeExtraLikelihoodPlots) {
-		    addStructuralLinkerWithPlots(prefix, eval, eventLargeClusters, eventMips, eventClumps, eventSkeletonClusters, eventUnusedHits, inputHitListsForAssociator, inputClusterListsForAssociator, mcListName);
+		    addStructuralLinkerWithPlots(prefix, evalWrapper, eventLargeClusters, eventMips, eventClumps, eventSkeletonClusters, eventUnusedHits, inputHitListsForAssociator, inputClusterListsForAssociator, mcListName);
 		} else {
-		    addStructuralLinker(prefix, eval, eventLargeClusters, eventMips, eventClumps, eventSkeletonClusters, eventUnusedHits);
+		    addStructuralLinker(prefix, evalWrapper, eventLargeClusters, eventMips, eventClumps, eventSkeletonClusters, eventUnusedHits);
 		}
 	    }
 	    // Book-keeping
@@ -320,7 +323,7 @@
 	    // Check track matches are sensible; don't match multiple
 	    // tracks to the same skeleton.
 	    String eventSplitSkeletonClusters = "splitSkeletons";
-	    add(new CheckSkeletonsForMultipleTracks(eval, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps));
+	    add(new CheckSkeletonsForMultipleTracks(evalWrapper, trackList, eventSkeletonClusters, eventSplitSkeletonClusters, eventMips, eventClumps));
 
 	    // Add halo of nearby hits
 	    prefix = "halo__";
@@ -394,7 +397,10 @@
     public void process(EventHeader event) {
         // Special handling of things that need per-event info.
 	// This probably belongs in its own driver.
-        if (m_perEventQuantities != null) {
+	if (m_evalWrapper != null) {
+	    makeEventInfoList(m_evalWrapper);
+	}
+	if (m_perEventQuantities != null) {
             for (StructuralLikelihoodQuantityWithEventInfo quant : m_perEventQuantities) {
                 quant.setEventInfo(event);
             }
@@ -423,6 +429,7 @@
     // Special treatment for likelihood quantities that need per-event info
     // (e.g. geometry)
     List<StructuralLikelihoodQuantityWithEventInfo> m_perEventQuantities = null;
+    LikelihoodEvaluatorWrapper m_evalWrapper = null;
 
 
     protected void addCheatingPhotonFinder(String prefix, String inputHitMap, String inputTrackList, String outputPhotonClusterList, String outputHitMap, String mcListName)
@@ -640,7 +647,7 @@
     protected void addLikelihoodWriter(String prefix, String inputClusterList, String inputMIPList, String inputClumpList, String[] inputHitListsForAssociator, String[] inputClusterListsForAssociator, String mcListName)
     {
 	// Make likelihood PDFs
-	LikelihoodEvaluator eval = new LikelihoodEvaluator();
+	LikelihoodEvaluator eval = new LikelihoodEvaluatorImplementation();
 	eval.addLikelihoodQuantityTrackToTrack(new TrackToTrackDOCA(), 50, 0.0, 100.0, false, true);
 	eval.addLikelihoodQuantityTrackToTrack(new TrackToTrackPOCAInCalorimeter(), 2, -0.5, 1.5, false, false);
 	eval.addLikelihoodQuantityTrackToTrack(new TrackToTrackSmallestDistanceToPOCA(), 25, 0.0, 250.0, false, true);

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
LikelihoodEvaluatorWrapper.java added at 1.1
diff -N LikelihoodEvaluatorWrapper.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LikelihoodEvaluatorWrapper.java	4 Sep 2007 17:27:57 -0000	1.1
@@ -0,0 +1,153 @@
+package org.lcsim.recon.cluster.structural.likelihood;
+
+import java.util.List;
+import java.util.Vector;
+import org.lcsim.event.Cluster;
+
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.io.IOException; 
+
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.RawConditions;
+import org.lcsim.conditions.ConditionsListener;
+import org.lcsim.conditions.ConditionsConverter;
+import org.lcsim.conditions.CachedConditions;
+import org.lcsim.conditions.ConditionsEvent;
+
+/** Wrapper class.
+ */
+
+public class LikelihoodEvaluatorWrapper implements ConditionsListener,LikelihoodEvaluator {
+    private LikelihoodEvaluator m_eval = null;
+    protected CachedConditions<LikelihoodEvaluator> _cachedConditions;
+    protected boolean m_debug;
+
+    public LikelihoodEvaluatorWrapper() {
+	ConditionsManager mgr = ConditionsManager.defaultInstance();
+	ConditionsConverter conv = new LikelihoodConditionsConverter();
+	mgr.registerConditionsConverter(conv);
+    }
+
+    /** Access the raw evaluator, if needed. */
+    public LikelihoodEvaluator getEvaluator() { 
+	return m_eval; 
+    }
+
+    /** Force read of evaluator from a file. */
+    public void readEvaluatorFromFile(String filename) throws java.io.IOException, java.lang.ClassNotFoundException {
+	try {
+            FileInputStream fis = new FileInputStream(filename);
+            ObjectInputStream ois = new ObjectInputStream(fis);
+            Object o = ois.readObject();
+            LikelihoodEvaluator eval = (LikelihoodEvaluator) o;
+            m_eval = eval;
+	    m_eval.setDebug(m_debug);
+        } catch (java.io.IOException x) {
+            throw new AssertionError("java.io.IOException: "+x);
+        } catch (java.lang.ClassNotFoundException x) {
+            throw new AssertionError("java.lang.ClassNotFoundException: "+x);
+        }
+    }
+
+    /** Force read of evaluator from conditions. */
+    static public LikelihoodEvaluator readFromConditions() throws java.io.IOException, java.lang.ClassNotFoundException {
+	ConditionsManager mgr = ConditionsManager.defaultInstance();
+	RawConditions conditions = mgr.getRawConditions("structuralPFA/likelihood.bin");
+	InputStream is = conditions.getInputStream();
+	ObjectInputStream ois = new ObjectInputStream(is);
+	Object o = ois.readObject();
+	LikelihoodEvaluator eval = (LikelihoodEvaluator) o;
+	return eval;
+    }
+
+    /** Register to receive likelihood.bin from events */
+    public void registerAsConditionsListener(ConditionsEvent event) {
+	ConditionsManager mgr;
+	if (event != null) {
+	    mgr = event.getConditionsManager();
+	} else {
+	    mgr = ConditionsManager.defaultInstance();
+	}
+	_cachedConditions = mgr.getCachedConditions(LikelihoodEvaluator.class,"structuralPFA/likelihood.bin");
+	m_eval = _cachedConditions.getCachedData();
+	_cachedConditions.addConditionsListener(this);
+    }
+
+    public void conditionsChanged(ConditionsEvent event) {
+	registerAsConditionsListener(event);
+    }
+
+    protected void checkInit() {
+	if (m_eval == null) {
+	    registerAsConditionsListener(null);
+	}
+    }
+
+    // Interface
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantities() {
+	checkInit();
+	return m_eval.getLikelihoodQuantities();
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToTrack() {
+	checkInit();
+	return m_eval.getLikelihoodQuantitiesTrackToTrack();
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToClump() {
+	checkInit();
+	return m_eval.getLikelihoodQuantitiesTrackToClump();
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesClumpToClump() {
+	checkInit();
+	return m_eval.getLikelihoodQuantitiesClumpToClump();
+    }
+    public void addLikelihoodQuantityTrackToTrack(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow) {
+	checkInit();
+	m_eval.addLikelihoodQuantityTrackToTrack(quant, nbins, min, max, useUnderFlow, useOverFlow);
+    }
+    public void addLikelihoodQuantityTrackToClump(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow) {
+	checkInit();
+	m_eval.addLikelihoodQuantityTrackToClump(quant, nbins, min, max, useUnderFlow, useOverFlow);
+    }
+    public void addLikelihoodQuantityClumpToClump(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow) {
+	checkInit();
+	m_eval.addLikelihoodQuantityClumpToClump(quant, nbins, min, max, useUnderFlow, useOverFlow);
+    }
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToTrack(boolean goodLink) {
+	checkInit();
+	return m_eval.getLikelihoodDistributionTrackToTrack(goodLink);
+    }
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToClump(boolean goodLink) {
+	checkInit();
+	return m_eval.getLikelihoodDistributionTrackToClump(goodLink);
+    }
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionClumpToClump(boolean goodLink) {
+	checkInit();
+	return m_eval.getLikelihoodDistributionClumpToClump(goodLink);
+    }    
+    public double getLinkLikelihoodTrackToTrack(Cluster clus1, Cluster clus2) {
+	checkInit();
+	return m_eval.getLinkLikelihoodTrackToTrack(clus1, clus2);
+    }
+    public double getLinkLikelihoodTrackToClump(Cluster clus1, Cluster clus2) {
+	checkInit();
+	return m_eval.getLinkLikelihoodTrackToClump(clus1, clus2);
+    }
+    public double getLinkLikelihoodClumpToClump(Cluster clus1, Cluster clus2) {
+	checkInit();
+	return m_eval.getLinkLikelihoodClumpToClump(clus1, clus2);
+    }
+    public void writeToFile(String filename) {
+	checkInit();
+	m_eval.writeToFile(filename);
+    }
+    public void setDebug(boolean debug) {
+	m_debug = debug;
+    }
+
+    
+}

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
LikelihoodEvaluatorImplementation.java added at 1.1
diff -N LikelihoodEvaluatorImplementation.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LikelihoodEvaluatorImplementation.java	4 Sep 2007 17:27:57 -0000	1.1
@@ -0,0 +1,303 @@
+package org.lcsim.recon.cluster.structural.likelihood;
+
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Vector;
+
+import java.io.FileOutputStream;
+import java.io.FileInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.io.IOException; 
+
+import hep.aida.ITree;
+import hep.aida.IAnalysisFactory; 
+import hep.aida.IHistogramFactory; 
+import hep.aida.IHistogram1D; 
+
+import org.lcsim.event.Cluster;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.RawConditions;
+
+public class LikelihoodEvaluatorImplementation implements java.io.Serializable, LikelihoodEvaluator {
+
+    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsTrackToTrack = null;
+    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsTrackToClump = null;
+    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsClumpToClump = null;
+    transient boolean m_debug; // default value is false
+
+    public LikelihoodEvaluatorImplementation()
+    {
+        // Maps from Boolean (the tag) to Distribution
+        m_LikelihoodDistributionsTrackToTrack = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
+        m_LikelihoodDistributionsTrackToClump = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
+        m_LikelihoodDistributionsClumpToClump = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
+        m_LikelihoodDistributionsTrackToTrack.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
+        m_LikelihoodDistributionsTrackToTrack.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
+        m_LikelihoodDistributionsTrackToClump.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
+        m_LikelihoodDistributionsTrackToClump.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
+        m_LikelihoodDistributionsClumpToClump.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
+        m_LikelihoodDistributionsClumpToClump.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
+    }
+
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantities() {
+	Vector<StructuralLikelihoodQuantity> vOut = new Vector<StructuralLikelihoodQuantity>();
+	vOut.addAll(getLikelihoodQuantitiesTrackToTrack());
+	vOut.addAll(getLikelihoodQuantitiesTrackToClump());
+	vOut.addAll(getLikelihoodQuantitiesClumpToClump());
+	return vOut;
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToTrack() {
+	return getLikelihoodQuantities(m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(true)));
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToClump() {
+	return getLikelihoodQuantities(m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(true)));
+    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesClumpToClump() {
+	return getLikelihoodQuantities(m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(true)));
+    }
+    protected List<StructuralLikelihoodQuantity> getLikelihoodQuantities(Vector<LikelihoodDistribution> vect) {
+	Vector<StructuralLikelihoodQuantity> vOut = new Vector<StructuralLikelihoodQuantity>();
+	for (LikelihoodDistribution dist : vect) {
+	    StructuralLikelihoodQuantity quant = dist.getQuantity();
+	    vOut.add(quant);
+	}
+	return vOut;
+    }
+
+    public void addLikelihoodQuantityTrackToTrack(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow) {
+        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(true));
+        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(false));
+        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+    }
+    public void addLikelihoodQuantityTrackToClump(StructuralLikelihoodQuantity quant, int nbins, double min
+, double max, boolean useUnderFlow, boolean useOverFlow) {
+        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(true));
+        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(false));
+        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+    }
+    public void addLikelihoodQuantityClumpToClump(StructuralLikelihoodQuantity quant, int nbins, double min
+, double max, boolean useUnderFlow, boolean useOverFlow) {
+        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(true));
+        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(false));
+        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
+    }
+
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToTrack(boolean goodLink) {
+        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
+        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsTrackToTrack.get(isLinkCorrect);
+        return vDistributions;
+    }
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToClump(boolean goodLink) {
+        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
+        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsTrackToClump.get(isLinkCorrect);
+        return vDistributions;
+    }
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionClumpToClump(boolean goodLink) {
+        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
+        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsClumpToClump.get(isLinkCorrect);
+        return vDistributions;
+    }
+    
+    public double getLinkLikelihoodTrackToTrack(Cluster clus1, Cluster clus2) {
+	Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionTrackToTrack(true);
+	Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionTrackToTrack(false);
+	if (m_debug) { 
+	    double totalGoodLikelihood = 1.0;
+	    double totalBadLikelihood = 1.0;
+	    for (int i=0; i<vLinked.size(); i++) {
+		LikelihoodDistribution distLinked = vLinked.get(i);
+		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
+		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
+		try {
+		    double goodPDF = distLinked.getPDF(clus1, clus2);
+		    double badPDF = distUnlinked.getPDF(clus1, clus2);
+		    double goodProb = goodPDF/(goodPDF+badPDF);
+		    double badProb = badPDF/(goodPDF+badPDF);
+		    totalGoodLikelihood *= goodProb;
+		    totalBadLikelihood *= badProb;
+		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
+		} catch (QuantityNotDefinedException x) {
+		    // Have to ignore this one.
+		    System.out.println("Warning: "+x);
+		}
+	    }
+	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
+	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
+	}
+	return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
+    }   
+    public double getLinkLikelihoodTrackToClump(Cluster clus1, Cluster clus2) {
+        Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionTrackToClump(true);
+        Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionTrackToClump(false);
+	if (m_debug) { 
+	    double totalGoodLikelihood = 1.0;
+	    double totalBadLikelihood = 1.0;
+	    for (int i=0; i<vLinked.size(); i++) {
+		LikelihoodDistribution distLinked = vLinked.get(i);
+		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
+		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
+		try {
+		    double goodPDF = distLinked.getPDF(clus1, clus2);
+		    double badPDF = distUnlinked.getPDF(clus1, clus2);
+		    double goodProb = goodPDF/(goodPDF+badPDF);
+		    double badProb = badPDF/(goodPDF+badPDF);
+		    totalGoodLikelihood *= goodProb;
+		    totalBadLikelihood *= badProb;
+		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
+		} catch (QuantityNotDefinedException x) {
+		    // Have to ignore this one.
+		    System.out.println("Warning: "+x);
+		}
+	    }
+	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
+	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
+	}
+        return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
+    }   
+    public double getLinkLikelihoodClumpToClump(Cluster clus1, Cluster clus2) {
+        Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionClumpToClump(true);
+        Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionClumpToClump(false);
+	if (m_debug) { 
+	    double totalGoodLikelihood = 1.0;
+	    double totalBadLikelihood = 1.0;
+	    for (int i=0; i<vLinked.size(); i++) {
+		LikelihoodDistribution distLinked = vLinked.get(i);
+		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
+		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
+		try {
+		    double goodPDF = distLinked.getPDF(clus1, clus2);
+		    double badPDF = distUnlinked.getPDF(clus1, clus2);
+		    double goodProb = goodPDF/(goodPDF+badPDF);
+		    double badProb = badPDF/(goodPDF+badPDF);
+		    totalGoodLikelihood *= goodProb;
+		    totalBadLikelihood *= badProb;
+		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
+		} catch (QuantityNotDefinedException x) {
+		    // Have to ignore this one.
+		    System.out.println("Warning: "+x);
+		}
+	    }
+	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
+	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
+	}
+        return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
+    }   
+
+    protected double getLinkLikelihood(Cluster clus1, Cluster clus2, Vector<LikelihoodDistribution> vLinked, Vector<LikelihoodDistribution> vUnlinked)
+    {
+        double totalGoodLikelihood = 1.0;
+        double totalBadLikelihood = 1.0;
+        for (int i=0; i<vLinked.size(); i++) {
+            LikelihoodDistribution distLinked = vLinked.get(i);
+            LikelihoodDistribution distUnlinked = vUnlinked.get(i);
+            try {
+                double goodPDF = distLinked.getPDF(clus1, clus2);
+                double badPDF = distUnlinked.getPDF(clus1, clus2);
+                double goodProb = goodPDF/(goodPDF+badPDF);
+                double badProb = badPDF/(goodPDF+badPDF);
+                totalGoodLikelihood *= goodProb;
+                totalBadLikelihood *= badProb;
+            } catch (QuantityNotDefinedException x) {
+                // Have to ignore this one.
+                System.out.println("Warning: "+x);
+            }
+        }       
+        double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
+        return normalizedGoodLikelihood;
+    }
+
+    public void writeToFile(String filename)
+    {
+        // Open the file for writing:
+        try {
+            FileOutputStream fos = new FileOutputStream(filename);
+            ObjectOutputStream oos = new ObjectOutputStream(fos);
+            oos.writeObject(this);
+        } catch (java.io.IOException x) {
+            throw new AssertionError("java.io.IOException: "+x);
+        }
+    }
+
+    // Routines to make interesting plots:
+
+    /**
+      * Write the likelihood distributions out to the given file
+      */
+    public void makePlots(String filename)
+    {
+        IAnalysisFactory af = IAnalysisFactory.create();
+        try {
+            ITree t = af.createTreeFactory().create(filename,"xml",false,true); 
+            IHistogramFactory hf = af.createHistogramFactory(t); 
+            makePlots(hf, "hTrackTrack", m_LikelihoodDistributionsTrackToTrack);
+            makePlots(hf, "hTrackClump", m_LikelihoodDistributionsTrackToClump);
+            makePlots(hf, "hClumpClump", m_LikelihoodDistributionsClumpToClump);
+            t.commit();
+        } catch(IOException ioe1) {
+            ioe1.printStackTrace(); 
+        }
+    }
+
+    /**
+     * Make the plots for a particular set of variables (clump-clump, track-track, track-clump)
+     */
+    protected void makePlots(IHistogramFactory hf, String name1, Map<Boolean, Vector<LikelihoodDistribution> > map)
+    {
+	for (LikelihoodDistribution dist : map.get(Boolean.valueOf(true))) {
+	    makePlot(hf, name1, "Signal", dist);
+	}
+	for (LikelihoodDistribution dist : map.get(Boolean.valueOf(false))) {
+	    makePlot(hf, name1, "Background", dist);
+	}
+    }
+
+    /**
+     * Make one plot
+     */
+    protected void makePlot(IHistogramFactory hf, String name1, String name2, LikelihoodDistribution dist)
+    {
+        String subName = dist.getQuantity().getClass().getName();
+        String fullName = new String(name1 + "_" + name2 + "_" + subName);
+        if (m_debug) { System.out.println("DEBUG: Making histogram for ["+fullName+"]"); }
+        int nbins = dist.getNbins();
+        double min = dist.getMin();
+        double max = dist.getMax();
+        double binsize = (max-min) / ( (double)(nbins) );
+        int histo_nbins = nbins;
+        double histo_min = min;
+        double histo_max = max;
+        if (dist.useUnderFlow()) {
+            histo_nbins++;
+            histo_min -= binsize;
+        }
+        if (dist.useOverFlow()) {
+            histo_nbins++;
+            histo_max += binsize;
+        }
+        IHistogram1D histo = hf.createHistogram1D(fullName, histo_nbins, histo_min, histo_max);
+        for (int i=0; i<nbins; i++) { 
+            double binCenter = min + binsize*( (double)(i) + 0.5);
+            histo.fill(binCenter, dist.getPDF(i));
+	    if (m_debug) { System.out.println("   "+i+": "+dist.getPDF(i)); }
+        }
+        if (dist.useUnderFlow()) {
+            histo.fill(min-0.5*binsize, dist.getPDF(-1));
+	    if (m_debug) { System.out.println("   underflow: "+dist.getPDF(-1)); }
+        }
+        if (dist.useOverFlow()) {
+            histo.fill(max+0.5*binsize, dist.getPDF(nbins));
+	    if (m_debug) { System.out.println("   overflow: "+dist.getPDF(nbins)); }
+        }
+    }
+
+    public void setDebug(boolean debug) {
+	m_debug = debug;
+    }
+}

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
LikelihoodConditionsConverter.java added at 1.1
diff -N LikelihoodConditionsConverter.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ LikelihoodConditionsConverter.java	4 Sep 2007 17:27:57 -0000	1.1
@@ -0,0 +1,28 @@
+package org.lcsim.recon.cluster.structural.likelihood;
+
+import org.lcsim.conditions.ConditionsConverter;
+import org.lcsim.conditions.ConditionsManager;
+import org.lcsim.conditions.RawConditions;
+import java.io.ObjectInputStream;
+import java.io.InputStream;
+
+public class LikelihoodConditionsConverter implements ConditionsConverter<LikelihoodEvaluator> {
+    public LikelihoodEvaluator getData(ConditionsManager manager, String name) {
+	System.out.println("DEBUG: LikelihoodConditionsConverter: Getting data for name='"+name+"'");
+	RawConditions conditions = manager.getRawConditions(name);
+	try {
+	    InputStream is = conditions.getInputStream();
+	    ObjectInputStream ois = new ObjectInputStream(is);
+	    Object o = ois.readObject();
+	    LikelihoodEvaluator eval = (LikelihoodEvaluator) o;
+	    return eval;	
+	} catch (java.io.IOException x) {
+	    throw new AssertionError("java.io.IOException: "+x);
+	} catch (java.lang.ClassNotFoundException x) {
+	    throw new AssertionError("java.lang.ClassNotFoundException: "+x);
+	}
+    }
+    public Class<LikelihoodEvaluator> getType() {
+	return LikelihoodEvaluator.class;
+    }
+}

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
LikelihoodEvaluator.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- LikelihoodEvaluator.java	26 Apr 2007 17:18:44 -0000	1.2
+++ LikelihoodEvaluator.java	4 Sep 2007 17:27:57 -0000	1.3
@@ -1,316 +1,29 @@
 package org.lcsim.recon.cluster.structural.likelihood;
 
 import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
 import java.util.Vector;
-
-import java.io.FileOutputStream;
-import java.io.FileInputStream;
-import java.io.ObjectOutputStream;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.io.IOException; 
-
-import hep.aida.ITree;
-import hep.aida.IAnalysisFactory; 
-import hep.aida.IHistogramFactory; 
-import hep.aida.IHistogram1D; 
-
 import org.lcsim.event.Cluster;
 
-public class LikelihoodEvaluator implements java.io.Serializable {
-
-    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsTrackToTrack = null;
-    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsTrackToClump = null;
-    Map<Boolean, Vector<LikelihoodDistribution> > m_LikelihoodDistributionsClumpToClump = null;
-    transient boolean m_debug; // default value is false
-
-    public LikelihoodEvaluator()
-    {
-        // Maps from Boolean (the tag) to Distribution
-        m_LikelihoodDistributionsTrackToTrack = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
-        m_LikelihoodDistributionsTrackToClump = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
-        m_LikelihoodDistributionsClumpToClump = new HashMap<Boolean, Vector<LikelihoodDistribution> >();
-        m_LikelihoodDistributionsTrackToTrack.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
-        m_LikelihoodDistributionsTrackToTrack.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
-        m_LikelihoodDistributionsTrackToClump.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
-        m_LikelihoodDistributionsTrackToClump.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
-        m_LikelihoodDistributionsClumpToClump.put(Boolean.valueOf(true),  new Vector<LikelihoodDistribution>());
-        m_LikelihoodDistributionsClumpToClump.put(Boolean.valueOf(false),  new Vector<LikelihoodDistribution>());
-    }
-
-    public List<StructuralLikelihoodQuantity> getLikelihoodQuantities() {
-	Vector<StructuralLikelihoodQuantity> vOut = new Vector<StructuralLikelihoodQuantity>();
-	vOut.addAll(getLikelihoodQuantitiesTrackToTrack());
-	vOut.addAll(getLikelihoodQuantitiesTrackToClump());
-	vOut.addAll(getLikelihoodQuantitiesClumpToClump());
-	return vOut;
-    }
-    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToTrack() {
-	return getLikelihoodQuantities(m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(true)));
-    }
-    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToClump() {
-	return getLikelihoodQuantities(m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(true)));
-    }
-    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesClumpToClump() {
-	return getLikelihoodQuantities(m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(true)));
-    }
-    protected List<StructuralLikelihoodQuantity> getLikelihoodQuantities(Vector<LikelihoodDistribution> vect) {
-	Vector<StructuralLikelihoodQuantity> vOut = new Vector<StructuralLikelihoodQuantity>();
-	for (LikelihoodDistribution dist : vect) {
-	    StructuralLikelihoodQuantity quant = dist.getQuantity();
-	    vOut.add(quant);
-	}
-	return vOut;
-    }
-
-    public void addLikelihoodQuantityTrackToTrack(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow) {
-        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(true));
-        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsTrackToTrack.get(Boolean.valueOf(false));
-        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-    }
-    public void addLikelihoodQuantityTrackToClump(StructuralLikelihoodQuantity quant, int nbins, double min
-, double max, boolean useUnderFlow, boolean useOverFlow) {
-        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(true));
-        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsTrackToClump.get(Boolean.valueOf(false));
-        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-    }
-    public void addLikelihoodQuantityClumpToClump(StructuralLikelihoodQuantity quant, int nbins, double min
-, double max, boolean useUnderFlow, boolean useOverFlow) {
-        Vector<LikelihoodDistribution> vTrue  = m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(true));
-        Vector<LikelihoodDistribution> vFalse = m_LikelihoodDistributionsClumpToClump.get(Boolean.valueOf(false));
-        vTrue .add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-        vFalse.add(new LikelihoodDistribution(quant, nbins, min, max, useUnderFlow, useOverFlow));
-    }
+public interface LikelihoodEvaluator {
 
-    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToTrack(boolean goodLink) {
-        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
-        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsTrackToTrack.get(isLinkCorrect);
-        return vDistributions;
-    }
-    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToClump(boolean goodLink) {
-        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
-        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsTrackToClump.get(isLinkCorrect);
-        return vDistributions;
-    }
-    public Vector<LikelihoodDistribution> getLikelihoodDistributionClumpToClump(boolean goodLink) {
-        Boolean isLinkCorrect = Boolean.valueOf(goodLink);
-        Vector<LikelihoodDistribution> vDistributions = m_LikelihoodDistributionsClumpToClump.get(isLinkCorrect);
-        return vDistributions;
-    }
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantities();
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToTrack();
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesTrackToClump();
+    public List<StructuralLikelihoodQuantity> getLikelihoodQuantitiesClumpToClump();
+
+    public void addLikelihoodQuantityTrackToTrack(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow);
+    public void addLikelihoodQuantityTrackToClump(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow);
+    public void addLikelihoodQuantityClumpToClump(StructuralLikelihoodQuantity quant, int nbins, double min, double max, boolean useUnderFlow, boolean useOverFlow);
+
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToTrack(boolean goodLink);
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionTrackToClump(boolean goodLink);
+    public Vector<LikelihoodDistribution> getLikelihoodDistributionClumpToClump(boolean goodLink);
     
-    public double getLinkLikelihoodTrackToTrack(Cluster clus1, Cluster clus2) {
-	Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionTrackToTrack(true);
-	Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionTrackToTrack(false);
-	if (m_debug) { 
-	    double totalGoodLikelihood = 1.0;
-	    double totalBadLikelihood = 1.0;
-	    for (int i=0; i<vLinked.size(); i++) {
-		LikelihoodDistribution distLinked = vLinked.get(i);
-		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
-		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
-		try {
-		    double goodPDF = distLinked.getPDF(clus1, clus2);
-		    double badPDF = distUnlinked.getPDF(clus1, clus2);
-		    double goodProb = goodPDF/(goodPDF+badPDF);
-		    double badProb = badPDF/(goodPDF+badPDF);
-		    totalGoodLikelihood *= goodProb;
-		    totalBadLikelihood *= badProb;
-		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
-		} catch (QuantityNotDefinedException x) {
-		    // Have to ignore this one.
-		    System.out.println("Warning: "+x);
-		}
-	    }
-	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
-	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
-	}
-	return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
-    }   
-    public double getLinkLikelihoodTrackToClump(Cluster clus1, Cluster clus2) {
-        Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionTrackToClump(true);
-        Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionTrackToClump(false);
-	if (m_debug) { 
-	    double totalGoodLikelihood = 1.0;
-	    double totalBadLikelihood = 1.0;
-	    for (int i=0; i<vLinked.size(); i++) {
-		LikelihoodDistribution distLinked = vLinked.get(i);
-		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
-		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
-		try {
-		    double goodPDF = distLinked.getPDF(clus1, clus2);
-		    double badPDF = distUnlinked.getPDF(clus1, clus2);
-		    double goodProb = goodPDF/(goodPDF+badPDF);
-		    double badProb = badPDF/(goodPDF+badPDF);
-		    totalGoodLikelihood *= goodProb;
-		    totalBadLikelihood *= badProb;
-		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
-		} catch (QuantityNotDefinedException x) {
-		    // Have to ignore this one.
-		    System.out.println("Warning: "+x);
-		}
-	    }
-	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
-	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
-	}
-        return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
-    }   
-    public double getLinkLikelihoodClumpToClump(Cluster clus1, Cluster clus2) {
-        Vector<LikelihoodDistribution> vLinked = getLikelihoodDistributionClumpToClump(true);
-        Vector<LikelihoodDistribution> vUnlinked = getLikelihoodDistributionClumpToClump(false);
-	if (m_debug) { 
-	    double totalGoodLikelihood = 1.0;
-	    double totalBadLikelihood = 1.0;
-	    for (int i=0; i<vLinked.size(); i++) {
-		LikelihoodDistribution distLinked = vLinked.get(i);
-		LikelihoodDistribution distUnlinked = vUnlinked.get(i);
-		StructuralLikelihoodQuantity quant = distLinked.getQuantity();
-		try {
-		    double goodPDF = distLinked.getPDF(clus1, clus2);
-		    double badPDF = distUnlinked.getPDF(clus1, clus2);
-		    double goodProb = goodPDF/(goodPDF+badPDF);
-		    double badProb = badPDF/(goodPDF+badPDF);
-		    totalGoodLikelihood *= goodProb;
-		    totalBadLikelihood *= badProb;
-		    System.out.println("DEBUG:    Quantity"+i+" = "+quant.evaluate(clus1,clus2)+" so prob(good)="+goodProb);
-		} catch (QuantityNotDefinedException x) {
-		    // Have to ignore this one.
-		    System.out.println("Warning: "+x);
-		}
-	    }
-	    double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
-	    System.out.println("DEBUG:   => net probs: "+totalGoodLikelihood+" vs "+totalBadLikelihood+" => prob(good) = "+normalizedGoodLikelihood); 
-	}
-        return getLinkLikelihood(clus1, clus2, vLinked, vUnlinked);
-    }   
-
-    protected double getLinkLikelihood(Cluster clus1, Cluster clus2, Vector<LikelihoodDistribution> vLinked, Vector<LikelihoodDistribution> vUnlinked)
-    {
-        double totalGoodLikelihood = 1.0;
-        double totalBadLikelihood = 1.0;
-        for (int i=0; i<vLinked.size(); i++) {
-            LikelihoodDistribution distLinked = vLinked.get(i);
-            LikelihoodDistribution distUnlinked = vUnlinked.get(i);
-            try {
-                double goodPDF = distLinked.getPDF(clus1, clus2);
-                double badPDF = distUnlinked.getPDF(clus1, clus2);
-                double goodProb = goodPDF/(goodPDF+badPDF);
-                double badProb = badPDF/(goodPDF+badPDF);
-                totalGoodLikelihood *= goodProb;
-                totalBadLikelihood *= badProb;
-            } catch (QuantityNotDefinedException x) {
-                // Have to ignore this one.
-                System.out.println("Warning: "+x);
-            }
-        }       
-        double normalizedGoodLikelihood = totalGoodLikelihood / (totalGoodLikelihood+totalBadLikelihood);
-        return normalizedGoodLikelihood;
-    }
-
-    // A static routine to read from a serialised file:
-    static public LikelihoodEvaluator readFromFile(String filename)
-    {
-        try {
-            FileInputStream fis = new FileInputStream(filename);
-            ObjectInputStream ois = new ObjectInputStream(fis);
-            Object o = ois.readObject();
-            LikelihoodEvaluator eval = (LikelihoodEvaluator) o;
-            return eval;
-        } catch (java.io.IOException x) {
-            throw new AssertionError("java.io.IOException: "+x);
-        } catch (java.lang.ClassNotFoundException x) {
-            throw new AssertionError("java.lang.ClassNotFoundException: "+x);
-        }
-    }
-
-    public void writeToFile(String filename)
-    {
-        // Open the file for writing:
-        try {
-            FileOutputStream fos = new FileOutputStream(filename);
-            ObjectOutputStream oos = new ObjectOutputStream(fos);
-            oos.writeObject(this);
-        } catch (java.io.IOException x) {
-            throw new AssertionError("java.io.IOException: "+x);
-        }
-    }
-
-    // Routines to make interesting plots:
-
-    /**
-      * Write the likelihood distributions out to the given file
-      */
-    public void makePlots(String filename)
-    {
-        IAnalysisFactory af = IAnalysisFactory.create();
-        try {
-            ITree t = af.createTreeFactory().create(filename,"xml",false,true); 
-            IHistogramFactory hf = af.createHistogramFactory(t); 
-            makePlots(hf, "hTrackTrack", m_LikelihoodDistributionsTrackToTrack);
-            makePlots(hf, "hTrackClump", m_LikelihoodDistributionsTrackToClump);
-            makePlots(hf, "hClumpClump", m_LikelihoodDistributionsClumpToClump);
-            t.commit();
-        } catch(IOException ioe1) {
-            ioe1.printStackTrace(); 
-        }
-    }
-
-    /**
-     * Make the plots for a particular set of variables (clump-clump, track-track, track-clump)
-     */
-    protected void makePlots(IHistogramFactory hf, String name1, Map<Boolean, Vector<LikelihoodDistribution> > map)
-    {
-	for (LikelihoodDistribution dist : map.get(Boolean.valueOf(true))) {
-	    makePlot(hf, name1, "Signal", dist);
-	}
-	for (LikelihoodDistribution dist : map.get(Boolean.valueOf(false))) {
-	    makePlot(hf, name1, "Background", dist);
-	}
-    }
+    public double getLinkLikelihoodTrackToTrack(Cluster clus1, Cluster clus2);
+    public double getLinkLikelihoodTrackToClump(Cluster clus1, Cluster clus2);
+    public double getLinkLikelihoodClumpToClump(Cluster clus1, Cluster clus2);
 
-    /**
-     * Make one plot
-     */
-    protected void makePlot(IHistogramFactory hf, String name1, String name2, LikelihoodDistribution dist)
-    {
-        String subName = dist.getQuantity().getClass().getName();
-        String fullName = new String(name1 + "_" + name2 + "_" + subName);
-        if (m_debug) { System.out.println("DEBUG: Making histogram for ["+fullName+"]"); }
-        int nbins = dist.getNbins();
-        double min = dist.getMin();
-        double max = dist.getMax();
-        double binsize = (max-min) / ( (double)(nbins) );
-        int histo_nbins = nbins;
-        double histo_min = min;
-        double histo_max = max;
-        if (dist.useUnderFlow()) {
-            histo_nbins++;
-            histo_min -= binsize;
-        }
-        if (dist.useOverFlow()) {
-            histo_nbins++;
-            histo_max += binsize;
-        }
-        IHistogram1D histo = hf.createHistogram1D(fullName, histo_nbins, histo_min, histo_max);
-        for (int i=0; i<nbins; i++) { 
-            double binCenter = min + binsize*( (double)(i) + 0.5);
-            histo.fill(binCenter, dist.getPDF(i));
-	    if (m_debug) { System.out.println("   "+i+": "+dist.getPDF(i)); }
-        }
-        if (dist.useUnderFlow()) {
-            histo.fill(min-0.5*binsize, dist.getPDF(-1));
-	    if (m_debug) { System.out.println("   underflow: "+dist.getPDF(-1)); }
-        }
-        if (dist.useOverFlow()) {
-            histo.fill(max+0.5*binsize, dist.getPDF(nbins));
-	    if (m_debug) { System.out.println("   overflow: "+dist.getPDF(nbins)); }
-        }
-    }
+    public void writeToFile(String filename);
 
-    public void setDebug(boolean debug) {
-	m_debug = debug;
-    }
+    public void setDebug(boolean debug);
 }

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
LikelihoodEvaluatorCheckpointDriver.java 1.2 -> 1.3
diff -u -r1.2 -r1.3
--- LikelihoodEvaluatorCheckpointDriver.java	2 Nov 2006 22:52:51 -0000	1.2
+++ LikelihoodEvaluatorCheckpointDriver.java	4 Sep 2007 17:27:57 -0000	1.3
@@ -21,7 +21,7 @@
 	if (m_eval != null) {
 	    if (m_frequency>0 && m_count % m_frequency == 0) {
                 m_eval.writeToFile("likelihood.bin");
-		m_eval.makePlots("likelihoodDistributions.aida");
+		//m_eval.makePlots("likelihoodDistributions.aida");
 		if (m_debug) {
 		    System.out.println("DEBUG: Wrote likelihood distribution at checkpoint of "+m_count+" events.");
 		}
@@ -31,7 +31,7 @@
 
     public void suspend() {
 	m_eval.writeToFile("likelihood.bin");
-	m_eval.makePlots("likelihoodDistributions.aida");
+	//m_eval.makePlots("likelihoodDistributions.aida");
 	super.suspend();
     }
     
CVSspam 0.2.8