Print

Print


Commit in lcsim/src/org/lcsim/recon/cluster/structural/likelihood on MAIN
PlotLikelihoods.java+183added 1.1
LikelihoodDistributionNormalization.java+23added 1.1
+206
2 added files
Look at likelihoods from the likelihood.bin file

lcsim/src/org/lcsim/recon/cluster/structural/likelihood
PlotLikelihoods.java added at 1.1
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
LikelihoodDistributionNormalization.java added at 1.1
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;
+    }
+}
CVSspam 0.2.8