ROOT logo
#include "SummaryDrawer.C"
#ifndef __CINT__
# include <TGraph.h>
# include <TGraphErrors.h>
# include <TF1.h>
# include <TArrow.h>
#else
class TGraph;
class TFile;
#endif

/**
 * Class to draw a summary of the AOD production
 *
 * @par Input: 
 * - The merged <tt>forward.root</tt> file.
 *   If the file isn't merged, it should still work. 
 *
 * @par Output:
 * - A PDF file named after the input, but with <tt>.root</tt>
 *   replaced with <tt>pdf</tt>
 * 
 */
class SummaryAODDrawer : public SummaryDrawer
{
public:
  enum EFlags { 
    kEventInspector    = 0x001, 
    kSharingFilter     = 0x002, 
    kDensityCalculator = 0x004,
    kCorrector         = 0x008,
    kHistCollector     = 0x010,
    kSteps             = 0x020, 
    kResults           = 0x040, 
    kCentral           = 0x080,
    kESDFixer          = 0x100,
    kNormal            = 0x1FF
  };
  SummaryAODDrawer() 
    : SummaryDrawer(),
      fSums(0),
      fResults(0)
  {}
  //__________________________________________________________________
  TFile* Init(const char* fname)
  {
    // --- Open the file ---------------------------------------------
    TString filename(fname);
    TFile*  file = TFile::Open(filename, "READ");
    if (!file) { 
      Error("Run", "Failed to open \"%s\"", filename.Data());
      return 0;
    }

    // --- Get top-level collection ----------------------------------
    fSums = GetCollection(file, "ForwardSums");
    if (!fSums) {
      Info("Run", "Trying old name Forward");
      fSums = GetCollection(file, "Forward");
      if (!fSums) return 0;
    }

    // --- Do the results ----------------------------------------------
    fResults = GetCollection(file, "ForwardResults");
    if (!fResults) fResults = fSums; // Old-style

    return file;
  }
  void SummarizeSharing(const char* fname, UShort_t what=0)
  {
    // --- Initialize ------------------------------------------------
    TFile* file = 0;
    if (!(file = Init(fname))) return;

    // --- Make our canvas -------------------------------------------
    TString pdfName("sharing.pdf");
    pdfName.ReplaceAll(".root", ".pdf");
    CreateCanvas(pdfName, what & kLandscape, true, false);
    
    TCollection* c = GetCollection(fSums, "fmdSharingFilter");
    if (!c) return;
    TCollection* rc = GetCollection(fResults, "fmdSharingFilter");
    if (!rc) rc = c;

    Int_t    nFiles = 0;
    TParameter<int>* pnFiles = 
      static_cast<TParameter<int>*>(GetObject(c, "nFiles"));
    if (pnFiles) {
      nFiles = pnFiles->GetVal();
    }

    TCollection* lc    = GetCollection(c, "lCuts");
    TCollection* hc    = GetCollection(c, "hCuts");
    Int_t        lm    = 0;
    Int_t        hm    = 0;
    TH2*         hLow  = GetH2(c, "lowCuts");
    TH2*         hHigh = GetH2(c, "highCuts");
    GetParameter(lc, "method", lm);
    GetParameter(hc, "method", hm);
    if (hLow  && nFiles > 0 && !hLow->TestBit(BIT(20)))
      hLow->Scale(1. / nFiles);
    if (hHigh && nFiles > 0 && !hHigh->TestBit(BIT(20))) 
      hHigh->Scale(1. / nFiles);
    
    DivideForRings(true,true);
    const char** ptr   = GetRingNames(false);
    UShort_t     iq    = 1;
    while (*ptr) { 
      TCollection* sc = GetCollection(c, *ptr);
      if (!sc) { ptr++; iq++; continue; }
      UShort_t d = Int_t((*ptr)[3])-48;
      Char_t   r = (*ptr)[4];
      
      TH1*     esdELoss = GetH1(sc, "esdEloss");
      TH1*     anaELoss = GetH1(sc, "anaEloss");
      TGraph*  lowCut   = CreateCutGraph(lm, iq,  hLow,  esdELoss, kYellow+1);
      TGraph*  highCut  = CreateCutGraph(hm, iq,  hHigh, esdELoss, kCyan+1);
      // Double_t ignCut   = TMath::Max(lowCut->GetX()[3],0.);
      // Int_t    esdLow   = esdELoss->FindBin(ignCut);
      // Int_t    anaLow   = anaELoss->FindBin(ignCut);
      // Double_t esdInt   = esdELoss->Integral(esdLow,esdELoss->GetNbinsX()+1);
      // Double_t anaInt   = anaELoss->Integral(anaLow,anaELoss->GetNbinsX()+1);
      // Double_t frac     = esdInt > 0 ? (esdInt-anaInt)/esdInt : 1;
      esdELoss->GetXaxis()->SetRangeUser(-.1, 2);
      
      DrawInRingPad(d,r, esdELoss, "", kLogy, *ptr);
      // 		    "#Delta/#Delta_{mip} reconstructed and merged");
      DrawInRingPad(d, r, anaELoss, "same");
      DrawInRingPad(d, r, lowCut,  "lf same"); 
      DrawInRingPad(d, r, highCut, "lf same"); 
      ptr++;
      iq++;
    }
    TVirtualPad* p = RingPad(0,0);
    p->cd();
    TLegend* l = new TLegend(0.1, 0.1, 0.98, 0.98, "");
    l->SetFillStyle(0);
    l->SetFillColor(0);
    l->SetBorderSize(0);
    TLegendEntry* e = 0;
    e = l->AddEntry("dummy", "ESD signal", "f");
    e->SetFillStyle(3002);
    e->SetFillColor(kBlack);
    e = l->AddEntry("dummy", "Merged signal", "f");
    e->SetFillStyle(3001);
    e->SetFillColor(kBlack);
    e = l->AddEntry("dummy", "Low cut", "f");
    e->SetFillStyle(3002);
    e->SetFillColor(kYellow+1);
    e->SetLineWidth(0);
    e->SetLineColor(kWhite);
    e = l->AddEntry("dummy", "High cut", "f");
    e->SetFillStyle(3002);
    e->SetFillColor(kCyan+1);
    e->SetLineWidth(0);
    e->SetLineColor(kWhite);
    l->Draw();
    
    PrintCanvas("Summary of sharing filter");
    CloseCanvas();
    
  }
  void SummarizeSteps(const char* fname, UShort_t what=0)
  {
    // --- Initialize ------------------------------------------------
    TFile* file = 0;
    if (!(file = Init(fname))) return;

    // --- Make our canvas -------------------------------------------
    TString pdfName("steps.pdf");
    pdfName.ReplaceAll(".root", ".pdf");
    CreateCanvas(pdfName, what & kLandscape, true, false);
    DrawSteps();
    CloseCanvas();
  }
  
  //__________________________________________________________________
  /** 
   * 
   * 
   * @param fname 
   * @param what 
   */
  void Run(const char* fname, UShort_t what=kNormal)
  {
    // --- Initialize ------------------------------------------------
    TFile* file = 0;
    if (!(file = Init(fname))) return;

    // --- Make our canvas -------------------------------------------
    TString pdfName(fname);
    pdfName.ReplaceAll(".root", ".pdf");
    CreateCanvas(pdfName, what & kLandscape);
    DrawTitlePage(file);

    // --- Possibly make a chapter here ------------------------------
    TCollection* centralSums = GetCollection(file, "CentralSums", false);
    if (!centralSums) {
      Info("Run", "Trying old name \"Central\"");
      centralSums = GetCollection(file, "Central", false);
    }
    if (what & kCentral && centralSums) 
      MakeChapter("Forward");
    
    // --- Set pause flag --------------------------------------------
    fPause = what & kPause;

    // Plot status if found 
    TH1* hStatus = GetH1(fSums, "status", false);
    if (hStatus) { 
      hStatus->SetMaximum(hStatus->GetMaximum()*1.2);
      fBody->SetRightMargin(0.10);
      DrawInPad(fBody,0,hStatus, "hist text30");
      PrintCanvas("Status");
    }

    // --- Do each sub-algorithm -------------------------------------
    if (what & kEventInspector)    DrawEventInspector(fSums);
    if (what & kESDFixer)          DrawESDFixer(fSums);
    if (what & kSharingFilter)     DrawSharingFilter();
    if (what & kDensityCalculator) DrawDensityCalculator();
    if (what & kCorrector)         DrawCorrector();
    if (what & kHistCollector)     DrawHistCollector();
  
    
    if (what & kSteps) DrawSteps();
    if (what & kResults) DrawResults();

    // --- SPD clusters ----------------------------------------------
    if (what & kCentral) { 
      // --- Get top-level collection --------------------------------
      fSums = GetCollection(file, "CentralSums");
      if (!fSums) 
	fSums = GetCollection(file, "Central");
      if (fSums) {
	MakeChapter("Central");
	DrawCentral();
	if (what & kEventInspector) DrawEventInspector(fSums);
      }
      fResults = GetCollection(file, "CentralResults");
      if (fResults && (what & kResults)) {
	DrawCentralResults();
      }

      if (what & kResults) DrawBoth(file);
    }

    
    CloseCanvas();
  }
protected:
  //____________________________________________________________________
  void DrawTitlePage(TFile* f)
  {
    fBody->cd();

    TLatex* ltx = new TLatex(.5, .7, "ESD #rightarrow AOD filtering");
    ltx->SetNDC();
    ltx->SetTextSize(0.07);
    ltx->SetTextAlign(22);
    ltx->Draw();

    TCollection* fwd = fSums; // GetCollection(f, "ForwardSums");
    TCollection* cen = GetCollection(f, "CentralSums");
    Double_t y = .6;
    
    Double_t save = fParName->GetTextSize();
    fParName->SetTextSize(0.03);
    fParVal->SetTextSize(0.03);

    DrawParameter(y, "Tasks", (fwd ? "Forward" : ""));
    DrawParameter(y, "",      (cen ? "Central" : ""));

    if (fwd) { 
      TCollection* ei = GetCollection(fwd, "fmdEventInspector");
      if (ei) { 

	UShort_t sys=0, sNN=0;
	Int_t field=0;
	ULong_t runNo=0;
	Bool_t mc=false;
	GetParameter(ei, "sys", sys);
	GetParameter(ei, "sNN", sNN);
	GetParameter(ei, "field", field);
	GetParameter(ei, "runNo", runNo);
	if (!GetParameter(ei, "mc", mc, false)) mc = false;
	
	TString sysString;    SysString(sys, sysString);
	TString sNNString;    SNNString(sNN, sNNString);
	
	DrawParameter(y, "System", sysString);
	DrawParameter(y, "#sqrt{s_{NN}}", sNNString);
	DrawParameter(y, "L3 B field", Form("%+2dkG", field));
	DrawParameter(y, "Run #", Form("%6lu", runNo));
	DrawParameter(y, "Simulation", (mc ? "yes" : "no"));	
      }
    }
    PrintCanvas("Title page");
    fParName->SetTextSize(save);
    fParVal->SetTextSize(save);
  }
  TGraph* CreateCutGraph(Int_t method, Int_t iy, TH2* cuts, TH1* eloss,
			 Int_t color)
  {
    TGraph*  ret = new TGraph(4);
    Double_t y0  = TMath::Max(eloss->GetMinimum(),1.);
    Double_t y1  = eloss->GetMaximum();
    Double_t min = 1000;
    Double_t max = 0;
    Int_t    iiy = (iy == 4 ? 5 : iy == 5 ? 4 : iy);
    if (method == 0) { // Fixed value
      max = cuts->GetBinContent(1, iiy);
      min = eloss->GetXaxis()->GetXmin();
    }
    else {
      for (Int_t ix=1; ix <= cuts->GetNbinsX(); ix++) {
	Double_t c = cuts->GetBinContent(ix, iiy);
	if (c <= 0.0001) continue;
	min = TMath::Min(c, min);
	max = TMath::Max(c, max);
      }
    }
    // Printf("Cuts between %f,%f @%f, %f", min, max, y0,y1);
    ret->SetPoint(0, min, y0); 
    ret->SetPoint(1, min, y1); 
    ret->SetPoint(2, max, y1);
    ret->SetPoint(3, max, y0);
    ret->SetFillColor(color);
    ret->SetFillStyle(3002);
    ret->SetLineColor(kBlack);
    ret->SetLineStyle(2);
    ret->SetName(Form("g%s", cuts->GetName()));
    ret->SetTitle(cuts->GetTitle());
    
    return ret;
  }
  //____________________________________________________________________
  const Char_t* CutMethodName(Int_t lm) const
  {
    switch (lm) {
    case 0: return "c=X";
    case 1: return "c=X#times#Delta_{p}";
    case 2: return "c:Lower bound of fit range";
    case 3: return "c=#Delta_{p}-X#times#xi";
    case 4: return "c=#Delta_{p}-X#times(#xi+#sigma)";
    case 5: return "c:P(#Delta<c)<X";
    }
    return "unknown";
  }
  //____________________________________________________________________
  Int_t PrintCut(const TCollection* c, Double_t& y, const Char_t* name,
		 Double_t size=0)
  {
    if (!c) return -1;

    Int_t method = 0;
    if (!GetParameter(c, "method", method)) return -1;
    DrawParameter(y, name, CutMethodName(method), size);

    TString params;
    const char*  cuts[] = { "fmd1i", "fmd2i", "fmd2o", "fmd3i", "fmd3o", 0 };
    const char** pcut   = cuts;
    while (*pcut) { 
      Double_t cut;
      GetParameter(c, *pcut, cut, false);
      if (pcut != cuts) params.Append(", ");
      params.Append(Form("%5.2f", cut));
      pcut++;
    }
    if (params.IsNull()) {
      Double_t frac = 0;
      GetParameter(c, "frac", frac);
      params = Form("%f", frac);
    }
    DrawParameter(y, "Parameters", params, size);
    return method;
  }
  //____________________________________________________________________
  void DrawCut(TVirtualPad* parent, Int_t sub, TH2* cuts)
  {
    if (!cuts) return;
    THStack* stack = new THStack(cuts,"x");
    stack->SetTitle(cuts->GetTitle());
    for (Int_t i = 1; i <= cuts->GetNbinsY(); i++) {
      TH1*     hist = static_cast<TH1*>(stack->GetHists()->At(i-1));
      TString  name(cuts->GetYaxis()->GetBinLabel(i));
      UShort_t det = UShort_t(name[3]-48);
      Char_t   rng = name[4];
      Color_t  col = RingColor(det, rng);
      hist->SetDirectory(0);
      hist->SetTitle(name);
      hist->SetMarkerStyle(20);
      hist->SetMarkerColor(col);
      hist->SetLineColor(col);
      hist->SetFillColor(col);
      hist->SetLineWidth(0);
      hist->SetFillStyle(0);
      hist->SetXTitle("#eta");
      hist->SetYTitle(cuts->GetZaxis()->GetTitle());
    }
    DrawInPad(parent, sub, stack, "nostack p", kLegend|kCenter|kSouth);
  }
  //____________________________________________________________________
  void DrawSharingFilter()
  {
    Info("DrawSharingFilter", "Drawing sharing filter");
    TCollection* c = GetCollection(fSums, "fmdSharingFilter");
    if (!c) return;
    TCollection* rc = GetCollection(fResults, "fmdSharingFilter");
    if (!rc) rc = c;

    // --- Draw summary information ----------------------------------
    fBody->Divide(1, 3, 0, 0);
    fBody->cd(1);
  
    Double_t y = .95;
    Bool_t   angle=false, lowSignal=false, disabled=false;
    Int_t    nFiles = 0;
    if (GetParameter(c, "angle", angle))
      DrawParameter(y, "Angle correct", (angle ? "yes" : "no")); 
    if (GetParameter(c, "lowSignal", lowSignal))
      DrawParameter(y, "Lower signal",  (lowSignal ? "yes" : "no"));
    TParameter<int>* pnFiles = 
      static_cast<TParameter<int>*>(GetObject(c, "nFiles"));
    if (pnFiles) {
      nFiles = pnFiles->GetVal();
      DrawParameter(y, "# files merged", Form("%d", nFiles));    
    }
    if (GetParameter(c, "disabled", disabled, false)) 
      DrawParameter(y, "Merging disabled", (disabled ? "yes" : "no"));

    Int_t lm    = 0;
    Int_t hm    = 0;
    TH2*  hLow  = 0;
    TH2*  hHigh = 0;
    if (!disabled) {
      Bool_t simple=false, three=false;
      if (GetParameter(c, "simple", simple))
	DrawParameter(y, "Simple method", (simple ? "yes" : "no"));
      if (GetParameter(c, "sumThree", three)) 
	DrawParameter(y, "3-strip merging", (three ? "yes" : "no"));
      
      TCollection* lc = GetCollection(c, "lCuts");
      TCollection* hc = GetCollection(c, "hCuts");
      lm              = PrintCut(lc, y, "Low cut");
      hm              = PrintCut(hc, y, "High cut");
      hLow            = GetH2(c, "lowCuts");
      hHigh           = GetH2(c, "highCuts");
      if (hLow  && nFiles > 0 && !hLow->TestBit(BIT(20)))
	hLow->Scale(1. / nFiles);
      if (hHigh && nFiles > 0 && !hHigh->TestBit(BIT(20))) 
	hHigh->Scale(1. / nFiles);
      DrawCut(fBody, 2, hLow);
      DrawCut(fBody, 3, hHigh);
    }
    PrintCanvas("Sharing filter");

    if (!disabled) {
      // --- Draw rings individually -----------------------------------
      Double_t savX = fParVal->GetX();
      Double_t savY = fParVal->GetY();
      fParVal->SetX(0.6);
      fParVal->SetY(0.6);
      const char** ptr   = GetRingNames(false);
      UShort_t     iq    = 1;
      while (*ptr) { 
	TCollection* sc = GetCollection(c, *ptr);
	if (!sc) { ptr++; iq++; continue; }
	
	if (fLandscape) fBody->Divide(3, 2);
	else            fBody->Divide(2,3);
	
	TH1*    esdELoss = GetH1(sc, "esdEloss");
	TH1*    anaELoss = GetH1(sc, "anaEloss");
	TGraph* lowCut   = CreateCutGraph(lm, iq,  hLow,  esdELoss, kYellow+1);
	TGraph* highCut  = CreateCutGraph(hm, iq,  hHigh, esdELoss, kCyan+1);
	Double_t ignCut  = TMath::Max(lowCut->GetX()[3],0.);
	Int_t    esdLow  = esdELoss->FindBin(ignCut);
	Int_t    anaLow  = anaELoss->FindBin(ignCut);
	Double_t esdInt  = esdELoss->Integral(esdLow,esdELoss->GetNbinsX()+1);
	Double_t anaInt  = anaELoss->Integral(anaLow,anaELoss->GetNbinsX()+1);
	Double_t frac    = esdInt > 0 ? (esdInt-anaInt)/esdInt : 1;
	esdELoss->GetXaxis()->SetRangeUser(-.1, 2);
	
	DrawInPad(fBody, 1, esdELoss, "", kLogy,
		  "#Delta/#Delta_{mip} reconstructed and merged");
	DrawInPad(fBody, 1, anaELoss, "same");
	DrawInPad(fBody, 1, lowCut,  "lf same"); 
	DrawInPad(fBody, 1, highCut, "lf same", kLogy|kLegend|kNorth|kWest); 
	TVirtualPad* p = fBody->GetPad(1);
	p->cd();
	TLatex* l = new TLatex(1-p->GetRightMargin(), 
			       0.5, Form("Loss: %5.1f%%", frac*100));
	l->SetNDC();
	l->SetTextAlign(32);
	l->Draw();
	l->DrawLatex(1-p->GetRightMargin(), 0.45,
		     Form("%f #rightarrow #infty", ignCut));

	TH1*     singles  = GetH1(sc, "singleEloss");
	TH1*     doubles  = GetH1(sc, "doubleEloss");
	TH1*     tripples = GetH1(sc, "tripleEloss");
	Double_t int1     = singles->Integral(0,singles->GetNbinsX()+1);
	Double_t int2     = doubles->Integral(0,doubles->GetNbinsX()+1);
	Double_t int3     = tripples->Integral(0,tripples->GetNbinsX()+1);
	Double_t intT     = int1 + int2 + int3;
	Double_t f1       = intT > 0 ? int1 / intT : 0;
	Double_t f2       = intT > 0 ? int2 / intT : 0;
	Double_t f3       = intT > 0 ? int3 / intT : 0;

	singles->GetXaxis()->SetRangeUser(-.1, 2);
	DrawInPad(fBody, 2, singles,    "",    kLogy,
		  "#Delta/#Delta_{mip} for single, double, and tripple hits");
	DrawInPad(fBody, 2, doubles,    "same",    kLogy);
	DrawInPad(fBody, 2, tripples,   "same",    kLogy);
	DrawInPad(fBody, 2, lowCut,     "lf same", kLogy); 
	DrawInPad(fBody, 2, highCut,    "lf same", kLogy|kLegend|kNorth|kWest); 
	
	fBody->cd(2);
	Double_t nameX = fParName->GetX();
	Double_t valX  = fParVal->GetX();
	Double_t intY  = 0.4;
	fParName->SetX(0.5);
	fParVal->SetX(0.7);
	DrawParameter(intY, "Singles",  Form("%5.1f%%", 100*f1), 0.05);
	DrawParameter(intY, "Doubles",  Form("%5.1f%%", 100*f2), 0.05);
	DrawParameter(intY, "Tripples", Form("%5.1f%%", 100*f3), 0.05);
	fParName->SetX(nameX);
	fParVal->SetX(valX);

	DrawInPad(fBody, 3, GetH2(sc, "singlePerStrip"), "colz",kLogz);
	// DrawInPad(fBody, 4, GetH1(sc, "distanceBefore"), "",     0x2);
	// DrawInPad(fBody, 4, GetH1(sc, "distanceAfter"),  "same", 0x12);
	DrawInPad(fBody, 4, GetH2(sc, "summed"),         "colz",0x0);
	
	TH2* nB = GetH2(sc, "neighborsBefore");
	if (nB) { 
	  nB->GetXaxis()->SetRangeUser(0,2); 
	  nB->GetYaxis()->SetRangeUser(0,2); 
	}
	DrawInPad(fBody, 5, nB, "colz cont3", kLogz,
		  "Correlation of neighbors before merging");

	TH2* nA = GetH2(sc, "neighborsAfter");
	if (nA) { 
	  nA->GetXaxis()->SetRangeUser(0,2); 
	  nA->GetYaxis()->SetRangeUser(0,2); 
	}
	DrawInPad(fBody, 6, nA, "colz cont3", kLogz,
		  "Correlation of neighbors after merging");

	// DrawInPad(fBody, 6, GetH2(sc, "beforeAfter"),    "colz",   kLogz);
	
	PrintCanvas(Form("Sharing filter - %s", *ptr));
	ptr++;
	iq++;
      }
      fParVal->SetX(savX);
      fParVal->SetY(savY);
    }

    // --- MC --------------------------------------------------------
    TCollection* cc = GetCollection(c, "esd_mc_comparion", false); // Spelling!
    if (!cc) {
      cc = GetCollection(c, "esd_mc_comparison", false); // Spelling!
      if (!cc) return; // Not MC 
    }

    DivideForRings(false, false);
    const char** ptr = GetRingNames(false);
    while (*ptr) { 
      TString nam(Form("%s_corr", *ptr));
      TH2* hc = GetH2(cc, nam, false);
      if (!hc) {
	nam[4] = (nam[4] == 'I' ? 'i' : 'o');
	hc = GetH2(cc, nam, false);
	if (!hc) { 
	  ptr++;
	  continue;
	}
      }
      DrawInRingPad(hc, "colz", kLogz);
      ptr++;
    }

    PrintCanvas("Sharing filter - MC vs Reco");

    // --- MC --------------------------------------------------------
    DrawTrackDensity(c);
  }
  //__________________________________________________________________
  /** 
   * Draw a slice fit on a 2D histogram
   * 
   * @param inY   Whether to slice in Y
   * @param h     2D histogram
   * @param nVar  Number of variances
   * @param p     Master pad to draw in 
   * @param sub   Sub pad number 
   * @param flags Flags 
   * @param cut   Cut value 
   */
  void ShowSliceFit(Bool_t inY, TH2* h, Double_t nVar, 
		    TVirtualPad* p, Int_t sub, UShort_t flags=0,
		    Double_t cut=-1)
  {
    if (!h) return;
    TAxis* indep = (inY ? h->GetXaxis() : h->GetYaxis());
    TAxis* dep   = (inY ? h->GetYaxis() : h->GetXaxis());
    

    TObjArray* fits = new TObjArray;
    fits->SetOwner();
    // FitSlicesX sets onX to true.  If onX is true, then it calls
    // ProjectionX for each Y bin.  That is, we fit each X slice. 
    Int_t minB = dep->FindBin(0.)+1;
    Int_t maxB = dep->GetNbins();
    Info("", "Bin range: %d - %d", minB, maxB);
    if (inY) h->FitSlicesY(0, minB, maxB, 10, "QN", fits);
    else     h->FitSlicesX(0, minB, maxB, 10, "QN", fits);
    if (!fits) { 
      Warning("ShowSliceFit", "No fits returned");
      return;
    }

    // If inY is true then this is the mean,variance as a function of X
    TH1* mean = static_cast<TH1*>(fits->At(1));
    TH1* var  = static_cast<TH1*>(fits->At(2));
    if (!mean || !var) {
      Warning("ShowSliceFit", "Didn't get histograms");
      fits->Delete();
      return;
    }
#if 0
    TH1* hh[] = { mean, var, 0 };
    for (Int_t ib=1; ib<=mean->GetNbinsX();ib++) { 
      TH1** hp = hh;
      while (*hp) { 
	if ((*hp)->GetBinContent(ib) <= 0) { 
	  (*hp)->SetBinContent(ib,0);
	  (*hp)->SetBinError(ib,0);
	}
	hp++;
      }
    }
#endif

    // If inY is true then this is the mean,variance as a function of X
    TF1* fmean = new TF1("mean", "pol1");
    TF1* fvar  = new TF1("var",  "pol1");
    mean->Fit(fmean, "Q0+");
    var->Fit(fvar, "Q0+");
    if (!fmean || !fvar) {
      Warning("ShowSliceFit", "No functions returned");
      fits->Delete();
      return;
    }

    TGraphErrors* g = new TGraphErrors(h->GetNbinsX());
    g->SetName(Form("g%s", h->GetName()));
    TString xTit = indep->GetTitle();
    TString yTit = dep->GetTitle();
    g->SetTitle(Form("Correlation of %s and %s",xTit.Data(),yTit.Data()));
    g->SetFillColor(kBlue-10);
    g->SetFillStyle(3001);
    TGraph* up  = (cut > 0 ? new TGraph(indep->GetNbins()) : 0);
    TGraph* low = (cut > 0 ? new TGraph(indep->GetNbins()) : 0);
    if (up)  { 
      up ->SetLineColor(kBlack); 
      up ->SetLineWidth(2); 
      up ->SetLineStyle(2); 
    }
    if (low) { 
      low->SetLineColor(kBlack); 
      low->SetLineWidth(2); 
      low->SetLineStyle(2); 
    }
    for (Int_t i = 1; i <= h->GetNbinsX(); i++) { 
      Double_t x  = indep->GetBinCenter(i);
      Double_t y  = fmean->Eval(x);
      Double_t e  = fvar->Eval(x);
      // Double_t y  = mean->GetBinContent(i);
      // Double_t e  = var->GetBinContent(i); 
      Double_t ee = nVar * e;
      if (flags & 0x8000) ee *= e > 0 ? TMath::Log10(e) : 1;
      if (inY) {
	g->SetPoint(i-1, x, y);
	g->SetPointError(i-1, 0, ee);
      }
      else { 
	g->SetPoint(i-1, y, x);
	g->SetPointError(i-1, ee, 0);
      }
      if (up)  {
	if (inY) up->SetPoint(i-1,x,x+cut*x);
	else     up->SetPoint(i-1,y+cut*y,y);
      }
      if (low) {
	if (inY) low->SetPoint(i-1,x,x-cut*x);
	else     low->SetPoint(i-1,y-cut*y,y);
      }
    }
    DrawInPad(p, sub, g, "3", flags);
    if (up)  DrawInPad(p, sub, up, "l", flags);
    if (low) DrawInPad(p, sub, low, "l", flags);
    fmean->SetRange(indep->GetXmin(), indep->GetXmax());
    fmean->SetLineWidth(2);
    DrawInPad(p, sub, fmean, "same", flags);

    TVirtualPad* pp = p->GetPad(sub);
    Double_t y = 1-pp->GetTopMargin()-.01;
    TLatex* l = new TLatex(.15, y, 
			   Form("#LT%s#GT(%s) = "
				"%f + %f %s", 
				yTit.Data(), xTit.Data(), 
				fmean->GetParameter(0), 
				fmean->GetParameter(1), xTit.Data()));
    l->SetNDC();
    l->SetTextAlign(13);
    l->SetTextSize(fParVal->GetTextSize());
    l->SetTextFont(42);
    l->Draw();
    l->DrawLatex(0.15, y-0.07, 
		 Form("#sigma_{%s}(%s) = "
		      "%f + %f %s", 
		      yTit.Data(), xTit.Data(),
		      fvar->GetParameter(0), 
		      fvar->GetParameter(1),  xTit.Data()));
    l->DrawLatex(0.15, y-0.14, Form("#delta = %3.1f %s #sigma",
				    nVar, 
				    flags & 0x8000 ? "log_{10}(#sigma)" : ""));
    fits->Delete();
  }

  //____________________________________________________________________
  void DrawDensityCalculator()
  {
    Info("DrawDensityCalculator", "Drawing density calculator");
    TCollection* c = GetCollection(fSums, "fmdDensityCalculator");
    if (!c) return;

    fBody->Divide(2, 2);
    fBody->cd(1);
  
    Double_t y = .9;
    Int_t maxParticles=0, phiAcceptance=0, etaLumping=0, phiLumping=0;
    Bool_t method=false, recalcPhi=false;
    Double_t maxOutliers=0, outlierCut=-1;
    Double_t size = fLandscape ? 0.05 : 0.03;
  
    GetParameter(c, "maxParticle", maxParticles);

    if (GetParameter(c, "phiAcceptance", phiAcceptance))
      DrawParameter(y, "#phi acceptance method", 
		    (phiAcceptance == 1 ? "N_{ch}" : 
		     phiAcceptance == 2 ? "#DeltaE" : "none"),       size);
    if (GetParameter(c, "etaLumping", etaLumping) &&
	GetParameter(c, "phiLumping", phiLumping))
      DrawParameter(y, "Region size (sector#timesstrip)", 
		    Form("%2d #times %2d", phiLumping, etaLumping),  size);
    if (GetParameter(c, "method", method))
      DrawParameter(y, "Method", (method ? "Poisson" : "#DeltaE"),   size); 
    if (GetParameter(c, "recalcPhi", recalcPhi))
      DrawParameter(y, "Recalculate #phi",(recalcPhi ? "yes" : "no"),size); 
    if (GetParameter(c, "maxOutliers", maxOutliers, false))
      DrawParameter(y, "Max relative N_{outlier}",
		    Form("%5.3f",maxOutliers),size);
    Bool_t hasOutCut = false;
    if ((hasOutCut = GetParameter(c, "outlierCut", outlierCut, false)))
      DrawParameter(y, "Max relative deviation",Form("%5.3f",outlierCut),size);


    TParameter<int>* nFiles = 
      static_cast<TParameter<int>*>(GetObject(c, "nFiles"));
    if (nFiles)
      DrawParameter(y, "# files merged", Form("%d", nFiles->GetVal()), size);

    TCollection* lc = GetCollection(c, "lCuts");
    Int_t tm = PrintCut(lc, y, "Threshold", size);

    TVirtualPad* p = fBody; // fBody->cd(2);
    // p->Divide(3,1);

    TH1* accI = GetH1(c, "accI");
    TH1* accO = GetH1(c, "accO");
    if (accI) { 
      Double_t scale = 1./accI->GetMaximum();
      accI->Scale(scale); 
      accO->Scale(scale);
      accI->SetMinimum(0); 
      accI->SetMaximum(1.3);
    }
    TH2* lCuts = GetH2(c, "lowCuts");
    TH2* maxW  = GetH2(c, "maxWeights");
    if (lCuts)           lCuts->SetTitle("Thresholds");
    if (nFiles && lCuts) lCuts->Scale(1. / nFiles->GetVal());
    if (nFiles && maxW)  maxW->Scale(1. / nFiles->GetVal());
    DrawInPad(p, 2, accI); 
    DrawInPad(p, 2, accO,  "same", kLegend|kNorth|kCenter); 
    DrawCut(p, 3, lCuts);
    DrawCut(p, 4, maxW);
  
    PrintCanvas("Density calculator");
    Float_t save = fParVal->GetTextSize();
    fParVal->SetTextSize(0.03);

    UShort_t iq = 1;
    const char** ptr   = GetRingNames(false);
    while (*ptr) { 
      TCollection* sc = GetCollection(c, *ptr);
      if (!sc) { ptr++; continue; }
    
      if (fLandscape) fBody->Divide(3,2);
      else            fBody->Divide(2,3);
    
      TH2* corr      = GetH2(sc, "elossVsPoisson");
      TH2* corrOut   = GetH2(sc, "elossVsPoissonOutlier", false);
      TH1* diff      = GetH1(sc, "diffElossPoisson");
      TH1* diffOut   = GetH1(sc, "diffElossPoissonOutlier", false);
      TH1* eloss     = GetH1(sc, "eloss");
      TH1* elossUsed = GetH1(sc, "elossUsed");
      TH1* occ       = GetH1(sc, "occupancy");
      if (eloss)     eloss    ->SetLineWidth(1);
      if (elossUsed) elossUsed->SetLineWidth(1);
      if (eloss)     eloss->GetXaxis()->SetRangeUser(0.05, 2);
      
      corr->SetXTitle("N_{ch,#Delta}");
      corr->SetYTitle("N_{ch,Poisson}");
      DrawInPad(fBody,  1, corr,    "colz",        kLogz);
      if (corrOut) 
	DrawInPad(fBody,1, corrOut, "same",        kLogz);
      ShowSliceFit(true, corr, 10, fBody, 1, kLogz, outlierCut);

      DrawInPad(fBody,  2, diff,    "HIST E",      kLogy);
      if (diffOut) 
	DrawInPad(fBody,2, diffOut, "HIST E SAME", kLogy|kLegend|kNorth|kWest);
      DrawInPad(fBody,  3, occ,      "",           kLogy);
      DrawInPad(fBody,  4, eloss,    "",           kLogy, 
		"#Delta/#Delta_{mip} before and after cuts");
      DrawInPad(fBody, 4, elossUsed, "same",      kLogy);
      TGraph* thres = CreateCutGraph(tm, iq,  lCuts,  eloss, kYellow+1);
      DrawInPad(fBody, 4, thres, "lf same", kLogy|kLegend|kNorth|kWest); 

      if (eloss && elossUsed) {
	Int_t    lowBin    = eloss->GetXaxis()->FindBin(0.)+1;
	Int_t    upBin     = eloss->GetNbinsX()+1;
	Double_t beforeInt = eloss->Integral(lowBin,upBin);
	Double_t afterInt  = elossUsed->Integral(lowBin,upBin);
	Double_t frac      = beforeInt > 0 ? (beforeInt-afterInt)/beforeInt : 1;
	TVirtualPad* pp = fBody->GetPad(4);
	pp->cd();
	TLatex* l = new TLatex(1-pp->GetRightMargin(), 
			       0.5, Form("Loss: %5.1f%%", frac*100));
	l->SetNDC();
	l->SetTextAlign(32);
	l->Draw();
      }


      TH1* phiB = GetH1(sc, "phiBefore");
      TH1* phiA = GetH1(sc, "phiAfter");
      TH1* outliers = GetH1(sc, "outliers", false);
      if (outliers) 
	DrawInPad(fBody, 5, outliers, "hist", kLogy);
      else if (phiB && phiA) { 
	phiA->Add(phiB, -1);
	phiA->Divide(phiB);
	phiA->SetTitle("#Delta#phi from Ip (x,y) correction");
	phiA->SetYTitle("(#phi_{after}-#phi_{before})/#phi_{before}");
	DrawInPad(fBody, 5, phiA);
      }
      else {
	fBody->cd(5);
	TLatex* ltx = new TLatex(0.5, 0.5, "No outliers or #phi corrections");
	ltx->SetTextAlign(22);
	ltx->SetTextSize(0.07);
	ltx->SetNDC();
	ltx->Draw();
      }
      DrawInPad(fBody, 6, GetH2(sc, "phiAcc"), "colz",   kLogz);
    

      if (diff && diffOut) { 
	fBody->cd(2);
	Double_t in  = diff->GetEntries();
	Double_t out = diffOut->GetEntries();
	if ((in+out) > 0) {
	  TLatex*  ltx = new TLatex(0.11, 0.89, 
				    Form("Fraction: %7.3f%%", 
					 100*out/(in+out)));
	  ltx->SetNDC();
	  ltx->SetTextAlign(13);
	  ltx->SetTextSize(0.06);
	  ltx->Draw();
	}
      }
      PrintCanvas(Form("Density calculator - %s", *ptr));
      ptr++;    
      iq++;
    }

    TCollection* cc = GetCollection(c, "esd_mc_comparison", false); 
    if (!cc) {
      fParVal->SetTextSize(save);
      return; // Not MC 
    }

    ptr   = GetRingNames(false);
    THStack* profiles = new THStack("profiles", "MC-ESD");
    // Int_t cnt = 0;
    while (*ptr) { 
      fBody->Divide(2,1);

      TH2* corr = GetH2(cc, Form("%s_corr_mc_esd", *ptr));
      if (corr) { 
	// corr->GetXaxis()->SetRangeUser(-1,51);
	// corr->GetYaxis()->SetRangeUser(-1,51);
	corr->SetXTitle("MC");
	corr->SetYTitle("ANA");
	TH1* h = new TH1F("",Form("Correlation of N_{ch,incl} for %s", *ptr),
			  corr->GetNbinsX(), 
			  corr->GetXaxis()->GetXmin(), 
			  corr->GetXaxis()->GetXmax());
	h->SetMinimum(corr->GetYaxis()->GetXmin());
	h->SetMaximum(1.2*corr->GetYaxis()->GetXmax());
	h->SetXTitle("MC"); // corr->GetXaxis()->GetTitle());
	h->SetYTitle(corr->GetYaxis()->GetTitle());
	DrawInPad(fBody, 1, h, "", kLogz);
	DrawInPad(fBody, 1, corr,  "colz same", kLogz);
	ShowSliceFit(true, corr, 1, fBody, 1, 0, -1);
      }
      TH1* diff = GetH1(cc, Form("%s_diff_mc_esd", *ptr));
      if (diff && diff->GetEntries() > 0) {
	// diff->Rebin(2);
	diff->Smooth(3);
	diff->Scale(1./diff->GetEntries(), "width");
	TF1* f = new TF1(Form("%s_tri", *ptr), 
			 "[0]*TMath::Exp(-TMath::Abs(x-[1])/[2])",-20,20);
	f->SetParNames("A", "x_{0}", "w");
	f->SetParameters(1, diff->GetMean(), diff->GetRMS());
	diff->Fit(f,"RQ0+");
	DrawInPad(fBody, 2, diff, "", kLogy);
	DrawInPad(fBody, 2, f, "same", kLogy);
	Double_t py = .88;
	TLatex* l = new TLatex(.89, py, "Ae^{-|x-x_{0}|/w}");
	l->SetTextAlign(33);
	l->SetTextSize(fParVal->GetTextSize());
	l->SetTextFont(42);
	l->SetNDC();
	l->Draw();
	py -= fParVal->GetTextSize();
	l->DrawLatex(.89, py, Form("#chi^{2}/#nu=%f",  f->GetNDF()>0 ? 
				   f->GetChisquare()/f->GetNDF() : 0));
	for (Int_t i = 0; i < 3; i++) { 
	  py -= fParVal->GetTextSize();
	  l->DrawLatex(.89, py, Form("%s: %f #pm %f", f->GetParName(i), 
				     f->GetParameter(i), f->GetParError(i)));
	}	       
      }
      TH2* vs = GetH2(cc, Form("%s_esd_vs_mc", *ptr));
      if (vs) { 
	const Double_t lVs = -0.3;
	const Double_t hVs = +0.4;
	Int_t nX = vs->GetNbinsX();
	Int_t nY = vs->GetNbinsY();
	TProfile* vsp = new TProfile(Form("%s_esd_vs_mc_px", *ptr), *ptr,
				   nX, vs->GetXaxis()->GetXmin(),
				   vs->GetXaxis()->GetXmax());
	vsp->SetXTitle(vs->GetXaxis()->GetTitle());
	vsp->SetYTitle("#LT#deltaN_{ch}#GT");
	vsp->SetLineColor(diff->GetLineColor());
	vsp->SetMarkerColor(diff->GetLineColor());
	vsp->SetFillColor(diff->GetLineColor());
	vsp->SetDirectory(0);
	Bool_t hasSome = false;
	for (Int_t ix = 1; ix <= nX; ix++) { 	
	  Double_t vsx = vs->GetXaxis()->GetBinCenter(ix);
	  for (Int_t iy = 1; iy <= nY; iy++) { 
	    Double_t vsc = vs->GetBinContent(ix, iy);
	    Double_t vse = vs->GetBinError(ix, iy);
	    if (vsc < lVs || vsc > hVs) continue;
	    hasSome = true;
	    vsp->Fill(vsx, vsc, vse);
	  }
	}
	if (hasSome) profiles->Add(vsp);
	else delete vsp;
      }
      PrintCanvas(Form("Density calculator - MC vs Reco - %s", *ptr));
      ptr++;
      // cnt++;
    }
    if (profiles->GetHists() && profiles->GetHists()->GetEntries() > 0) {
      Double_t pmax = profiles->GetMaximum("nostack")*1.3;
      profiles->SetMaximum(+pmax);
      profiles->SetMinimum(-pmax);
      DrawInPad(fBody, 0, profiles, "nostack");
      PrintCanvas("Density calculator - MC vs Reco - All");
    }
      
    fParVal->SetTextSize(save);
  }

  //____________________________________________________________________
  void DrawCorrector()
  {
    Info("DrawCorrector", "Drawing corrector"); 
    TCollection* c = GetCollection(fSums, "fmdCorrector"); 
    if (!c) return;
  
    fBody->cd();
  
    Double_t y = .8;  
    Bool_t secondary=false, vertexBias=false, acceptance=false, merging=false;  
    if (GetParameter(c, "secondary", secondary))
      DrawParameter(y, "Secondary corr.", secondary ? "yes" : "no");
    if (GetParameter(c, "acceptance", acceptance))
      DrawParameter(y, "Acceptance corr.", acceptance ? "yes" : "no");
    if (GetParameter(c, "vertexBias", vertexBias))
      DrawParameter(y, "Vertex bias corr.", vertexBias ? "yes" : "no");
    if (GetParameter(c, "merging", merging))  
      DrawParameter(y, "Merging eff.", merging ? "yes" : "no");
    
    PrintCanvas("Corrector");

    TCollection* cc = GetCollection(c, "esd_mc_comparison", false); 
    if (!cc) return; // Not MC 
    
    DivideForRings(false, false);
    const char** ptr = GetRingNames(false);
    while (*ptr) { 
      DrawInRingPad(GetH2(cc, Form("%s_esd_vs_mc", *ptr)), "colz", 0x0);
      ptr++;
    }

    PrintCanvas("Corrector - MC vs Reco");
  }

  //____________________________________________________________________
  void DrawHistCollector()
  {
    Info("DrawHistCollector", "Drawing histogram collector");  
    TCollection* c = GetCollection(fSums, "fmdHistCollector");
    if (!c) return;

    fBody->Divide(2, 1);
    TVirtualPad* p = fBody->cd(1);
    p->Divide(1,2);
    p->cd(1);

    Double_t y = .8;
    Int_t nCutBins=0, fiducial=0, merge=0, skipRings=0;
    Double_t fiducialCut=0.;
    Bool_t  bgAndHits=false;
    Double_t size = fLandscape ? 0.06 : 0.04;
    if (GetParameter(c, "nCutBins", nCutBins))
      DrawParameter(y, "# of bins to cut", Form("%d", nCutBins),size);

    if (GetParameter(c, "skipRings", skipRings)) {
      TString skipped;
      if (skipRings & 0x05) skipped.Append("FMD1i ");
      if (skipRings & 0x09) skipped.Append("FMD2i ");
      if (skipRings & 0x0a) skipped.Append("FMD2o ");
      if (skipRings & 0x11) skipped.Append("FMD3i ");
      if (skipRings & 0x12) skipped.Append("FMD3o ");
      if (skipped.IsNull()) skipped = "none";
      DrawParameter(y, "Skipped rings", skipped, size);
    }
    if (GetParameter(c, "bgAndHits", bgAndHits))
      DrawParameter(y, "Bg & hit maps stored.", bgAndHits?"yes":"no",size);
    if (GetParameter(c, "merge", merge))
      DrawParameter(y, "Merge method", 
		    (merge == 0 ? "straight mean" :
		     merge == 1 ? "straight mean, no zeroes" : 
		     merge == 2 ? "weighted mean" : 
		     merge == 3 ? "least error" : 
		     merge == 4 ? "sum" : "unknown"),size);
    if (GetParameter(c, "fiducial", fiducial))
      DrawParameter(y, "Fiducial method.", 
		    fiducial == 0 ? "cut" : "distance", size);
    if (GetParameter(c, "fiducialCut", fiducialCut))
      DrawParameter(y, "Fiducial cut.", Form("%f", fiducialCut), size);

    // p->cd(2);
    // Printf("Drawing skipped");
    TH1* skipped = GetH1(c, "skipped", false);
    if (skipped) { 
      skipped->SetFillColor(kRed+1);
      skipped->SetFillStyle(3001);
    }
    DrawInPad(p, 2, skipped, "hist");
		 
    p = fBody->cd(2);
    p->Divide(1,2,0,0);

    // Printf("Drawing sumRings");
    DrawInPad(p, 1, GetH2(c, "sumRings"), "colz"); 
    // Printf("Drawing coverage");
    DrawInPad(p, 2, GetH2(c, "coverage"), "colz");
    // Printf("Done drawing for now");
    PrintCanvas("Histogram collector");
		
    
    TIter next(c);
    TObject* o = 0;
    TRegexp regexp("[pm][0-9]+_[pm][0-9]+");
    while ((o = next())) { 
      TString name(o->GetName());
      if (name.Index(regexp) == kNPOS) continue;
      
      TList* vl = static_cast<TList*>(o);
      if (!vl) continue;

      DivideForRings(false, false);
      const char** ptr = GetRingNames(false);
      while (*ptr) { 
	DrawInRingPad(GetH2(vl, Form("secMap%s", *ptr)), "colz", 0x0);
	DrawInRingPad(GetH2(vl, Form("hitMap%s", *ptr)), "box same", 0x0);
	ptr++;
      }
      PrintCanvas(Form("Histogram Collector - Vertex bin %s", vl->GetName()));
    }

    o = c->FindObject("byCentrality");
    if (!o) return;
    TList* bc = static_cast<TList*>(o);

    DrawInPad(fBody, GetH3(bc, "FMD1I"), "box", 0);
    DrawInPad(fBody, GetH3(bc, "FMD2I"), "box same", 0);
    DrawInPad(fBody, GetH3(bc, "FMD2O"), "box same", 0);
    DrawInPad(fBody, GetH3(bc, "FMD3O"), "box same", 0);
    DrawInPad(fBody, GetH3(bc, "FMD3I"), "box same", kLegend);
  }

  //____________________________________________________________________
  void DrawCentral()
  {
    Info("DrawCentral", "Drawing central (SPD)");  
    TCollection* c = fSums; 
    if (!c) return;

    fBody->Divide(2, 2);
    fBody->cd(1);
    Double_t y = .7;  
    Bool_t secondary=false, acceptance=false;  
    if (GetParameter(c, "secondary", secondary))
      DrawParameter(y, "Secondary corr.", secondary ? "yes" : "no");
    if (GetParameter(c, "acceptance", acceptance))
      DrawParameter(y, "Acceptance corr.", acceptance ? "yes" : "no");

		 
    DrawInPad(fBody, 2, GetH2(c, "coverage"), "col", 0,
	      "#eta coverage per v_{z}");
    TH2* cvst = GetH2(c, "nClusterVsnTracklet");
    if (cvst) {
      // cvst->Scale(1, "width");
      cvst->GetXaxis()->SetTitle("N_{free cluster}");
      cvst->GetYaxis()->SetTitle("N_{tracklet}");
      cvst->GetXaxis()->SetRangeUser(1,10000);
      cvst->GetYaxis()->SetRangeUser(1,10000);
    }
    DrawInPad(fBody, 3, cvst, "colz", kLogx|kLogy|kLogz,
	      "Correlation of # of tracklets and clusters"); 
    DrawInPad(fBody, 4, GetH2(c, "clusterPerTracklet"), "colz", 0x0,
	      "# clusters per tracklet vs #eta"); 
    ShowSliceFit(true, cvst, 3, fBody, 3, 0x8000|kLogz);

    fBody->cd(1)->Modified();
    fBody->cd(2)->Modified();
    fBody->cd(3)->Modified();
    fBody->cd(4)->Modified();
    fBody->cd(1)->Update();
    fBody->cd(2)->Update();
    fBody->cd(3)->Update();
    fBody->cd(4)->Update();
    PrintCanvas("Central - overview");
		
    
    TIter next(c);
    TObject* o = 0;
    TRegexp regexp("[pm][0-9]+_[pm][0-9]+");
    while ((o = next())) { 
      TString name(o->GetName());
      if (name.Index(regexp) == kNPOS) continue;
      
      TList* vl = static_cast<TList*>(o);

      fBody->Divide(1, 3);
    
      DrawInPad(fBody, 1, GetH1(vl, "acceptance"), "", 0);

      TH1* sec = GetH1(vl, "secondary");
      sec->SetMarkerStyle(21);
      sec->SetMarkerSize(1.2);
      DrawInPad(fBody, 2, sec, "", 0);
      DrawInPad(fBody, 2, GetH1(vl, "secondaryFiducial"),    "same", 0x0);
      DrawInPad(fBody, 3, GetH2(vl, "secondaryMapFiducial"), "colz", 0);
      DrawInPad(fBody, 3, GetH2(vl, "hitMap"),               "box same", 0x0);

      fBody->cd(1)->Modified();
      fBody->cd(2)->Modified();
      fBody->cd(3)->Modified();
      fBody->cd(1)->Update();
      fBody->cd(2)->Update();
      fBody->cd(3)->Update();
      PrintCanvas(Form("Central - Vertex bin %s", vl->GetName()));
    }
  }

  
  //____________________________________________________________________
  void AddToAll(THStack* all, const THStack* stack, Int_t curr, Int_t step)
  {
    if (!stack) return;

    TIter   next(stack->GetHists());
    TH1*    h = 0;
    while ((h = static_cast<TH1*>(next()))) {
      TH1* copy = static_cast<TH1*>(h->Clone(Form("%s_copy", h->GetName())));
      copy->SetDirectory(0);
      if (curr != step) {
	copy->SetMarkerColor(kGray);
	copy->SetLineColor(kGray);
      }
      all->Add(copy);
    }
  }
  //____________________________________________________________________
  void AddToAll(THStack* all, const THStack* stack)
  {
    if (!stack) return;

    TIter   next(stack->GetHists());
    TH1*    h = 0;
    while ((h = static_cast<TH1*>(next()))) {
      TH1* copy = static_cast<TH1*>(h->Clone(Form("%s_copy", h->GetName())));
      copy->SetDirectory(0);
      copy->SetMarkerColor(kGray);
      copy->SetLineColor(kGray);
      all->Add(copy);
    }
  }

  //____________________________________________________________________
  void DrawStep(Int_t        step,
		THStack*     all,
		TObject*     cur,
		TLegend*     leg,
		const char*  title,
		TVirtualPad* can,
		Int_t        sub,
		Int_t        nCol)
  {
    if (all->GetHists()->GetEntries() <= 0 || !cur) return;

    // Info("", "Drawing step # %d", step);
    Bool_t       left = sub % nCol == 1; 
    Bool_t       right= sub % nCol == 0;
    Bool_t       top  = (sub-1) / nCol == 0;
    TVirtualPad* p    = can->cd(sub);
    gStyle->SetOptTitle(0);
    p->SetTitle(Form("Step # %d", step));
    p->SetFillColor(kWhite);
    p->SetRightMargin(right ? 0.02 : 0);
    p->SetTopMargin(top ? 0.02 : 0); // 0.02);
    // Info("", "Drawing step %d in sub-pad %d (%s)", 
    //      step, sub, (left?"left":"right"));

    p->cd();
    all->Draw("nostack");
    all->GetHistogram()->SetXTitle("#eta");
    all->GetHistogram()->SetYTitle("signal");

    TLegendEntry* e = 
      static_cast<TLegendEntry*>(leg->GetListOfPrimitives()->At(step-1));
    if (e) {
      e->SetMarkerColor(kBlack);
      e->SetLineColor(kBlack);
      e->SetTextColor(kBlack);
    }

    // p->cd();
    gROOT->SetSelectedPad(p);
    cur->DrawClone("same nostack");
    leg->DrawClone("");

    TLatex* ltx = new TLatex(.97, .97, title);
    ltx->SetNDC();
    ltx->SetTextSize(.06);
    ltx->SetTextAlign(33);
    ltx->Draw();

    ltx = new TLatex((left ? .12 : .02), .97, p->GetTitle());
    ltx->SetNDC();
    ltx->SetTextSize(.06);
    ltx->SetTextAlign(13);
    ltx->Draw();

    if (step > 1) { 
      Double_t x1 = 0.5*(p->GetUxmax()+p->GetUxmin());
      Double_t x2 = x1;
      Double_t y1 = p->GetUymax();
      Double_t y2 = 0.92*y1;
      Double_t sz = 0.05;
      if (fLandscape) { 
	x1 = 0.99*p->GetUxmin();
	x2 = 0.80*x1;
	y1 = .5*(p->GetUymax()+p->GetUymin());
	y2 = y1;
	sz = 0.034;
      }
      // Info("", "Arrow at (x1,y1)=%f,%f (x2,y2)=%f,%f", x1, y1, x2, y2);
      TArrow* a = new TArrow(x1, y1, x2, y2, sz, "|>");
      // (fLandscape ? "<|" : "|>"));
      a->SetFillColor(kGray+1);
      a->SetLineColor(kGray+1);
      a->Draw();
    }
    p->Modified();
    p->Update();
    p->cd();

    if (e) {
      e->SetMarkerColor(kGray);
      e->SetLineColor(kGray);
      e->SetTextColor(kGray);
    }
    gStyle->SetOptTitle(1);
  }

  //____________________________________________________________________
  void FixStack(THStack* stack, const TString& title, 
		const TString& extra, Int_t marker)
  {
    if (!stack) return;
    stack->SetTitle(title);
    TIter next(stack->GetHists());
    TH1*  h = 0;
    while ((h = static_cast<TH1*>(next())))  {
      h->SetMarkerStyle(marker);
      TString tit(h->GetTitle());
      tit.ReplaceAll("cache", "");
      tit.Append(extra);
      h->SetTitle(tit);
    }
  }
  void AddLegendEntry(TLegend* l, 
		      const TH1* h, 
		      const TString& title)
  {
    if (!h) return;

    TLegendEntry* e = l->AddEntry("dummy", title.Data(), "pl");
    e->SetMarkerStyle(h->GetMarkerStyle());
    e->SetMarkerColor(kGray);
    e->SetLineColor(kGray);
    e->SetTextColor(kGray);
  }
		      

  //____________________________________________________________________
  void DrawSteps()
  {
    // MakeChapter(can, "Steps");

    THStack* esds    = GetStack(GetCollection(fResults, "fmdSharingFilter"), 
				"sumsESD", "summedESD",false);
    THStack* deltas  = GetStack(GetCollection(fResults, "fmdSharingFilter"), 
				"sums", "summed",false);
    THStack* nchs    = GetStack(GetCollection(fResults, 
					      "fmdDensityCalculator"), 
				"sums", "inclDensity",false);
    THStack* prims   = GetStack(GetCollection(fResults, "fmdCorrector"), 
				"sums", "primaryDensity",false);
    THStack* rings   = GetStack(GetCollection(fResults, "ringResults"), 
				"all",0, false);
    THStack* mcRings = GetStack(GetCollection(fResults, "mcRingResults", false),
				"all","dndeta_eta", false);
    TH1*     dndeta  = GetH1(fResults, "dNdeta", false);
    if (dndeta) dndeta->SetMarkerColor(kBlack);
    if (!(esds || deltas || nchs || prims || rings)) return;

    FixStack(esds,   "#sum_{s} #Delta/#Delta_{mip}", "",     20);
    FixStack(deltas, "#sum_{c} #Delta/#Delta_{mip}", "",     21);
    FixStack(nchs,   "#sum_{b} N_{ch,incl}", 	     "",     22);
    FixStack(prims,  "#sum_{b} N_{ch,primary}",      "",     23);
    FixStack(rings,  "dN/d#eta per ring",            "",     33);
    FixStack(mcRings,"dN/d#eta per ring (MC)",       "(MC)", 34);

    THStack* all = new THStack;
    AddToAll(all, mcRings);
    AddToAll(all, esds);
    AddToAll(all, deltas);
    AddToAll(all, nchs);
    AddToAll(all, prims);
    AddToAll(all, rings);

    TH1* res = 0;
    if (dndeta) {
      res = static_cast<TH1*>(dndeta->Clone("dNdeta"));
      res->SetTitle("dN/d#eta");
      res->SetMarkerColor(kGray);
      res->SetLineColor(kGray);
      res->SetDirectory(0);
      all->Add(res);
    }

    TLegend* l = new TLegend(.35, .2, .55, .9);
    l->SetFillColor(kWhite);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    TLegendEntry* e = 0;

    THStack* stacks[] = { mcRings, 
			  esds, 
			  deltas, 
			  nchs, 
			  prims, 
			  rings };
    
    Int_t nHist = 0;
    for (Int_t i = 0; i < 6; i++) {
      if (!stacks[i]) continue;
      TH1* h = static_cast<TH1*>(stacks[i]->GetHists()->At(0));
      AddLegendEntry(l, h, stacks[i]->GetTitle());
      nHist++;
    }
    if (res) {
      AddLegendEntry(l, res, res->GetTitle());
      nHist++;
    }
    
    TObject* objs[] = { stacks[0], 
			stacks[1], 
			stacks[2], 
			stacks[3], 
			stacks[4], 
			stacks[5], 
			dndeta };
    const char* titles[] = { /* 1 */ "MC",  
			     /* 2 */ "ESD input",
			     /* 3 */ "After merging", 
			     /* 4 */ "After particle counting", 
			     /* 5 */ "After corrections", 
			     /* 6 */ "After normalization", 
			     /* 7 */ "After combining" };
    Int_t nY = nHist > 6 ? 4 : 3;
    Int_t nX = 2;
    if (fLandscape) {
      Int_t tmp = nX;
      nX        = nY;
      nY        = tmp;
    }
    fBody->Divide(nX, nY, 0, 0);
    
    Int_t step = 0;
    for (Int_t i = 0; i < 7; i++) { 
      TObject* obj = objs[i];
      if (!obj) continue;

      step++;
      Int_t padNo = step;
      if (!fLandscape) {
	switch (step) { 
	case 1: padNo = 1; break; 
	case 2: padNo = 3; break; 
	case 3: padNo = 5; break; 
	case 4: padNo = (mcRings ? 7 : 2); break; 
	case 5: padNo = (mcRings ? 2 : 4); break; 
	case 6: padNo = (mcRings ? 4 : 6); break; 
	case 7: padNo = (mcRings ? 6 : 8); break; 
    }
      }
      //Printf("Drawing step %d in sub-pad %d (%s)",step,padNo,obj->GetTitle());
      DrawStep(step, all, obj, l, titles[i], fBody, padNo, nX);
    }

    if (!esds && !mcRings && deltas) { 
      fBody->cd(6);
      TLegend* ll = new TLegend(0.01, 0.11, 0.99, 0.99);
      // ll->SetNDC();
      ll->SetFillColor(kWhite);
      ll->SetFillStyle(0);
      ll->SetBorderSize(0);

      TIter next(deltas->GetHists());
      TH1*  hh = 0;
      while ((hh = static_cast<TH1*>(next()))) {
	e = ll->AddEntry("dummy", hh->GetTitle(), "pl");
	e->SetMarkerColor(hh->GetMarkerColor());
	e->SetMarkerStyle(hh->GetMarkerStyle());
	e->SetLineColor(kBlack);
      }
      ll->Draw();
    }
    // Printf("Done drawing steps");
    PrintCanvas("Steps");
  }


  //____________________________________________________________________
  void DrawResults()
  {
    // MakeChapter(can, "Results");

    fBody->Divide(2,1);

    TCollection* c = GetCollection(fResults, "ringResults");
    if (!c) return;
  
    THStack* mcRings = GetStack(GetCollection(fResults, "mcRingResults", false),
				"all", "dndeta_eta", false);

    TH1* dndeta_phi = GetH1(fResults, "dNdeta");
    TH1* dndeta_eta = GetH1(fResults, "dNdeta_");
    dndeta_phi->SetTitle("1/N_{ev}dN_{ch}/d#eta (#varphi norm)");
    dndeta_eta->SetTitle("1/N_{ev}dN_{ch}/d#eta (#eta norm)");
    dndeta_eta->SetMarkerSize(0.7);

    THStack* allPhi = new THStack("phiAcc", "#varphi Acceptance");
    THStack* allEta = new THStack("etaCov", "#eta Coverage");
    const char** pring   = GetRingNames(false);
    
    while ((*pring)) { 
      TCollection* cc     = GetCollection(c, *pring);
      TH1*         etaCov = GetH1(cc, "etaCov");
      TH1*         phiAcc = GetH1(cc, "phiAcc");
      TH1*         dndeta = GetH1(cc, "dndeta_phi");
      Int_t        color  = kBlack;
      if (dndeta)  color  = dndeta->GetMarkerColor();
      if (etaCov) { 
	etaCov->SetTitle(*pring);
	etaCov->SetFillColor(color);
	etaCov->SetLineColor(color);
	allEta->Add(etaCov);
      }
      if (phiAcc) { 
	phiAcc->SetFillColor(color);
	phiAcc->SetLineColor(color);
	allPhi->Add(phiAcc);
      }
      pring++;
    }
    Double_t savX = fParVal->GetX();
    Double_t savY = fParVal->GetY();
    fParVal->SetX(.3);
    fParVal->SetY(.2);
    TVirtualPad* p = fBody->cd(1);
    p->Divide(1,2,0,0);
    DrawInPad(p, 1, GetStack(c, "all"), "nostack", mcRings ? 0 : kLegend,
	      "Individual ring results");
    DrawInPad(p, 1, mcRings, "nostack same", kLegend|kSilent);
    DrawInPad(p, 2, allEta, "nostack hist", kLegend,
	      "#phi acceptance and #eta coverage per ring");
    DrawInPad(p, 2, allPhi, "nostack hist same", 0x0);

    p = fBody->cd(2);
    p->Divide(1,2,0,0);
    DrawInPad(p, 1, dndeta_phi, "", 0x0, 
	      "1/#it{N}_{ev} d#it{N}_{ch}/d#it{#eta}");
    DrawInPad(p, 1, dndeta_eta, "Same", kLegend);
    DrawInPad(p, 2, GetH1(fResults, "norm"), "", 0x0, 
	      "Total #phi acceptance and #eta coverage");
    DrawInPad(p, 2, GetH1(fResults, "phi"), "same", kLegend);
    // DrawInPad(fBody, 4, GetH1(fSums,    "d2Ndetadphi"), "colz");

    // fBody->cd(1);
    // TLatex* l = new TLatex(.5, .2, "Ring results");
    // l->SetNDC();
    // l->SetTextAlign(21);
    // l->Draw();

    // fBody->cd(2);
    // l->DrawLatex(.5, .2, "1/N_{ev}dN_{ch}/d#eta");

    // fBody->cd(3);
    // l->DrawLatex(.5, .2, "1/N_{ev}dN_{ch}/d#eta (#vta norm.)");
    
    fParVal->SetX(savX);
    fParVal->SetY(savY);
    PrintCanvas("Results");
  }

  //____________________________________________________________________
  void DrawCentralResults()
  {
    // MakeChapter(can, "Results");
    Info("DrawCentralResults", "Drawing central results");

    fBody->Divide(1,2,0,0);

    TH1* dndeta_ = GetH1(fResults, "dNdeta_");
    TH1* dndeta  = GetH1(fResults, "dNdeta");
    THStack* stack = new THStack("dndetas", 
				 "d#it{N}_{ch}/d#it{#eta} - central");
    stack->Add(dndeta_);
    stack->Add(dndeta);
    
    DrawInPad(fBody, 1, stack, "nostack");
    TH1* h = stack->GetHistogram();
    if (h) {
      h->SetXTitle("#it{#eta}");
      h->SetYTitle("#frac{d#it{N}_{ch}}{d#it{#eta}}");
    }
    fBody->cd(1);
    TLegend* l = new TLegend(.3, .05, .7, .4);
    l->SetFillColor(0);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    l->AddEntry(dndeta_, "Normalized to coverage",        "lp");
    l->AddEntry(dndeta,  "Normalized to #phi acceptance", "lp");
    l->Draw();

    DrawInPad(fBody, 2, GetH1(fResults, "norm"));
    DrawInPad(fBody, 2, GetH1(fResults, "phi"), "same", kLegend);

    PrintCanvas("Central Results");

  }
  void DrawBoth(TFile* file)
  {
    Info("DrawBoth", "Drawing central & forward results");
    TCollection* central = GetCollection(file, "CentralResults");
    TCollection* forward = GetCollection(file, "ForwardResults");
    
    if (!central || !forward) {
      Warning("DrawBoth", "central %p or forward %p results not found", 
	      central, forward);
      return;
    }

    TH1* f1 = GetH1(forward, "dNdeta_");
    TH1* c1 = GetH1(central, "dNdeta_");
    TH1* f2 = GetH1(forward, "dNdeta");
    TH1* c2 = GetH1(central, "dNdeta");
    if (!f1 || !c1 || !f2 || !c2) return; 
    f1->SetLineColor(kBlack);
    f2->SetLineColor(kBlack);
    c1->SetLineColor(kBlack);
    c2->SetLineColor(kBlack);
    f1->SetMarkerColor(f2->GetMarkerColor());
    f1->SetMarkerStyle(24);
    c1->SetMarkerStyle(24);
    c2->SetMarkerStyle(20);
    c2->SetMarkerColor(c1->GetMarkerColor());
    THStack* s = new THStack("dndetas", "d#it{N}_{ch}/d#it{#eta}");
    s->Add(f1);
    s->Add(c1);
    s->Add(f2);
    s->Add(c2);

    fBody->Divide(1, 2, 0, 0);
    DrawInPad(fBody, 1, s, "nostack");
    s->GetHistogram()->SetXTitle("#it{#eta}");
    s->GetHistogram()->SetYTitle("#frac{d#it{N}_{ch}}{d#it{#eta}}");
    
    fBody->cd(1);
    TLegend* l = new TLegend(.4, .05, .8, .4);
    l->SetFillColor(0);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    TLegendEntry* entry = l->AddEntry("dummy", "Forward", "f");
    entry->SetFillColor(f1->GetMarkerColor());
    entry->SetLineColor(f1->GetMarkerColor());
    entry->SetFillStyle(1001);
    entry->SetLineWidth(0);
    entry = l->AddEntry("dummy", "Central", "f");
    entry->SetFillColor(c1->GetMarkerColor());
    entry->SetLineColor(c1->GetMarkerColor());
    entry->SetLineWidth(0);
    entry->SetFillStyle(1001);
    entry = l->AddEntry("dummy", "Normalized to coverage", "lp");
    entry->SetMarkerStyle(f1->GetMarkerStyle());
    entry = l->AddEntry("dummy", "Normalized to #phi acceptance", "lp");
    entry->SetMarkerStyle(f2->GetMarkerStyle());
    l->Draw();

    TH1* f3 = GetH1(forward, "norm");
    TH1* c3 = GetH1(central, "norm");
    TH1* f4 = GetH1(forward, "phi");
    TH1* c4 = GetH1(central, "phi");
    f3->SetFillColor(f1->GetMarkerColor());
    f4->SetFillColor(f1->GetMarkerColor());
    c3->SetFillColor(c1->GetMarkerColor());
    c4->SetFillColor(c1->GetMarkerColor());
    f3->SetLineColor(f1->GetMarkerColor());
    f4->SetLineColor(f1->GetMarkerColor());
    c3->SetLineColor(c1->GetMarkerColor());
    c4->SetLineColor(c1->GetMarkerColor());
    
    THStack* a = new THStack("norms", "Normalizations");
    a->Add(f3);
    a->Add(c3);
    a->Add(f4);
    a->Add(c4);
    
    a->SetMaximum(a->GetMaximum("nostack")*1.2);
    DrawInPad(fBody, 2, a, "nostack");
    a->GetHistogram()->SetXTitle("#it{#eta}");
    a->GetHistogram()->SetYTitle("Normalization (coverage or acceptance)");
    
    fBody->cd(2);
    l = new TLegend(.2, .94, .9, .99);
    l->SetFillColor(0);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    l->SetNColumns(2);
    // entry = l->AddEntry("dummy", "Forward", "f");
    // entry->SetFillColor(f1->GetMarkerColor());
    // entry->SetLineColor(f1->GetMarkerColor());
    // entry->SetFillStyle(1001);
    // entry->SetLineWidth(0);
    // entry = l->AddEntry("dummy", "Central", "f");
    // entry->SetFillColor(c1->GetMarkerColor());
    // entry->SetLineColor(c1->GetMarkerColor());
    // entry->SetLineWidth(0);
    // entry->SetFillStyle(1001);
    entry = l->AddEntry("dummy", "#eta Coverage", "f");
    entry->SetFillStyle(f3->GetFillStyle());
    entry->SetFillColor(kBlack);
    entry = l->AddEntry("dummy", "#phi Acceptance", "f");
    entry->SetFillStyle(f4->GetFillStyle());
    entry->SetFillColor(kBlack);
    l->Draw();

    PrintCanvas("Both results");
  }
  TCollection* fSums;
  TCollection* fResults;
};

// #endif
 SummaryAODDrawer.C:1
 SummaryAODDrawer.C:2
 SummaryAODDrawer.C:3
 SummaryAODDrawer.C:4
 SummaryAODDrawer.C:5
 SummaryAODDrawer.C:6
 SummaryAODDrawer.C:7
 SummaryAODDrawer.C:8
 SummaryAODDrawer.C:9
 SummaryAODDrawer.C:10
 SummaryAODDrawer.C:11
 SummaryAODDrawer.C:12
 SummaryAODDrawer.C:13
 SummaryAODDrawer.C:14
 SummaryAODDrawer.C:15
 SummaryAODDrawer.C:16
 SummaryAODDrawer.C:17
 SummaryAODDrawer.C:18
 SummaryAODDrawer.C:19
 SummaryAODDrawer.C:20
 SummaryAODDrawer.C:21
 SummaryAODDrawer.C:22
 SummaryAODDrawer.C:23
 SummaryAODDrawer.C:24
 SummaryAODDrawer.C:25
 SummaryAODDrawer.C:26
 SummaryAODDrawer.C:27
 SummaryAODDrawer.C:28
 SummaryAODDrawer.C:29
 SummaryAODDrawer.C:30
 SummaryAODDrawer.C:31
 SummaryAODDrawer.C:32
 SummaryAODDrawer.C:33
 SummaryAODDrawer.C:34
 SummaryAODDrawer.C:35
 SummaryAODDrawer.C:36
 SummaryAODDrawer.C:37
 SummaryAODDrawer.C:38
 SummaryAODDrawer.C:39
 SummaryAODDrawer.C:40
 SummaryAODDrawer.C:41
 SummaryAODDrawer.C:42
 SummaryAODDrawer.C:43
 SummaryAODDrawer.C:44
 SummaryAODDrawer.C:45
 SummaryAODDrawer.C:46
 SummaryAODDrawer.C:47
 SummaryAODDrawer.C:48
 SummaryAODDrawer.C:49
 SummaryAODDrawer.C:50
 SummaryAODDrawer.C:51
 SummaryAODDrawer.C:52
 SummaryAODDrawer.C:53
 SummaryAODDrawer.C:54
 SummaryAODDrawer.C:55
 SummaryAODDrawer.C:56
 SummaryAODDrawer.C:57
 SummaryAODDrawer.C:58
 SummaryAODDrawer.C:59
 SummaryAODDrawer.C:60
 SummaryAODDrawer.C:61
 SummaryAODDrawer.C:62
 SummaryAODDrawer.C:63
 SummaryAODDrawer.C:64
 SummaryAODDrawer.C:65
 SummaryAODDrawer.C:66
 SummaryAODDrawer.C:67
 SummaryAODDrawer.C:68
 SummaryAODDrawer.C:69
 SummaryAODDrawer.C:70
 SummaryAODDrawer.C:71
 SummaryAODDrawer.C:72
 SummaryAODDrawer.C:73
 SummaryAODDrawer.C:74
 SummaryAODDrawer.C:75
 SummaryAODDrawer.C:76
 SummaryAODDrawer.C:77
 SummaryAODDrawer.C:78
 SummaryAODDrawer.C:79
 SummaryAODDrawer.C:80
 SummaryAODDrawer.C:81
 SummaryAODDrawer.C:82
 SummaryAODDrawer.C:83
 SummaryAODDrawer.C:84
 SummaryAODDrawer.C:85
 SummaryAODDrawer.C:86
 SummaryAODDrawer.C:87
 SummaryAODDrawer.C:88
 SummaryAODDrawer.C:89
 SummaryAODDrawer.C:90
 SummaryAODDrawer.C:91
 SummaryAODDrawer.C:92
 SummaryAODDrawer.C:93
 SummaryAODDrawer.C:94
 SummaryAODDrawer.C:95
 SummaryAODDrawer.C:96
 SummaryAODDrawer.C:97
 SummaryAODDrawer.C:98
 SummaryAODDrawer.C:99
 SummaryAODDrawer.C:100
 SummaryAODDrawer.C:101
 SummaryAODDrawer.C:102
 SummaryAODDrawer.C:103
 SummaryAODDrawer.C:104
 SummaryAODDrawer.C:105
 SummaryAODDrawer.C:106
 SummaryAODDrawer.C:107
 SummaryAODDrawer.C:108
 SummaryAODDrawer.C:109
 SummaryAODDrawer.C:110
 SummaryAODDrawer.C:111
 SummaryAODDrawer.C:112
 SummaryAODDrawer.C:113
 SummaryAODDrawer.C:114
 SummaryAODDrawer.C:115
 SummaryAODDrawer.C:116
 SummaryAODDrawer.C:117
 SummaryAODDrawer.C:118
 SummaryAODDrawer.C:119
 SummaryAODDrawer.C:120
 SummaryAODDrawer.C:121
 SummaryAODDrawer.C:122
 SummaryAODDrawer.C:123
 SummaryAODDrawer.C:124
 SummaryAODDrawer.C:125
 SummaryAODDrawer.C:126
 SummaryAODDrawer.C:127
 SummaryAODDrawer.C:128
 SummaryAODDrawer.C:129
 SummaryAODDrawer.C:130
 SummaryAODDrawer.C:131
 SummaryAODDrawer.C:132
 SummaryAODDrawer.C:133
 SummaryAODDrawer.C:134
 SummaryAODDrawer.C:135
 SummaryAODDrawer.C:136
 SummaryAODDrawer.C:137
 SummaryAODDrawer.C:138
 SummaryAODDrawer.C:139
 SummaryAODDrawer.C:140
 SummaryAODDrawer.C:141
 SummaryAODDrawer.C:142
 SummaryAODDrawer.C:143
 SummaryAODDrawer.C:144
 SummaryAODDrawer.C:145
 SummaryAODDrawer.C:146
 SummaryAODDrawer.C:147
 SummaryAODDrawer.C:148
 SummaryAODDrawer.C:149
 SummaryAODDrawer.C:150
 SummaryAODDrawer.C:151
 SummaryAODDrawer.C:152
 SummaryAODDrawer.C:153
 SummaryAODDrawer.C:154
 SummaryAODDrawer.C:155
 SummaryAODDrawer.C:156
 SummaryAODDrawer.C:157
 SummaryAODDrawer.C:158
 SummaryAODDrawer.C:159
 SummaryAODDrawer.C:160
 SummaryAODDrawer.C:161
 SummaryAODDrawer.C:162
 SummaryAODDrawer.C:163
 SummaryAODDrawer.C:164
 SummaryAODDrawer.C:165
 SummaryAODDrawer.C:166
 SummaryAODDrawer.C:167
 SummaryAODDrawer.C:168
 SummaryAODDrawer.C:169
 SummaryAODDrawer.C:170
 SummaryAODDrawer.C:171
 SummaryAODDrawer.C:172
 SummaryAODDrawer.C:173
 SummaryAODDrawer.C:174
 SummaryAODDrawer.C:175
 SummaryAODDrawer.C:176
 SummaryAODDrawer.C:177
 SummaryAODDrawer.C:178
 SummaryAODDrawer.C:179
 SummaryAODDrawer.C:180
 SummaryAODDrawer.C:181
 SummaryAODDrawer.C:182
 SummaryAODDrawer.C:183
 SummaryAODDrawer.C:184
 SummaryAODDrawer.C:185
 SummaryAODDrawer.C:186
 SummaryAODDrawer.C:187
 SummaryAODDrawer.C:188
 SummaryAODDrawer.C:189
 SummaryAODDrawer.C:190
 SummaryAODDrawer.C:191
 SummaryAODDrawer.C:192
 SummaryAODDrawer.C:193
 SummaryAODDrawer.C:194
 SummaryAODDrawer.C:195
 SummaryAODDrawer.C:196
 SummaryAODDrawer.C:197
 SummaryAODDrawer.C:198
 SummaryAODDrawer.C:199
 SummaryAODDrawer.C:200
 SummaryAODDrawer.C:201
 SummaryAODDrawer.C:202
 SummaryAODDrawer.C:203
 SummaryAODDrawer.C:204
 SummaryAODDrawer.C:205
 SummaryAODDrawer.C:206
 SummaryAODDrawer.C:207
 SummaryAODDrawer.C:208
 SummaryAODDrawer.C:209
 SummaryAODDrawer.C:210
 SummaryAODDrawer.C:211
 SummaryAODDrawer.C:212
 SummaryAODDrawer.C:213
 SummaryAODDrawer.C:214
 SummaryAODDrawer.C:215
 SummaryAODDrawer.C:216
 SummaryAODDrawer.C:217
 SummaryAODDrawer.C:218
 SummaryAODDrawer.C:219
 SummaryAODDrawer.C:220
 SummaryAODDrawer.C:221
 SummaryAODDrawer.C:222
 SummaryAODDrawer.C:223
 SummaryAODDrawer.C:224
 SummaryAODDrawer.C:225
 SummaryAODDrawer.C:226
 SummaryAODDrawer.C:227
 SummaryAODDrawer.C:228
 SummaryAODDrawer.C:229
 SummaryAODDrawer.C:230
 SummaryAODDrawer.C:231
 SummaryAODDrawer.C:232
 SummaryAODDrawer.C:233
 SummaryAODDrawer.C:234
 SummaryAODDrawer.C:235
 SummaryAODDrawer.C:236
 SummaryAODDrawer.C:237
 SummaryAODDrawer.C:238
 SummaryAODDrawer.C:239
 SummaryAODDrawer.C:240
 SummaryAODDrawer.C:241
 SummaryAODDrawer.C:242
 SummaryAODDrawer.C:243
 SummaryAODDrawer.C:244
 SummaryAODDrawer.C:245
 SummaryAODDrawer.C:246
 SummaryAODDrawer.C:247
 SummaryAODDrawer.C:248
 SummaryAODDrawer.C:249
 SummaryAODDrawer.C:250
 SummaryAODDrawer.C:251
 SummaryAODDrawer.C:252
 SummaryAODDrawer.C:253
 SummaryAODDrawer.C:254
 SummaryAODDrawer.C:255
 SummaryAODDrawer.C:256
 SummaryAODDrawer.C:257
 SummaryAODDrawer.C:258
 SummaryAODDrawer.C:259
 SummaryAODDrawer.C:260
 SummaryAODDrawer.C:261
 SummaryAODDrawer.C:262
 SummaryAODDrawer.C:263
 SummaryAODDrawer.C:264
 SummaryAODDrawer.C:265
 SummaryAODDrawer.C:266
 SummaryAODDrawer.C:267
 SummaryAODDrawer.C:268
 SummaryAODDrawer.C:269
 SummaryAODDrawer.C:270
 SummaryAODDrawer.C:271
 SummaryAODDrawer.C:272
 SummaryAODDrawer.C:273
 SummaryAODDrawer.C:274
 SummaryAODDrawer.C:275
 SummaryAODDrawer.C:276
 SummaryAODDrawer.C:277
 SummaryAODDrawer.C:278
 SummaryAODDrawer.C:279
 SummaryAODDrawer.C:280
 SummaryAODDrawer.C:281
 SummaryAODDrawer.C:282
 SummaryAODDrawer.C:283
 SummaryAODDrawer.C:284
 SummaryAODDrawer.C:285
 SummaryAODDrawer.C:286
 SummaryAODDrawer.C:287
 SummaryAODDrawer.C:288
 SummaryAODDrawer.C:289
 SummaryAODDrawer.C:290
 SummaryAODDrawer.C:291
 SummaryAODDrawer.C:292
 SummaryAODDrawer.C:293
 SummaryAODDrawer.C:294
 SummaryAODDrawer.C:295
 SummaryAODDrawer.C:296
 SummaryAODDrawer.C:297
 SummaryAODDrawer.C:298
 SummaryAODDrawer.C:299
 SummaryAODDrawer.C:300
 SummaryAODDrawer.C:301
 SummaryAODDrawer.C:302
 SummaryAODDrawer.C:303
 SummaryAODDrawer.C:304
 SummaryAODDrawer.C:305
 SummaryAODDrawer.C:306
 SummaryAODDrawer.C:307
 SummaryAODDrawer.C:308
 SummaryAODDrawer.C:309
 SummaryAODDrawer.C:310
 SummaryAODDrawer.C:311
 SummaryAODDrawer.C:312
 SummaryAODDrawer.C:313
 SummaryAODDrawer.C:314
 SummaryAODDrawer.C:315
 SummaryAODDrawer.C:316
 SummaryAODDrawer.C:317
 SummaryAODDrawer.C:318
 SummaryAODDrawer.C:319
 SummaryAODDrawer.C:320
 SummaryAODDrawer.C:321
 SummaryAODDrawer.C:322
 SummaryAODDrawer.C:323
 SummaryAODDrawer.C:324
 SummaryAODDrawer.C:325
 SummaryAODDrawer.C:326
 SummaryAODDrawer.C:327
 SummaryAODDrawer.C:328
 SummaryAODDrawer.C:329
 SummaryAODDrawer.C:330
 SummaryAODDrawer.C:331
 SummaryAODDrawer.C:332
 SummaryAODDrawer.C:333
 SummaryAODDrawer.C:334
 SummaryAODDrawer.C:335
 SummaryAODDrawer.C:336
 SummaryAODDrawer.C:337
 SummaryAODDrawer.C:338
 SummaryAODDrawer.C:339
 SummaryAODDrawer.C:340
 SummaryAODDrawer.C:341
 SummaryAODDrawer.C:342
 SummaryAODDrawer.C:343
 SummaryAODDrawer.C:344
 SummaryAODDrawer.C:345
 SummaryAODDrawer.C:346
 SummaryAODDrawer.C:347
 SummaryAODDrawer.C:348
 SummaryAODDrawer.C:349
 SummaryAODDrawer.C:350
 SummaryAODDrawer.C:351
 SummaryAODDrawer.C:352
 SummaryAODDrawer.C:353
 SummaryAODDrawer.C:354
 SummaryAODDrawer.C:355
 SummaryAODDrawer.C:356
 SummaryAODDrawer.C:357
 SummaryAODDrawer.C:358
 SummaryAODDrawer.C:359
 SummaryAODDrawer.C:360
 SummaryAODDrawer.C:361
 SummaryAODDrawer.C:362
 SummaryAODDrawer.C:363
 SummaryAODDrawer.C:364
 SummaryAODDrawer.C:365
 SummaryAODDrawer.C:366
 SummaryAODDrawer.C:367
 SummaryAODDrawer.C:368
 SummaryAODDrawer.C:369
 SummaryAODDrawer.C:370
 SummaryAODDrawer.C:371
 SummaryAODDrawer.C:372
 SummaryAODDrawer.C:373
 SummaryAODDrawer.C:374
 SummaryAODDrawer.C:375
 SummaryAODDrawer.C:376
 SummaryAODDrawer.C:377
 SummaryAODDrawer.C:378
 SummaryAODDrawer.C:379
 SummaryAODDrawer.C:380
 SummaryAODDrawer.C:381
 SummaryAODDrawer.C:382
 SummaryAODDrawer.C:383
 SummaryAODDrawer.C:384
 SummaryAODDrawer.C:385
 SummaryAODDrawer.C:386
 SummaryAODDrawer.C:387
 SummaryAODDrawer.C:388
 SummaryAODDrawer.C:389
 SummaryAODDrawer.C:390
 SummaryAODDrawer.C:391
 SummaryAODDrawer.C:392
 SummaryAODDrawer.C:393
 SummaryAODDrawer.C:394
 SummaryAODDrawer.C:395
 SummaryAODDrawer.C:396
 SummaryAODDrawer.C:397
 SummaryAODDrawer.C:398
 SummaryAODDrawer.C:399
 SummaryAODDrawer.C:400
 SummaryAODDrawer.C:401
 SummaryAODDrawer.C:402
 SummaryAODDrawer.C:403
 SummaryAODDrawer.C:404
 SummaryAODDrawer.C:405
 SummaryAODDrawer.C:406
 SummaryAODDrawer.C:407
 SummaryAODDrawer.C:408
 SummaryAODDrawer.C:409
 SummaryAODDrawer.C:410
 SummaryAODDrawer.C:411
 SummaryAODDrawer.C:412
 SummaryAODDrawer.C:413
 SummaryAODDrawer.C:414
 SummaryAODDrawer.C:415
 SummaryAODDrawer.C:416
 SummaryAODDrawer.C:417
 SummaryAODDrawer.C:418
 SummaryAODDrawer.C:419
 SummaryAODDrawer.C:420
 SummaryAODDrawer.C:421
 SummaryAODDrawer.C:422
 SummaryAODDrawer.C:423
 SummaryAODDrawer.C:424
 SummaryAODDrawer.C:425
 SummaryAODDrawer.C:426
 SummaryAODDrawer.C:427
 SummaryAODDrawer.C:428
 SummaryAODDrawer.C:429
 SummaryAODDrawer.C:430
 SummaryAODDrawer.C:431
 SummaryAODDrawer.C:432
 SummaryAODDrawer.C:433
 SummaryAODDrawer.C:434
 SummaryAODDrawer.C:435
 SummaryAODDrawer.C:436
 SummaryAODDrawer.C:437
 SummaryAODDrawer.C:438
 SummaryAODDrawer.C:439
 SummaryAODDrawer.C:440
 SummaryAODDrawer.C:441
 SummaryAODDrawer.C:442
 SummaryAODDrawer.C:443
 SummaryAODDrawer.C:444
 SummaryAODDrawer.C:445
 SummaryAODDrawer.C:446
 SummaryAODDrawer.C:447
 SummaryAODDrawer.C:448
 SummaryAODDrawer.C:449
 SummaryAODDrawer.C:450
 SummaryAODDrawer.C:451
 SummaryAODDrawer.C:452
 SummaryAODDrawer.C:453
 SummaryAODDrawer.C:454
 SummaryAODDrawer.C:455
 SummaryAODDrawer.C:456
 SummaryAODDrawer.C:457
 SummaryAODDrawer.C:458
 SummaryAODDrawer.C:459
 SummaryAODDrawer.C:460
 SummaryAODDrawer.C:461
 SummaryAODDrawer.C:462
 SummaryAODDrawer.C:463
 SummaryAODDrawer.C:464
 SummaryAODDrawer.C:465
 SummaryAODDrawer.C:466
 SummaryAODDrawer.C:467
 SummaryAODDrawer.C:468
 SummaryAODDrawer.C:469
 SummaryAODDrawer.C:470
 SummaryAODDrawer.C:471
 SummaryAODDrawer.C:472
 SummaryAODDrawer.C:473
 SummaryAODDrawer.C:474
 SummaryAODDrawer.C:475
 SummaryAODDrawer.C:476
 SummaryAODDrawer.C:477
 SummaryAODDrawer.C:478
 SummaryAODDrawer.C:479
 SummaryAODDrawer.C:480
 SummaryAODDrawer.C:481
 SummaryAODDrawer.C:482
 SummaryAODDrawer.C:483
 SummaryAODDrawer.C:484
 SummaryAODDrawer.C:485
 SummaryAODDrawer.C:486
 SummaryAODDrawer.C:487
 SummaryAODDrawer.C:488
 SummaryAODDrawer.C:489
 SummaryAODDrawer.C:490
 SummaryAODDrawer.C:491
 SummaryAODDrawer.C:492
 SummaryAODDrawer.C:493
 SummaryAODDrawer.C:494
 SummaryAODDrawer.C:495
 SummaryAODDrawer.C:496
 SummaryAODDrawer.C:497
 SummaryAODDrawer.C:498
 SummaryAODDrawer.C:499
 SummaryAODDrawer.C:500
 SummaryAODDrawer.C:501
 SummaryAODDrawer.C:502
 SummaryAODDrawer.C:503
 SummaryAODDrawer.C:504
 SummaryAODDrawer.C:505
 SummaryAODDrawer.C:506
 SummaryAODDrawer.C:507
 SummaryAODDrawer.C:508
 SummaryAODDrawer.C:509
 SummaryAODDrawer.C:510
 SummaryAODDrawer.C:511
 SummaryAODDrawer.C:512
 SummaryAODDrawer.C:513
 SummaryAODDrawer.C:514
 SummaryAODDrawer.C:515
 SummaryAODDrawer.C:516
 SummaryAODDrawer.C:517
 SummaryAODDrawer.C:518
 SummaryAODDrawer.C:519
 SummaryAODDrawer.C:520
 SummaryAODDrawer.C:521
 SummaryAODDrawer.C:522
 SummaryAODDrawer.C:523
 SummaryAODDrawer.C:524
 SummaryAODDrawer.C:525
 SummaryAODDrawer.C:526
 SummaryAODDrawer.C:527
 SummaryAODDrawer.C:528
 SummaryAODDrawer.C:529
 SummaryAODDrawer.C:530
 SummaryAODDrawer.C:531
 SummaryAODDrawer.C:532
 SummaryAODDrawer.C:533
 SummaryAODDrawer.C:534
 SummaryAODDrawer.C:535
 SummaryAODDrawer.C:536
 SummaryAODDrawer.C:537
 SummaryAODDrawer.C:538
 SummaryAODDrawer.C:539
 SummaryAODDrawer.C:540
 SummaryAODDrawer.C:541
 SummaryAODDrawer.C:542
 SummaryAODDrawer.C:543
 SummaryAODDrawer.C:544
 SummaryAODDrawer.C:545
 SummaryAODDrawer.C:546
 SummaryAODDrawer.C:547
 SummaryAODDrawer.C:548
 SummaryAODDrawer.C:549
 SummaryAODDrawer.C:550
 SummaryAODDrawer.C:551
 SummaryAODDrawer.C:552
 SummaryAODDrawer.C:553
 SummaryAODDrawer.C:554
 SummaryAODDrawer.C:555
 SummaryAODDrawer.C:556
 SummaryAODDrawer.C:557
 SummaryAODDrawer.C:558
 SummaryAODDrawer.C:559
 SummaryAODDrawer.C:560
 SummaryAODDrawer.C:561
 SummaryAODDrawer.C:562
 SummaryAODDrawer.C:563
 SummaryAODDrawer.C:564
 SummaryAODDrawer.C:565
 SummaryAODDrawer.C:566
 SummaryAODDrawer.C:567
 SummaryAODDrawer.C:568
 SummaryAODDrawer.C:569
 SummaryAODDrawer.C:570
 SummaryAODDrawer.C:571
 SummaryAODDrawer.C:572
 SummaryAODDrawer.C:573
 SummaryAODDrawer.C:574
 SummaryAODDrawer.C:575
 SummaryAODDrawer.C:576
 SummaryAODDrawer.C:577
 SummaryAODDrawer.C:578
 SummaryAODDrawer.C:579
 SummaryAODDrawer.C:580
 SummaryAODDrawer.C:581
 SummaryAODDrawer.C:582
 SummaryAODDrawer.C:583
 SummaryAODDrawer.C:584
 SummaryAODDrawer.C:585
 SummaryAODDrawer.C:586
 SummaryAODDrawer.C:587
 SummaryAODDrawer.C:588
 SummaryAODDrawer.C:589
 SummaryAODDrawer.C:590
 SummaryAODDrawer.C:591
 SummaryAODDrawer.C:592
 SummaryAODDrawer.C:593
 SummaryAODDrawer.C:594
 SummaryAODDrawer.C:595
 SummaryAODDrawer.C:596
 SummaryAODDrawer.C:597
 SummaryAODDrawer.C:598
 SummaryAODDrawer.C:599
 SummaryAODDrawer.C:600
 SummaryAODDrawer.C:601
 SummaryAODDrawer.C:602
 SummaryAODDrawer.C:603
 SummaryAODDrawer.C:604
 SummaryAODDrawer.C:605
 SummaryAODDrawer.C:606
 SummaryAODDrawer.C:607
 SummaryAODDrawer.C:608
 SummaryAODDrawer.C:609
 SummaryAODDrawer.C:610
 SummaryAODDrawer.C:611
 SummaryAODDrawer.C:612
 SummaryAODDrawer.C:613
 SummaryAODDrawer.C:614
 SummaryAODDrawer.C:615
 SummaryAODDrawer.C:616
 SummaryAODDrawer.C:617
 SummaryAODDrawer.C:618
 SummaryAODDrawer.C:619
 SummaryAODDrawer.C:620
 SummaryAODDrawer.C:621
 SummaryAODDrawer.C:622
 SummaryAODDrawer.C:623
 SummaryAODDrawer.C:624
 SummaryAODDrawer.C:625
 SummaryAODDrawer.C:626
 SummaryAODDrawer.C:627
 SummaryAODDrawer.C:628
 SummaryAODDrawer.C:629
 SummaryAODDrawer.C:630
 SummaryAODDrawer.C:631
 SummaryAODDrawer.C:632
 SummaryAODDrawer.C:633
 SummaryAODDrawer.C:634
 SummaryAODDrawer.C:635
 SummaryAODDrawer.C:636
 SummaryAODDrawer.C:637
 SummaryAODDrawer.C:638
 SummaryAODDrawer.C:639
 SummaryAODDrawer.C:640
 SummaryAODDrawer.C:641
 SummaryAODDrawer.C:642
 SummaryAODDrawer.C:643
 SummaryAODDrawer.C:644
 SummaryAODDrawer.C:645
 SummaryAODDrawer.C:646
 SummaryAODDrawer.C:647
 SummaryAODDrawer.C:648
 SummaryAODDrawer.C:649
 SummaryAODDrawer.C:650
 SummaryAODDrawer.C:651
 SummaryAODDrawer.C:652
 SummaryAODDrawer.C:653
 SummaryAODDrawer.C:654
 SummaryAODDrawer.C:655
 SummaryAODDrawer.C:656
 SummaryAODDrawer.C:657
 SummaryAODDrawer.C:658
 SummaryAODDrawer.C:659
 SummaryAODDrawer.C:660
 SummaryAODDrawer.C:661
 SummaryAODDrawer.C:662
 SummaryAODDrawer.C:663
 SummaryAODDrawer.C:664
 SummaryAODDrawer.C:665
 SummaryAODDrawer.C:666
 SummaryAODDrawer.C:667
 SummaryAODDrawer.C:668
 SummaryAODDrawer.C:669
 SummaryAODDrawer.C:670
 SummaryAODDrawer.C:671
 SummaryAODDrawer.C:672
 SummaryAODDrawer.C:673
 SummaryAODDrawer.C:674
 SummaryAODDrawer.C:675
 SummaryAODDrawer.C:676
 SummaryAODDrawer.C:677
 SummaryAODDrawer.C:678
 SummaryAODDrawer.C:679
 SummaryAODDrawer.C:680
 SummaryAODDrawer.C:681
 SummaryAODDrawer.C:682
 SummaryAODDrawer.C:683
 SummaryAODDrawer.C:684
 SummaryAODDrawer.C:685
 SummaryAODDrawer.C:686
 SummaryAODDrawer.C:687
 SummaryAODDrawer.C:688
 SummaryAODDrawer.C:689
 SummaryAODDrawer.C:690
 SummaryAODDrawer.C:691
 SummaryAODDrawer.C:692
 SummaryAODDrawer.C:693
 SummaryAODDrawer.C:694
 SummaryAODDrawer.C:695
 SummaryAODDrawer.C:696
 SummaryAODDrawer.C:697
 SummaryAODDrawer.C:698
 SummaryAODDrawer.C:699
 SummaryAODDrawer.C:700
 SummaryAODDrawer.C:701
 SummaryAODDrawer.C:702
 SummaryAODDrawer.C:703
 SummaryAODDrawer.C:704
 SummaryAODDrawer.C:705
 SummaryAODDrawer.C:706
 SummaryAODDrawer.C:707
 SummaryAODDrawer.C:708
 SummaryAODDrawer.C:709
 SummaryAODDrawer.C:710
 SummaryAODDrawer.C:711
 SummaryAODDrawer.C:712
 SummaryAODDrawer.C:713
 SummaryAODDrawer.C:714
 SummaryAODDrawer.C:715
 SummaryAODDrawer.C:716
 SummaryAODDrawer.C:717
 SummaryAODDrawer.C:718
 SummaryAODDrawer.C:719
 SummaryAODDrawer.C:720
 SummaryAODDrawer.C:721
 SummaryAODDrawer.C:722
 SummaryAODDrawer.C:723
 SummaryAODDrawer.C:724
 SummaryAODDrawer.C:725
 SummaryAODDrawer.C:726
 SummaryAODDrawer.C:727
 SummaryAODDrawer.C:728
 SummaryAODDrawer.C:729
 SummaryAODDrawer.C:730
 SummaryAODDrawer.C:731
 SummaryAODDrawer.C:732
 SummaryAODDrawer.C:733
 SummaryAODDrawer.C:734
 SummaryAODDrawer.C:735
 SummaryAODDrawer.C:736
 SummaryAODDrawer.C:737
 SummaryAODDrawer.C:738
 SummaryAODDrawer.C:739
 SummaryAODDrawer.C:740
 SummaryAODDrawer.C:741
 SummaryAODDrawer.C:742
 SummaryAODDrawer.C:743
 SummaryAODDrawer.C:744
 SummaryAODDrawer.C:745
 SummaryAODDrawer.C:746
 SummaryAODDrawer.C:747
 SummaryAODDrawer.C:748
 SummaryAODDrawer.C:749
 SummaryAODDrawer.C:750
 SummaryAODDrawer.C:751
 SummaryAODDrawer.C:752
 SummaryAODDrawer.C:753
 SummaryAODDrawer.C:754
 SummaryAODDrawer.C:755
 SummaryAODDrawer.C:756
 SummaryAODDrawer.C:757
 SummaryAODDrawer.C:758
 SummaryAODDrawer.C:759
 SummaryAODDrawer.C:760
 SummaryAODDrawer.C:761
 SummaryAODDrawer.C:762
 SummaryAODDrawer.C:763
 SummaryAODDrawer.C:764
 SummaryAODDrawer.C:765
 SummaryAODDrawer.C:766
 SummaryAODDrawer.C:767
 SummaryAODDrawer.C:768
 SummaryAODDrawer.C:769
 SummaryAODDrawer.C:770
 SummaryAODDrawer.C:771
 SummaryAODDrawer.C:772
 SummaryAODDrawer.C:773
 SummaryAODDrawer.C:774
 SummaryAODDrawer.C:775
 SummaryAODDrawer.C:776
 SummaryAODDrawer.C:777
 SummaryAODDrawer.C:778
 SummaryAODDrawer.C:779
 SummaryAODDrawer.C:780
 SummaryAODDrawer.C:781
 SummaryAODDrawer.C:782
 SummaryAODDrawer.C:783
 SummaryAODDrawer.C:784
 SummaryAODDrawer.C:785
 SummaryAODDrawer.C:786
 SummaryAODDrawer.C:787
 SummaryAODDrawer.C:788
 SummaryAODDrawer.C:789
 SummaryAODDrawer.C:790
 SummaryAODDrawer.C:791
 SummaryAODDrawer.C:792
 SummaryAODDrawer.C:793
 SummaryAODDrawer.C:794
 SummaryAODDrawer.C:795
 SummaryAODDrawer.C:796
 SummaryAODDrawer.C:797
 SummaryAODDrawer.C:798
 SummaryAODDrawer.C:799
 SummaryAODDrawer.C:800
 SummaryAODDrawer.C:801
 SummaryAODDrawer.C:802
 SummaryAODDrawer.C:803
 SummaryAODDrawer.C:804
 SummaryAODDrawer.C:805
 SummaryAODDrawer.C:806
 SummaryAODDrawer.C:807
 SummaryAODDrawer.C:808
 SummaryAODDrawer.C:809
 SummaryAODDrawer.C:810
 SummaryAODDrawer.C:811
 SummaryAODDrawer.C:812
 SummaryAODDrawer.C:813
 SummaryAODDrawer.C:814
 SummaryAODDrawer.C:815
 SummaryAODDrawer.C:816
 SummaryAODDrawer.C:817
 SummaryAODDrawer.C:818
 SummaryAODDrawer.C:819
 SummaryAODDrawer.C:820
 SummaryAODDrawer.C:821
 SummaryAODDrawer.C:822
 SummaryAODDrawer.C:823
 SummaryAODDrawer.C:824
 SummaryAODDrawer.C:825
 SummaryAODDrawer.C:826
 SummaryAODDrawer.C:827
 SummaryAODDrawer.C:828
 SummaryAODDrawer.C:829
 SummaryAODDrawer.C:830
 SummaryAODDrawer.C:831
 SummaryAODDrawer.C:832
 SummaryAODDrawer.C:833
 SummaryAODDrawer.C:834
 SummaryAODDrawer.C:835
 SummaryAODDrawer.C:836
 SummaryAODDrawer.C:837
 SummaryAODDrawer.C:838
 SummaryAODDrawer.C:839
 SummaryAODDrawer.C:840
 SummaryAODDrawer.C:841
 SummaryAODDrawer.C:842
 SummaryAODDrawer.C:843
 SummaryAODDrawer.C:844
 SummaryAODDrawer.C:845
 SummaryAODDrawer.C:846
 SummaryAODDrawer.C:847
 SummaryAODDrawer.C:848
 SummaryAODDrawer.C:849
 SummaryAODDrawer.C:850
 SummaryAODDrawer.C:851
 SummaryAODDrawer.C:852
 SummaryAODDrawer.C:853
 SummaryAODDrawer.C:854
 SummaryAODDrawer.C:855
 SummaryAODDrawer.C:856
 SummaryAODDrawer.C:857
 SummaryAODDrawer.C:858
 SummaryAODDrawer.C:859
 SummaryAODDrawer.C:860
 SummaryAODDrawer.C:861
 SummaryAODDrawer.C:862
 SummaryAODDrawer.C:863
 SummaryAODDrawer.C:864
 SummaryAODDrawer.C:865
 SummaryAODDrawer.C:866
 SummaryAODDrawer.C:867
 SummaryAODDrawer.C:868
 SummaryAODDrawer.C:869
 SummaryAODDrawer.C:870
 SummaryAODDrawer.C:871
 SummaryAODDrawer.C:872
 SummaryAODDrawer.C:873
 SummaryAODDrawer.C:874
 SummaryAODDrawer.C:875
 SummaryAODDrawer.C:876
 SummaryAODDrawer.C:877
 SummaryAODDrawer.C:878
 SummaryAODDrawer.C:879
 SummaryAODDrawer.C:880
 SummaryAODDrawer.C:881
 SummaryAODDrawer.C:882
 SummaryAODDrawer.C:883
 SummaryAODDrawer.C:884
 SummaryAODDrawer.C:885
 SummaryAODDrawer.C:886
 SummaryAODDrawer.C:887
 SummaryAODDrawer.C:888
 SummaryAODDrawer.C:889
 SummaryAODDrawer.C:890
 SummaryAODDrawer.C:891
 SummaryAODDrawer.C:892
 SummaryAODDrawer.C:893
 SummaryAODDrawer.C:894
 SummaryAODDrawer.C:895
 SummaryAODDrawer.C:896
 SummaryAODDrawer.C:897
 SummaryAODDrawer.C:898
 SummaryAODDrawer.C:899
 SummaryAODDrawer.C:900
 SummaryAODDrawer.C:901
 SummaryAODDrawer.C:902
 SummaryAODDrawer.C:903
 SummaryAODDrawer.C:904
 SummaryAODDrawer.C:905
 SummaryAODDrawer.C:906
 SummaryAODDrawer.C:907
 SummaryAODDrawer.C:908
 SummaryAODDrawer.C:909
 SummaryAODDrawer.C:910
 SummaryAODDrawer.C:911
 SummaryAODDrawer.C:912
 SummaryAODDrawer.C:913
 SummaryAODDrawer.C:914
 SummaryAODDrawer.C:915
 SummaryAODDrawer.C:916
 SummaryAODDrawer.C:917
 SummaryAODDrawer.C:918
 SummaryAODDrawer.C:919
 SummaryAODDrawer.C:920
 SummaryAODDrawer.C:921
 SummaryAODDrawer.C:922
 SummaryAODDrawer.C:923
 SummaryAODDrawer.C:924
 SummaryAODDrawer.C:925
 SummaryAODDrawer.C:926
 SummaryAODDrawer.C:927
 SummaryAODDrawer.C:928
 SummaryAODDrawer.C:929
 SummaryAODDrawer.C:930
 SummaryAODDrawer.C:931
 SummaryAODDrawer.C:932
 SummaryAODDrawer.C:933
 SummaryAODDrawer.C:934
 SummaryAODDrawer.C:935
 SummaryAODDrawer.C:936
 SummaryAODDrawer.C:937
 SummaryAODDrawer.C:938
 SummaryAODDrawer.C:939
 SummaryAODDrawer.C:940
 SummaryAODDrawer.C:941
 SummaryAODDrawer.C:942
 SummaryAODDrawer.C:943
 SummaryAODDrawer.C:944
 SummaryAODDrawer.C:945
 SummaryAODDrawer.C:946
 SummaryAODDrawer.C:947
 SummaryAODDrawer.C:948
 SummaryAODDrawer.C:949
 SummaryAODDrawer.C:950
 SummaryAODDrawer.C:951
 SummaryAODDrawer.C:952
 SummaryAODDrawer.C:953
 SummaryAODDrawer.C:954
 SummaryAODDrawer.C:955
 SummaryAODDrawer.C:956
 SummaryAODDrawer.C:957
 SummaryAODDrawer.C:958
 SummaryAODDrawer.C:959
 SummaryAODDrawer.C:960
 SummaryAODDrawer.C:961
 SummaryAODDrawer.C:962
 SummaryAODDrawer.C:963
 SummaryAODDrawer.C:964
 SummaryAODDrawer.C:965
 SummaryAODDrawer.C:966
 SummaryAODDrawer.C:967
 SummaryAODDrawer.C:968
 SummaryAODDrawer.C:969
 SummaryAODDrawer.C:970
 SummaryAODDrawer.C:971
 SummaryAODDrawer.C:972
 SummaryAODDrawer.C:973
 SummaryAODDrawer.C:974
 SummaryAODDrawer.C:975
 SummaryAODDrawer.C:976
 SummaryAODDrawer.C:977
 SummaryAODDrawer.C:978
 SummaryAODDrawer.C:979
 SummaryAODDrawer.C:980
 SummaryAODDrawer.C:981
 SummaryAODDrawer.C:982
 SummaryAODDrawer.C:983
 SummaryAODDrawer.C:984
 SummaryAODDrawer.C:985
 SummaryAODDrawer.C:986
 SummaryAODDrawer.C:987
 SummaryAODDrawer.C:988
 SummaryAODDrawer.C:989
 SummaryAODDrawer.C:990
 SummaryAODDrawer.C:991
 SummaryAODDrawer.C:992
 SummaryAODDrawer.C:993
 SummaryAODDrawer.C:994
 SummaryAODDrawer.C:995
 SummaryAODDrawer.C:996
 SummaryAODDrawer.C:997
 SummaryAODDrawer.C:998
 SummaryAODDrawer.C:999
 SummaryAODDrawer.C:1000
 SummaryAODDrawer.C:1001
 SummaryAODDrawer.C:1002
 SummaryAODDrawer.C:1003
 SummaryAODDrawer.C:1004
 SummaryAODDrawer.C:1005
 SummaryAODDrawer.C:1006
 SummaryAODDrawer.C:1007
 SummaryAODDrawer.C:1008
 SummaryAODDrawer.C:1009
 SummaryAODDrawer.C:1010
 SummaryAODDrawer.C:1011
 SummaryAODDrawer.C:1012
 SummaryAODDrawer.C:1013
 SummaryAODDrawer.C:1014
 SummaryAODDrawer.C:1015
 SummaryAODDrawer.C:1016
 SummaryAODDrawer.C:1017
 SummaryAODDrawer.C:1018
 SummaryAODDrawer.C:1019
 SummaryAODDrawer.C:1020
 SummaryAODDrawer.C:1021
 SummaryAODDrawer.C:1022
 SummaryAODDrawer.C:1023
 SummaryAODDrawer.C:1024
 SummaryAODDrawer.C:1025
 SummaryAODDrawer.C:1026
 SummaryAODDrawer.C:1027
 SummaryAODDrawer.C:1028
 SummaryAODDrawer.C:1029
 SummaryAODDrawer.C:1030
 SummaryAODDrawer.C:1031
 SummaryAODDrawer.C:1032
 SummaryAODDrawer.C:1033
 SummaryAODDrawer.C:1034
 SummaryAODDrawer.C:1035
 SummaryAODDrawer.C:1036
 SummaryAODDrawer.C:1037
 SummaryAODDrawer.C:1038
 SummaryAODDrawer.C:1039
 SummaryAODDrawer.C:1040
 SummaryAODDrawer.C:1041
 SummaryAODDrawer.C:1042
 SummaryAODDrawer.C:1043
 SummaryAODDrawer.C:1044
 SummaryAODDrawer.C:1045
 SummaryAODDrawer.C:1046
 SummaryAODDrawer.C:1047
 SummaryAODDrawer.C:1048
 SummaryAODDrawer.C:1049
 SummaryAODDrawer.C:1050
 SummaryAODDrawer.C:1051
 SummaryAODDrawer.C:1052
 SummaryAODDrawer.C:1053
 SummaryAODDrawer.C:1054
 SummaryAODDrawer.C:1055
 SummaryAODDrawer.C:1056
 SummaryAODDrawer.C:1057
 SummaryAODDrawer.C:1058
 SummaryAODDrawer.C:1059
 SummaryAODDrawer.C:1060
 SummaryAODDrawer.C:1061
 SummaryAODDrawer.C:1062
 SummaryAODDrawer.C:1063
 SummaryAODDrawer.C:1064
 SummaryAODDrawer.C:1065
 SummaryAODDrawer.C:1066
 SummaryAODDrawer.C:1067
 SummaryAODDrawer.C:1068
 SummaryAODDrawer.C:1069
 SummaryAODDrawer.C:1070
 SummaryAODDrawer.C:1071
 SummaryAODDrawer.C:1072
 SummaryAODDrawer.C:1073
 SummaryAODDrawer.C:1074
 SummaryAODDrawer.C:1075
 SummaryAODDrawer.C:1076
 SummaryAODDrawer.C:1077
 SummaryAODDrawer.C:1078
 SummaryAODDrawer.C:1079
 SummaryAODDrawer.C:1080
 SummaryAODDrawer.C:1081
 SummaryAODDrawer.C:1082
 SummaryAODDrawer.C:1083
 SummaryAODDrawer.C:1084
 SummaryAODDrawer.C:1085
 SummaryAODDrawer.C:1086
 SummaryAODDrawer.C:1087
 SummaryAODDrawer.C:1088
 SummaryAODDrawer.C:1089
 SummaryAODDrawer.C:1090
 SummaryAODDrawer.C:1091
 SummaryAODDrawer.C:1092
 SummaryAODDrawer.C:1093
 SummaryAODDrawer.C:1094
 SummaryAODDrawer.C:1095
 SummaryAODDrawer.C:1096
 SummaryAODDrawer.C:1097
 SummaryAODDrawer.C:1098
 SummaryAODDrawer.C:1099
 SummaryAODDrawer.C:1100
 SummaryAODDrawer.C:1101
 SummaryAODDrawer.C:1102
 SummaryAODDrawer.C:1103
 SummaryAODDrawer.C:1104
 SummaryAODDrawer.C:1105
 SummaryAODDrawer.C:1106
 SummaryAODDrawer.C:1107
 SummaryAODDrawer.C:1108
 SummaryAODDrawer.C:1109
 SummaryAODDrawer.C:1110
 SummaryAODDrawer.C:1111
 SummaryAODDrawer.C:1112
 SummaryAODDrawer.C:1113
 SummaryAODDrawer.C:1114
 SummaryAODDrawer.C:1115
 SummaryAODDrawer.C:1116
 SummaryAODDrawer.C:1117
 SummaryAODDrawer.C:1118
 SummaryAODDrawer.C:1119
 SummaryAODDrawer.C:1120
 SummaryAODDrawer.C:1121
 SummaryAODDrawer.C:1122
 SummaryAODDrawer.C:1123
 SummaryAODDrawer.C:1124
 SummaryAODDrawer.C:1125
 SummaryAODDrawer.C:1126
 SummaryAODDrawer.C:1127
 SummaryAODDrawer.C:1128
 SummaryAODDrawer.C:1129
 SummaryAODDrawer.C:1130
 SummaryAODDrawer.C:1131
 SummaryAODDrawer.C:1132
 SummaryAODDrawer.C:1133
 SummaryAODDrawer.C:1134
 SummaryAODDrawer.C:1135
 SummaryAODDrawer.C:1136
 SummaryAODDrawer.C:1137
 SummaryAODDrawer.C:1138
 SummaryAODDrawer.C:1139
 SummaryAODDrawer.C:1140
 SummaryAODDrawer.C:1141
 SummaryAODDrawer.C:1142
 SummaryAODDrawer.C:1143
 SummaryAODDrawer.C:1144
 SummaryAODDrawer.C:1145
 SummaryAODDrawer.C:1146
 SummaryAODDrawer.C:1147
 SummaryAODDrawer.C:1148
 SummaryAODDrawer.C:1149
 SummaryAODDrawer.C:1150
 SummaryAODDrawer.C:1151
 SummaryAODDrawer.C:1152
 SummaryAODDrawer.C:1153
 SummaryAODDrawer.C:1154
 SummaryAODDrawer.C:1155
 SummaryAODDrawer.C:1156
 SummaryAODDrawer.C:1157
 SummaryAODDrawer.C:1158
 SummaryAODDrawer.C:1159
 SummaryAODDrawer.C:1160
 SummaryAODDrawer.C:1161
 SummaryAODDrawer.C:1162
 SummaryAODDrawer.C:1163
 SummaryAODDrawer.C:1164
 SummaryAODDrawer.C:1165
 SummaryAODDrawer.C:1166
 SummaryAODDrawer.C:1167
 SummaryAODDrawer.C:1168
 SummaryAODDrawer.C:1169
 SummaryAODDrawer.C:1170
 SummaryAODDrawer.C:1171
 SummaryAODDrawer.C:1172
 SummaryAODDrawer.C:1173
 SummaryAODDrawer.C:1174
 SummaryAODDrawer.C:1175
 SummaryAODDrawer.C:1176
 SummaryAODDrawer.C:1177
 SummaryAODDrawer.C:1178
 SummaryAODDrawer.C:1179
 SummaryAODDrawer.C:1180
 SummaryAODDrawer.C:1181
 SummaryAODDrawer.C:1182
 SummaryAODDrawer.C:1183
 SummaryAODDrawer.C:1184
 SummaryAODDrawer.C:1185
 SummaryAODDrawer.C:1186
 SummaryAODDrawer.C:1187
 SummaryAODDrawer.C:1188
 SummaryAODDrawer.C:1189
 SummaryAODDrawer.C:1190
 SummaryAODDrawer.C:1191
 SummaryAODDrawer.C:1192
 SummaryAODDrawer.C:1193
 SummaryAODDrawer.C:1194
 SummaryAODDrawer.C:1195
 SummaryAODDrawer.C:1196
 SummaryAODDrawer.C:1197
 SummaryAODDrawer.C:1198
 SummaryAODDrawer.C:1199
 SummaryAODDrawer.C:1200
 SummaryAODDrawer.C:1201
 SummaryAODDrawer.C:1202
 SummaryAODDrawer.C:1203
 SummaryAODDrawer.C:1204
 SummaryAODDrawer.C:1205
 SummaryAODDrawer.C:1206
 SummaryAODDrawer.C:1207
 SummaryAODDrawer.C:1208
 SummaryAODDrawer.C:1209
 SummaryAODDrawer.C:1210
 SummaryAODDrawer.C:1211
 SummaryAODDrawer.C:1212
 SummaryAODDrawer.C:1213
 SummaryAODDrawer.C:1214
 SummaryAODDrawer.C:1215
 SummaryAODDrawer.C:1216
 SummaryAODDrawer.C:1217
 SummaryAODDrawer.C:1218
 SummaryAODDrawer.C:1219
 SummaryAODDrawer.C:1220
 SummaryAODDrawer.C:1221
 SummaryAODDrawer.C:1222
 SummaryAODDrawer.C:1223
 SummaryAODDrawer.C:1224
 SummaryAODDrawer.C:1225
 SummaryAODDrawer.C:1226
 SummaryAODDrawer.C:1227
 SummaryAODDrawer.C:1228
 SummaryAODDrawer.C:1229
 SummaryAODDrawer.C:1230
 SummaryAODDrawer.C:1231
 SummaryAODDrawer.C:1232
 SummaryAODDrawer.C:1233
 SummaryAODDrawer.C:1234
 SummaryAODDrawer.C:1235
 SummaryAODDrawer.C:1236
 SummaryAODDrawer.C:1237
 SummaryAODDrawer.C:1238
 SummaryAODDrawer.C:1239
 SummaryAODDrawer.C:1240
 SummaryAODDrawer.C:1241
 SummaryAODDrawer.C:1242
 SummaryAODDrawer.C:1243
 SummaryAODDrawer.C:1244
 SummaryAODDrawer.C:1245
 SummaryAODDrawer.C:1246
 SummaryAODDrawer.C:1247
 SummaryAODDrawer.C:1248
 SummaryAODDrawer.C:1249
 SummaryAODDrawer.C:1250
 SummaryAODDrawer.C:1251
 SummaryAODDrawer.C:1252
 SummaryAODDrawer.C:1253
 SummaryAODDrawer.C:1254
 SummaryAODDrawer.C:1255
 SummaryAODDrawer.C:1256
 SummaryAODDrawer.C:1257
 SummaryAODDrawer.C:1258
 SummaryAODDrawer.C:1259
 SummaryAODDrawer.C:1260
 SummaryAODDrawer.C:1261
 SummaryAODDrawer.C:1262
 SummaryAODDrawer.C:1263
 SummaryAODDrawer.C:1264
 SummaryAODDrawer.C:1265
 SummaryAODDrawer.C:1266
 SummaryAODDrawer.C:1267
 SummaryAODDrawer.C:1268
 SummaryAODDrawer.C:1269
 SummaryAODDrawer.C:1270
 SummaryAODDrawer.C:1271
 SummaryAODDrawer.C:1272
 SummaryAODDrawer.C:1273
 SummaryAODDrawer.C:1274
 SummaryAODDrawer.C:1275
 SummaryAODDrawer.C:1276
 SummaryAODDrawer.C:1277
 SummaryAODDrawer.C:1278
 SummaryAODDrawer.C:1279
 SummaryAODDrawer.C:1280
 SummaryAODDrawer.C:1281
 SummaryAODDrawer.C:1282
 SummaryAODDrawer.C:1283
 SummaryAODDrawer.C:1284
 SummaryAODDrawer.C:1285
 SummaryAODDrawer.C:1286
 SummaryAODDrawer.C:1287
 SummaryAODDrawer.C:1288
 SummaryAODDrawer.C:1289
 SummaryAODDrawer.C:1290
 SummaryAODDrawer.C:1291
 SummaryAODDrawer.C:1292
 SummaryAODDrawer.C:1293
 SummaryAODDrawer.C:1294
 SummaryAODDrawer.C:1295
 SummaryAODDrawer.C:1296
 SummaryAODDrawer.C:1297
 SummaryAODDrawer.C:1298
 SummaryAODDrawer.C:1299
 SummaryAODDrawer.C:1300
 SummaryAODDrawer.C:1301
 SummaryAODDrawer.C:1302
 SummaryAODDrawer.C:1303
 SummaryAODDrawer.C:1304
 SummaryAODDrawer.C:1305
 SummaryAODDrawer.C:1306
 SummaryAODDrawer.C:1307
 SummaryAODDrawer.C:1308
 SummaryAODDrawer.C:1309
 SummaryAODDrawer.C:1310
 SummaryAODDrawer.C:1311
 SummaryAODDrawer.C:1312
 SummaryAODDrawer.C:1313
 SummaryAODDrawer.C:1314
 SummaryAODDrawer.C:1315
 SummaryAODDrawer.C:1316
 SummaryAODDrawer.C:1317
 SummaryAODDrawer.C:1318
 SummaryAODDrawer.C:1319
 SummaryAODDrawer.C:1320
 SummaryAODDrawer.C:1321
 SummaryAODDrawer.C:1322
 SummaryAODDrawer.C:1323
 SummaryAODDrawer.C:1324
 SummaryAODDrawer.C:1325
 SummaryAODDrawer.C:1326
 SummaryAODDrawer.C:1327
 SummaryAODDrawer.C:1328
 SummaryAODDrawer.C:1329
 SummaryAODDrawer.C:1330
 SummaryAODDrawer.C:1331
 SummaryAODDrawer.C:1332
 SummaryAODDrawer.C:1333
 SummaryAODDrawer.C:1334
 SummaryAODDrawer.C:1335
 SummaryAODDrawer.C:1336
 SummaryAODDrawer.C:1337
 SummaryAODDrawer.C:1338
 SummaryAODDrawer.C:1339
 SummaryAODDrawer.C:1340
 SummaryAODDrawer.C:1341
 SummaryAODDrawer.C:1342
 SummaryAODDrawer.C:1343
 SummaryAODDrawer.C:1344
 SummaryAODDrawer.C:1345
 SummaryAODDrawer.C:1346
 SummaryAODDrawer.C:1347
 SummaryAODDrawer.C:1348
 SummaryAODDrawer.C:1349
 SummaryAODDrawer.C:1350
 SummaryAODDrawer.C:1351
 SummaryAODDrawer.C:1352
 SummaryAODDrawer.C:1353
 SummaryAODDrawer.C:1354
 SummaryAODDrawer.C:1355
 SummaryAODDrawer.C:1356
 SummaryAODDrawer.C:1357
 SummaryAODDrawer.C:1358
 SummaryAODDrawer.C:1359
 SummaryAODDrawer.C:1360
 SummaryAODDrawer.C:1361
 SummaryAODDrawer.C:1362
 SummaryAODDrawer.C:1363
 SummaryAODDrawer.C:1364
 SummaryAODDrawer.C:1365
 SummaryAODDrawer.C:1366
 SummaryAODDrawer.C:1367
 SummaryAODDrawer.C:1368
 SummaryAODDrawer.C:1369
 SummaryAODDrawer.C:1370
 SummaryAODDrawer.C:1371
 SummaryAODDrawer.C:1372
 SummaryAODDrawer.C:1373
 SummaryAODDrawer.C:1374
 SummaryAODDrawer.C:1375
 SummaryAODDrawer.C:1376
 SummaryAODDrawer.C:1377
 SummaryAODDrawer.C:1378
 SummaryAODDrawer.C:1379
 SummaryAODDrawer.C:1380
 SummaryAODDrawer.C:1381
 SummaryAODDrawer.C:1382
 SummaryAODDrawer.C:1383
 SummaryAODDrawer.C:1384
 SummaryAODDrawer.C:1385
 SummaryAODDrawer.C:1386
 SummaryAODDrawer.C:1387
 SummaryAODDrawer.C:1388
 SummaryAODDrawer.C:1389
 SummaryAODDrawer.C:1390
 SummaryAODDrawer.C:1391
 SummaryAODDrawer.C:1392
 SummaryAODDrawer.C:1393
 SummaryAODDrawer.C:1394
 SummaryAODDrawer.C:1395
 SummaryAODDrawer.C:1396
 SummaryAODDrawer.C:1397
 SummaryAODDrawer.C:1398
 SummaryAODDrawer.C:1399
 SummaryAODDrawer.C:1400
 SummaryAODDrawer.C:1401
 SummaryAODDrawer.C:1402
 SummaryAODDrawer.C:1403
 SummaryAODDrawer.C:1404
 SummaryAODDrawer.C:1405
 SummaryAODDrawer.C:1406
 SummaryAODDrawer.C:1407
 SummaryAODDrawer.C:1408
 SummaryAODDrawer.C:1409
 SummaryAODDrawer.C:1410
 SummaryAODDrawer.C:1411
 SummaryAODDrawer.C:1412
 SummaryAODDrawer.C:1413
 SummaryAODDrawer.C:1414
 SummaryAODDrawer.C:1415
 SummaryAODDrawer.C:1416
 SummaryAODDrawer.C:1417
 SummaryAODDrawer.C:1418
 SummaryAODDrawer.C:1419
 SummaryAODDrawer.C:1420
 SummaryAODDrawer.C:1421
 SummaryAODDrawer.C:1422
 SummaryAODDrawer.C:1423
 SummaryAODDrawer.C:1424
 SummaryAODDrawer.C:1425
 SummaryAODDrawer.C:1426
 SummaryAODDrawer.C:1427
 SummaryAODDrawer.C:1428
 SummaryAODDrawer.C:1429
 SummaryAODDrawer.C:1430
 SummaryAODDrawer.C:1431
 SummaryAODDrawer.C:1432
 SummaryAODDrawer.C:1433
 SummaryAODDrawer.C:1434
 SummaryAODDrawer.C:1435
 SummaryAODDrawer.C:1436
 SummaryAODDrawer.C:1437
 SummaryAODDrawer.C:1438
 SummaryAODDrawer.C:1439
 SummaryAODDrawer.C:1440
 SummaryAODDrawer.C:1441
 SummaryAODDrawer.C:1442
 SummaryAODDrawer.C:1443
 SummaryAODDrawer.C:1444
 SummaryAODDrawer.C:1445
 SummaryAODDrawer.C:1446
 SummaryAODDrawer.C:1447
 SummaryAODDrawer.C:1448
 SummaryAODDrawer.C:1449
 SummaryAODDrawer.C:1450
 SummaryAODDrawer.C:1451
 SummaryAODDrawer.C:1452
 SummaryAODDrawer.C:1453
 SummaryAODDrawer.C:1454
 SummaryAODDrawer.C:1455
 SummaryAODDrawer.C:1456
 SummaryAODDrawer.C:1457
 SummaryAODDrawer.C:1458
 SummaryAODDrawer.C:1459
 SummaryAODDrawer.C:1460
 SummaryAODDrawer.C:1461
 SummaryAODDrawer.C:1462
 SummaryAODDrawer.C:1463
 SummaryAODDrawer.C:1464
 SummaryAODDrawer.C:1465
 SummaryAODDrawer.C:1466
 SummaryAODDrawer.C:1467
 SummaryAODDrawer.C:1468
 SummaryAODDrawer.C:1469
 SummaryAODDrawer.C:1470
 SummaryAODDrawer.C:1471
 SummaryAODDrawer.C:1472
 SummaryAODDrawer.C:1473
 SummaryAODDrawer.C:1474
 SummaryAODDrawer.C:1475
 SummaryAODDrawer.C:1476
 SummaryAODDrawer.C:1477
 SummaryAODDrawer.C:1478
 SummaryAODDrawer.C:1479
 SummaryAODDrawer.C:1480
 SummaryAODDrawer.C:1481
 SummaryAODDrawer.C:1482
 SummaryAODDrawer.C:1483
 SummaryAODDrawer.C:1484
 SummaryAODDrawer.C:1485
 SummaryAODDrawer.C:1486
 SummaryAODDrawer.C:1487
 SummaryAODDrawer.C:1488
 SummaryAODDrawer.C:1489
 SummaryAODDrawer.C:1490
 SummaryAODDrawer.C:1491
 SummaryAODDrawer.C:1492
 SummaryAODDrawer.C:1493
 SummaryAODDrawer.C:1494
 SummaryAODDrawer.C:1495
 SummaryAODDrawer.C:1496
 SummaryAODDrawer.C:1497
 SummaryAODDrawer.C:1498
 SummaryAODDrawer.C:1499
 SummaryAODDrawer.C:1500
 SummaryAODDrawer.C:1501
 SummaryAODDrawer.C:1502
 SummaryAODDrawer.C:1503
 SummaryAODDrawer.C:1504
 SummaryAODDrawer.C:1505
 SummaryAODDrawer.C:1506
 SummaryAODDrawer.C:1507
 SummaryAODDrawer.C:1508
 SummaryAODDrawer.C:1509
 SummaryAODDrawer.C:1510
 SummaryAODDrawer.C:1511
 SummaryAODDrawer.C:1512
 SummaryAODDrawer.C:1513
 SummaryAODDrawer.C:1514
 SummaryAODDrawer.C:1515
 SummaryAODDrawer.C:1516
 SummaryAODDrawer.C:1517
 SummaryAODDrawer.C:1518
 SummaryAODDrawer.C:1519
 SummaryAODDrawer.C:1520
 SummaryAODDrawer.C:1521
 SummaryAODDrawer.C:1522
 SummaryAODDrawer.C:1523
 SummaryAODDrawer.C:1524
 SummaryAODDrawer.C:1525
 SummaryAODDrawer.C:1526
 SummaryAODDrawer.C:1527
 SummaryAODDrawer.C:1528
 SummaryAODDrawer.C:1529
 SummaryAODDrawer.C:1530
 SummaryAODDrawer.C:1531
 SummaryAODDrawer.C:1532
 SummaryAODDrawer.C:1533
 SummaryAODDrawer.C:1534
 SummaryAODDrawer.C:1535
 SummaryAODDrawer.C:1536
 SummaryAODDrawer.C:1537
 SummaryAODDrawer.C:1538
 SummaryAODDrawer.C:1539
 SummaryAODDrawer.C:1540
 SummaryAODDrawer.C:1541
 SummaryAODDrawer.C:1542
 SummaryAODDrawer.C:1543
 SummaryAODDrawer.C:1544
 SummaryAODDrawer.C:1545
 SummaryAODDrawer.C:1546
 SummaryAODDrawer.C:1547
 SummaryAODDrawer.C:1548
 SummaryAODDrawer.C:1549
 SummaryAODDrawer.C:1550
 SummaryAODDrawer.C:1551
 SummaryAODDrawer.C:1552
 SummaryAODDrawer.C:1553
 SummaryAODDrawer.C:1554
 SummaryAODDrawer.C:1555
 SummaryAODDrawer.C:1556
 SummaryAODDrawer.C:1557
 SummaryAODDrawer.C:1558
 SummaryAODDrawer.C:1559
 SummaryAODDrawer.C:1560
 SummaryAODDrawer.C:1561
 SummaryAODDrawer.C:1562
 SummaryAODDrawer.C:1563
 SummaryAODDrawer.C:1564
 SummaryAODDrawer.C:1565
 SummaryAODDrawer.C:1566
 SummaryAODDrawer.C:1567
 SummaryAODDrawer.C:1568
 SummaryAODDrawer.C:1569
 SummaryAODDrawer.C:1570
 SummaryAODDrawer.C:1571
 SummaryAODDrawer.C:1572
 SummaryAODDrawer.C:1573
 SummaryAODDrawer.C:1574
 SummaryAODDrawer.C:1575
 SummaryAODDrawer.C:1576
 SummaryAODDrawer.C:1577
 SummaryAODDrawer.C:1578
 SummaryAODDrawer.C:1579
 SummaryAODDrawer.C:1580
 SummaryAODDrawer.C:1581
 SummaryAODDrawer.C:1582
 SummaryAODDrawer.C:1583
 SummaryAODDrawer.C:1584
 SummaryAODDrawer.C:1585
 SummaryAODDrawer.C:1586
 SummaryAODDrawer.C:1587
 SummaryAODDrawer.C:1588
 SummaryAODDrawer.C:1589
 SummaryAODDrawer.C:1590
 SummaryAODDrawer.C:1591
 SummaryAODDrawer.C:1592
 SummaryAODDrawer.C:1593
 SummaryAODDrawer.C:1594
 SummaryAODDrawer.C:1595
 SummaryAODDrawer.C:1596
 SummaryAODDrawer.C:1597
 SummaryAODDrawer.C:1598
 SummaryAODDrawer.C:1599
 SummaryAODDrawer.C:1600
 SummaryAODDrawer.C:1601
 SummaryAODDrawer.C:1602
 SummaryAODDrawer.C:1603
 SummaryAODDrawer.C:1604
 SummaryAODDrawer.C:1605
 SummaryAODDrawer.C:1606
 SummaryAODDrawer.C:1607
 SummaryAODDrawer.C:1608
 SummaryAODDrawer.C:1609
 SummaryAODDrawer.C:1610
 SummaryAODDrawer.C:1611
 SummaryAODDrawer.C:1612
 SummaryAODDrawer.C:1613
 SummaryAODDrawer.C:1614
 SummaryAODDrawer.C:1615
 SummaryAODDrawer.C:1616
 SummaryAODDrawer.C:1617
 SummaryAODDrawer.C:1618
 SummaryAODDrawer.C:1619
 SummaryAODDrawer.C:1620
 SummaryAODDrawer.C:1621
 SummaryAODDrawer.C:1622
 SummaryAODDrawer.C:1623
 SummaryAODDrawer.C:1624
 SummaryAODDrawer.C:1625
 SummaryAODDrawer.C:1626
 SummaryAODDrawer.C:1627
 SummaryAODDrawer.C:1628
 SummaryAODDrawer.C:1629
 SummaryAODDrawer.C:1630
 SummaryAODDrawer.C:1631
 SummaryAODDrawer.C:1632
 SummaryAODDrawer.C:1633
 SummaryAODDrawer.C:1634
 SummaryAODDrawer.C:1635
 SummaryAODDrawer.C:1636
 SummaryAODDrawer.C:1637
 SummaryAODDrawer.C:1638
 SummaryAODDrawer.C:1639
 SummaryAODDrawer.C:1640
 SummaryAODDrawer.C:1641
 SummaryAODDrawer.C:1642
 SummaryAODDrawer.C:1643
 SummaryAODDrawer.C:1644
 SummaryAODDrawer.C:1645
 SummaryAODDrawer.C:1646
 SummaryAODDrawer.C:1647
 SummaryAODDrawer.C:1648
 SummaryAODDrawer.C:1649
 SummaryAODDrawer.C:1650
 SummaryAODDrawer.C:1651
 SummaryAODDrawer.C:1652
 SummaryAODDrawer.C:1653
 SummaryAODDrawer.C:1654
 SummaryAODDrawer.C:1655
 SummaryAODDrawer.C:1656
 SummaryAODDrawer.C:1657
 SummaryAODDrawer.C:1658
 SummaryAODDrawer.C:1659
 SummaryAODDrawer.C:1660
 SummaryAODDrawer.C:1661
 SummaryAODDrawer.C:1662
 SummaryAODDrawer.C:1663
 SummaryAODDrawer.C:1664
 SummaryAODDrawer.C:1665
 SummaryAODDrawer.C:1666
 SummaryAODDrawer.C:1667
 SummaryAODDrawer.C:1668
 SummaryAODDrawer.C:1669
 SummaryAODDrawer.C:1670
 SummaryAODDrawer.C:1671
 SummaryAODDrawer.C:1672
 SummaryAODDrawer.C:1673
 SummaryAODDrawer.C:1674
 SummaryAODDrawer.C:1675
 SummaryAODDrawer.C:1676
 SummaryAODDrawer.C:1677
 SummaryAODDrawer.C:1678
 SummaryAODDrawer.C:1679
 SummaryAODDrawer.C:1680
 SummaryAODDrawer.C:1681
 SummaryAODDrawer.C:1682
 SummaryAODDrawer.C:1683
 SummaryAODDrawer.C:1684
 SummaryAODDrawer.C:1685
 SummaryAODDrawer.C:1686
 SummaryAODDrawer.C:1687
 SummaryAODDrawer.C:1688
 SummaryAODDrawer.C:1689
 SummaryAODDrawer.C:1690
 SummaryAODDrawer.C:1691
 SummaryAODDrawer.C:1692
 SummaryAODDrawer.C:1693
 SummaryAODDrawer.C:1694
 SummaryAODDrawer.C:1695
 SummaryAODDrawer.C:1696
 SummaryAODDrawer.C:1697
 SummaryAODDrawer.C:1698
 SummaryAODDrawer.C:1699
 SummaryAODDrawer.C:1700
 SummaryAODDrawer.C:1701
 SummaryAODDrawer.C:1702
 SummaryAODDrawer.C:1703
 SummaryAODDrawer.C:1704
 SummaryAODDrawer.C:1705
 SummaryAODDrawer.C:1706
 SummaryAODDrawer.C:1707
 SummaryAODDrawer.C:1708
 SummaryAODDrawer.C:1709
 SummaryAODDrawer.C:1710
 SummaryAODDrawer.C:1711
 SummaryAODDrawer.C:1712
 SummaryAODDrawer.C:1713
 SummaryAODDrawer.C:1714
 SummaryAODDrawer.C:1715
 SummaryAODDrawer.C:1716
 SummaryAODDrawer.C:1717
 SummaryAODDrawer.C:1718
 SummaryAODDrawer.C:1719
 SummaryAODDrawer.C:1720
 SummaryAODDrawer.C:1721
 SummaryAODDrawer.C:1722
 SummaryAODDrawer.C:1723
 SummaryAODDrawer.C:1724
 SummaryAODDrawer.C:1725
 SummaryAODDrawer.C:1726
 SummaryAODDrawer.C:1727
 SummaryAODDrawer.C:1728
 SummaryAODDrawer.C:1729
 SummaryAODDrawer.C:1730
 SummaryAODDrawer.C:1731
 SummaryAODDrawer.C:1732
 SummaryAODDrawer.C:1733