ROOT logo
/**
 * @file   UnfoldMultDists.C
 * @author Christian Holm Christensen <cholm@nbi.dk>
 * @date   Tue Nov 12 09:25:52 2013
 * 
 * @brief  A class to do unfolding 
 * 
 * 
 * @ingroup pwglf_forward_multdist
 */
#include <TFile.h>
#include <TList.h>
#include <TH1.h>
#include <TH2.h>
#include <THStack.h>
#include <TLegend.h>
#include <TLegendEntry.h>
#include <TClass.h>
#include <TRegexp.h>
#include <TMath.h>
#include <TParameter.h>
#include <TMultiGraph.h>
#include <TGraphAsymmErrors.h>
#include "RooUnfold.h"
#include "RooUnfoldResponse.h"
#include <fstream>

/**
 * Class to do unfolding of raw histograms produced by AliForwardMultDists 
 * 
 * @ingroup pwglf_forward_multdist
 */
struct Unfolder
{
  /**
   * Colours used 
   * 
   */
  enum {
    kColorMeasured = kOrange-2, 
    kColorTruth    = kBlue-3, 
    kColorAccepted = kMagenta-3,
    kColorTrgVtx   = kBlack, 
    kColorUnfolded = kOrange+2,
    kColorCorrected= kRed+2, 
    kColorError    = kBlue-10,
    kColorALICE    = kPink+1, 
    kColorCMS      = kGreen+2
  };

  /** 
   * Constructor 
   */
  Unfolder() {}
  /** 
   * Get a top collection from a file
   * 
   * @param fileName Name of file 
   * @param results  Wheter it's the results collection or not 
   * 
   * @return Collection or null
   */
  static TCollection* GetTop(const TString& fileName, Bool_t results=false)
  {
    TFile* file = TFile::Open(fileName, "READ");
    if (!file) { 
      Error("GetTop", "Failed to open %s", fileName.Data());
      return 0;
    }
    TCollection* ret = 0;
    TString cName(Form("ForwardMult%s", results ? "Results" : "Sums"));
    file->GetObject(cName, ret);
    if (!ret) 
      Error("GetTop", "Failed to get collection %s from %s", 
	    cName.Data(), fileName.Data());
    file->Close();
    return ret;
  }
  /** 
   * Get an object from a collection 
   * 
   * @param c    Collection
   * @param name Name of object
   * @param cl   Possible class to check against
   * @param verbose  Be verbose
   * 
   * @return Pointer to object or null
   */
  static TObject* GetObject(TCollection* c, const TString& name, 
			    TClass* cl, Bool_t verbose=true)
  {
    TObject* o = c->FindObject(name);
    if (!o) { 
      if (verbose)
	Warning("GetObject", "%s not found in %s", name.Data(), c->GetName());
      return 0;
    }
    if (cl && !o->IsA()->InheritsFrom(cl)) {
      if (verbose) 
	Warning("GetCollection", "%s is not a %s but a %s", 
		name.Data(), cl->GetName(), o->ClassName());
      return 0;
    }
    return o;
  }
  /** 
   * Get a collection 
   * 
   * @param c        Parent collection
   * @param name     Name of object to findf
   * @param verbose  Be verbose
   * 
   * @return 
   */
  static TCollection* GetCollection(TCollection*   c, 
				    const TString& name, 
				    Bool_t         verbose=-true)
  {
    return static_cast<TCollection*>(GetObject(c, name, 
					       TCollection::Class(),
					       verbose));
  }
  /** 
   * Get a 1D histogram from a collection
   * 
   * @param c    Collection
   * @param name Nanme of histogram
   * @param verbose  Be verbose
   * 
   * @return Pointer to object or null
   */
  static TH1* GetH1(TCollection* c, const TString& name, Bool_t verbose=true) 
  {
    return static_cast<TH1*>(GetObject(c, name, TH1::Class(), verbose));
  }
  /** 
   * Get a 2D histogram from a collection
   * 
   * @param c    Collection
   * @param name Nanme of histogram
   * @param verbose  Be verbose
   * 
   * @return Pointer to object or null
   */
  static TH2* GetH2(TCollection* c, const TString& name, Bool_t verbose=true) 
  {
    return static_cast<TH2*>(GetObject(c, name, TH2::Class(), verbose));
  }
  /** 
   * Get an unsigned short parameter from the collection 
   * 
   * @param c    Collection
   * @param name Parameter name 
   * @param v    Value
   * 
   * @return Value 
   */
  static void GetParameter(TCollection* c, const TString& name, UShort_t& v)
  {
    TObject* o = GetObject(c, name, TParameter<int>::Class(), true);
    v = (!o ? 0 : o->GetUniqueID());
  }
  /** 
   * Get an unsigned short parameter from the collection 
   * 
   * @param c    Collection
   * @param name Parameter name 
   * @param v    Value
   * 
   * @return Value 
   */
  static void GetParameter(TCollection* c, const TString& name, ULong_t& v)
  {
    TObject* o = GetObject(c, name, TParameter<long>::Class(), true);
    v = (!o ? 0 : o->GetUniqueID());
  }
  /** 
   * Get an unsigned short parameter from the collection 
   * 
   * @param c    Collection
   * @param name Parameter name 
   * @param v    Value
   * 
   * @return Value 
   */
  static void GetParameter(TCollection* c, const TString& name, Double_t& v)
  {
    TObject* o = GetObject(c, name, TParameter<double>::Class(), true);
    v = (!o ? 0 : static_cast<TParameter<double>*>(o)->GetVal());
  }
  /** 
   * Get the method identifier 
   * 
   * @param method Method 
   * 
   * @return Method identifier 
   */    
  static UInt_t MethodId(TString& method) 
  {
    struct Method { 
      UInt_t  id;
      TString name;
    };
    const Method methods[] = { {RooUnfold::kNone,    "None"},
			       {RooUnfold::kBayes,   "Bayes"},
			       {RooUnfold::kSVD,     "SVD"},
			       {RooUnfold::kBinByBin,"BinByBin"},
			       {RooUnfold::kTUnfold, "TUnfold"},
			       {RooUnfold::kInvert,  "Invert"},
			       {RooUnfold::kDagostini,"Dagostini"}, 
			       {0xDeadBeef,           "unknown"} };
    const Method* pMethod = methods;
    while (pMethod->id != 0xDeadBeef) {
      if (method.BeginsWith(pMethod->name, TString::kIgnoreCase)) {
	method = pMethod->name;
	break;
      }
      pMethod++;
    }
    if (pMethod->id == 0xDeadBeef) 
      Error("MethodId", "Unknown unfolding method: %s", method.Data());

    return pMethod->id;
  }
  
  /** 
   * Run the unfolding and correction task. 
   *
   * The @a measuredFile is assumed to have the structure 
   *
   * @verbatim
   *     /- ForwardMultSums         (TCollection)
   *          |- [type]             (TCollection)
   *          |    |- [bin]         (TCollection) 
   *          |    |    `- rawDist  (TH1)
   *          |    |- [bin]
   *          |    ...
   *          |- [type]
   *          ...
   * @endverbatim 
   * 
   * and @a corrFile is assumed to have the structure 
   *
   * @verbatim
   *     /- ForwardMultResults            (TCollection)
   *          |- [type]                   (TCollection)
   *          |    |- [bin]               (TCollection) 
   *          |    |    |- truth          (TH1)
   *          |    |    |- truthAccepted  (TH1)
   *          |    |    |- triggerVertex  (TH1)
   *          |    |    `- response       (TH2)
   *          |    |- [bin]
   *          |    ...
   *          |- [type]
   *          ...
   * @endverbatim 
   *
   * where @c [type] is one of <i>symmetric</i>, <i>positive</i>,
   * <i>negative</i>, or <i>other</i>, and [bin] is the @f$ \eta@f$
   * bin named like
   *
   * @verbatim
   *   [bin]          := [eta_spec] _ [eta_spec]
   *   [eta_spec]     := [sign_char] [integer_part] d [decimal_part]
   *   [sign_part]    := p          positive eta 
   *                  |  m          negative eta 
   *   [integer_part] := [number]
   *   [decimal_part] := [number] [number]
   *   [number]       := 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 
   * @endverbatim
   *
   * That is, the bin @f$ -3\le\eta\ge3@f$ is labeled
   * <b>m3d00_p3d00</b>, @f$ 0\le\eta\ge2.5@f$ is <b>p0d00_p2d50</b> 
   *
   * @a measuredFile and @a corrFile can point to the same file.  If
   * @a corrFile is not specified, it is assumed that @a measuredFile
   * has the expected @a corrFile @e in @e addition to the
   * expected content of that file.
   * 
   * @param measuredFile Name of file containing measured data
   * @param corrFile     Name of file containing correction data
   * @param method       Unfolding method to use 
   * @param regParam     Regularization parameter 
   */  
  void Run(const TString& measuredFile, const TString& corrFile,
	   const TString& method="Bayes", Double_t regParam=4)
  {
    // Get the input collections 
    if (measuredFile.IsNull()) {
      Error("Run", "No measurements given");
      return;
    }
    TCollection* mTop = GetTop(measuredFile, false);
    TCollection* cTop = GetTop(corrFile.IsNull() ? measuredFile : corrFile, 
			       true);
    if (!mTop || !cTop) return;

    // Get some info from the input collection 
    UShort_t sys;
    UShort_t sNN; 
    ULong_t  trig; 
    Double_t minZ; 
    Double_t maxZ;
    GetParameter(mTop, "sys",     sys);	  
    GetParameter(mTop, "sNN",     sNN);	  
    GetParameter(mTop, "trigger", trig);
    GetParameter(mTop, "minIpZ",  minZ); 
    GetParameter(mTop, "maxIpZ",  maxZ); 
    if (sys == 0 || sNN == 0) 
      Warning("Run", "System (%d) and/or collision energy (%d) unknown", 
	      sys, sNN);
    
    // Open the output file 
    TFile* out = TFile::Open("forward_unfolded.root", "RECREATE");
    if (!out) { 
      Error("Run", "Failed to open output file");
      return;
    }

    // Decode method option and store in file 
    TString meth(method);
    UInt_t  mId = MethodId(meth);
    if (mId == 0xDeadBeef) return;

    // Store information 
    SaveInformation(out,meth,mId,regParam,sys,sNN,trig,minZ,maxZ,
		    corrFile.IsNull());

    // Load other data 
    TString savPath(gROOT->GetMacroPath());
    gROOT->SetMacroPath(Form("%s:$(ALICE_ROOT)/PWGLF/FORWARD/analysis2/scripts",
                             gROOT->GetMacroPath()));
    // Always recompile 
    if (!gROOT->GetClass("OtherPNch"))
      gROOT->LoadMacro("OtherPNchData.C++");
    gROOT->SetMacroPath(savPath);

    // Loop over the input 
    const char*  inputs[] = { "symmetric", "positive", "negative", 0 };
    const char** pinput   = inputs;
    while (*pinput) { 
      TCollection* mInput = GetCollection(mTop, *pinput, false);
      TCollection* cInput = GetCollection(cTop, *pinput, false);
      if (mInput && cInput)
	ProcessType(mInput, cInput, mId, regParam, out,
		    sys, sNN);
      pinput++;
    }      

    out->Write();
    // out->ls();
    out->Close();

    SaveSummarize();
  }
  /** 
   * Append an & to a string and the next term.
   * 
   * @param trg  Output string
   * @param what Term
   */
  static void AppendAnd(TString& trg, const TString& what)
  {
    if (!trg.IsNull()) trg.Append(" & ");
    trg.Append(what);
  }
  /** 
   * Store some information on the output
   * 
   * @param dir      Where to store
   * @param method   Method used
   * @param mId      Method identifier 
   * @param regParam Regularization parameter 
   * @param sys      Collision system
   * @param sNN      Center of mass energy 
   * @param trigger  Trigger mask 
   * @param minIpZ   Least z coordinate of interaction point
   * @param maxIpZ   Largest z coordinate of interaction point
   * @param self     Self-consistency check
   */
  void SaveInformation(TDirectory* dir, 
		       const TString& method,
		       Int_t          mId,
		       Double_t       regParam, 
		       UShort_t       sys, 
		       UShort_t       sNN,
		       UInt_t         trigger,
		       Double_t       minIpZ, 
		       Double_t       maxIpZ, 
		       Bool_t         self) const
  {
    dir->cd();

    TParameter<bool>* pM = new TParameter<bool>("self", self);
    pM->SetBit(BIT(19));
    pM->Write();

    TNamed* outMeth = new TNamed("method", method.Data());
    outMeth->SetUniqueID(mId);
    outMeth->Write();

    TParameter<double>* pR = new TParameter<double>("regParam", regParam);
    pR->SetBit(BIT(19));
    pR->Write();
    
    TString tS = (sys == 1 ? "pp" : sys == 2 ? "PbPb" : sys == 3 ? "pPb" : "?");
    TNamed* pS = new TNamed("sys", tS.Data()); pS->SetUniqueID(sys);
    pS->Write();
    
    TString tE;
    if      (sNN <  1000) tE = Form("%dGeV", sNN);
    else if (sNN <  3000) tE = Form("%4.2fTeV", float(sNN)/1000);
    else                  tE = Form("%dTeV", sNN/1000);
    TNamed* pE = new TNamed("sNN", tE.Data()); pE->SetUniqueID(sNN);
    pE->Write();
    
    TString tT;
    /** 
     * Bits of the trigger pattern
     */
    enum { 
      /** In-elastic collision */
      kInel        = 0x0001, 
      /** In-elastic collision with at least one SPD tracklet */
      kInelGt0     = 0x0002, 
      /** Non-single diffractive collision */
      kNSD         = 0x0004, 
      /** Empty bunch crossing */
      kEmpty       = 0x0008, 
      /** A-side trigger */
      kA           = 0x0010, 
      /** B(arrel) trigger */
      kB           = 0x0020, 
      /** C-side trigger */
      kC           = 0x0080,  
      /** Empty trigger */
      kE           = 0x0100,
      /** pileup from SPD */
      kPileUp      = 0x0200,    
      /** true NSD from MC */
      kMCNSD       = 0x0400,    
      /** Offline MB triggered */
      kOffline     = 0x0800,
      /** At least one SPD cluster */ 
      kNClusterGt0 = 0x1000,
      /** V0-AND trigger */
      kV0AND       = 0x2000, 
      /** Satellite event */
      kSatellite   = 0x4000
    };
    if ((trigger & kInel)        != 0x0) AppendAnd(tT, "INEL");
    if ((trigger & kInelGt0)     != 0x0) AppendAnd(tT, "INEL>0");
    if ((trigger & kNSD)         != 0x0) AppendAnd(tT, "NSD");
    if ((trigger & kV0AND)       != 0x0) AppendAnd(tT, "V0AND");
    if ((trigger & kA)           != 0x0) AppendAnd(tT, "A");
    if ((trigger & kB)           != 0x0) AppendAnd(tT, "B");
    if ((trigger & kC)           != 0x0) AppendAnd(tT, "C");
    if ((trigger & kE)           != 0x0) AppendAnd(tT, "E");
    if ((trigger & kMCNSD)       != 0x0) AppendAnd(tT, "MCNSD");
    if ((trigger & kNClusterGt0) != 0x0) AppendAnd(tT, "NCluster>0");
    if ((trigger & kSatellite)   != 0x0) AppendAnd(tT, "Satellite");
    TNamed* pT = new TNamed("trigger", tT.Data()); pT->SetUniqueID(trigger);
    pT->Write();
    
    TParameter<double>* pY = new TParameter<double>("minIpZ", minIpZ);
    pY->SetBit(BIT(19));
    pY->Write();

    TParameter<double>* pZ = new TParameter<double>("maxIpZ", maxIpZ);
    pZ->SetBit(BIT(19));
    pZ->Write();
  }
  /** 
   * Save a script to do a summary of this step 
   * 
   */		       
  void SaveSummarize()
  {
    std::ofstream f("SummarizeUnfold.C");
    f << "void SummarizeUnfold(const char* file=\"forward_unfolded.root\")\n"
      << "{\n"
      << "  const char* fwd=\"$ALICE_ROOT/PWGLF/FORWARD/analysis2\";\n"
      << "  gROOT->LoadMacro(Form(\"%s/DrawUnfoldedSummary.C\",fwd));\n"
      << "  DrawUnfoldedSummary(file);\n"
      << "}\n"
      << "// EOF" << std::endl;
    f.close();
  }
  /** 
   * Process a single type - i.e., one of <i>symmetric</i>,
   * <i>positive</i>, <i>negative</i>, or <i>other</i> - by looping
   * over all contained objects and call ProcessBin for each found
   * bin.
   * 
   * @param measured     Input collection of measured data
   * @param corrections  Input collection of correction data
   * @param method       Unfolding method to use 
   * @param regParam     Regularisation parameter
   * @param out          Output directory. 
   * @param sys          Collision system
   * @param sNN          Collision energy 
   */
  void ProcessType(TCollection* measured, 
		   TCollection* corrections,
		   UInt_t       method,
		   Double_t     regParam,
		   TDirectory*  out,
		   UShort_t     sys, 
		   UShort_t     sNN)
  {
    Printf("  Processing %s ...", measured->GetName());
    TDirectory* dir = out->mkdir(measured->GetName());
    
    // Make some summary stacks 
    THStack*  allMeasured  = new THStack("measured",      
					 "Measured P(#it{N}_{ch})");
    THStack*  allTruth     = new THStack("truth",        
					 "MC 'truth' P(#it{N}_{ch})");
    THStack*  allTruthA    = new THStack("truthAccepted",
					 "MC 'truth' accepted P(#it{N}_{ch})");
    THStack*  allUnfolded  = new THStack("unfolded",
					 "Unfolded P(#it{N}_{ch})");
    THStack*  allCorrected = new THStack("corrected",
					 "Corrected P(#it{N}_{ch})");
    THStack*  allRatio     = (sys != 1 ? 0 : 
			      new THStack("ratios", "Ratios to other"));
    TMultiGraph* allALICE  = (sys != 1 ? 0 : 
			      new TMultiGraph("alice", "ALICE Published"));
    TMultiGraph* allCMS    = (sys != 1 ? 0 : 
			      new TMultiGraph("cms", "CMS Published"));

    // Loop over the list of objects. 
    static TRegexp regex("[pm][0-9]d[0-9]*_[pm][0-9]d[0-9]*");
    TIter          next(measured);
    TObject*       o = 0;
    Int_t          i = 0;
    Double_t       r = regParam;
    while ((o = next())) {
      // Go back to where we where 
      dir->cd();
      
      // if not a collection, don't bother 
      if (!o->IsA()->InheritsFrom(TCollection::Class())) continue;
    
      // If it doesn't match our regular expression, don't bother 
      TString n(o->GetName());
      if (n.Index(regex) == kNPOS) { 
	// Warning("ScanType", "%s in %s doesn't match eta range regexp", 
	//         n.Data(), real->GetName());
	continue;
      }
      TCollection* mBin = static_cast<TCollection*>(o);
      TCollection* cBin = GetCollection(corrections, n.Data());
      if (!cBin) continue;

      THStack* binS = ProcessBin(mBin, cBin, method, r, dir);
      if (!binS) continue;

      TH1* result = 0;
      Bin2Stack(binS, i, allMeasured, allTruth, allTruthA, 
		allUnfolded, allCorrected, result);

      TGraph* alice = 0;
      TGraph* cms   = 0;
      Other2Stack(o->GetName(), i, sNN, allALICE, allCMS, alice, cms);
      Ratio2Stack(i, result, alice, cms, allRatio);
      i++;
    }
    dir->Add(allMeasured);
    dir->Add(allTruth);
    dir->Add(allTruthA);
    dir->Add(allUnfolded);
    dir->Add(allCorrected);
    if (allALICE && allALICE->GetListOfGraphs()) {
      if (allALICE->GetListOfGraphs()->GetEntries() > 0)
	dir->Add(allALICE);
      else 
	delete allALICE;
    }
    if (allCMS && allCMS->GetListOfGraphs()) {
      if (allCMS->GetListOfGraphs()->GetEntries() > 0) 
	dir->Add(allCMS);
      else 
	delete allCMS;
    }
    if (allRatio && allRatio->GetHists()) { 
      if (allRatio->GetHists()->GetEntries() > 0) 
	dir->Add(allRatio);
      else 
	delete allRatio;
    }
  }
  /** 
   * Process a single eta bin 
   * 
   * @param measured     Input collection of measured data
   * @param corrections  Input collection of correction data
   * @param method       Unfolding method to use 
   * @param regParam     Regularisation parameter
   * @param out          Output directory. 
   *
   * @return Stack of histograms or null 
   */
  THStack* ProcessBin(TCollection* measured, 
		      TCollection* corrections, 
		      UInt_t       method,
		      Double_t     regParam, 
		      TDirectory*  out)
  {
    Printf("   Processing %s ...", measured->GetName());
    // Try to get the data 
    TH1* inRaw    = GetH1(measured,    "rawDist");
    TH1* inTruth  = GetH1(corrections, "truth");
    TH1* inTruthA = GetH1(corrections, "truthAccepted");
    TH1* inTrgVtx = GetH1(corrections, "triggerVertex");
    TH2* inResp   = GetH2(corrections, "response");
    if (!inRaw || !inTruth || !inTruthA || !inTrgVtx || !inResp) 
      return 0;
    
    // Make output directory
    TDirectory* dir = out->mkdir(measured->GetName());
    dir->cd();

    // Copy the input to the output 
    TH1* outRaw    = static_cast<TH1*>(inRaw    ->Clone("measured"));
    TH1* outTruth  = static_cast<TH1*>(inTruth  ->Clone("truth"));
    TH1* outTruthA = static_cast<TH1*>(inTruthA ->Clone("truthAccepted"));
    TH1* outTrgVtx = static_cast<TH1*>(inTrgVtx ->Clone("triggerVertex"));
    TH2* outResp   = static_cast<TH2*>(inResp   ->Clone("response"));

    // Make our response matrix 
    RooUnfoldResponse matrix(0, 0, inResp);
    
    // Store regularization parameter 
    Double_t             r        = regParam;
    RooUnfold::Algorithm algo     = (RooUnfold::Algorithm)method;
    RooUnfold*           unfolder = RooUnfold::New(algo, &matrix, inRaw, r);
    unfolder->SetVerbose(0);

    // Do the unfolding and get the result
    TH1* res = unfolder->Hreco();
    res->SetDirectory(0);

    // Make a copy to store on the output 
    TH1* outUnfold = static_cast<TH1*>(res->Clone("unfolded"));
    TString tit(outUnfold->GetTitle());
    tit.ReplaceAll("Unfold Reponse matrix", "Unfolded P(#it{N}_{ch})");
    outUnfold->SetTitle(tit);

    // Clone the unfolded results and divide by the trigger/vertex
    // bias correction
    TH1* outCorr   = static_cast<TH1*>(outUnfold->Clone("corrected"));
    outCorr->Divide(inTrgVtx);
    tit.ReplaceAll("Unfolded", "Corrected");
    outCorr->SetTitle(tit);

    // Now normalize the output to integral=1 
    TH1*  hists[] = { outRaw, outUnfold, outCorr, 0 };
    TH1** phist   = hists;
    while (*phist) { 
      TH1* h = *phist;
      if (h) { 
	Double_t intg = h->Integral(1, h->GetXaxis()->GetXmax());
	h->Scale(1. / intg, "width");
      }
      phist++;
    }
    
    // And make ratios
    TH1* ratioTrue = static_cast<TH1*>(outCorr->Clone("ratioCorrTruth"));
    tit = ratioTrue->GetTitle();
    tit.ReplaceAll("Corrected", "Corrected/MC 'truth'");
    ratioTrue->SetTitle(tit);
    ratioTrue->Divide(outTruth);
    ratioTrue->SetYTitle("P_{corrected}(#it{N}_{ch})/P_{truth}(#it{N}_{ch})");

    TH1* ratioAcc  = static_cast<TH1*>(outUnfold->Clone("ratioUnfAcc"));
    tit = ratioAcc->GetTitle();
    tit.ReplaceAll("Unfolded", "Unfolded/MC selected");
    ratioAcc->SetTitle(tit);
    ratioAcc->Divide(outTruthA);
    ratioAcc->SetYTitle("P_{unfolded}(#it{N}_{ch})/P_{MC}(#it{N}_{ch})");
    

    // Make a stack 
    tit = measured->GetName();
    tit.ReplaceAll("m", "-");
    tit.ReplaceAll("p", "+");
    tit.ReplaceAll("d", ".");
    tit.ReplaceAll("_", "<#it{#eta}<");
    THStack* stack = new THStack("all", tit);
    stack->Add(outTruth,  "E2");
    stack->Add(outTruthA, "E2");
    stack->Add(outRaw,    "E1");
    stack->Add(outUnfold, "E1");
    stack->Add(outCorr,   "E1");
    dir->Add(stack);

    // Rest of the function is devoted to making the output look nice 
    outRaw   ->SetDirectory(dir); 
    outTruth ->SetDirectory(dir);  
    outTruthA->SetDirectory(dir);  
    outTrgVtx->SetDirectory(dir);  
    outResp  ->SetDirectory(dir);  
    outUnfold->SetDirectory(dir);   
    outCorr  ->SetDirectory(dir); 

    outRaw   ->SetMarkerStyle(20);  // Measured is closed
    outTruth ->SetMarkerStyle(24);  // MC is open
    outTruthA->SetMarkerStyle(24);  // MC is open
    outTrgVtx->SetMarkerStyle(20);  // Derived is closed
    outUnfold->SetMarkerStyle(20);  // Derived is closed   
    outCorr  ->SetMarkerStyle(20);  // Derived is closed 

    outRaw   ->SetMarkerSize(0.9); 
    outTruth ->SetMarkerSize(1.6);  
    outTruthA->SetMarkerSize(1.4);  
    outTrgVtx->SetMarkerSize(1.0);  
    outUnfold->SetMarkerSize(0.9);   
    outCorr  ->SetMarkerSize(1.0);
 
    outRaw   ->SetMarkerColor(kColorMeasured); 
    outTruth ->SetMarkerColor(kColorTruth);  
    outTruthA->SetMarkerColor(kColorAccepted);  
    outTrgVtx->SetMarkerColor(kColorTrgVtx);  
    outUnfold->SetMarkerColor(kColorUnfolded);   
    outCorr  ->SetMarkerColor(kColorCorrected); 

    outRaw   ->SetFillColor(kColorError);     
    outTruth ->SetFillColor(kColorError);  
    outTruthA->SetFillColor(kColorError);  
    outTrgVtx->SetFillColor(kColorError);  
    outUnfold->SetFillColor(kColorError);   
    outCorr  ->SetFillColor(kColorError); 

    outRaw   ->SetFillStyle(0); 
    outTruth ->SetFillStyle(1001);  
    outTruthA->SetFillStyle(1001);  
    outTrgVtx->SetFillStyle(0);  
    outUnfold->SetFillStyle(0);   
    outCorr  ->SetFillStyle(0);

    outRaw   ->SetLineColor(kBlack); 
    outTruth ->SetLineColor(kBlack);  
    outTruthA->SetLineColor(kBlack);  
    outTrgVtx->SetLineColor(kBlack);  
    outUnfold->SetLineColor(kBlack);   
    outCorr  ->SetLineColor(kBlack); 

    // Legend 
    TLegend* l = StackLegend(stack);
    l->AddEntry(outRaw,     "Raw",                 "lp");
    l->AddEntry(outTruth,   "MC 'truth'",          "fp");
    l->AddEntry(outTruthA,  "MC 'truth' accepted", "fp");
    l->AddEntry(outUnfold,  "Unfolded",            "lp");
    l->AddEntry(outCorr,    "Corrected",           "lp");

    return stack;
  }
  static void BinAttributes(Int_t i,
			    Int_t&    open, 
			    Int_t&    closed, 
			    Float_t&  size,
			    Double_t& factor) 
  {
    // --- Setup for markers -----------------------------------------
    const Int_t   nMarkers = 7;
    const Int_t   aClosed[] = { 20,  21,  22,  23,  29,  33,  34  };
    const Int_t   aOpen[]   = { 24,  25,  26,  32,  30,  27,  28  };
    const Float_t aSize[]   = { 1.1, 1.0, 1.2, 1.2, 1.2, 1.2, 1.0 };
    Int_t         j         = i % nMarkers;

    open   = aOpen[j];
    closed = aClosed[j];
    size   = aSize[j];
    factor = TMath::Power(10, i);
  }
  /** 
   * Add the bin histograms to our summary stacks 
   * 
   * @param bin       Bin stack
   * @param i         Current off-set in the stacks 
   * @param measured  All measured @f$ P(N_{ch})@f$ 
   * @param truth     All MC truth @f$ P(N_{ch})@f$ 
   * @param accepted  All MC accepted @f$ P(N_{ch})@f$ 
   * @param unfolded  All unfolded @f$ P(N_{ch})@f$ 
   * @param corrected All corrected @f$ P(N_{ch})@f$ 
   * @param result    The result in this bin
   */
  void Bin2Stack(const THStack* bin, Int_t i, 
		 THStack* measured, 
		 THStack* truth, 
		 THStack* accepted, 
		 THStack* unfolded,
		 THStack* corrected,
		 TH1*&    result)
  {
    Int_t open, closed;
    Double_t factor; 
    Float_t  size;
    BinAttributes(i, open, closed, size, factor);

    TIter next(bin->GetHists());
    TH1*  h = 0;
    while ((h = static_cast<TH1*>(next()))) {
      THStack* tmp = 0;
      Int_t    col = h->GetMarkerColor();
      Int_t    sty = 0;
      switch (col) { 
      case kColorMeasured:  tmp = measured;   sty = closed;  break;
      case kColorTruth:     tmp = truth;      sty = open;    break;
      case kColorAccepted:  tmp = accepted;   sty = open;    break;
      case kColorUnfolded:  tmp = unfolded;   sty = closed;  break;
      case kColorCorrected: tmp = corrected;  sty = closed;  break;
      default: continue; 
      }
      // Now clone, and add to the appropriate stack 
      TH1* cln = static_cast<TH1*>(h->Clone(h->GetName()));
      cln->SetDirectory(0);
      cln->SetMarkerStyle(sty);
      cln->SetMarkerSize(size);
      cln->Scale(factor); // Scale by 10^i
      if (col == kColorCorrected) result = cln;

      // Make sure we do not get the old legend 
      TObject* tst = cln->FindObject("legend");
      if (tst) cln->GetListOfFunctions()->Remove(tst);

      tmp->Add(cln, next.GetOption());
    }
    
    // Add entries to our stacks 
    TString   txt      = bin->GetTitle();
    if      (i == 0) txt.Append(" (#times1)");
    else if (i == 1) txt.Append(" (#times10)");
    else             txt.Append(Form(" (#times10^{%d})", i));
    THStack*  stacks[] = { measured, truth, accepted, unfolded, corrected, 0 };
    THStack** pstack   = stacks;
    while (*pstack) { 
      TLegend* leg = StackLegend(*pstack);
      pstack++;
      if (!leg) continue;
      
      TObject* dummy = 0;
      TLegendEntry* e = leg->AddEntry(dummy, txt, "p");
      e->SetMarkerStyle(closed);
      e->SetMarkerSize(1.2*size);
      e->SetMarkerColor(kBlack);
      e->SetFillColor(0);
      e->SetFillStyle(0);
      e->SetLineColor(kBlack);
    }
  }
  /** 
   * Add distributions from other experiments to stacks 
   * 
   * @param name     Name of current bin 
   * @param i        Index of current bin
   * @param sNN      Center of mass energy 
   * @param allALICE Stack of ALICE data 
   * @param allCMS   Stack of CMS data 
   * @param alice    Possible ALICE result on return
   * @param cms      Possible CMS result on return
   */
  void Other2Stack(const TString& name, Int_t i,
		   UShort_t sNN, TMultiGraph* allALICE, TMultiGraph* allCMS,
		   TGraph*& alice, TGraph*& cms) 
  {
    if (!allALICE && !allCMS) return;

    TString tmp(name);
    tmp.ReplaceAll("p", "+");
    tmp.ReplaceAll("m", "-");
    tmp.ReplaceAll("_", " ");
    tmp.ReplaceAll("d", ".");
    TObjArray* tokens = tmp.Tokenize(" ");
    if (!tokens || tokens->GetEntriesFast() < 2) { 
      Error("Other2Stack", "Failed to decode eta range from %s", name.Data());
      if (tokens) tokens->Delete();
      return;
    }
    Double_t eta1 = static_cast<TObjString*>(tokens->At(0))->String().Atof();
    Double_t eta2 = static_cast<TObjString*>(tokens->At(1))->String().Atof();
    tokens->Delete();
    
    if (TMath::Abs(eta2+eta1) > 1e-3) {
      // Not symmetric bin 
      // Info("Other2Stack", "bin [%f,%f] is not symmetric (%f)",
      //      eta1, eta2, TMath::Abs(eta2-eta1));
      return;
    }
    Double_t aEta = TMath::Abs(eta1);

    Int_t open, closed;
    Double_t factor; 
    Float_t  size;
    BinAttributes(i, open, closed, size, factor);

    if (allALICE) {
      TGraphAsymmErrors* g = GetOther(1, aEta, sNN, factor);
      if (g) {
	g->SetMarkerStyle(closed);
	g->SetMarkerColor(kColorALICE);
	g->SetMarkerSize(size);
	allALICE->Add(g, "p same");
	alice = g;
      }
    }
    if (allCMS) {
      TGraphAsymmErrors* g = GetOther(0, aEta, sNN, factor);
      if (g) {
	g->SetMarkerStyle(closed);
	g->SetMarkerColor(kColorCMS);
	g->SetMarkerSize(size);
	allCMS->Add(g, "p same");
	cms = g;
      }
    }
  }
  /** 
   * Create ratios to other data 
   * 
   * @param ib      Bin number  
   * @param res     Result
   * @param alice   ALICE result if any
   * @param cms     CMS result if any
   * @param all     Stack to add ratio to 
   */
  void Ratio2Stack(Int_t ib, TH1* res, TGraph* alice, TGraph* cms, THStack* all)
  {
    if (!all || !res || !(alice || cms)) return;

    Int_t        off  = 5*ib;
    TGraph*      gs[] = { (alice ? alice : cms), (alice ? cms : 0), 0 };
    TGraph**     pg   = gs;
    while (*pg) { 
      TGraph*     g = *pg;
      const char* n = (g == alice ? "ALICE" : "CMS");

      TH1*    r = static_cast<TH1*>(res->Clone(Form("ratio%s", n)));
      TString tit(r->GetTitle());
      tit.ReplaceAll("Corrected", Form("Ratio to %s", n));
      r->SetTitle(tit);
      r->SetMarkerColor(g->GetMarkerColor());
      r->SetLineColor(g->GetLineColor());

      TObject* tst = r->FindObject("legend");
      if (tst) r->GetListOfFunctions()->Remove(tst);

      for (Int_t i = 1; i <= r->GetNbinsX(); i++) {
	Double_t c = r->GetBinContent(i);
	Double_t e = r->GetBinError(i);
	Double_t o = g->Eval(r->GetBinCenter(i));
	if (o < 1e-12) { 
	  r->SetBinContent(i, 0);
	  r->SetBinError(i, 0);
	  continue;
	}
	r->SetBinContent(i, (c - o) / o + off);
	r->SetBinError(i, e / o);
      }
      all->Add(r);
      pg++;
    }
    TLegend* leg = StackLegend(all);
    if (!leg) return;
      
    TString   txt      = res->GetTitle();
    txt.ReplaceAll("Corrected P(#it{N}_{ch}) in ", "");
    if      (ib == 0) txt.Append(" "); // (#times1)");
    // else if (ib == 1) txt.Append(" (#times10)");
    else              txt.Append(Form(" (+%d)", off));

    TObject* dummy = 0;
    TLegendEntry* e = leg->AddEntry(dummy, txt, "p");
    e->SetMarkerStyle(res->GetMarkerStyle());
    e->SetMarkerSize(res->GetMarkerSize());
    e->SetMarkerColor(kBlack);
    e->SetFillColor(0);
    e->SetFillStyle(0);
    e->SetLineColor(kBlack);
  }

  /** 
   * Get or create a stack legend.  This is done by adding a TLegend
   * object to the list of functions for the first histogram in the
   * stack.
   * 
   * @param stack Stack to get the legend from/modify 
   * 
   * @return The legend object or null
   */
  TLegend* StackLegend(THStack* stack) 
  {
    TList* hists = stack->GetHists();
    if (!hists) return 0;
    
    TObject* first = hists->First();
    if (!first) return 0;

    TH1*    hist = static_cast<TH1*>(first);
    TList*  list = hist->GetListOfFunctions();
    TObject* o   = list->FindObject("legend");
    if (o) return static_cast<TLegend*>(o);
    
    TLegend* l = new TLegend(0.65, 0.65, 0.9, 0.9, "", "NDC");
    l->SetName("legend");
    l->SetBorderSize(0);
    l->SetFillColor(0);
    l->SetFillStyle(0);
    l->SetTextFont(42);
    list->Add(l);
    
    return l;
  }
  
  /* =================================================================
   *
   * Measurements from other sources, such as published ALICE, CMS, ...
   */
  TGraphAsymmErrors* GetOther(UShort_t type, Double_t eta, UShort_t sNN,
			      Int_t factor)
  {
    TString oC = Form("OtherPNch::GetData(%hu,%f,%hu);", 
                      type, eta, sNN);
    TGraphAsymmErrors* g = 
      reinterpret_cast<TGraphAsymmErrors*>(gROOT->ProcessLine(oC));
    if (!g) { 
      // Warning("GetOther", "No other data found for type=%d eta=%f sNN=%d",
      //         type, eta, sNN);
      return 0;
    }
  

    for (Int_t j = 0; j < g->GetN(); j++) { 
      g->SetPoint(j, g->GetX()[j], g->GetY()[j]*factor);
      g->SetPointError(j, g->GetEXlow()[j], g->GetEXhigh()[j], 
		       g->GetEYlow()[j]*factor, g->GetEYhigh()[j]*factor);
    }
    return g;
  }    
};

void
UnfoldMultDists(const TString& method="Bayes", 
		Double_t       regParam=1e-30,
		const TString& measured="forward_multdists.root", 
		const TString& corrections="")
{
  Unfolder m;
  m.Run(measured, corrections, method, regParam);
}
 UnfoldMultDists.C:1
 UnfoldMultDists.C:2
 UnfoldMultDists.C:3
 UnfoldMultDists.C:4
 UnfoldMultDists.C:5
 UnfoldMultDists.C:6
 UnfoldMultDists.C:7
 UnfoldMultDists.C:8
 UnfoldMultDists.C:9
 UnfoldMultDists.C:10
 UnfoldMultDists.C:11
 UnfoldMultDists.C:12
 UnfoldMultDists.C:13
 UnfoldMultDists.C:14
 UnfoldMultDists.C:15
 UnfoldMultDists.C:16
 UnfoldMultDists.C:17
 UnfoldMultDists.C:18
 UnfoldMultDists.C:19
 UnfoldMultDists.C:20
 UnfoldMultDists.C:21
 UnfoldMultDists.C:22
 UnfoldMultDists.C:23
 UnfoldMultDists.C:24
 UnfoldMultDists.C:25
 UnfoldMultDists.C:26
 UnfoldMultDists.C:27
 UnfoldMultDists.C:28
 UnfoldMultDists.C:29
 UnfoldMultDists.C:30
 UnfoldMultDists.C:31
 UnfoldMultDists.C:32
 UnfoldMultDists.C:33
 UnfoldMultDists.C:34
 UnfoldMultDists.C:35
 UnfoldMultDists.C:36
 UnfoldMultDists.C:37
 UnfoldMultDists.C:38
 UnfoldMultDists.C:39
 UnfoldMultDists.C:40
 UnfoldMultDists.C:41
 UnfoldMultDists.C:42
 UnfoldMultDists.C:43
 UnfoldMultDists.C:44
 UnfoldMultDists.C:45
 UnfoldMultDists.C:46
 UnfoldMultDists.C:47
 UnfoldMultDists.C:48
 UnfoldMultDists.C:49
 UnfoldMultDists.C:50
 UnfoldMultDists.C:51
 UnfoldMultDists.C:52
 UnfoldMultDists.C:53
 UnfoldMultDists.C:54
 UnfoldMultDists.C:55
 UnfoldMultDists.C:56
 UnfoldMultDists.C:57
 UnfoldMultDists.C:58
 UnfoldMultDists.C:59
 UnfoldMultDists.C:60
 UnfoldMultDists.C:61
 UnfoldMultDists.C:62
 UnfoldMultDists.C:63
 UnfoldMultDists.C:64
 UnfoldMultDists.C:65
 UnfoldMultDists.C:66
 UnfoldMultDists.C:67
 UnfoldMultDists.C:68
 UnfoldMultDists.C:69
 UnfoldMultDists.C:70
 UnfoldMultDists.C:71
 UnfoldMultDists.C:72
 UnfoldMultDists.C:73
 UnfoldMultDists.C:74
 UnfoldMultDists.C:75
 UnfoldMultDists.C:76
 UnfoldMultDists.C:77
 UnfoldMultDists.C:78
 UnfoldMultDists.C:79
 UnfoldMultDists.C:80
 UnfoldMultDists.C:81
 UnfoldMultDists.C:82
 UnfoldMultDists.C:83
 UnfoldMultDists.C:84
 UnfoldMultDists.C:85
 UnfoldMultDists.C:86
 UnfoldMultDists.C:87
 UnfoldMultDists.C:88
 UnfoldMultDists.C:89
 UnfoldMultDists.C:90
 UnfoldMultDists.C:91
 UnfoldMultDists.C:92
 UnfoldMultDists.C:93
 UnfoldMultDists.C:94
 UnfoldMultDists.C:95
 UnfoldMultDists.C:96
 UnfoldMultDists.C:97
 UnfoldMultDists.C:98
 UnfoldMultDists.C:99
 UnfoldMultDists.C:100
 UnfoldMultDists.C:101
 UnfoldMultDists.C:102
 UnfoldMultDists.C:103
 UnfoldMultDists.C:104
 UnfoldMultDists.C:105
 UnfoldMultDists.C:106
 UnfoldMultDists.C:107
 UnfoldMultDists.C:108
 UnfoldMultDists.C:109
 UnfoldMultDists.C:110
 UnfoldMultDists.C:111
 UnfoldMultDists.C:112
 UnfoldMultDists.C:113
 UnfoldMultDists.C:114
 UnfoldMultDists.C:115
 UnfoldMultDists.C:116
 UnfoldMultDists.C:117
 UnfoldMultDists.C:118
 UnfoldMultDists.C:119
 UnfoldMultDists.C:120
 UnfoldMultDists.C:121
 UnfoldMultDists.C:122
 UnfoldMultDists.C:123
 UnfoldMultDists.C:124
 UnfoldMultDists.C:125
 UnfoldMultDists.C:126
 UnfoldMultDists.C:127
 UnfoldMultDists.C:128
 UnfoldMultDists.C:129
 UnfoldMultDists.C:130
 UnfoldMultDists.C:131
 UnfoldMultDists.C:132
 UnfoldMultDists.C:133
 UnfoldMultDists.C:134
 UnfoldMultDists.C:135
 UnfoldMultDists.C:136
 UnfoldMultDists.C:137
 UnfoldMultDists.C:138
 UnfoldMultDists.C:139
 UnfoldMultDists.C:140
 UnfoldMultDists.C:141
 UnfoldMultDists.C:142
 UnfoldMultDists.C:143
 UnfoldMultDists.C:144
 UnfoldMultDists.C:145
 UnfoldMultDists.C:146
 UnfoldMultDists.C:147
 UnfoldMultDists.C:148
 UnfoldMultDists.C:149
 UnfoldMultDists.C:150
 UnfoldMultDists.C:151
 UnfoldMultDists.C:152
 UnfoldMultDists.C:153
 UnfoldMultDists.C:154
 UnfoldMultDists.C:155
 UnfoldMultDists.C:156
 UnfoldMultDists.C:157
 UnfoldMultDists.C:158
 UnfoldMultDists.C:159
 UnfoldMultDists.C:160
 UnfoldMultDists.C:161
 UnfoldMultDists.C:162
 UnfoldMultDists.C:163
 UnfoldMultDists.C:164
 UnfoldMultDists.C:165
 UnfoldMultDists.C:166
 UnfoldMultDists.C:167
 UnfoldMultDists.C:168
 UnfoldMultDists.C:169
 UnfoldMultDists.C:170
 UnfoldMultDists.C:171
 UnfoldMultDists.C:172
 UnfoldMultDists.C:173
 UnfoldMultDists.C:174
 UnfoldMultDists.C:175
 UnfoldMultDists.C:176
 UnfoldMultDists.C:177
 UnfoldMultDists.C:178
 UnfoldMultDists.C:179
 UnfoldMultDists.C:180
 UnfoldMultDists.C:181
 UnfoldMultDists.C:182
 UnfoldMultDists.C:183
 UnfoldMultDists.C:184
 UnfoldMultDists.C:185
 UnfoldMultDists.C:186
 UnfoldMultDists.C:187
 UnfoldMultDists.C:188
 UnfoldMultDists.C:189
 UnfoldMultDists.C:190
 UnfoldMultDists.C:191
 UnfoldMultDists.C:192
 UnfoldMultDists.C:193
 UnfoldMultDists.C:194
 UnfoldMultDists.C:195
 UnfoldMultDists.C:196
 UnfoldMultDists.C:197
 UnfoldMultDists.C:198
 UnfoldMultDists.C:199
 UnfoldMultDists.C:200
 UnfoldMultDists.C:201
 UnfoldMultDists.C:202
 UnfoldMultDists.C:203
 UnfoldMultDists.C:204
 UnfoldMultDists.C:205
 UnfoldMultDists.C:206
 UnfoldMultDists.C:207
 UnfoldMultDists.C:208
 UnfoldMultDists.C:209
 UnfoldMultDists.C:210
 UnfoldMultDists.C:211
 UnfoldMultDists.C:212
 UnfoldMultDists.C:213
 UnfoldMultDists.C:214
 UnfoldMultDists.C:215
 UnfoldMultDists.C:216
 UnfoldMultDists.C:217
 UnfoldMultDists.C:218
 UnfoldMultDists.C:219
 UnfoldMultDists.C:220
 UnfoldMultDists.C:221
 UnfoldMultDists.C:222
 UnfoldMultDists.C:223
 UnfoldMultDists.C:224
 UnfoldMultDists.C:225
 UnfoldMultDists.C:226
 UnfoldMultDists.C:227
 UnfoldMultDists.C:228
 UnfoldMultDists.C:229
 UnfoldMultDists.C:230
 UnfoldMultDists.C:231
 UnfoldMultDists.C:232
 UnfoldMultDists.C:233
 UnfoldMultDists.C:234
 UnfoldMultDists.C:235
 UnfoldMultDists.C:236
 UnfoldMultDists.C:237
 UnfoldMultDists.C:238
 UnfoldMultDists.C:239
 UnfoldMultDists.C:240
 UnfoldMultDists.C:241
 UnfoldMultDists.C:242
 UnfoldMultDists.C:243
 UnfoldMultDists.C:244
 UnfoldMultDists.C:245
 UnfoldMultDists.C:246
 UnfoldMultDists.C:247
 UnfoldMultDists.C:248
 UnfoldMultDists.C:249
 UnfoldMultDists.C:250
 UnfoldMultDists.C:251
 UnfoldMultDists.C:252
 UnfoldMultDists.C:253
 UnfoldMultDists.C:254
 UnfoldMultDists.C:255
 UnfoldMultDists.C:256
 UnfoldMultDists.C:257
 UnfoldMultDists.C:258
 UnfoldMultDists.C:259
 UnfoldMultDists.C:260
 UnfoldMultDists.C:261
 UnfoldMultDists.C:262
 UnfoldMultDists.C:263
 UnfoldMultDists.C:264
 UnfoldMultDists.C:265
 UnfoldMultDists.C:266
 UnfoldMultDists.C:267
 UnfoldMultDists.C:268
 UnfoldMultDists.C:269
 UnfoldMultDists.C:270
 UnfoldMultDists.C:271
 UnfoldMultDists.C:272
 UnfoldMultDists.C:273
 UnfoldMultDists.C:274
 UnfoldMultDists.C:275
 UnfoldMultDists.C:276
 UnfoldMultDists.C:277
 UnfoldMultDists.C:278
 UnfoldMultDists.C:279
 UnfoldMultDists.C:280
 UnfoldMultDists.C:281
 UnfoldMultDists.C:282
 UnfoldMultDists.C:283
 UnfoldMultDists.C:284
 UnfoldMultDists.C:285
 UnfoldMultDists.C:286
 UnfoldMultDists.C:287
 UnfoldMultDists.C:288
 UnfoldMultDists.C:289
 UnfoldMultDists.C:290
 UnfoldMultDists.C:291
 UnfoldMultDists.C:292
 UnfoldMultDists.C:293
 UnfoldMultDists.C:294
 UnfoldMultDists.C:295
 UnfoldMultDists.C:296
 UnfoldMultDists.C:297
 UnfoldMultDists.C:298
 UnfoldMultDists.C:299
 UnfoldMultDists.C:300
 UnfoldMultDists.C:301
 UnfoldMultDists.C:302
 UnfoldMultDists.C:303
 UnfoldMultDists.C:304
 UnfoldMultDists.C:305
 UnfoldMultDists.C:306
 UnfoldMultDists.C:307
 UnfoldMultDists.C:308
 UnfoldMultDists.C:309
 UnfoldMultDists.C:310
 UnfoldMultDists.C:311
 UnfoldMultDists.C:312
 UnfoldMultDists.C:313
 UnfoldMultDists.C:314
 UnfoldMultDists.C:315
 UnfoldMultDists.C:316
 UnfoldMultDists.C:317
 UnfoldMultDists.C:318
 UnfoldMultDists.C:319
 UnfoldMultDists.C:320
 UnfoldMultDists.C:321
 UnfoldMultDists.C:322
 UnfoldMultDists.C:323
 UnfoldMultDists.C:324
 UnfoldMultDists.C:325
 UnfoldMultDists.C:326
 UnfoldMultDists.C:327
 UnfoldMultDists.C:328
 UnfoldMultDists.C:329
 UnfoldMultDists.C:330
 UnfoldMultDists.C:331
 UnfoldMultDists.C:332
 UnfoldMultDists.C:333
 UnfoldMultDists.C:334
 UnfoldMultDists.C:335
 UnfoldMultDists.C:336
 UnfoldMultDists.C:337
 UnfoldMultDists.C:338
 UnfoldMultDists.C:339
 UnfoldMultDists.C:340
 UnfoldMultDists.C:341
 UnfoldMultDists.C:342
 UnfoldMultDists.C:343
 UnfoldMultDists.C:344
 UnfoldMultDists.C:345
 UnfoldMultDists.C:346
 UnfoldMultDists.C:347
 UnfoldMultDists.C:348
 UnfoldMultDists.C:349
 UnfoldMultDists.C:350
 UnfoldMultDists.C:351
 UnfoldMultDists.C:352
 UnfoldMultDists.C:353
 UnfoldMultDists.C:354
 UnfoldMultDists.C:355
 UnfoldMultDists.C:356
 UnfoldMultDists.C:357
 UnfoldMultDists.C:358
 UnfoldMultDists.C:359
 UnfoldMultDists.C:360
 UnfoldMultDists.C:361
 UnfoldMultDists.C:362
 UnfoldMultDists.C:363
 UnfoldMultDists.C:364
 UnfoldMultDists.C:365
 UnfoldMultDists.C:366
 UnfoldMultDists.C:367
 UnfoldMultDists.C:368
 UnfoldMultDists.C:369
 UnfoldMultDists.C:370
 UnfoldMultDists.C:371
 UnfoldMultDists.C:372
 UnfoldMultDists.C:373
 UnfoldMultDists.C:374
 UnfoldMultDists.C:375
 UnfoldMultDists.C:376
 UnfoldMultDists.C:377
 UnfoldMultDists.C:378
 UnfoldMultDists.C:379
 UnfoldMultDists.C:380
 UnfoldMultDists.C:381
 UnfoldMultDists.C:382
 UnfoldMultDists.C:383
 UnfoldMultDists.C:384
 UnfoldMultDists.C:385
 UnfoldMultDists.C:386
 UnfoldMultDists.C:387
 UnfoldMultDists.C:388
 UnfoldMultDists.C:389
 UnfoldMultDists.C:390
 UnfoldMultDists.C:391
 UnfoldMultDists.C:392
 UnfoldMultDists.C:393
 UnfoldMultDists.C:394
 UnfoldMultDists.C:395
 UnfoldMultDists.C:396
 UnfoldMultDists.C:397
 UnfoldMultDists.C:398
 UnfoldMultDists.C:399
 UnfoldMultDists.C:400
 UnfoldMultDists.C:401
 UnfoldMultDists.C:402
 UnfoldMultDists.C:403
 UnfoldMultDists.C:404
 UnfoldMultDists.C:405
 UnfoldMultDists.C:406
 UnfoldMultDists.C:407
 UnfoldMultDists.C:408
 UnfoldMultDists.C:409
 UnfoldMultDists.C:410
 UnfoldMultDists.C:411
 UnfoldMultDists.C:412
 UnfoldMultDists.C:413
 UnfoldMultDists.C:414
 UnfoldMultDists.C:415
 UnfoldMultDists.C:416
 UnfoldMultDists.C:417
 UnfoldMultDists.C:418
 UnfoldMultDists.C:419
 UnfoldMultDists.C:420
 UnfoldMultDists.C:421
 UnfoldMultDists.C:422
 UnfoldMultDists.C:423
 UnfoldMultDists.C:424
 UnfoldMultDists.C:425
 UnfoldMultDists.C:426
 UnfoldMultDists.C:427
 UnfoldMultDists.C:428
 UnfoldMultDists.C:429
 UnfoldMultDists.C:430
 UnfoldMultDists.C:431
 UnfoldMultDists.C:432
 UnfoldMultDists.C:433
 UnfoldMultDists.C:434
 UnfoldMultDists.C:435
 UnfoldMultDists.C:436
 UnfoldMultDists.C:437
 UnfoldMultDists.C:438
 UnfoldMultDists.C:439
 UnfoldMultDists.C:440
 UnfoldMultDists.C:441
 UnfoldMultDists.C:442
 UnfoldMultDists.C:443
 UnfoldMultDists.C:444
 UnfoldMultDists.C:445
 UnfoldMultDists.C:446
 UnfoldMultDists.C:447
 UnfoldMultDists.C:448
 UnfoldMultDists.C:449
 UnfoldMultDists.C:450
 UnfoldMultDists.C:451
 UnfoldMultDists.C:452
 UnfoldMultDists.C:453
 UnfoldMultDists.C:454
 UnfoldMultDists.C:455
 UnfoldMultDists.C:456
 UnfoldMultDists.C:457
 UnfoldMultDists.C:458
 UnfoldMultDists.C:459
 UnfoldMultDists.C:460
 UnfoldMultDists.C:461
 UnfoldMultDists.C:462
 UnfoldMultDists.C:463
 UnfoldMultDists.C:464
 UnfoldMultDists.C:465
 UnfoldMultDists.C:466
 UnfoldMultDists.C:467
 UnfoldMultDists.C:468
 UnfoldMultDists.C:469
 UnfoldMultDists.C:470
 UnfoldMultDists.C:471
 UnfoldMultDists.C:472
 UnfoldMultDists.C:473
 UnfoldMultDists.C:474
 UnfoldMultDists.C:475
 UnfoldMultDists.C:476
 UnfoldMultDists.C:477
 UnfoldMultDists.C:478
 UnfoldMultDists.C:479
 UnfoldMultDists.C:480
 UnfoldMultDists.C:481
 UnfoldMultDists.C:482
 UnfoldMultDists.C:483
 UnfoldMultDists.C:484
 UnfoldMultDists.C:485
 UnfoldMultDists.C:486
 UnfoldMultDists.C:487
 UnfoldMultDists.C:488
 UnfoldMultDists.C:489
 UnfoldMultDists.C:490
 UnfoldMultDists.C:491
 UnfoldMultDists.C:492
 UnfoldMultDists.C:493
 UnfoldMultDists.C:494
 UnfoldMultDists.C:495
 UnfoldMultDists.C:496
 UnfoldMultDists.C:497
 UnfoldMultDists.C:498
 UnfoldMultDists.C:499
 UnfoldMultDists.C:500
 UnfoldMultDists.C:501
 UnfoldMultDists.C:502
 UnfoldMultDists.C:503
 UnfoldMultDists.C:504
 UnfoldMultDists.C:505
 UnfoldMultDists.C:506
 UnfoldMultDists.C:507
 UnfoldMultDists.C:508
 UnfoldMultDists.C:509
 UnfoldMultDists.C:510
 UnfoldMultDists.C:511
 UnfoldMultDists.C:512
 UnfoldMultDists.C:513
 UnfoldMultDists.C:514
 UnfoldMultDists.C:515
 UnfoldMultDists.C:516
 UnfoldMultDists.C:517
 UnfoldMultDists.C:518
 UnfoldMultDists.C:519
 UnfoldMultDists.C:520
 UnfoldMultDists.C:521
 UnfoldMultDists.C:522
 UnfoldMultDists.C:523
 UnfoldMultDists.C:524
 UnfoldMultDists.C:525
 UnfoldMultDists.C:526
 UnfoldMultDists.C:527
 UnfoldMultDists.C:528
 UnfoldMultDists.C:529
 UnfoldMultDists.C:530
 UnfoldMultDists.C:531
 UnfoldMultDists.C:532
 UnfoldMultDists.C:533
 UnfoldMultDists.C:534
 UnfoldMultDists.C:535
 UnfoldMultDists.C:536
 UnfoldMultDists.C:537
 UnfoldMultDists.C:538
 UnfoldMultDists.C:539
 UnfoldMultDists.C:540
 UnfoldMultDists.C:541
 UnfoldMultDists.C:542
 UnfoldMultDists.C:543
 UnfoldMultDists.C:544
 UnfoldMultDists.C:545
 UnfoldMultDists.C:546
 UnfoldMultDists.C:547
 UnfoldMultDists.C:548
 UnfoldMultDists.C:549
 UnfoldMultDists.C:550
 UnfoldMultDists.C:551
 UnfoldMultDists.C:552
 UnfoldMultDists.C:553
 UnfoldMultDists.C:554
 UnfoldMultDists.C:555
 UnfoldMultDists.C:556
 UnfoldMultDists.C:557
 UnfoldMultDists.C:558
 UnfoldMultDists.C:559
 UnfoldMultDists.C:560
 UnfoldMultDists.C:561
 UnfoldMultDists.C:562
 UnfoldMultDists.C:563
 UnfoldMultDists.C:564
 UnfoldMultDists.C:565
 UnfoldMultDists.C:566
 UnfoldMultDists.C:567
 UnfoldMultDists.C:568
 UnfoldMultDists.C:569
 UnfoldMultDists.C:570
 UnfoldMultDists.C:571
 UnfoldMultDists.C:572
 UnfoldMultDists.C:573
 UnfoldMultDists.C:574
 UnfoldMultDists.C:575
 UnfoldMultDists.C:576
 UnfoldMultDists.C:577
 UnfoldMultDists.C:578
 UnfoldMultDists.C:579
 UnfoldMultDists.C:580
 UnfoldMultDists.C:581
 UnfoldMultDists.C:582
 UnfoldMultDists.C:583
 UnfoldMultDists.C:584
 UnfoldMultDists.C:585
 UnfoldMultDists.C:586
 UnfoldMultDists.C:587
 UnfoldMultDists.C:588
 UnfoldMultDists.C:589
 UnfoldMultDists.C:590
 UnfoldMultDists.C:591
 UnfoldMultDists.C:592
 UnfoldMultDists.C:593
 UnfoldMultDists.C:594
 UnfoldMultDists.C:595
 UnfoldMultDists.C:596
 UnfoldMultDists.C:597
 UnfoldMultDists.C:598
 UnfoldMultDists.C:599
 UnfoldMultDists.C:600
 UnfoldMultDists.C:601
 UnfoldMultDists.C:602
 UnfoldMultDists.C:603
 UnfoldMultDists.C:604
 UnfoldMultDists.C:605
 UnfoldMultDists.C:606
 UnfoldMultDists.C:607
 UnfoldMultDists.C:608
 UnfoldMultDists.C:609
 UnfoldMultDists.C:610
 UnfoldMultDists.C:611
 UnfoldMultDists.C:612
 UnfoldMultDists.C:613
 UnfoldMultDists.C:614
 UnfoldMultDists.C:615
 UnfoldMultDists.C:616
 UnfoldMultDists.C:617
 UnfoldMultDists.C:618
 UnfoldMultDists.C:619
 UnfoldMultDists.C:620
 UnfoldMultDists.C:621
 UnfoldMultDists.C:622
 UnfoldMultDists.C:623
 UnfoldMultDists.C:624
 UnfoldMultDists.C:625
 UnfoldMultDists.C:626
 UnfoldMultDists.C:627
 UnfoldMultDists.C:628
 UnfoldMultDists.C:629
 UnfoldMultDists.C:630
 UnfoldMultDists.C:631
 UnfoldMultDists.C:632
 UnfoldMultDists.C:633
 UnfoldMultDists.C:634
 UnfoldMultDists.C:635
 UnfoldMultDists.C:636
 UnfoldMultDists.C:637
 UnfoldMultDists.C:638
 UnfoldMultDists.C:639
 UnfoldMultDists.C:640
 UnfoldMultDists.C:641
 UnfoldMultDists.C:642
 UnfoldMultDists.C:643
 UnfoldMultDists.C:644
 UnfoldMultDists.C:645
 UnfoldMultDists.C:646
 UnfoldMultDists.C:647
 UnfoldMultDists.C:648
 UnfoldMultDists.C:649
 UnfoldMultDists.C:650
 UnfoldMultDists.C:651
 UnfoldMultDists.C:652
 UnfoldMultDists.C:653
 UnfoldMultDists.C:654
 UnfoldMultDists.C:655
 UnfoldMultDists.C:656
 UnfoldMultDists.C:657
 UnfoldMultDists.C:658
 UnfoldMultDists.C:659
 UnfoldMultDists.C:660
 UnfoldMultDists.C:661
 UnfoldMultDists.C:662
 UnfoldMultDists.C:663
 UnfoldMultDists.C:664
 UnfoldMultDists.C:665
 UnfoldMultDists.C:666
 UnfoldMultDists.C:667
 UnfoldMultDists.C:668
 UnfoldMultDists.C:669
 UnfoldMultDists.C:670
 UnfoldMultDists.C:671
 UnfoldMultDists.C:672
 UnfoldMultDists.C:673
 UnfoldMultDists.C:674
 UnfoldMultDists.C:675
 UnfoldMultDists.C:676
 UnfoldMultDists.C:677
 UnfoldMultDists.C:678
 UnfoldMultDists.C:679
 UnfoldMultDists.C:680
 UnfoldMultDists.C:681
 UnfoldMultDists.C:682
 UnfoldMultDists.C:683
 UnfoldMultDists.C:684
 UnfoldMultDists.C:685
 UnfoldMultDists.C:686
 UnfoldMultDists.C:687
 UnfoldMultDists.C:688
 UnfoldMultDists.C:689
 UnfoldMultDists.C:690
 UnfoldMultDists.C:691
 UnfoldMultDists.C:692
 UnfoldMultDists.C:693
 UnfoldMultDists.C:694
 UnfoldMultDists.C:695
 UnfoldMultDists.C:696
 UnfoldMultDists.C:697
 UnfoldMultDists.C:698
 UnfoldMultDists.C:699
 UnfoldMultDists.C:700
 UnfoldMultDists.C:701
 UnfoldMultDists.C:702
 UnfoldMultDists.C:703
 UnfoldMultDists.C:704
 UnfoldMultDists.C:705
 UnfoldMultDists.C:706
 UnfoldMultDists.C:707
 UnfoldMultDists.C:708
 UnfoldMultDists.C:709
 UnfoldMultDists.C:710
 UnfoldMultDists.C:711
 UnfoldMultDists.C:712
 UnfoldMultDists.C:713
 UnfoldMultDists.C:714
 UnfoldMultDists.C:715
 UnfoldMultDists.C:716
 UnfoldMultDists.C:717
 UnfoldMultDists.C:718
 UnfoldMultDists.C:719
 UnfoldMultDists.C:720
 UnfoldMultDists.C:721
 UnfoldMultDists.C:722
 UnfoldMultDists.C:723
 UnfoldMultDists.C:724
 UnfoldMultDists.C:725
 UnfoldMultDists.C:726
 UnfoldMultDists.C:727
 UnfoldMultDists.C:728
 UnfoldMultDists.C:729
 UnfoldMultDists.C:730
 UnfoldMultDists.C:731
 UnfoldMultDists.C:732
 UnfoldMultDists.C:733
 UnfoldMultDists.C:734
 UnfoldMultDists.C:735
 UnfoldMultDists.C:736
 UnfoldMultDists.C:737
 UnfoldMultDists.C:738
 UnfoldMultDists.C:739
 UnfoldMultDists.C:740
 UnfoldMultDists.C:741
 UnfoldMultDists.C:742
 UnfoldMultDists.C:743
 UnfoldMultDists.C:744
 UnfoldMultDists.C:745
 UnfoldMultDists.C:746
 UnfoldMultDists.C:747
 UnfoldMultDists.C:748
 UnfoldMultDists.C:749
 UnfoldMultDists.C:750
 UnfoldMultDists.C:751
 UnfoldMultDists.C:752
 UnfoldMultDists.C:753
 UnfoldMultDists.C:754
 UnfoldMultDists.C:755
 UnfoldMultDists.C:756
 UnfoldMultDists.C:757
 UnfoldMultDists.C:758
 UnfoldMultDists.C:759
 UnfoldMultDists.C:760
 UnfoldMultDists.C:761
 UnfoldMultDists.C:762
 UnfoldMultDists.C:763
 UnfoldMultDists.C:764
 UnfoldMultDists.C:765
 UnfoldMultDists.C:766
 UnfoldMultDists.C:767
 UnfoldMultDists.C:768
 UnfoldMultDists.C:769
 UnfoldMultDists.C:770
 UnfoldMultDists.C:771
 UnfoldMultDists.C:772
 UnfoldMultDists.C:773
 UnfoldMultDists.C:774
 UnfoldMultDists.C:775
 UnfoldMultDists.C:776
 UnfoldMultDists.C:777
 UnfoldMultDists.C:778
 UnfoldMultDists.C:779
 UnfoldMultDists.C:780
 UnfoldMultDists.C:781
 UnfoldMultDists.C:782
 UnfoldMultDists.C:783
 UnfoldMultDists.C:784
 UnfoldMultDists.C:785
 UnfoldMultDists.C:786
 UnfoldMultDists.C:787
 UnfoldMultDists.C:788
 UnfoldMultDists.C:789
 UnfoldMultDists.C:790
 UnfoldMultDists.C:791
 UnfoldMultDists.C:792
 UnfoldMultDists.C:793
 UnfoldMultDists.C:794
 UnfoldMultDists.C:795
 UnfoldMultDists.C:796
 UnfoldMultDists.C:797
 UnfoldMultDists.C:798
 UnfoldMultDists.C:799
 UnfoldMultDists.C:800
 UnfoldMultDists.C:801
 UnfoldMultDists.C:802
 UnfoldMultDists.C:803
 UnfoldMultDists.C:804
 UnfoldMultDists.C:805
 UnfoldMultDists.C:806
 UnfoldMultDists.C:807
 UnfoldMultDists.C:808
 UnfoldMultDists.C:809
 UnfoldMultDists.C:810
 UnfoldMultDists.C:811
 UnfoldMultDists.C:812
 UnfoldMultDists.C:813
 UnfoldMultDists.C:814
 UnfoldMultDists.C:815
 UnfoldMultDists.C:816
 UnfoldMultDists.C:817
 UnfoldMultDists.C:818
 UnfoldMultDists.C:819
 UnfoldMultDists.C:820
 UnfoldMultDists.C:821
 UnfoldMultDists.C:822
 UnfoldMultDists.C:823
 UnfoldMultDists.C:824
 UnfoldMultDists.C:825
 UnfoldMultDists.C:826
 UnfoldMultDists.C:827
 UnfoldMultDists.C:828
 UnfoldMultDists.C:829
 UnfoldMultDists.C:830
 UnfoldMultDists.C:831
 UnfoldMultDists.C:832
 UnfoldMultDists.C:833
 UnfoldMultDists.C:834
 UnfoldMultDists.C:835
 UnfoldMultDists.C:836
 UnfoldMultDists.C:837
 UnfoldMultDists.C:838
 UnfoldMultDists.C:839
 UnfoldMultDists.C:840
 UnfoldMultDists.C:841
 UnfoldMultDists.C:842
 UnfoldMultDists.C:843
 UnfoldMultDists.C:844
 UnfoldMultDists.C:845
 UnfoldMultDists.C:846
 UnfoldMultDists.C:847
 UnfoldMultDists.C:848
 UnfoldMultDists.C:849
 UnfoldMultDists.C:850
 UnfoldMultDists.C:851
 UnfoldMultDists.C:852
 UnfoldMultDists.C:853
 UnfoldMultDists.C:854
 UnfoldMultDists.C:855
 UnfoldMultDists.C:856
 UnfoldMultDists.C:857
 UnfoldMultDists.C:858
 UnfoldMultDists.C:859
 UnfoldMultDists.C:860
 UnfoldMultDists.C:861
 UnfoldMultDists.C:862
 UnfoldMultDists.C:863
 UnfoldMultDists.C:864
 UnfoldMultDists.C:865
 UnfoldMultDists.C:866
 UnfoldMultDists.C:867
 UnfoldMultDists.C:868
 UnfoldMultDists.C:869
 UnfoldMultDists.C:870
 UnfoldMultDists.C:871
 UnfoldMultDists.C:872
 UnfoldMultDists.C:873
 UnfoldMultDists.C:874
 UnfoldMultDists.C:875
 UnfoldMultDists.C:876
 UnfoldMultDists.C:877
 UnfoldMultDists.C:878
 UnfoldMultDists.C:879
 UnfoldMultDists.C:880
 UnfoldMultDists.C:881
 UnfoldMultDists.C:882
 UnfoldMultDists.C:883
 UnfoldMultDists.C:884
 UnfoldMultDists.C:885
 UnfoldMultDists.C:886
 UnfoldMultDists.C:887
 UnfoldMultDists.C:888
 UnfoldMultDists.C:889
 UnfoldMultDists.C:890
 UnfoldMultDists.C:891
 UnfoldMultDists.C:892
 UnfoldMultDists.C:893
 UnfoldMultDists.C:894
 UnfoldMultDists.C:895
 UnfoldMultDists.C:896
 UnfoldMultDists.C:897
 UnfoldMultDists.C:898
 UnfoldMultDists.C:899
 UnfoldMultDists.C:900
 UnfoldMultDists.C:901
 UnfoldMultDists.C:902
 UnfoldMultDists.C:903
 UnfoldMultDists.C:904
 UnfoldMultDists.C:905
 UnfoldMultDists.C:906
 UnfoldMultDists.C:907
 UnfoldMultDists.C:908
 UnfoldMultDists.C:909
 UnfoldMultDists.C:910
 UnfoldMultDists.C:911
 UnfoldMultDists.C:912
 UnfoldMultDists.C:913
 UnfoldMultDists.C:914
 UnfoldMultDists.C:915
 UnfoldMultDists.C:916
 UnfoldMultDists.C:917
 UnfoldMultDists.C:918
 UnfoldMultDists.C:919
 UnfoldMultDists.C:920
 UnfoldMultDists.C:921
 UnfoldMultDists.C:922
 UnfoldMultDists.C:923
 UnfoldMultDists.C:924
 UnfoldMultDists.C:925
 UnfoldMultDists.C:926
 UnfoldMultDists.C:927
 UnfoldMultDists.C:928
 UnfoldMultDists.C:929
 UnfoldMultDists.C:930
 UnfoldMultDists.C:931
 UnfoldMultDists.C:932
 UnfoldMultDists.C:933
 UnfoldMultDists.C:934
 UnfoldMultDists.C:935
 UnfoldMultDists.C:936
 UnfoldMultDists.C:937
 UnfoldMultDists.C:938
 UnfoldMultDists.C:939
 UnfoldMultDists.C:940
 UnfoldMultDists.C:941
 UnfoldMultDists.C:942
 UnfoldMultDists.C:943
 UnfoldMultDists.C:944
 UnfoldMultDists.C:945
 UnfoldMultDists.C:946
 UnfoldMultDists.C:947
 UnfoldMultDists.C:948
 UnfoldMultDists.C:949
 UnfoldMultDists.C:950
 UnfoldMultDists.C:951
 UnfoldMultDists.C:952
 UnfoldMultDists.C:953
 UnfoldMultDists.C:954
 UnfoldMultDists.C:955
 UnfoldMultDists.C:956
 UnfoldMultDists.C:957
 UnfoldMultDists.C:958
 UnfoldMultDists.C:959
 UnfoldMultDists.C:960
 UnfoldMultDists.C:961
 UnfoldMultDists.C:962
 UnfoldMultDists.C:963
 UnfoldMultDists.C:964
 UnfoldMultDists.C:965
 UnfoldMultDists.C:966
 UnfoldMultDists.C:967
 UnfoldMultDists.C:968
 UnfoldMultDists.C:969
 UnfoldMultDists.C:970
 UnfoldMultDists.C:971
 UnfoldMultDists.C:972
 UnfoldMultDists.C:973
 UnfoldMultDists.C:974
 UnfoldMultDists.C:975
 UnfoldMultDists.C:976
 UnfoldMultDists.C:977
 UnfoldMultDists.C:978
 UnfoldMultDists.C:979
 UnfoldMultDists.C:980
 UnfoldMultDists.C:981
 UnfoldMultDists.C:982
 UnfoldMultDists.C:983
 UnfoldMultDists.C:984
 UnfoldMultDists.C:985
 UnfoldMultDists.C:986
 UnfoldMultDists.C:987
 UnfoldMultDists.C:988
 UnfoldMultDists.C:989
 UnfoldMultDists.C:990
 UnfoldMultDists.C:991
 UnfoldMultDists.C:992
 UnfoldMultDists.C:993
 UnfoldMultDists.C:994
 UnfoldMultDists.C:995
 UnfoldMultDists.C:996
 UnfoldMultDists.C:997
 UnfoldMultDists.C:998
 UnfoldMultDists.C:999
 UnfoldMultDists.C:1000
 UnfoldMultDists.C:1001
 UnfoldMultDists.C:1002
 UnfoldMultDists.C:1003
 UnfoldMultDists.C:1004
 UnfoldMultDists.C:1005
 UnfoldMultDists.C:1006
 UnfoldMultDists.C:1007
 UnfoldMultDists.C:1008
 UnfoldMultDists.C:1009
 UnfoldMultDists.C:1010
 UnfoldMultDists.C:1011
 UnfoldMultDists.C:1012
 UnfoldMultDists.C:1013
 UnfoldMultDists.C:1014
 UnfoldMultDists.C:1015
 UnfoldMultDists.C:1016
 UnfoldMultDists.C:1017
 UnfoldMultDists.C:1018
 UnfoldMultDists.C:1019
 UnfoldMultDists.C:1020
 UnfoldMultDists.C:1021
 UnfoldMultDists.C:1022
 UnfoldMultDists.C:1023
 UnfoldMultDists.C:1024
 UnfoldMultDists.C:1025
 UnfoldMultDists.C:1026
 UnfoldMultDists.C:1027
 UnfoldMultDists.C:1028
 UnfoldMultDists.C:1029
 UnfoldMultDists.C:1030
 UnfoldMultDists.C:1031
 UnfoldMultDists.C:1032
 UnfoldMultDists.C:1033
 UnfoldMultDists.C:1034
 UnfoldMultDists.C:1035
 UnfoldMultDists.C:1036
 UnfoldMultDists.C:1037
 UnfoldMultDists.C:1038
 UnfoldMultDists.C:1039
 UnfoldMultDists.C:1040
 UnfoldMultDists.C:1041
 UnfoldMultDists.C:1042
 UnfoldMultDists.C:1043
 UnfoldMultDists.C:1044
 UnfoldMultDists.C:1045
 UnfoldMultDists.C:1046
 UnfoldMultDists.C:1047
 UnfoldMultDists.C:1048
 UnfoldMultDists.C:1049
 UnfoldMultDists.C:1050
 UnfoldMultDists.C:1051
 UnfoldMultDists.C:1052
 UnfoldMultDists.C:1053