ROOT logo
// @(#)root/roostats:$Id: MCMCIntervalPlot.cxx 31276 2009-11-18 15:06:42Z moneta $
// Authors: Kevin Belasco        17/06/2009
// Authors: Kyle Cranmer         17/06/2009
/*************************************************************************
 * Project: RooStats                                                     *
 * Package: RooFit/RooStats                                              *
 *************************************************************************
 * Copyright (C) 1995-2008, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

//_________________________________________________
/*
BEGIN_HTML
<p>
This class provides simple and straightforward utilities to plot a MCMCInterval
object.  Basic use only requires a few lines once you have an MCMCInterval*:
</p>
<p>
MCMCIntervalPlot plot(*interval);
plot.Draw();
</p>
<p>
(The standard Draw() function will currently draw the confidence interval
range with bars if 1-D and a contour if 2-D.  The MCMC posterior will also be
plotted for the 1-D case.  Many other fun plotting options are available.
</p>
END_HTML
*/
//_________________________________________________

#ifndef ROOSTATS_MCMCIntervalPlot
#include "RooStats/MCMCIntervalPlot.h"
#endif
#include <iostream>
#ifndef ROOT_TROOT
#include "TROOT.h"
#endif
#ifndef ROOT_TMath
#include "TMath.h"
#endif
#ifndef ROOT_TLine
#include "TLine.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif
#ifndef ROOT_TList
#include "TList.h"
#endif
#ifndef ROOT_TGraph
#include "TGraph.h"
#endif
#ifndef ROOT_TPad
#include "TPad.h"
#endif
#ifndef ROO_REAL_VAR
#include "RooRealVar.h"
#endif
#ifndef ROO_PLOT
#include "RooPlot.h"
#endif
#ifndef ROOT_TH2
#include "TH2.h"
#endif
#ifndef ROO_ARG_LIST
#include "RooArgList.h"
#endif
#ifndef ROOT_TAxis
#include "TAxis.h"
#endif

ClassImp(RooStats::MCMCIntervalPlot);

using namespace std;
using namespace RooStats;

MCMCIntervalPlot::MCMCIntervalPlot()
{
   fInterval = NULL;
   fParameters = NULL;
   fPosteriorHist = NULL;
   fPosteriorKeysPdf = NULL;
   fPosteriorKeysProduct = NULL;
   fDimension = 0;
   fLineColor = kBlack;
   fLineWidth = 1;
   //fContourColor = kBlack;
   fShowBurnIn = kTRUE;
   fWalk = NULL;
   fBurnIn = NULL;
   fFirst = NULL;
   fParamGraph = NULL;
   fNLLGraph = NULL;
   fNLLHist = NULL;
   fWeightHist = NULL;
}

MCMCIntervalPlot::MCMCIntervalPlot(MCMCInterval& interval)
{
   SetMCMCInterval(interval);
   fPosteriorHist = NULL;
   fPosteriorKeysPdf = NULL;
   fPosteriorKeysProduct = NULL;
   fLineColor = kBlack;
   fLineWidth = 1;
   //fContourColor = kBlack;
   fShowBurnIn = kTRUE;
   fWalk = NULL;
   fBurnIn = NULL;
   fFirst = NULL;
   fParamGraph = NULL;
   fNLLGraph = NULL;
   fNLLHist = NULL;
   fWeightHist = NULL;
}

MCMCIntervalPlot::~MCMCIntervalPlot()
{
   delete fParameters;
   // kbelasco: why does deleting fPosteriorHist remove the graphics
   // but deleting TGraphs doesn't?
   //delete fPosteriorHist;
   // can we delete fNLLHist and fWeightHist?
   //delete fNLLHist;
   //delete fWeightHist;

   // kbelasco: should we delete fPosteriorKeysPdf and fPosteriorKeysProduct?
   delete fPosteriorKeysPdf;
   delete fPosteriorKeysProduct;

   delete fWalk;
   delete fBurnIn;
   delete fFirst;
   delete fParamGraph;
   delete fNLLGraph;
}

void MCMCIntervalPlot::SetMCMCInterval(MCMCInterval& interval)
{
   fInterval = &interval;
   fDimension = fInterval->GetDimension();
   fParameters = fInterval->GetParameters();
}

void MCMCIntervalPlot::Draw(const Option_t* options)
{
   DrawInterval(options);
}

void MCMCIntervalPlot::DrawPosterior(const Option_t* options)
{
   if (fInterval->GetUseKeys())
      DrawPosteriorKeysPdf(options);
   else
      DrawPosteriorHist(options);
}

void MCMCIntervalPlot::DrawPosteriorHist(const Option_t* options, Bool_t scale)
{
   if (fPosteriorHist == NULL)
      fPosteriorHist = fInterval->GetPosteriorHist();

   // scale so highest bin has height 1
   if (scale)
      fPosteriorHist->Scale(1/fPosteriorHist->GetBinContent(fPosteriorHist->GetMaximumBin()));
   fPosteriorHist->Draw(options);
}

void MCMCIntervalPlot::DrawPosteriorKeysPdf(const Option_t* options)
{
   if (fPosteriorKeysPdf == NULL)
      fPosteriorKeysPdf = fInterval->GetPosteriorKeysPdf();

   if (fDimension == 1) {
      RooPlot* frame = ((RooRealVar*)fParameters->first())->frame();
      fPosteriorKeysPdf->plotOn(frame);
      frame->Draw(options);
   } else if (fDimension == 2) {
      RooArgList* axes = fInterval->GetAxes();
      RooRealVar* xVar = (RooRealVar*)axes->at(0);
      RooRealVar* yVar = (RooRealVar*)axes->at(1);
      TH2F* keysHist = (TH2F*)fPosteriorKeysPdf->createHistogram(
            "keysPlot2D", *xVar, RooFit::YVar(*yVar), RooFit::Scaling(kFALSE));
      keysHist->SetTitle(GetTitle());
      keysHist->Draw(options);
      delete axes;
   }
}

void MCMCIntervalPlot::DrawInterval(const Option_t* options)
{
   if (fInterval->GetUseKeys())
      DrawKeysPdfInterval(options);
   else
      DrawHistInterval(options);
}

void MCMCIntervalPlot::DrawKeysPdfInterval(const Option_t* options)
{
   if (fPosteriorKeysPdf == NULL)
      fPosteriorKeysPdf = fInterval->GetPosteriorKeysPdf();

   if (fDimension == 1) {
      RooRealVar* p = (RooRealVar*)fParameters->first();
      Double_t ul = fInterval->UpperLimitByKeys(*p);
      Double_t ll = fInterval->LowerLimitByKeys(*p);
      cout << "MCMC keys pdf lower limit on " << p->GetName() << " = "
           << ll << endl;
      cout << "MCMC keys pdf upper limit on " << p->GetName() << " = "
           << ul << endl;
      TLine* llLine = new TLine(ll, 0, ll, 1);
      TLine* ulLine = new TLine(ul, 0, ul, 1);
      llLine->SetLineColor(fLineColor);
      ulLine->SetLineColor(fLineColor);
      llLine->SetLineWidth(fLineWidth);
      ulLine->SetLineWidth(fLineWidth);
      llLine->Draw(options);
      ulLine->Draw(options);
   } else if (fDimension == 2) {
      RooArgList* axes = fInterval->GetAxes();
      RooRealVar* xVar = (RooRealVar*)axes->at(0);
      RooRealVar* yVar = (RooRealVar*)axes->at(1);
      TH2F* contHist = (TH2F*)fPosteriorKeysPdf->createHistogram(
            "keysContour2D", *xVar, RooFit::YVar(*yVar), RooFit::Scaling(kFALSE));
      contHist->SetTitle(GetTitle());
      contHist->SetStats(kFALSE);

      TString tmpOpt(options);
      if (!tmpOpt.Contains("CONT2")) tmpOpt.Append("CONT2");

      Double_t cutoff = fInterval->GetKeysPdfCutoff();
      contHist->SetContour(1, &cutoff);
      contHist->SetLineColor(fLineColor);
      contHist->SetLineWidth(fLineWidth);
      contHist->Draw(tmpOpt.Data());
      delete axes;
   } else {
      coutE(InputArguments) << "MCMCIntervalPlot::DrawKeysPdfInterval: "
         << " Sorry: " << fDimension << "-D plots not currently supported" << endl;
   }
}

void MCMCIntervalPlot::DrawHistInterval(const Option_t* options)
{
   if (fPosteriorHist == NULL)
      fPosteriorHist = fInterval->GetPosteriorHist();

   if (fDimension == 1) {
      // draw lower and upper limits
      RooRealVar* p = (RooRealVar*)fParameters->first();
      Double_t ul = fInterval->UpperLimitByHist(*p);
      Double_t ll = fInterval->LowerLimitByHist(*p);
      cout << "MCMC histogram lower limit on " << p->GetName() << " = "
           << ll << endl;
      cout << "MCMC histogram upper limit on " << p->GetName() << " = "
           << ul << endl;
      TLine* llLine = new TLine(ll, 0, ll, 1);
      TLine* ulLine = new TLine(ul, 0, ul, 1);
      llLine->SetLineColor(fLineColor);
      ulLine->SetLineColor(fLineColor);
      llLine->SetLineWidth(fLineWidth);
      ulLine->SetLineWidth(fLineWidth);
      llLine->Draw(options);
      ulLine->Draw(options);
   } else if (fDimension == 2) {
      fPosteriorHist->SetTitle(GetTitle());
      fPosteriorHist->SetStats(kFALSE);

      TString tmpOpt(options);
      if (!tmpOpt.Contains("CONT2")) tmpOpt.Append("CONT2");

      Double_t cutoff = fInterval->GetHistCutoff();
      fPosteriorHist->SetContour(1, &cutoff);
      fPosteriorHist->SetLineColor(fLineColor);
      fPosteriorHist->SetLineWidth(fLineWidth);
      fPosteriorHist->Draw(tmpOpt.Data());
   } else {
      coutE(InputArguments) << "MCMCIntervalPlot::DrawHistInterval: "
         << " Sorry: " << fDimension << "-D plots not currently supported" << endl;
   }
}

void MCMCIntervalPlot::DrawPosteriorKeysProduct(const Option_t* options)
{
   if (fPosteriorKeysProduct == NULL)
      fPosteriorKeysProduct = fInterval->GetPosteriorKeysProduct();

   if (fDimension == 1) {
      RooPlot* frame = ((RooRealVar*)fParameters->first())->frame();
      fPosteriorKeysProduct->plotOn(frame);
      frame->Draw(options);
   } else if (fDimension == 2) {
      RooArgList* axes = fInterval->GetAxes();
      RooRealVar* xVar = (RooRealVar*)axes->at(0);
      RooRealVar* yVar = (RooRealVar*)axes->at(1);
      TH2F* productHist = (TH2F*)fPosteriorKeysProduct->createHistogram(
            "prodPlot2D", *xVar, RooFit::YVar(*yVar), RooFit::Scaling(kFALSE));
      productHist->SetTitle(GetTitle());
      productHist->Draw(options);
      delete axes;
   }
}

void MCMCIntervalPlot::DrawChainScatter(RooRealVar& xVar, RooRealVar& yVar)
{
   const MarkovChain* markovChain = fInterval->GetChain();

   Int_t size = markovChain->Size();
   Int_t burnInSteps;
   if (fShowBurnIn)
      burnInSteps = fInterval->GetNumBurnInSteps();
   else
      burnInSteps = 0;

   Double_t* x = new Double_t[size - burnInSteps];
   Double_t* y = new Double_t[size - burnInSteps];
   Double_t* burnInX = NULL;
   Double_t* burnInY = NULL;
   if (burnInSteps > 0) {
      burnInX = new Double_t[burnInSteps];
      burnInY = new Double_t[burnInSteps];
   }
   Double_t firstX;
   Double_t firstY;

   for (Int_t i = burnInSteps; i < size; i++) {
      x[i - burnInSteps] = markovChain->Get(i)->getRealValue(xVar.GetName());
      y[i - burnInSteps] = markovChain->Get(i)->getRealValue(yVar.GetName());
   }

   for (Int_t i = 0; i < burnInSteps; i++) {
      burnInX[i] = markovChain->Get(i)->getRealValue(xVar.GetName());
      burnInY[i] = markovChain->Get(i)->getRealValue(yVar.GetName());
   }

   firstX = markovChain->Get(0)->getRealValue(xVar.GetName());
   firstY = markovChain->Get(0)->getRealValue(yVar.GetName());

   TGraph* walk = new TGraph(size - burnInSteps, x, y);
   // kbelasco: figure out how to set TGraph variable ranges
   walk->GetXaxis()->Set(xVar.numBins(), xVar.getMin(), xVar.getMax());
   walk->GetYaxis()->Set(yVar.numBins(), yVar.getMin(), yVar.getMax());
   walk->SetLineColor(kGray);
   walk->SetMarkerStyle(6);
   walk->SetMarkerColor(kViolet);
   walk->Draw("A,L,P,same");

   TGraph* burnIn = NULL;
   if (burnInX != NULL && burnInY != NULL) {
      burnIn = new TGraph(burnInSteps - 1, burnInX, burnInY);
      burnIn->SetLineColor(kPink);
      burnIn->SetMarkerStyle(6);
      burnIn->SetMarkerColor(kPink);
      burnIn->Draw("L,P,same");
   }

   TGraph* first = new TGraph(1, &firstX, &firstY);
   first->SetLineColor(kGreen);
   first->SetMarkerStyle(3);
   first->SetMarkerSize(2);
   first->SetMarkerColor(kGreen);
   first->Draw("L,P,same");

   //walkCanvas->Update();
   //delete x;
   //delete y;
   //delete burnInX;
   //delete burnInY;
   //delete walk;
   //delete burnIn;
   //delete first;
}

void MCMCIntervalPlot::DrawParameterVsTime(RooRealVar& param)
{
   const MarkovChain* markovChain = fInterval->GetChain();
   Int_t size = markovChain->Size();
   Int_t numEntries = 2 * size;
   Double_t* value = new Double_t[numEntries];
   Double_t* time = new Double_t[numEntries];
   Double_t val;
   Int_t weight;
   Int_t t = 0;
   for (Int_t i = 0; i < size; i++) {
      val = markovChain->Get(i)->getRealValue(param.GetName());
      weight = (Int_t)markovChain->Weight();
      value[2*i] = val;
      value[2*i + 1] = val;
      time[2*i] = t;
      t += weight;
      time[2*i + 1] = t;
   }

   TGraph* paramGraph = new TGraph(numEntries, time, value);
   //paramGraph->SetLineColor(fLineColor);
   paramGraph->Draw("A,L,same");
   //gPad->Update();
}

void MCMCIntervalPlot::DrawNLLVsTime()
{
   const MarkovChain* markovChain = fInterval->GetChain();
   Int_t size = markovChain->Size();
   Int_t numEntries = 2 * size;
   Double_t* nllValue = new Double_t[numEntries];
   Double_t* time = new Double_t[numEntries];
   Double_t nll;
   Int_t weight;
   Int_t t = 0;
   for (Int_t i = 0; i < size; i++) {
      nll = markovChain->NLL(i);
      weight = (Int_t)markovChain->Weight();
      nllValue[2*i] = nll;
      nllValue[2*i + 1] = nll;
      time[2*i] = t;
      t += weight;
      time[2*i + 1] = t;
   }

   TGraph* nllGraph = new TGraph(numEntries, time, nllValue);
   //nllGraph->SetLineColor(fLineColor);
   nllGraph->Draw("A,L,same");
   //gPad->Update();
}

void MCMCIntervalPlot::DrawNLLHist(const Option_t* options)
{
   if (fNLLHist == NULL) {
      const MarkovChain* markovChain = fInterval->GetChain();
      // find the max NLL value
      Double_t maxNLL = 0;
      Int_t size = markovChain->Size();
      for (Int_t i = 0; i < size; i++)
         if (markovChain->NLL(i) > maxNLL)
            maxNLL = markovChain->NLL(i);
      RooRealVar* nllVar = fInterval->GetNLLVar();
      fNLLHist = new TH1F("mcmc_nll_hist", "MCMC NLL Histogram", nllVar->getBins(),
            0, maxNLL);
      for (Int_t i = 0; i < size; i++)
         fNLLHist->Fill(markovChain->NLL(i), markovChain->Weight());
   }
   fNLLHist->Draw(options);
}

void MCMCIntervalPlot::DrawWeightHist(const Option_t* options)
{
   if (fWeightHist == NULL) {
      const MarkovChain* markovChain = fInterval->GetChain();
      // find the max weight value
      Double_t maxWeight = 0;
      Int_t size = markovChain->Size();
      for (Int_t i = 0; i < size; i++)
         if (markovChain->Weight(i) > maxWeight)
            maxWeight = markovChain->Weight(i);
      fWeightHist = new TH1F("mcmc_weight_hist", "MCMC Weight Histogram",
            (Int_t)(maxWeight + 1), 0, maxWeight * 1.02);
      for (Int_t i = 0; i < size; i++)
         fWeightHist->Fill(markovChain->Weight(i));
   }
   fWeightHist->Draw(options);
}

/*
/////////////////////////////////////////////////////////////////////
  // 3-d plot of the parameter points
  dataCanvas->cd(2);
  // also plot the points in the markov chain
  RooDataSet* markovChainData = ((MCMCInterval*)mcmcint)->GetChainAsDataSet();

  TTree& chain =  ((RooTreeDataStore*) markovChainData->store())->tree();
  chain.SetMarkerStyle(6);
  chain.SetMarkerColor(kRed);
  chain.Draw("s:ratioSigEff:ratioBkgEff","","box"); // 3-d box proporional to posterior

  // the points used in the profile construction
  TTree& parameterScan =  ((RooTreeDataStore*) fc.GetPointsToScan()->store())->tree();
  parameterScan.SetMarkerStyle(24);
  parameterScan.Draw("s:ratioSigEff:ratioBkgEff","","same");

  chain.SetMarkerStyle(6);
  chain.SetMarkerColor(kRed);
  //chain.Draw("s:ratioSigEff:ratioBkgEff", "_MarkovChain_local_nll","box");
  //chain.Draw("_MarkovChain_local_nll");
////////////////////////////////////////////////////////////////////
*/
 MCMCIntervalPlot.cxx:1
 MCMCIntervalPlot.cxx:2
 MCMCIntervalPlot.cxx:3
 MCMCIntervalPlot.cxx:4
 MCMCIntervalPlot.cxx:5
 MCMCIntervalPlot.cxx:6
 MCMCIntervalPlot.cxx:7
 MCMCIntervalPlot.cxx:8
 MCMCIntervalPlot.cxx:9
 MCMCIntervalPlot.cxx:10
 MCMCIntervalPlot.cxx:11
 MCMCIntervalPlot.cxx:12
 MCMCIntervalPlot.cxx:13
 MCMCIntervalPlot.cxx:14
 MCMCIntervalPlot.cxx:15
 MCMCIntervalPlot.cxx:16
 MCMCIntervalPlot.cxx:17
 MCMCIntervalPlot.cxx:18
 MCMCIntervalPlot.cxx:19
 MCMCIntervalPlot.cxx:20
 MCMCIntervalPlot.cxx:21
 MCMCIntervalPlot.cxx:22
 MCMCIntervalPlot.cxx:23
 MCMCIntervalPlot.cxx:24
 MCMCIntervalPlot.cxx:25
 MCMCIntervalPlot.cxx:26
 MCMCIntervalPlot.cxx:27
 MCMCIntervalPlot.cxx:28
 MCMCIntervalPlot.cxx:29
 MCMCIntervalPlot.cxx:30
 MCMCIntervalPlot.cxx:31
 MCMCIntervalPlot.cxx:32
 MCMCIntervalPlot.cxx:33
 MCMCIntervalPlot.cxx:34
 MCMCIntervalPlot.cxx:35
 MCMCIntervalPlot.cxx:36
 MCMCIntervalPlot.cxx:37
 MCMCIntervalPlot.cxx:38
 MCMCIntervalPlot.cxx:39
 MCMCIntervalPlot.cxx:40
 MCMCIntervalPlot.cxx:41
 MCMCIntervalPlot.cxx:42
 MCMCIntervalPlot.cxx:43
 MCMCIntervalPlot.cxx:44
 MCMCIntervalPlot.cxx:45
 MCMCIntervalPlot.cxx:46
 MCMCIntervalPlot.cxx:47
 MCMCIntervalPlot.cxx:48
 MCMCIntervalPlot.cxx:49
 MCMCIntervalPlot.cxx:50
 MCMCIntervalPlot.cxx:51
 MCMCIntervalPlot.cxx:52
 MCMCIntervalPlot.cxx:53
 MCMCIntervalPlot.cxx:54
 MCMCIntervalPlot.cxx:55
 MCMCIntervalPlot.cxx:56
 MCMCIntervalPlot.cxx:57
 MCMCIntervalPlot.cxx:58
 MCMCIntervalPlot.cxx:59
 MCMCIntervalPlot.cxx:60
 MCMCIntervalPlot.cxx:61
 MCMCIntervalPlot.cxx:62
 MCMCIntervalPlot.cxx:63
 MCMCIntervalPlot.cxx:64
 MCMCIntervalPlot.cxx:65
 MCMCIntervalPlot.cxx:66
 MCMCIntervalPlot.cxx:67
 MCMCIntervalPlot.cxx:68
 MCMCIntervalPlot.cxx:69
 MCMCIntervalPlot.cxx:70
 MCMCIntervalPlot.cxx:71
 MCMCIntervalPlot.cxx:72
 MCMCIntervalPlot.cxx:73
 MCMCIntervalPlot.cxx:74
 MCMCIntervalPlot.cxx:75
 MCMCIntervalPlot.cxx:76
 MCMCIntervalPlot.cxx:77
 MCMCIntervalPlot.cxx:78
 MCMCIntervalPlot.cxx:79
 MCMCIntervalPlot.cxx:80
 MCMCIntervalPlot.cxx:81
 MCMCIntervalPlot.cxx:82
 MCMCIntervalPlot.cxx:83
 MCMCIntervalPlot.cxx:84
 MCMCIntervalPlot.cxx:85
 MCMCIntervalPlot.cxx:86
 MCMCIntervalPlot.cxx:87
 MCMCIntervalPlot.cxx:88
 MCMCIntervalPlot.cxx:89
 MCMCIntervalPlot.cxx:90
 MCMCIntervalPlot.cxx:91
 MCMCIntervalPlot.cxx:92
 MCMCIntervalPlot.cxx:93
 MCMCIntervalPlot.cxx:94
 MCMCIntervalPlot.cxx:95
 MCMCIntervalPlot.cxx:96
 MCMCIntervalPlot.cxx:97
 MCMCIntervalPlot.cxx:98
 MCMCIntervalPlot.cxx:99
 MCMCIntervalPlot.cxx:100
 MCMCIntervalPlot.cxx:101
 MCMCIntervalPlot.cxx:102
 MCMCIntervalPlot.cxx:103
 MCMCIntervalPlot.cxx:104
 MCMCIntervalPlot.cxx:105
 MCMCIntervalPlot.cxx:106
 MCMCIntervalPlot.cxx:107
 MCMCIntervalPlot.cxx:108
 MCMCIntervalPlot.cxx:109
 MCMCIntervalPlot.cxx:110
 MCMCIntervalPlot.cxx:111
 MCMCIntervalPlot.cxx:112
 MCMCIntervalPlot.cxx:113
 MCMCIntervalPlot.cxx:114
 MCMCIntervalPlot.cxx:115
 MCMCIntervalPlot.cxx:116
 MCMCIntervalPlot.cxx:117
 MCMCIntervalPlot.cxx:118
 MCMCIntervalPlot.cxx:119
 MCMCIntervalPlot.cxx:120
 MCMCIntervalPlot.cxx:121
 MCMCIntervalPlot.cxx:122
 MCMCIntervalPlot.cxx:123
 MCMCIntervalPlot.cxx:124
 MCMCIntervalPlot.cxx:125
 MCMCIntervalPlot.cxx:126
 MCMCIntervalPlot.cxx:127
 MCMCIntervalPlot.cxx:128
 MCMCIntervalPlot.cxx:129
 MCMCIntervalPlot.cxx:130
 MCMCIntervalPlot.cxx:131
 MCMCIntervalPlot.cxx:132
 MCMCIntervalPlot.cxx:133
 MCMCIntervalPlot.cxx:134
 MCMCIntervalPlot.cxx:135
 MCMCIntervalPlot.cxx:136
 MCMCIntervalPlot.cxx:137
 MCMCIntervalPlot.cxx:138
 MCMCIntervalPlot.cxx:139
 MCMCIntervalPlot.cxx:140
 MCMCIntervalPlot.cxx:141
 MCMCIntervalPlot.cxx:142
 MCMCIntervalPlot.cxx:143
 MCMCIntervalPlot.cxx:144
 MCMCIntervalPlot.cxx:145
 MCMCIntervalPlot.cxx:146
 MCMCIntervalPlot.cxx:147
 MCMCIntervalPlot.cxx:148
 MCMCIntervalPlot.cxx:149
 MCMCIntervalPlot.cxx:150
 MCMCIntervalPlot.cxx:151
 MCMCIntervalPlot.cxx:152
 MCMCIntervalPlot.cxx:153
 MCMCIntervalPlot.cxx:154
 MCMCIntervalPlot.cxx:155
 MCMCIntervalPlot.cxx:156
 MCMCIntervalPlot.cxx:157
 MCMCIntervalPlot.cxx:158
 MCMCIntervalPlot.cxx:159
 MCMCIntervalPlot.cxx:160
 MCMCIntervalPlot.cxx:161
 MCMCIntervalPlot.cxx:162
 MCMCIntervalPlot.cxx:163
 MCMCIntervalPlot.cxx:164
 MCMCIntervalPlot.cxx:165
 MCMCIntervalPlot.cxx:166
 MCMCIntervalPlot.cxx:167
 MCMCIntervalPlot.cxx:168
 MCMCIntervalPlot.cxx:169
 MCMCIntervalPlot.cxx:170
 MCMCIntervalPlot.cxx:171
 MCMCIntervalPlot.cxx:172
 MCMCIntervalPlot.cxx:173
 MCMCIntervalPlot.cxx:174
 MCMCIntervalPlot.cxx:175
 MCMCIntervalPlot.cxx:176
 MCMCIntervalPlot.cxx:177
 MCMCIntervalPlot.cxx:178
 MCMCIntervalPlot.cxx:179
 MCMCIntervalPlot.cxx:180
 MCMCIntervalPlot.cxx:181
 MCMCIntervalPlot.cxx:182
 MCMCIntervalPlot.cxx:183
 MCMCIntervalPlot.cxx:184
 MCMCIntervalPlot.cxx:185
 MCMCIntervalPlot.cxx:186
 MCMCIntervalPlot.cxx:187
 MCMCIntervalPlot.cxx:188
 MCMCIntervalPlot.cxx:189
 MCMCIntervalPlot.cxx:190
 MCMCIntervalPlot.cxx:191
 MCMCIntervalPlot.cxx:192
 MCMCIntervalPlot.cxx:193
 MCMCIntervalPlot.cxx:194
 MCMCIntervalPlot.cxx:195
 MCMCIntervalPlot.cxx:196
 MCMCIntervalPlot.cxx:197
 MCMCIntervalPlot.cxx:198
 MCMCIntervalPlot.cxx:199
 MCMCIntervalPlot.cxx:200
 MCMCIntervalPlot.cxx:201
 MCMCIntervalPlot.cxx:202
 MCMCIntervalPlot.cxx:203
 MCMCIntervalPlot.cxx:204
 MCMCIntervalPlot.cxx:205
 MCMCIntervalPlot.cxx:206
 MCMCIntervalPlot.cxx:207
 MCMCIntervalPlot.cxx:208
 MCMCIntervalPlot.cxx:209
 MCMCIntervalPlot.cxx:210
 MCMCIntervalPlot.cxx:211
 MCMCIntervalPlot.cxx:212
 MCMCIntervalPlot.cxx:213
 MCMCIntervalPlot.cxx:214
 MCMCIntervalPlot.cxx:215
 MCMCIntervalPlot.cxx:216
 MCMCIntervalPlot.cxx:217
 MCMCIntervalPlot.cxx:218
 MCMCIntervalPlot.cxx:219
 MCMCIntervalPlot.cxx:220
 MCMCIntervalPlot.cxx:221
 MCMCIntervalPlot.cxx:222
 MCMCIntervalPlot.cxx:223
 MCMCIntervalPlot.cxx:224
 MCMCIntervalPlot.cxx:225
 MCMCIntervalPlot.cxx:226
 MCMCIntervalPlot.cxx:227
 MCMCIntervalPlot.cxx:228
 MCMCIntervalPlot.cxx:229
 MCMCIntervalPlot.cxx:230
 MCMCIntervalPlot.cxx:231
 MCMCIntervalPlot.cxx:232
 MCMCIntervalPlot.cxx:233
 MCMCIntervalPlot.cxx:234
 MCMCIntervalPlot.cxx:235
 MCMCIntervalPlot.cxx:236
 MCMCIntervalPlot.cxx:237
 MCMCIntervalPlot.cxx:238
 MCMCIntervalPlot.cxx:239
 MCMCIntervalPlot.cxx:240
 MCMCIntervalPlot.cxx:241
 MCMCIntervalPlot.cxx:242
 MCMCIntervalPlot.cxx:243
 MCMCIntervalPlot.cxx:244
 MCMCIntervalPlot.cxx:245
 MCMCIntervalPlot.cxx:246
 MCMCIntervalPlot.cxx:247
 MCMCIntervalPlot.cxx:248
 MCMCIntervalPlot.cxx:249
 MCMCIntervalPlot.cxx:250
 MCMCIntervalPlot.cxx:251
 MCMCIntervalPlot.cxx:252
 MCMCIntervalPlot.cxx:253
 MCMCIntervalPlot.cxx:254
 MCMCIntervalPlot.cxx:255
 MCMCIntervalPlot.cxx:256
 MCMCIntervalPlot.cxx:257
 MCMCIntervalPlot.cxx:258
 MCMCIntervalPlot.cxx:259
 MCMCIntervalPlot.cxx:260
 MCMCIntervalPlot.cxx:261
 MCMCIntervalPlot.cxx:262
 MCMCIntervalPlot.cxx:263
 MCMCIntervalPlot.cxx:264
 MCMCIntervalPlot.cxx:265
 MCMCIntervalPlot.cxx:266
 MCMCIntervalPlot.cxx:267
 MCMCIntervalPlot.cxx:268
 MCMCIntervalPlot.cxx:269
 MCMCIntervalPlot.cxx:270
 MCMCIntervalPlot.cxx:271
 MCMCIntervalPlot.cxx:272
 MCMCIntervalPlot.cxx:273
 MCMCIntervalPlot.cxx:274
 MCMCIntervalPlot.cxx:275
 MCMCIntervalPlot.cxx:276
 MCMCIntervalPlot.cxx:277
 MCMCIntervalPlot.cxx:278
 MCMCIntervalPlot.cxx:279
 MCMCIntervalPlot.cxx:280
 MCMCIntervalPlot.cxx:281
 MCMCIntervalPlot.cxx:282
 MCMCIntervalPlot.cxx:283
 MCMCIntervalPlot.cxx:284
 MCMCIntervalPlot.cxx:285
 MCMCIntervalPlot.cxx:286
 MCMCIntervalPlot.cxx:287
 MCMCIntervalPlot.cxx:288
 MCMCIntervalPlot.cxx:289
 MCMCIntervalPlot.cxx:290
 MCMCIntervalPlot.cxx:291
 MCMCIntervalPlot.cxx:292
 MCMCIntervalPlot.cxx:293
 MCMCIntervalPlot.cxx:294
 MCMCIntervalPlot.cxx:295
 MCMCIntervalPlot.cxx:296
 MCMCIntervalPlot.cxx:297
 MCMCIntervalPlot.cxx:298
 MCMCIntervalPlot.cxx:299
 MCMCIntervalPlot.cxx:300
 MCMCIntervalPlot.cxx:301
 MCMCIntervalPlot.cxx:302
 MCMCIntervalPlot.cxx:303
 MCMCIntervalPlot.cxx:304
 MCMCIntervalPlot.cxx:305
 MCMCIntervalPlot.cxx:306
 MCMCIntervalPlot.cxx:307
 MCMCIntervalPlot.cxx:308
 MCMCIntervalPlot.cxx:309
 MCMCIntervalPlot.cxx:310
 MCMCIntervalPlot.cxx:311
 MCMCIntervalPlot.cxx:312
 MCMCIntervalPlot.cxx:313
 MCMCIntervalPlot.cxx:314
 MCMCIntervalPlot.cxx:315
 MCMCIntervalPlot.cxx:316
 MCMCIntervalPlot.cxx:317
 MCMCIntervalPlot.cxx:318
 MCMCIntervalPlot.cxx:319
 MCMCIntervalPlot.cxx:320
 MCMCIntervalPlot.cxx:321
 MCMCIntervalPlot.cxx:322
 MCMCIntervalPlot.cxx:323
 MCMCIntervalPlot.cxx:324
 MCMCIntervalPlot.cxx:325
 MCMCIntervalPlot.cxx:326
 MCMCIntervalPlot.cxx:327
 MCMCIntervalPlot.cxx:328
 MCMCIntervalPlot.cxx:329
 MCMCIntervalPlot.cxx:330
 MCMCIntervalPlot.cxx:331
 MCMCIntervalPlot.cxx:332
 MCMCIntervalPlot.cxx:333
 MCMCIntervalPlot.cxx:334
 MCMCIntervalPlot.cxx:335
 MCMCIntervalPlot.cxx:336
 MCMCIntervalPlot.cxx:337
 MCMCIntervalPlot.cxx:338
 MCMCIntervalPlot.cxx:339
 MCMCIntervalPlot.cxx:340
 MCMCIntervalPlot.cxx:341
 MCMCIntervalPlot.cxx:342
 MCMCIntervalPlot.cxx:343
 MCMCIntervalPlot.cxx:344
 MCMCIntervalPlot.cxx:345
 MCMCIntervalPlot.cxx:346
 MCMCIntervalPlot.cxx:347
 MCMCIntervalPlot.cxx:348
 MCMCIntervalPlot.cxx:349
 MCMCIntervalPlot.cxx:350
 MCMCIntervalPlot.cxx:351
 MCMCIntervalPlot.cxx:352
 MCMCIntervalPlot.cxx:353
 MCMCIntervalPlot.cxx:354
 MCMCIntervalPlot.cxx:355
 MCMCIntervalPlot.cxx:356
 MCMCIntervalPlot.cxx:357
 MCMCIntervalPlot.cxx:358
 MCMCIntervalPlot.cxx:359
 MCMCIntervalPlot.cxx:360
 MCMCIntervalPlot.cxx:361
 MCMCIntervalPlot.cxx:362
 MCMCIntervalPlot.cxx:363
 MCMCIntervalPlot.cxx:364
 MCMCIntervalPlot.cxx:365
 MCMCIntervalPlot.cxx:366
 MCMCIntervalPlot.cxx:367
 MCMCIntervalPlot.cxx:368
 MCMCIntervalPlot.cxx:369
 MCMCIntervalPlot.cxx:370
 MCMCIntervalPlot.cxx:371
 MCMCIntervalPlot.cxx:372
 MCMCIntervalPlot.cxx:373
 MCMCIntervalPlot.cxx:374
 MCMCIntervalPlot.cxx:375
 MCMCIntervalPlot.cxx:376
 MCMCIntervalPlot.cxx:377
 MCMCIntervalPlot.cxx:378
 MCMCIntervalPlot.cxx:379
 MCMCIntervalPlot.cxx:380
 MCMCIntervalPlot.cxx:381
 MCMCIntervalPlot.cxx:382
 MCMCIntervalPlot.cxx:383
 MCMCIntervalPlot.cxx:384
 MCMCIntervalPlot.cxx:385
 MCMCIntervalPlot.cxx:386
 MCMCIntervalPlot.cxx:387
 MCMCIntervalPlot.cxx:388
 MCMCIntervalPlot.cxx:389
 MCMCIntervalPlot.cxx:390
 MCMCIntervalPlot.cxx:391
 MCMCIntervalPlot.cxx:392
 MCMCIntervalPlot.cxx:393
 MCMCIntervalPlot.cxx:394
 MCMCIntervalPlot.cxx:395
 MCMCIntervalPlot.cxx:396
 MCMCIntervalPlot.cxx:397
 MCMCIntervalPlot.cxx:398
 MCMCIntervalPlot.cxx:399
 MCMCIntervalPlot.cxx:400
 MCMCIntervalPlot.cxx:401
 MCMCIntervalPlot.cxx:402
 MCMCIntervalPlot.cxx:403
 MCMCIntervalPlot.cxx:404
 MCMCIntervalPlot.cxx:405
 MCMCIntervalPlot.cxx:406
 MCMCIntervalPlot.cxx:407
 MCMCIntervalPlot.cxx:408
 MCMCIntervalPlot.cxx:409
 MCMCIntervalPlot.cxx:410
 MCMCIntervalPlot.cxx:411
 MCMCIntervalPlot.cxx:412
 MCMCIntervalPlot.cxx:413
 MCMCIntervalPlot.cxx:414
 MCMCIntervalPlot.cxx:415
 MCMCIntervalPlot.cxx:416
 MCMCIntervalPlot.cxx:417
 MCMCIntervalPlot.cxx:418
 MCMCIntervalPlot.cxx:419
 MCMCIntervalPlot.cxx:420
 MCMCIntervalPlot.cxx:421
 MCMCIntervalPlot.cxx:422
 MCMCIntervalPlot.cxx:423
 MCMCIntervalPlot.cxx:424
 MCMCIntervalPlot.cxx:425
 MCMCIntervalPlot.cxx:426
 MCMCIntervalPlot.cxx:427
 MCMCIntervalPlot.cxx:428
 MCMCIntervalPlot.cxx:429
 MCMCIntervalPlot.cxx:430
 MCMCIntervalPlot.cxx:431
 MCMCIntervalPlot.cxx:432
 MCMCIntervalPlot.cxx:433
 MCMCIntervalPlot.cxx:434
 MCMCIntervalPlot.cxx:435
 MCMCIntervalPlot.cxx:436
 MCMCIntervalPlot.cxx:437
 MCMCIntervalPlot.cxx:438
 MCMCIntervalPlot.cxx:439
 MCMCIntervalPlot.cxx:440
 MCMCIntervalPlot.cxx:441
 MCMCIntervalPlot.cxx:442
 MCMCIntervalPlot.cxx:443
 MCMCIntervalPlot.cxx:444
 MCMCIntervalPlot.cxx:445
 MCMCIntervalPlot.cxx:446
 MCMCIntervalPlot.cxx:447
 MCMCIntervalPlot.cxx:448
 MCMCIntervalPlot.cxx:449
 MCMCIntervalPlot.cxx:450
 MCMCIntervalPlot.cxx:451
 MCMCIntervalPlot.cxx:452
 MCMCIntervalPlot.cxx:453
 MCMCIntervalPlot.cxx:454
 MCMCIntervalPlot.cxx:455
 MCMCIntervalPlot.cxx:456
 MCMCIntervalPlot.cxx:457
 MCMCIntervalPlot.cxx:458
 MCMCIntervalPlot.cxx:459
 MCMCIntervalPlot.cxx:460
 MCMCIntervalPlot.cxx:461
 MCMCIntervalPlot.cxx:462
 MCMCIntervalPlot.cxx:463
 MCMCIntervalPlot.cxx:464
 MCMCIntervalPlot.cxx:465
 MCMCIntervalPlot.cxx:466
 MCMCIntervalPlot.cxx:467
 MCMCIntervalPlot.cxx:468
 MCMCIntervalPlot.cxx:469
 MCMCIntervalPlot.cxx:470
 MCMCIntervalPlot.cxx:471
 MCMCIntervalPlot.cxx:472
 MCMCIntervalPlot.cxx:473
 MCMCIntervalPlot.cxx:474
 MCMCIntervalPlot.cxx:475
 MCMCIntervalPlot.cxx:476
 MCMCIntervalPlot.cxx:477
 MCMCIntervalPlot.cxx:478
 MCMCIntervalPlot.cxx:479
 MCMCIntervalPlot.cxx:480
 MCMCIntervalPlot.cxx:481
 MCMCIntervalPlot.cxx:482
 MCMCIntervalPlot.cxx:483
 MCMCIntervalPlot.cxx:484
 MCMCIntervalPlot.cxx:485
 MCMCIntervalPlot.cxx:486
 MCMCIntervalPlot.cxx:487
 MCMCIntervalPlot.cxx:488
 MCMCIntervalPlot.cxx:489