lcsim/src/org/lcsim/recon/cluster/structural/likelihood
diff -N PlotLikelihoods.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ PlotLikelihoods.java 6 Oct 2010 20:04:04 -0000 1.1
@@ -0,0 +1,183 @@
+package org.lcsim.recon.cluster.structural.likelihood;
+import org.lcsim.recon.pfa.structural.*;
+
+import java.util.*;
+import org.lcsim.util.Driver;
+import org.lcsim.event.EventHeader;
+import org.lcsim.recon.cluster.structural.likelihood.*;
+import org.lcsim.util.aida.AIDA;
+
+public class PlotLikelihoods extends Driver
+{
+ boolean first;
+ LikelihoodEvaluatorWrapper evalw;
+ private AIDA aida = AIDA.defaultInstance();
+ Map<LikelihoodDistribution,String> ttotg;
+ Map<LikelihoodDistribution,String> ttocg;
+ Map<LikelihoodDistribution,String> ctocg;
+ Map<LikelihoodDistribution,String> ttotb;
+ Map<LikelihoodDistribution,String> ttocb;
+ Map<LikelihoodDistribution,String> ctocb;
+ public PlotLikelihoods()
+ {
+ evalw = new LikelihoodEvaluatorWrapper();
+ first = true;
+ }
+
+ protected void process(EventHeader event)
+ {
+ super.process(event);
+ if(!first)return;
+ first = false;
+ String pre0 = "Likelihoods/";
+ ttotg = new HashMap<LikelihoodDistribution,String>();
+ ttotb = new HashMap<LikelihoodDistribution,String>();
+ ttocg = new HashMap<LikelihoodDistribution,String>();
+ ttocb = new HashMap<LikelihoodDistribution,String>();
+ ctocg = new HashMap<LikelihoodDistribution,String>();
+ ctocb = new HashMap<LikelihoodDistribution,String>();
+ Vector<LikelihoodDistribution> goodctoc = evalw.getLikelihoodDistributionClumpToClump(true);
+ Vector<LikelihoodDistribution> badctoc = evalw.getLikelihoodDistributionClumpToClump(false);
+ Vector<LikelihoodDistribution> goodttoc = evalw.getLikelihoodDistributionTrackToClump(true);
+ Vector<LikelihoodDistribution> badttoc = evalw.getLikelihoodDistributionTrackToClump(false);
+ Vector<LikelihoodDistribution> goodttot = evalw.getLikelihoodDistributionTrackToTrack(true);
+ Vector<LikelihoodDistribution> badttot = evalw.getLikelihoodDistributionTrackToTrack(false);
+ String pre = pre0+"mip-mip/good";
+ for(LikelihoodDistribution ld:goodttot)
+ {
+ ttotg.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"mip-mip/bad";
+ for(LikelihoodDistribution ld:badttot)
+ {
+ ttotb.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"mip-mip";
+ makeLikelihoodPlots(pre,goodttot,ttotg,badttot,ttotb);
+
+ pre = pre0+"mip-clump/good";
+ for(LikelihoodDistribution ld:goodttoc)
+ {
+ ttocg.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"mip-clump/bad";
+ for(LikelihoodDistribution ld:badttoc)
+ {
+ ttocb.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"mip-clump";
+ makeLikelihoodPlots(pre,goodttoc,ttocg,badttoc,ttocb);
+
+ pre = pre0+"clump-clump/good";
+ for(LikelihoodDistribution ld:goodctoc)
+ {
+ ctocg.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"clump-clump/bad";
+ for(LikelihoodDistribution ld:badctoc)
+ {
+ ctocb.put(ld,makeNormalizedPlot(ld,pre));
+ }
+ pre = pre0+"clump-clump";
+ makeLikelihoodPlots(pre,goodctoc,ctocg,badctoc,ctocb);
+ }
+ protected String makeNormalizedPlot(LikelihoodDistribution d, String pre)
+ {
+ StructuralLikelihoodQuantity q = d.getQuantity();
+ String varName = "unknown";
+ if(q instanceof ClumpToClumpDOCA)varName = "ClumpToClumpDOCA";
+ else if(q instanceof ClusterToClusterMinDistance)varName = "ClusterToClusterMinDistance";
+ else if(q instanceof TrackToClumpDOCA)varName = "TrackToClumpDOCA";
+ else if(q instanceof TrackToPointDOCA)varName = "TrackToPointDOCA";
+ else if(q instanceof TrackToTrackPOCAInCalorimeter)varName = "TrackToTrackPOCAInCalorimeter";
+ else if(q instanceof TrackToTrackSmallestDistanceToPOCA)varName = "TrackToTrackSmallestDistanceToPOCA";
+ else if(q instanceof TrackToTrackDOCA)varName = "TrackToTrackDOCA";
+ double vmin = d.getMin();
+ double vmax = d.getMax();
+ int nb = d.getNbins();
+ int fb = 0;
+ if(d.useUnderFlow())fb = -1;
+ int lb = nb - 1;
+ if(d.useOverFlow())lb = nb;
+ double inc = (vmax - vmin)/nb;
+ double norm = new LikelihoodDistributionNormalization(d).getNormalization();
+ for(int i=fb;i<lb+1;i++)
+ {
+ double x = i + .5;
+ double val = vmin + inc*x;
+ aida.histogram1D(pre+"/"+varName,nb,vmin,vmax).fill(val,d.getPDF(i));
+ aida.histogram1D(pre+"/"+varName+":UnNormalized",nb,vmin,vmax).fill(val,d.getPDF(i)*norm);
+ }
+ return varName;
+ }
+ protected void makeLikelihoodPlots(String pre,List<LikelihoodDistribution> goodl,Map<LikelihoodDistribution,String> goodm,
+ List<LikelihoodDistribution> badl,Map<LikelihoodDistribution,String> badm)
+ {
+ List<Double>[] gPDF = new List[goodl.size()];
+ List<Double>[] bPDF = new List[goodl.size()];
+ int iv = 0;
+ for(LikelihoodDistribution g:goodl)
+ {
+ gPDF[iv] = new ArrayList<Double>();
+ bPDF[iv] = new ArrayList<Double>();
+ String varg = goodm.get(g);
+ for(LikelihoodDistribution b:badl)
+ {
+ String varb = badm.get(b);
+ if(varg.compareTo(varb) == 0)
+ {
+ double vmin = g.getMin();
+ double vmax = g.getMax();
+ int nb = g.getNbins();
+ int fb = 0;
+ if(g.useUnderFlow())fb = -1;
+ int lb = nb - 1;
+ if(g.useOverFlow())lb = nb;
+ double inc = (vmax - vmin)/nb;
+ for(int i=fb;i<lb+1;i++)
+ {
+ gPDF[iv].add(g.getPDF(i));
+ bPDF[iv].add(b.getPDF(i));
+ double x = i + .5;
+ double val = vmin + inc*x;
+ double wt = 0.;
+ double sum = g.getPDF(i)+b.getPDF(i);
+ if(sum > .0000001)wt = g.getPDF(i)/sum;
+ aida.histogram1D(pre+"/"+varg,nb,vmin,vmax).fill(val,wt);
+ }
+ }
+ }
+ iv++;
+ }
+ // now make plot of all possible likelihoods
+ int nvars = goodl.size();
+ int[] nb = new int[nvars];
+ int count = 1;
+ for(int i=0;i<nvars;i++)
+ {
+ nb[i] = gPDF[i].size();
+ count *= nb[i];
+ }
+ int[] ix = new int[nvars];
+ for(int ic=0;ic<count;ic++)
+ {
+ double valg = 1.;
+ double valb = 1.;
+ for(int i=0;i<nvars;i++)
+ {
+ valg *= gPDF[i].get(ix[i]);
+ valb *= bPDF[i].get(ix[i]);
+ }
+ aida.cloud1D(pre+"/all likelihood values",1000000).fill(valg/(valg+valb));
+ ix[0]++;
+ for(int j=0;j<nvars;j++)
+ {
+ if(ix[j] == nb[j])
+ {
+ ix[j] = 0;
+ if(j < nvars-1)ix[j+1]++;
+ }
+ }
+ }
+ }
+}
lcsim/src/org/lcsim/recon/cluster/structural/likelihood
diff -N LikelihoodDistributionNormalization.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ LikelihoodDistributionNormalization.java 6 Oct 2010 20:04:04 -0000 1.1
@@ -0,0 +1,23 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.lcsim.recon.cluster.structural.likelihood;
+
+/**
+ *
+ * @author cassell
+ */
+public class LikelihoodDistributionNormalization {
+ LikelihoodDistribution m_d;
+ public LikelihoodDistributionNormalization(LikelihoodDistribution d)
+ {
+ m_d = d;
+ }
+ public double getNormalization()
+ {
+ if(!m_d.m_normalized)m_d.normalize();
+ return m_d.m_normalization;
+ }
+}