ROOT logo
#include "SummaryDrawer.C"
#include <TPaveText.h>
#include <TMultiGraph.h>

class SummarydNdetaDrawer : public SummaryDrawer
{
public:
  enum { 
    kForward   = 0x01,
    kCentral   = 0x02, 
    kSums      = 0x04, 
    kResults   = 0x08, 
    kMinBias   = 0x10, 
    kMC        = 0x80,
    kNormal    = 0x0F
  };
  SummarydNdetaDrawer() 
    : SummaryDrawer()
  {}
  const char* ColName(const char* prefix, bool results=false)
  {
    return Form("%sdNdeta%s", prefix, results ? "Results" : "Sums");
  }
  //____________________________________________________________________
  void Run(const char* fname="forward_dndeta.root", UShort_t flags=kNormal)
  {
    // --- Open the file -----------------------------------------------
    TString filename(fname);
    TFile* file = TFile::Open(filename.Data(), "READ");
    if (!file) { 
      Error("Run", "Failed to open \"%s\"", filename.Data());
      return;
    }
    // Options 
    Bool_t forward = flags & kForward;
    Bool_t central = flags & kCentral;
    Bool_t sums    = flags & kSums;
    Bool_t results = flags & kResults;
    Bool_t onlyMB  = flags & kMinBias;
    Bool_t mc      = flags & kMC;
    fPause         = flags & kPause;
    
    // --- Force MB for pp ---------------------------------------------
    UShort_t     sys = 0;
    TCollection* c   = GetCollection(file, ColName("Forward", false));
    GetParameter(c, "sys", sys); 
    if (sys == 1) {
      onlyMB = true;
      Info("Run", "Found sys==1 -> Forcing MB");
    }

    // --- Test of MC --------------------------------------------------
    TCollection* mcC = GetCollection(file, ColName("MCTruth"), false);
    if (mcC) { 
      TCollection* mcAll = GetCollection(mcC, "all");
      if (mcAll && GetObject(mcAll, "sum")) {
	Info("Run", "Found MC truth output");
	mc = true;
      }
    }
    // --- Make our canvas ---------------------------------------------
    TString pdfName(filename);
    pdfName.ReplaceAll(".root", ".pdf");
    CreateCanvas(pdfName, flags & kLandscape);

    // --- Make a Title page -------------------------------------------
    DrawTitlePage(file, mc, onlyMB);

    // --- Do each sub-algorithm ---------------------------------------
    THStack* rF = 0;
    if (forward && sums)    DrawSums(file, "Forward", onlyMB);
    if (forward && results) rF = DrawRes(file, "Forward", onlyMB);
    
    THStack* rC = 0;
    if (central && sums)    DrawSums(file, "Central", onlyMB);
    if (central && results) rC = DrawRes(file, "Central", onlyMB);

    THStack* rM = 0;
    if (mc && sums)    DrawSums(file, "MCTruth", onlyMB);
    if (mc && results) rM = DrawRes(file, "MCTruth", onlyMB);

    if (rC && rF && results) DrawBoth(rC, rF, rM, file, onlyMB);
  
    CloseCanvas();
  }

protected:
  //____________________________________________________________________
  TAxis* GetCentAxis(const TCollection* parent, Bool_t verbose=false)
  {
    TObject* cO = GetObject(parent, "centAxis", verbose);
    TAxis*   cA = 0;
    if (!cO) return 0;

    if (cO->IsA()->InheritsFrom(TAxis::Class())) 
      cA = static_cast<TAxis*>(cO);
    else if (cO->IsA()->InheritsFrom(TH1::Class())) {
      TH1*  cH = static_cast<TH1*>(cO);
      cA = cH->GetXaxis();
    }
    // if (cA) cA->Dump();
    if (!cA || !cA->GetXbins() || !cA->GetXbins()->GetArray() ||
	cA->GetXmin() > cA->GetXmax()) return 0;
    return cA;
  }
  //____________________________________________________________________
  TCollection* GetCentCollection(const TCollection* sums, 
				 const TString&     base, 
				 Int_t              cLow, 
				 Int_t              cHigh,
				 TString&           title)
  {
    TString folder; 
    title = TString::Format("%s %s: ", base.Data(), title.Data());
    if (cLow < 0 || cHigh < 0 || cLow >= cHigh) {
      folder = "all";
      title.Append("All selected events");
    }
    else {
      folder.Form("cent%03d_%03d", cLow, cHigh);
      title.Append(Form("%3d%% - %3d%%", cLow, cHigh));
    }
    
    return GetCollection(sums, folder);
    
  }
  //____________________________________________________________________
  void DrawTitlePage(TFile* file, Bool_t mc, Bool_t onlyMB)
  {
    TCollection* c   = GetCollection(file, ColName("Forward", true));

    fBody->cd();
    
    Double_t y = .9;
    TLatex* ltx = new TLatex(.5, y, 
			     "#frac{1}{#it{N}}#kern[.1]"
			     "{#frac{d#it{N_{ch}}}{d#it{#eta}}}");
    ltx->SetTextSize(0.07);
    ltx->SetTextFont(42);
    ltx->SetTextAlign(22);
    ltx->SetNDC();
    ltx->Draw();
    y -= .075;
    
    if (mc) {
      ltx = new TLatex(.5, y, "Simulation input");
      ltx->SetNDC();
      ltx->SetTextAlign(23);
      ltx->SetTextFont(42);
      ltx->SetTextSize(.03);
      ltx->Draw();
      y -= .035;
    }
    if (onlyMB) {
      ltx = new TLatex(.5, y, "No centrality");
      ltx->SetNDC();
      ltx->SetTextAlign(23);
      ltx->SetTextFont(42);
      ltx->SetTextSize(.03);
      ltx->Draw();
      y -= .035;
    }
    
    DrawResTitle(c, y, onlyMB);

    PrintCanvas("1/N dN/d#eta");
  }
  //____________________________________________________________________
  void DrawBoth(THStack* rC, THStack* rF, THStack* rM, 
		TFile* file, Bool_t onlyMB)
  {
    fBody->cd();
    Double_t y1 = fLandscape ? 0  : .3;
    Double_t x2 = fLandscape ? .7 : 1;
    Double_t x1 = fLandscape ? x2 : 0;
    Double_t y2 = fLandscape ? 1  : y1;
    TPad* p1 = new TPad("p1", "p1", 0,  y1, x2, 1,  0, 0);
    TPad* p2 = new TPad("p2", "p2", x1, 0,  1,  y2, 0, 0);

    fBody->cd();
    p1->Draw();
    p1->cd();

    TH1*  h  = 0;
    if (rM) { 
      TIter nextM(rM->GetHists());
      while ((h = static_cast<TH1*>(nextM()))) rC->Add(h);
    }

    TIter next(rF->GetHists());
    while ((h = static_cast<TH1*>(next()))) rC->Add(h);


    rC->Draw("nostack");

    TCollection* fS = GetCollection(file, ColName("Forward", false));
    UShort_t sys, sNN;
    ULong_t trigger;
    GetParameter(fS, "sNN",     sNN); 
    GetParameter(fS, "sys",     sys); 
    GetParameter(fS, "trigger", trigger); 
    TAxis*   centAxis = GetCentAxis(fS);
    UShort_t cLow     = centAxis && !onlyMB ? centAxis->GetXmin() : 0;
    UShort_t cHigh    = centAxis && !onlyMB ? centAxis->GetXmax() : 100;

    CompileScript("OtherData.C", "", "RefData", false);

    // If we have V0AND trigger, get NSD other data
    TMultiGraph* other = 0;
    if (!centAxis) {
      Int_t   oT = (trigger == 0x2000) ? 0x4 : trigger;
      TString oC = Form("RefData::GetData(%hu,%hu,%hu,%hu,%hu,0xF)", 
			sys, sNN, oT, cLow, cHigh);
      other = reinterpret_cast<TMultiGraph*>(gROOT->ProcessLine(oC));
    }
    else { 
      other = new TMultiGraph("other", "");
      Int_t nCent = centAxis->GetNbins();
      for (Int_t i = 1; i <= nCent; i++) { 
	TString oC = Form("RefData::GetData(%hu,%hu,%hu,%hu,%hu,0xF)", 
			  sys, sNN, 0, UShort_t(centAxis->GetBinLowEdge(i)),
			  UShort_t(centAxis->GetBinUpEdge(i)));
	TMultiGraph* oM = 
	  reinterpret_cast<TMultiGraph*>(gROOT->ProcessLine(oC));
	if (oM) other->Add(oM);
      }
    }
    if (other) {
      // p1->Clear();
      // other->Draw("ap");
      // Double_t oMax = other->GetHistogram()->GetMaximum();
      // Double_t rMax = rC->GetMaximum("nostack");
      // other->SetMaximum(1.2*TMath::Max(oMax, rMax));
      // rC->Draw("same nostack");
      TObject* g = 0;
      TIter    nextG(other->GetListOfGraphs());
      while ((g = nextG())) {
	// Printf("Drawing %s/%s", g->GetName(), g->GetTitle());
        g->DrawClone("same p");
      }
    }
    

    fBody->cd();
    p2->Draw();
    p2->cd();


    TLegend* l = new TLegend(0.01, 0.1, 0.99, 0.99, 
			     onlyMB || !centAxis ? "" : "Centralities");
    l->SetNColumns(fLandscape ? 1 : 2);
    l->SetFillStyle(0);
    l->SetBorderSize(0);
    CleanStack(rC, l, onlyMB ? 0 : centAxis);
    TString seen;
    if (other) { 
      TIter nextG(other->GetListOfGraphs());
      TObject* g = 0;
      while ((g = nextG())) {
	if (seen.Index(g->GetTitle()) != kNPOS) continue;
	seen.Append(Form("|%s", g->GetTitle()));
	TLegendEntry* e = l->AddEntry("dummy", g->GetTitle(), "p");
	TGraph* gg = static_cast<TGraph*>(g);
	e->SetMarkerStyle(gg->GetMarkerStyle());
	e->SetMarkerSize(gg->GetMarkerSize());
	e->SetMarkerColor(kBlack);
      }
    }
    l->Draw();

    PrintCanvas("Both");
  }
  //____________________________________________________________________
  void DrawSums(TDirectory* top, const TString& base, bool onlyMB)
  {
    TCollection* c = GetCollection(top, ColName(base));
    if (!c) return;
    
    TAxis* centAxis = (onlyMB ? 0 : GetCentAxis(c));
    if (centAxis && centAxis->GetNbins() < 1) centAxis = 0;

    Int_t    txtPad = 0;
    Double_t xSave  = fParVal->GetX();
    Double_t size   = 0.05;
    fParVal->SetX(.45);
    Double_t y = .8;
    
    if (!onlyMB && centAxis) {
      size = 0.03;
      fBody->Divide(1, 2);
      txtPad = 1;
    
      fBody->cd(1);
      for (Int_t i = 1; i <= centAxis->GetNbins(); i++) { 
	DrawParameter(y, (i == 1 ? "Centrality classes" : ""),
		      Form("%3d%% - %3d%%", 
			   Int_t(centAxis->GetBinLowEdge(i)), 
			   Int_t(centAxis->GetBinUpEdge(i))), size);
      }
    
      TH1* cent = GetH1(c, "cent");
      cent->SetFillColor(kRed+1);
      cent->SetFillStyle(3001);
      cent->SetXTitle("Centrality [%]");
      cent->SetYTitle("Events");
      
      DrawInPad(fBody, 2, cent);
    }
    fBody->cd(txtPad);
    
    UShort_t sys, sNN, scheme;
    ULong_t trigger;
    GetParameter(c, "sNN",     sNN); 
    GetParameter(c, "sys",     sys); 
    GetParameter(c, "scheme",  scheme); 
    GetParameter(c, "trigger", trigger); 

    TString schemeString;
    if (scheme == 0)   schemeString = "1/N_{accepted}";
    if (scheme & 0x1)  schemeString.Append("1/#epsilon_{V}1/#epsilon_{T}");
    if (scheme & 0x2)  schemeString.Append("Shape ");
    if (scheme & 0x4)  schemeString.Append("A+C-E ");
    if (scheme & 0x8)  schemeString.Append("#epsilon_{T,MC} ");
    if (scheme & 0x10) schemeString.Append("0-bin");

    TString trigString;   TriggerString(trigger, trigString);
    TString sysString;    SysString(sys, sysString);
    TString sNNString;    SNNString(sNN, sNNString);
    
    DrawParameter(y, "Collision system",     sysString,   size);
    DrawParameter(y, "#sqrt{s_{NN}}",        sNNString,   size);
    DrawParameter(y, "Normalization scheme", schemeString,size);
    DrawParameter(y, "Triggers",             trigString,  size);
    
    fParVal->SetX(xSave);

    PrintCanvas(Form("%s sums", base.Data()));

    Int_t cLow = centAxis  ?  centAxis->GetXmin() : 0;
    Int_t cHigh = centAxis ? -centAxis->GetXmax() : -100;
    DrawCentSum(c, base, cLow, cHigh);
    if (onlyMB || !centAxis) return;

    for (Int_t i = 1; i <= centAxis->GetNbins(); i++) 
      DrawCentSum(c, base, centAxis->GetBinLowEdge(i), 
		  centAxis->GetBinUpEdge(i));
  }
  //____________________________________________________________________
  void DrawCentSum(const TCollection* sums, const TString& base, 
		   Int_t cLow, Int_t cHigh)
  {
    // Info("DrawCentSum", "Drawing centrality sum [%d,%d] in %s (%s)",
    //      cLow, cHigh, sums->GetName(), base.Data());
    TString title("sums");
    TCollection* c = GetCentCollection(sums, base, cLow, cHigh, title);
    if (!c) return;
    
    TH2* bin  = GetH2(c, "sum");
    TH2* bin0 = GetH2(c, "sum0");
    TH1* type = GetH1(c, "events");
    TH1* trig = GetH1(c, "triggers");
    if (!bin0 || !bin || !trig || !type) return;

    type->SetFillStyle(3001);
    type->SetFillColor(kGreen+1);

    fBody->Divide(2, 2);

    DrawInPad(fBody, 1, trig, "HIST TEXT");
    DrawInPad(fBody, 2, type, "HIST TEXT");
    DrawInPad(fBody, 3, bin,  "colz");
    DrawInPad(fBody, 4, bin0, "colz");
    
    if (bin0->GetEntries() <= 0) {
      fBody->cd(4);
      TLatex* l = new TLatex(0.5, 0.5, "No 0-bin events");
      l->SetNDC();
      l->SetTextAlign(22);
      l->Draw();
    }
    PrintCanvas(title);
  }
  //____________________________________________________________________
  void DrawResTitle(TCollection* c, Double_t& y, Bool_t onlyMB)
  {
    Double_t xSave = fParVal->GetX();
    Double_t size  = 0.05;
    fParVal->SetX(.5);
    // Double_t y = .9;
    TAxis*   centAxis = GetCentAxis(c);
    if (!onlyMB && centAxis) {
      size = 0.03;
      for (Int_t i = 1; i <= centAxis->GetNbins(); i++) { 
	DrawParameter(y, (i == 1 ? "Centrality classes" : ""),
		      Form("%3d%% - %3d%%", 
			   Int_t(centAxis->GetBinLowEdge(i)), 
			   Int_t(centAxis->GetBinUpEdge(i))), size);
      }
    }
    TObject* oSNN = GetObject(c, "sNN");
    TString  tSNN; SNNString(oSNN->GetUniqueID(), tSNN);

    DrawParameter(y, "Collision system", GetObject(c, "sys")->GetTitle(), size);
    DrawParameter(y, "#sqrt{s_{NN}}",tSNN, size);
    DrawParameter(y, "Trigger",GetObject(c,"trigger")->GetTitle(), size);
    TObject* oscheme = GetObject(c,"scheme");
    TString  scheme  = oscheme ? oscheme->GetTitle() : "";
    if (scheme.IsNull()) scheme = "1/N_{accepted}";
    DrawParameter(y, "Normalization scheme", scheme, size);
    
    Double_t epsT, epsT0;
    GetParameter(c, "triggerEff",  epsT);
    GetParameter(c, "triggerEff0", epsT0);
    DrawParameter(y, "#epsilon_{T}", Form("%5.3f", epsT), size);
    DrawParameter(y, "#epsilon_{T,zero bin}", Form("%5.3f", epsT0), size);

    TObject*    options = GetObject(c, "options");
    TString     opts(options->GetTitle());
    TObjArray*  tokens = opts.Tokenize(",");
    TObjString* opt = 0;;
    TIter       oNext(tokens);
    Bool_t      first  = true;
    while ((opt = static_cast<TObjString*>(oNext()))) { 
      DrawParameter(y, (first ? "options" : ""), 
		    opt->String().Strip(TString::kBoth), size);
      first = false;
    }
    fParVal->SetX(xSave);      
  }

  //____________________________________________________________________
  THStack* DrawRes(TDirectory* top, const TString& base, Bool_t onlyMB)
  {
    // Info("DrawRes", "Drawing results for %s", base.Data());
    TCollection* c = GetCollection(top, ColName(base, true));
    if (!c) return 0;

    fBody->cd();
    Double_t y = .9;
    DrawResTitle(c, y, onlyMB);
    PrintCanvas(Form("%s results", base.Data()));

    TAxis*   centAxis = (onlyMB ? 0 : GetCentAxis(c));
    if (centAxis && centAxis->GetNbins() < 1) centAxis = 0;

    TLegend* l = new TLegend(0.1, 0.1, 0.9, 0.9, 
			     onlyMB || !centAxis? "" : "Centralities");
    l->SetNColumns(fLandscape ? 1 : 2);
    l->SetFillStyle(0);
    l->SetBorderSize(0);

    THStack* dndeta_  = GetStack(c, "dndeta");
    THStack* dndeta   = CleanStack(dndeta_, l, centAxis);

    if (!onlyMB) {
      Double_t y1 = fLandscape ? 0  : .3;
      Double_t x2 = fLandscape ? .7 : 1;
      Double_t x1 = fLandscape ? x2 : 0;
      Double_t y2 = fLandscape ? 1  : y1;
      TPad* p1 = new TPad("p1", "p1", 0,  y1, x2, 1,  0, 0);
      TPad* p2 = new TPad("p2", "p2", x1, 0,  1,  y2, 0, 0);
      fBody->cd();
      p1->Draw();
      p1->cd();
      fBody->cd();
      p2->Draw();
      p2->cd();
      p1->Divide(1,2,0,0);

      // fBody->Divide(1, 3, 0, 0);
      
      DrawInPad(p2, 0, l, "");
      DrawInPad(p1, 1, dndeta,  "nostack");
      // DrawInPad(p1, 2, dndeta5, "nostack");
      p1->GetPad(1)->SetGridx();
      p1->GetPad(2)->SetGridx();
      
      PrintCanvas(Form("%s results - stacks", base.Data()));
    }

    Int_t cLow = centAxis  ?  centAxis->GetXmin() : 0;
    Int_t cHigh = centAxis ? -centAxis->GetXmax() : -100;
    DrawCentRes(c, base, cLow, cHigh);
    if (onlyMB || !centAxis) {
      // Info("", "Returning dndeta for MB");
      dndeta = MakeMBStack(c, base);
      return dndeta;
    }

    for (Int_t i = 1; i <= centAxis->GetNbins(); i++) 
      DrawCentRes(c, base, centAxis->GetBinLowEdge(i), 
		  centAxis->GetBinUpEdge(i));
    
    return dndeta;
  }
  //____________________________________________________________________
  THStack* MakeMBStack(const TCollection* sums, const TString& base)
  {
    TString title("results");
    TCollection* c = GetCentCollection(sums, base, 0, -1, title);
    if (!c) return 0;

    TH1* dndeta      = GetH1(c, Form("dndeta%s",base.Data()));
    if (!dndeta) return 0;

    THStack* ret = new THStack("dndetaMB", title);
    ret->Add(dndeta);

    if (base.EqualTo("MCTruth")) {
      dndeta      = GetH1(c, "dndetaTruth");
      if (dndeta) ret->Add(dndeta);
    }
    return ret;
  }
      
  //____________________________________________________________________
  void DrawCentRes(const TCollection* sums, const TString& base, 
		   Int_t cLow, Int_t cHigh)
  {
    // Info("DrawCentRes", "Drawing centrality results [%d,%d] in %s (%s)",
    //      cLow, cHigh, sums->GetName(), base.Data());
    TString title("results");
    TCollection* c = GetCentCollection(sums, base, cLow, cHigh, title);
    if (!c) return;


    TH1* trig        = GetH1(c, "triggers");
    TH1* norm        = GetH1(c, Form("norm%s",base.Data()));
    TH1* dndeta      = GetH1(c, Form("dndeta%s",base.Data()));
    TH2* d2ndetadphi = GetH2(c, Form("d2Ndetadphi%s", base.Data()));
    if (!trig || !norm || !dndeta || !d2ndetadphi) return;
    if (norm->GetEntries() <= 0) return;

    norm->SetFillColor(kGreen+1);
    norm->SetFillStyle(3001);


    fBody->Divide(2, 3, 0.05, 0);

    Int_t        trP = 1;
    TVirtualPad* p   = fBody->GetPad(trP);
    p->SetBottomMargin(0.15);
    p->SetLeftMargin(0.15);
    if (trP > 2) p->SetTopMargin(0.05);
    
    DrawInPad(fBody, trP, trig,   "HIST TEXT");
    DrawInPad(fBody, 2,   d2ndetadphi, "colz");
    DrawInPad(fBody, 4,   norm,   "", 0, "Normalization");
    DrawInPad(fBody, 6,   dndeta, "", 0, "d#it{N}_{ch}/d#it{#eta}");
  
    fBody->GetPad(2)->SetGridx(); fBody->GetPad(2)->SetLeftMargin(0.15);
    fBody->GetPad(4)->SetGridx(); fBody->GetPad(4)->SetLeftMargin(0.15);
    fBody->GetPad(6)->SetGridx(); fBody->GetPad(6)->SetLeftMargin(0.15);

    TObject*   normCalc = GetObject(c, "normCalc");
    TString    calc     = normCalc ? normCalc->GetTitle() : "?";

    // Beautify the text
    calc.ReplaceAll("beta", "#beta");
    calc.ReplaceAll("eps", "#varepsilon");
    const char* sufs[] = { "all", "acc", "trg", "vtx", "B", "A", "C", "E", 
			   "V", "T", 0 };
    const char** suf = sufs;
    while (*suf) { 
      calc.ReplaceAll(Form("_%s", *suf), Form("_{%s}", *suf));
      suf++;
    }

    p = fBody->cd(3);
    p->SetPad(p->GetXlowNDC(), 0, 
	      p->GetXlowNDC()+p->GetWNDC(), p->GetYlowNDC()+p->GetHNDC());
    fBody->GetPad(5)->Delete();
    TObjArray* lines    = calc.Tokenize("\n");
    // TPaveText* disp     = new TPaveText(.1,.1,.9,.9, "NDC");
    TIter       next(lines);
    TObjString* sline     = 0;
    Double_t y = .95;
    Double_t xSave = fParName->GetX();
    Int_t    aSave = fParName->GetTextAlign();
    Double_t tSave = fParVal->GetTextSize();
    fParName->SetTextAlign(33);
    fParName->SetX(fParVal->GetX()-.05);
    while ((sline = static_cast<TObjString*>(next()))) {
      // disp->AddText(line->GetName());
      TString& line = sline->String();
      Ssiz_t   eq   = line.Last('=');
      if (eq == kNPOS) { 
	DrawParameter(y, line, "", .6*tSave);
	continue;
      }
      TString name = line(0, eq);
      TString val  = line(eq+1,line.Length()-eq-1);
      DrawParameter(y, name.Strip(TString::kBoth), 
		    val.Strip(TString::kBoth),
		    .6*tSave);
      
    }
    fParName->SetTextAlign(aSave);
    fParName->SetX(xSave);
    // disp->SetBorderSize(0);
    // disp->SetBorderSize(0);
    // disp->SetFillStyle(0);
    // DrawInPad(fBody, 3, disp);
    // fBody->cd();

    PrintCanvas(title);

    DrawCentResDetails(c, title);
  }  
  //____________________________________________________________________
  void DrawCentResDetails(const TCollection* sums, const TString& base)
  {
    TString title = TString::Format("%s - details: ", base.Data());

    TCollection* c = GetCollection(sums, "partial");
    if (!c) {
      Warning("", "Collection partical not found in %s", sums->GetName());
      sums->ls();
      return;
    }

    fBody->Divide(3, 1, 0.05, 0);
    
    const char* typs[] = { "", "0", "All" };
    const char* tits[] = { "Non-zero events", "Zero events", "Weighted sum" };
    for (Int_t i = 1; i <= 3; i++) {
      const char* suf = typs[i-1];
      TVirtualPad* p   = fBody->cd(i);
      p->SetTopMargin(0.10);

      TLatex* ltx = new TLatex(0.5, .99, tits[i-1]);
      ltx->SetNDC();
      ltx->SetTextAlign(23);
      ltx->SetTextSize(0.05);
      ltx->Draw();

      TH1* sum  = GetH2(c, Form("sum%s",     suf));
      TH1* norm = GetH1(c, Form("norm%s", suf));
      TH1* phi  = GetH1(c, Form("phi%s",  suf));
    
      norm->SetFillColor(kGreen+1);
      norm->SetFillStyle(3002);
      phi->SetFillColor(kBlue+1);
      phi->SetFillStyle(3001);
      
      p->Divide(1, 3, 0, 0);
      DrawInPad(p, 1, sum, sum->Integral()>0 ? "col" : "", 0, 
		"d^{2}#it{N}_{ch}/d#it{#varphi}d#it{#eta}");
      DrawInPad(p, 2, GetH1(c, Form("average%s", suf)), "", 0, 
		"d#it{N}_{ch}/d#it{#eta}");
      DrawInPad(p, 3, norm, "", 0, "#eta-coverage/#varphi-acceptance");
      DrawInPad(p, 3, phi, "same", kLegend);      
    }
    PrintCanvas(title);
  }

  //____________________________________________________________________
  THStack* CleanStack(const THStack* stack, TLegend* l, const TAxis* axis)
  {
    if (!stack) return 0;
    THStack* ret   = new THStack(stack->GetName(), stack->GetTitle());
    TList*   hists = stack->GetHists();
    TIter    next(hists);
    TH1*     h     = 0;
    Int_t    j     = 0;
    Bool_t   ok    = false;
    while ((h = static_cast<TH1*>(next()))) {
      TString name(h->GetTitle());
      TString nme(h->GetName());
      if (nme.Contains("_mirror", TString::kIgnoreCase)) {
	// Printf("Ignore %s/%s in stack", nme.Data(), name.Data());
	continue;
      }
      if (l && !ok) { 
	j++;
	Int_t bin = axis ? TMath::Min(j, axis->GetNbins()) : 1;
	if (axis) 
	  name.Form("%3d%% - %3d%%", 
		    Int_t(axis->GetBinLowEdge(bin)), 
		    Int_t(axis->GetBinUpEdge(bin)));
	else {
	  name.ReplaceAll("ALICE", "");
	  name.ReplaceAll("dNdeta", " - work in progress");
	}
	ok = axis && axis->GetBinUpEdge(bin) > 100;
	// Printf("Adding entry %d: %s/%s", j,  nme.Data(), name.Data());
	TLegendEntry* e = l->AddEntry("dummy", name, "f");
	e->SetFillStyle(1001);
	e->SetFillColor(h->GetMarkerColor());
      }
      ret->Add(h);
    }
    return ret;
  }
};
//
// EOF
//
 SummarydNdetaDrawer.C:1
 SummarydNdetaDrawer.C:2
 SummarydNdetaDrawer.C:3
 SummarydNdetaDrawer.C:4
 SummarydNdetaDrawer.C:5
 SummarydNdetaDrawer.C:6
 SummarydNdetaDrawer.C:7
 SummarydNdetaDrawer.C:8
 SummarydNdetaDrawer.C:9
 SummarydNdetaDrawer.C:10
 SummarydNdetaDrawer.C:11
 SummarydNdetaDrawer.C:12
 SummarydNdetaDrawer.C:13
 SummarydNdetaDrawer.C:14
 SummarydNdetaDrawer.C:15
 SummarydNdetaDrawer.C:16
 SummarydNdetaDrawer.C:17
 SummarydNdetaDrawer.C:18
 SummarydNdetaDrawer.C:19
 SummarydNdetaDrawer.C:20
 SummarydNdetaDrawer.C:21
 SummarydNdetaDrawer.C:22
 SummarydNdetaDrawer.C:23
 SummarydNdetaDrawer.C:24
 SummarydNdetaDrawer.C:25
 SummarydNdetaDrawer.C:26
 SummarydNdetaDrawer.C:27
 SummarydNdetaDrawer.C:28
 SummarydNdetaDrawer.C:29
 SummarydNdetaDrawer.C:30
 SummarydNdetaDrawer.C:31
 SummarydNdetaDrawer.C:32
 SummarydNdetaDrawer.C:33
 SummarydNdetaDrawer.C:34
 SummarydNdetaDrawer.C:35
 SummarydNdetaDrawer.C:36
 SummarydNdetaDrawer.C:37
 SummarydNdetaDrawer.C:38
 SummarydNdetaDrawer.C:39
 SummarydNdetaDrawer.C:40
 SummarydNdetaDrawer.C:41
 SummarydNdetaDrawer.C:42
 SummarydNdetaDrawer.C:43
 SummarydNdetaDrawer.C:44
 SummarydNdetaDrawer.C:45
 SummarydNdetaDrawer.C:46
 SummarydNdetaDrawer.C:47
 SummarydNdetaDrawer.C:48
 SummarydNdetaDrawer.C:49
 SummarydNdetaDrawer.C:50
 SummarydNdetaDrawer.C:51
 SummarydNdetaDrawer.C:52
 SummarydNdetaDrawer.C:53
 SummarydNdetaDrawer.C:54
 SummarydNdetaDrawer.C:55
 SummarydNdetaDrawer.C:56
 SummarydNdetaDrawer.C:57
 SummarydNdetaDrawer.C:58
 SummarydNdetaDrawer.C:59
 SummarydNdetaDrawer.C:60
 SummarydNdetaDrawer.C:61
 SummarydNdetaDrawer.C:62
 SummarydNdetaDrawer.C:63
 SummarydNdetaDrawer.C:64
 SummarydNdetaDrawer.C:65
 SummarydNdetaDrawer.C:66
 SummarydNdetaDrawer.C:67
 SummarydNdetaDrawer.C:68
 SummarydNdetaDrawer.C:69
 SummarydNdetaDrawer.C:70
 SummarydNdetaDrawer.C:71
 SummarydNdetaDrawer.C:72
 SummarydNdetaDrawer.C:73
 SummarydNdetaDrawer.C:74
 SummarydNdetaDrawer.C:75
 SummarydNdetaDrawer.C:76
 SummarydNdetaDrawer.C:77
 SummarydNdetaDrawer.C:78
 SummarydNdetaDrawer.C:79
 SummarydNdetaDrawer.C:80
 SummarydNdetaDrawer.C:81
 SummarydNdetaDrawer.C:82
 SummarydNdetaDrawer.C:83
 SummarydNdetaDrawer.C:84
 SummarydNdetaDrawer.C:85
 SummarydNdetaDrawer.C:86
 SummarydNdetaDrawer.C:87
 SummarydNdetaDrawer.C:88
 SummarydNdetaDrawer.C:89
 SummarydNdetaDrawer.C:90
 SummarydNdetaDrawer.C:91
 SummarydNdetaDrawer.C:92
 SummarydNdetaDrawer.C:93
 SummarydNdetaDrawer.C:94
 SummarydNdetaDrawer.C:95
 SummarydNdetaDrawer.C:96
 SummarydNdetaDrawer.C:97
 SummarydNdetaDrawer.C:98
 SummarydNdetaDrawer.C:99
 SummarydNdetaDrawer.C:100
 SummarydNdetaDrawer.C:101
 SummarydNdetaDrawer.C:102
 SummarydNdetaDrawer.C:103
 SummarydNdetaDrawer.C:104
 SummarydNdetaDrawer.C:105
 SummarydNdetaDrawer.C:106
 SummarydNdetaDrawer.C:107
 SummarydNdetaDrawer.C:108
 SummarydNdetaDrawer.C:109
 SummarydNdetaDrawer.C:110
 SummarydNdetaDrawer.C:111
 SummarydNdetaDrawer.C:112
 SummarydNdetaDrawer.C:113
 SummarydNdetaDrawer.C:114
 SummarydNdetaDrawer.C:115
 SummarydNdetaDrawer.C:116
 SummarydNdetaDrawer.C:117
 SummarydNdetaDrawer.C:118
 SummarydNdetaDrawer.C:119
 SummarydNdetaDrawer.C:120
 SummarydNdetaDrawer.C:121
 SummarydNdetaDrawer.C:122
 SummarydNdetaDrawer.C:123
 SummarydNdetaDrawer.C:124
 SummarydNdetaDrawer.C:125
 SummarydNdetaDrawer.C:126
 SummarydNdetaDrawer.C:127
 SummarydNdetaDrawer.C:128
 SummarydNdetaDrawer.C:129
 SummarydNdetaDrawer.C:130
 SummarydNdetaDrawer.C:131
 SummarydNdetaDrawer.C:132
 SummarydNdetaDrawer.C:133
 SummarydNdetaDrawer.C:134
 SummarydNdetaDrawer.C:135
 SummarydNdetaDrawer.C:136
 SummarydNdetaDrawer.C:137
 SummarydNdetaDrawer.C:138
 SummarydNdetaDrawer.C:139
 SummarydNdetaDrawer.C:140
 SummarydNdetaDrawer.C:141
 SummarydNdetaDrawer.C:142
 SummarydNdetaDrawer.C:143
 SummarydNdetaDrawer.C:144
 SummarydNdetaDrawer.C:145
 SummarydNdetaDrawer.C:146
 SummarydNdetaDrawer.C:147
 SummarydNdetaDrawer.C:148
 SummarydNdetaDrawer.C:149
 SummarydNdetaDrawer.C:150
 SummarydNdetaDrawer.C:151
 SummarydNdetaDrawer.C:152
 SummarydNdetaDrawer.C:153
 SummarydNdetaDrawer.C:154
 SummarydNdetaDrawer.C:155
 SummarydNdetaDrawer.C:156
 SummarydNdetaDrawer.C:157
 SummarydNdetaDrawer.C:158
 SummarydNdetaDrawer.C:159
 SummarydNdetaDrawer.C:160
 SummarydNdetaDrawer.C:161
 SummarydNdetaDrawer.C:162
 SummarydNdetaDrawer.C:163
 SummarydNdetaDrawer.C:164
 SummarydNdetaDrawer.C:165
 SummarydNdetaDrawer.C:166
 SummarydNdetaDrawer.C:167
 SummarydNdetaDrawer.C:168
 SummarydNdetaDrawer.C:169
 SummarydNdetaDrawer.C:170
 SummarydNdetaDrawer.C:171
 SummarydNdetaDrawer.C:172
 SummarydNdetaDrawer.C:173
 SummarydNdetaDrawer.C:174
 SummarydNdetaDrawer.C:175
 SummarydNdetaDrawer.C:176
 SummarydNdetaDrawer.C:177
 SummarydNdetaDrawer.C:178
 SummarydNdetaDrawer.C:179
 SummarydNdetaDrawer.C:180
 SummarydNdetaDrawer.C:181
 SummarydNdetaDrawer.C:182
 SummarydNdetaDrawer.C:183
 SummarydNdetaDrawer.C:184
 SummarydNdetaDrawer.C:185
 SummarydNdetaDrawer.C:186
 SummarydNdetaDrawer.C:187
 SummarydNdetaDrawer.C:188
 SummarydNdetaDrawer.C:189
 SummarydNdetaDrawer.C:190
 SummarydNdetaDrawer.C:191
 SummarydNdetaDrawer.C:192
 SummarydNdetaDrawer.C:193
 SummarydNdetaDrawer.C:194
 SummarydNdetaDrawer.C:195
 SummarydNdetaDrawer.C:196
 SummarydNdetaDrawer.C:197
 SummarydNdetaDrawer.C:198
 SummarydNdetaDrawer.C:199
 SummarydNdetaDrawer.C:200
 SummarydNdetaDrawer.C:201
 SummarydNdetaDrawer.C:202
 SummarydNdetaDrawer.C:203
 SummarydNdetaDrawer.C:204
 SummarydNdetaDrawer.C:205
 SummarydNdetaDrawer.C:206
 SummarydNdetaDrawer.C:207
 SummarydNdetaDrawer.C:208
 SummarydNdetaDrawer.C:209
 SummarydNdetaDrawer.C:210
 SummarydNdetaDrawer.C:211
 SummarydNdetaDrawer.C:212
 SummarydNdetaDrawer.C:213
 SummarydNdetaDrawer.C:214
 SummarydNdetaDrawer.C:215
 SummarydNdetaDrawer.C:216
 SummarydNdetaDrawer.C:217
 SummarydNdetaDrawer.C:218
 SummarydNdetaDrawer.C:219
 SummarydNdetaDrawer.C:220
 SummarydNdetaDrawer.C:221
 SummarydNdetaDrawer.C:222
 SummarydNdetaDrawer.C:223
 SummarydNdetaDrawer.C:224
 SummarydNdetaDrawer.C:225
 SummarydNdetaDrawer.C:226
 SummarydNdetaDrawer.C:227
 SummarydNdetaDrawer.C:228
 SummarydNdetaDrawer.C:229
 SummarydNdetaDrawer.C:230
 SummarydNdetaDrawer.C:231
 SummarydNdetaDrawer.C:232
 SummarydNdetaDrawer.C:233
 SummarydNdetaDrawer.C:234
 SummarydNdetaDrawer.C:235
 SummarydNdetaDrawer.C:236
 SummarydNdetaDrawer.C:237
 SummarydNdetaDrawer.C:238
 SummarydNdetaDrawer.C:239
 SummarydNdetaDrawer.C:240
 SummarydNdetaDrawer.C:241
 SummarydNdetaDrawer.C:242
 SummarydNdetaDrawer.C:243
 SummarydNdetaDrawer.C:244
 SummarydNdetaDrawer.C:245
 SummarydNdetaDrawer.C:246
 SummarydNdetaDrawer.C:247
 SummarydNdetaDrawer.C:248
 SummarydNdetaDrawer.C:249
 SummarydNdetaDrawer.C:250
 SummarydNdetaDrawer.C:251
 SummarydNdetaDrawer.C:252
 SummarydNdetaDrawer.C:253
 SummarydNdetaDrawer.C:254
 SummarydNdetaDrawer.C:255
 SummarydNdetaDrawer.C:256
 SummarydNdetaDrawer.C:257
 SummarydNdetaDrawer.C:258
 SummarydNdetaDrawer.C:259
 SummarydNdetaDrawer.C:260
 SummarydNdetaDrawer.C:261
 SummarydNdetaDrawer.C:262
 SummarydNdetaDrawer.C:263
 SummarydNdetaDrawer.C:264
 SummarydNdetaDrawer.C:265
 SummarydNdetaDrawer.C:266
 SummarydNdetaDrawer.C:267
 SummarydNdetaDrawer.C:268
 SummarydNdetaDrawer.C:269
 SummarydNdetaDrawer.C:270
 SummarydNdetaDrawer.C:271
 SummarydNdetaDrawer.C:272
 SummarydNdetaDrawer.C:273
 SummarydNdetaDrawer.C:274
 SummarydNdetaDrawer.C:275
 SummarydNdetaDrawer.C:276
 SummarydNdetaDrawer.C:277
 SummarydNdetaDrawer.C:278
 SummarydNdetaDrawer.C:279
 SummarydNdetaDrawer.C:280
 SummarydNdetaDrawer.C:281
 SummarydNdetaDrawer.C:282
 SummarydNdetaDrawer.C:283
 SummarydNdetaDrawer.C:284
 SummarydNdetaDrawer.C:285
 SummarydNdetaDrawer.C:286
 SummarydNdetaDrawer.C:287
 SummarydNdetaDrawer.C:288
 SummarydNdetaDrawer.C:289
 SummarydNdetaDrawer.C:290
 SummarydNdetaDrawer.C:291
 SummarydNdetaDrawer.C:292
 SummarydNdetaDrawer.C:293
 SummarydNdetaDrawer.C:294
 SummarydNdetaDrawer.C:295
 SummarydNdetaDrawer.C:296
 SummarydNdetaDrawer.C:297
 SummarydNdetaDrawer.C:298
 SummarydNdetaDrawer.C:299
 SummarydNdetaDrawer.C:300
 SummarydNdetaDrawer.C:301
 SummarydNdetaDrawer.C:302
 SummarydNdetaDrawer.C:303
 SummarydNdetaDrawer.C:304
 SummarydNdetaDrawer.C:305
 SummarydNdetaDrawer.C:306
 SummarydNdetaDrawer.C:307
 SummarydNdetaDrawer.C:308
 SummarydNdetaDrawer.C:309
 SummarydNdetaDrawer.C:310
 SummarydNdetaDrawer.C:311
 SummarydNdetaDrawer.C:312
 SummarydNdetaDrawer.C:313
 SummarydNdetaDrawer.C:314
 SummarydNdetaDrawer.C:315
 SummarydNdetaDrawer.C:316
 SummarydNdetaDrawer.C:317
 SummarydNdetaDrawer.C:318
 SummarydNdetaDrawer.C:319
 SummarydNdetaDrawer.C:320
 SummarydNdetaDrawer.C:321
 SummarydNdetaDrawer.C:322
 SummarydNdetaDrawer.C:323
 SummarydNdetaDrawer.C:324
 SummarydNdetaDrawer.C:325
 SummarydNdetaDrawer.C:326
 SummarydNdetaDrawer.C:327
 SummarydNdetaDrawer.C:328
 SummarydNdetaDrawer.C:329
 SummarydNdetaDrawer.C:330
 SummarydNdetaDrawer.C:331
 SummarydNdetaDrawer.C:332
 SummarydNdetaDrawer.C:333
 SummarydNdetaDrawer.C:334
 SummarydNdetaDrawer.C:335
 SummarydNdetaDrawer.C:336
 SummarydNdetaDrawer.C:337
 SummarydNdetaDrawer.C:338
 SummarydNdetaDrawer.C:339
 SummarydNdetaDrawer.C:340
 SummarydNdetaDrawer.C:341
 SummarydNdetaDrawer.C:342
 SummarydNdetaDrawer.C:343
 SummarydNdetaDrawer.C:344
 SummarydNdetaDrawer.C:345
 SummarydNdetaDrawer.C:346
 SummarydNdetaDrawer.C:347
 SummarydNdetaDrawer.C:348
 SummarydNdetaDrawer.C:349
 SummarydNdetaDrawer.C:350
 SummarydNdetaDrawer.C:351
 SummarydNdetaDrawer.C:352
 SummarydNdetaDrawer.C:353
 SummarydNdetaDrawer.C:354
 SummarydNdetaDrawer.C:355
 SummarydNdetaDrawer.C:356
 SummarydNdetaDrawer.C:357
 SummarydNdetaDrawer.C:358
 SummarydNdetaDrawer.C:359
 SummarydNdetaDrawer.C:360
 SummarydNdetaDrawer.C:361
 SummarydNdetaDrawer.C:362
 SummarydNdetaDrawer.C:363
 SummarydNdetaDrawer.C:364
 SummarydNdetaDrawer.C:365
 SummarydNdetaDrawer.C:366
 SummarydNdetaDrawer.C:367
 SummarydNdetaDrawer.C:368
 SummarydNdetaDrawer.C:369
 SummarydNdetaDrawer.C:370
 SummarydNdetaDrawer.C:371
 SummarydNdetaDrawer.C:372
 SummarydNdetaDrawer.C:373
 SummarydNdetaDrawer.C:374
 SummarydNdetaDrawer.C:375
 SummarydNdetaDrawer.C:376
 SummarydNdetaDrawer.C:377
 SummarydNdetaDrawer.C:378
 SummarydNdetaDrawer.C:379
 SummarydNdetaDrawer.C:380
 SummarydNdetaDrawer.C:381
 SummarydNdetaDrawer.C:382
 SummarydNdetaDrawer.C:383
 SummarydNdetaDrawer.C:384
 SummarydNdetaDrawer.C:385
 SummarydNdetaDrawer.C:386
 SummarydNdetaDrawer.C:387
 SummarydNdetaDrawer.C:388
 SummarydNdetaDrawer.C:389
 SummarydNdetaDrawer.C:390
 SummarydNdetaDrawer.C:391
 SummarydNdetaDrawer.C:392
 SummarydNdetaDrawer.C:393
 SummarydNdetaDrawer.C:394
 SummarydNdetaDrawer.C:395
 SummarydNdetaDrawer.C:396
 SummarydNdetaDrawer.C:397
 SummarydNdetaDrawer.C:398
 SummarydNdetaDrawer.C:399
 SummarydNdetaDrawer.C:400
 SummarydNdetaDrawer.C:401
 SummarydNdetaDrawer.C:402
 SummarydNdetaDrawer.C:403
 SummarydNdetaDrawer.C:404
 SummarydNdetaDrawer.C:405
 SummarydNdetaDrawer.C:406
 SummarydNdetaDrawer.C:407
 SummarydNdetaDrawer.C:408
 SummarydNdetaDrawer.C:409
 SummarydNdetaDrawer.C:410
 SummarydNdetaDrawer.C:411
 SummarydNdetaDrawer.C:412
 SummarydNdetaDrawer.C:413
 SummarydNdetaDrawer.C:414
 SummarydNdetaDrawer.C:415
 SummarydNdetaDrawer.C:416
 SummarydNdetaDrawer.C:417
 SummarydNdetaDrawer.C:418
 SummarydNdetaDrawer.C:419
 SummarydNdetaDrawer.C:420
 SummarydNdetaDrawer.C:421
 SummarydNdetaDrawer.C:422
 SummarydNdetaDrawer.C:423
 SummarydNdetaDrawer.C:424
 SummarydNdetaDrawer.C:425
 SummarydNdetaDrawer.C:426
 SummarydNdetaDrawer.C:427
 SummarydNdetaDrawer.C:428
 SummarydNdetaDrawer.C:429
 SummarydNdetaDrawer.C:430
 SummarydNdetaDrawer.C:431
 SummarydNdetaDrawer.C:432
 SummarydNdetaDrawer.C:433
 SummarydNdetaDrawer.C:434
 SummarydNdetaDrawer.C:435
 SummarydNdetaDrawer.C:436
 SummarydNdetaDrawer.C:437
 SummarydNdetaDrawer.C:438
 SummarydNdetaDrawer.C:439
 SummarydNdetaDrawer.C:440
 SummarydNdetaDrawer.C:441
 SummarydNdetaDrawer.C:442
 SummarydNdetaDrawer.C:443
 SummarydNdetaDrawer.C:444
 SummarydNdetaDrawer.C:445
 SummarydNdetaDrawer.C:446
 SummarydNdetaDrawer.C:447
 SummarydNdetaDrawer.C:448
 SummarydNdetaDrawer.C:449
 SummarydNdetaDrawer.C:450
 SummarydNdetaDrawer.C:451
 SummarydNdetaDrawer.C:452
 SummarydNdetaDrawer.C:453
 SummarydNdetaDrawer.C:454
 SummarydNdetaDrawer.C:455
 SummarydNdetaDrawer.C:456
 SummarydNdetaDrawer.C:457
 SummarydNdetaDrawer.C:458
 SummarydNdetaDrawer.C:459
 SummarydNdetaDrawer.C:460
 SummarydNdetaDrawer.C:461
 SummarydNdetaDrawer.C:462
 SummarydNdetaDrawer.C:463
 SummarydNdetaDrawer.C:464
 SummarydNdetaDrawer.C:465
 SummarydNdetaDrawer.C:466
 SummarydNdetaDrawer.C:467
 SummarydNdetaDrawer.C:468
 SummarydNdetaDrawer.C:469
 SummarydNdetaDrawer.C:470
 SummarydNdetaDrawer.C:471
 SummarydNdetaDrawer.C:472
 SummarydNdetaDrawer.C:473
 SummarydNdetaDrawer.C:474
 SummarydNdetaDrawer.C:475
 SummarydNdetaDrawer.C:476
 SummarydNdetaDrawer.C:477
 SummarydNdetaDrawer.C:478
 SummarydNdetaDrawer.C:479
 SummarydNdetaDrawer.C:480
 SummarydNdetaDrawer.C:481
 SummarydNdetaDrawer.C:482
 SummarydNdetaDrawer.C:483
 SummarydNdetaDrawer.C:484
 SummarydNdetaDrawer.C:485
 SummarydNdetaDrawer.C:486
 SummarydNdetaDrawer.C:487
 SummarydNdetaDrawer.C:488
 SummarydNdetaDrawer.C:489
 SummarydNdetaDrawer.C:490
 SummarydNdetaDrawer.C:491
 SummarydNdetaDrawer.C:492
 SummarydNdetaDrawer.C:493
 SummarydNdetaDrawer.C:494
 SummarydNdetaDrawer.C:495
 SummarydNdetaDrawer.C:496
 SummarydNdetaDrawer.C:497
 SummarydNdetaDrawer.C:498
 SummarydNdetaDrawer.C:499
 SummarydNdetaDrawer.C:500
 SummarydNdetaDrawer.C:501
 SummarydNdetaDrawer.C:502
 SummarydNdetaDrawer.C:503
 SummarydNdetaDrawer.C:504
 SummarydNdetaDrawer.C:505
 SummarydNdetaDrawer.C:506
 SummarydNdetaDrawer.C:507
 SummarydNdetaDrawer.C:508
 SummarydNdetaDrawer.C:509
 SummarydNdetaDrawer.C:510
 SummarydNdetaDrawer.C:511
 SummarydNdetaDrawer.C:512
 SummarydNdetaDrawer.C:513
 SummarydNdetaDrawer.C:514
 SummarydNdetaDrawer.C:515
 SummarydNdetaDrawer.C:516
 SummarydNdetaDrawer.C:517
 SummarydNdetaDrawer.C:518
 SummarydNdetaDrawer.C:519
 SummarydNdetaDrawer.C:520
 SummarydNdetaDrawer.C:521
 SummarydNdetaDrawer.C:522
 SummarydNdetaDrawer.C:523
 SummarydNdetaDrawer.C:524
 SummarydNdetaDrawer.C:525
 SummarydNdetaDrawer.C:526
 SummarydNdetaDrawer.C:527
 SummarydNdetaDrawer.C:528
 SummarydNdetaDrawer.C:529
 SummarydNdetaDrawer.C:530
 SummarydNdetaDrawer.C:531
 SummarydNdetaDrawer.C:532
 SummarydNdetaDrawer.C:533
 SummarydNdetaDrawer.C:534
 SummarydNdetaDrawer.C:535
 SummarydNdetaDrawer.C:536
 SummarydNdetaDrawer.C:537
 SummarydNdetaDrawer.C:538
 SummarydNdetaDrawer.C:539
 SummarydNdetaDrawer.C:540
 SummarydNdetaDrawer.C:541
 SummarydNdetaDrawer.C:542
 SummarydNdetaDrawer.C:543
 SummarydNdetaDrawer.C:544
 SummarydNdetaDrawer.C:545
 SummarydNdetaDrawer.C:546
 SummarydNdetaDrawer.C:547
 SummarydNdetaDrawer.C:548
 SummarydNdetaDrawer.C:549
 SummarydNdetaDrawer.C:550
 SummarydNdetaDrawer.C:551
 SummarydNdetaDrawer.C:552
 SummarydNdetaDrawer.C:553
 SummarydNdetaDrawer.C:554
 SummarydNdetaDrawer.C:555
 SummarydNdetaDrawer.C:556
 SummarydNdetaDrawer.C:557
 SummarydNdetaDrawer.C:558
 SummarydNdetaDrawer.C:559
 SummarydNdetaDrawer.C:560
 SummarydNdetaDrawer.C:561
 SummarydNdetaDrawer.C:562
 SummarydNdetaDrawer.C:563
 SummarydNdetaDrawer.C:564
 SummarydNdetaDrawer.C:565
 SummarydNdetaDrawer.C:566
 SummarydNdetaDrawer.C:567
 SummarydNdetaDrawer.C:568
 SummarydNdetaDrawer.C:569
 SummarydNdetaDrawer.C:570
 SummarydNdetaDrawer.C:571
 SummarydNdetaDrawer.C:572
 SummarydNdetaDrawer.C:573
 SummarydNdetaDrawer.C:574
 SummarydNdetaDrawer.C:575
 SummarydNdetaDrawer.C:576
 SummarydNdetaDrawer.C:577
 SummarydNdetaDrawer.C:578
 SummarydNdetaDrawer.C:579
 SummarydNdetaDrawer.C:580
 SummarydNdetaDrawer.C:581
 SummarydNdetaDrawer.C:582
 SummarydNdetaDrawer.C:583
 SummarydNdetaDrawer.C:584
 SummarydNdetaDrawer.C:585
 SummarydNdetaDrawer.C:586
 SummarydNdetaDrawer.C:587
 SummarydNdetaDrawer.C:588
 SummarydNdetaDrawer.C:589
 SummarydNdetaDrawer.C:590
 SummarydNdetaDrawer.C:591
 SummarydNdetaDrawer.C:592
 SummarydNdetaDrawer.C:593
 SummarydNdetaDrawer.C:594
 SummarydNdetaDrawer.C:595
 SummarydNdetaDrawer.C:596
 SummarydNdetaDrawer.C:597
 SummarydNdetaDrawer.C:598
 SummarydNdetaDrawer.C:599
 SummarydNdetaDrawer.C:600
 SummarydNdetaDrawer.C:601
 SummarydNdetaDrawer.C:602
 SummarydNdetaDrawer.C:603
 SummarydNdetaDrawer.C:604
 SummarydNdetaDrawer.C:605
 SummarydNdetaDrawer.C:606
 SummarydNdetaDrawer.C:607
 SummarydNdetaDrawer.C:608
 SummarydNdetaDrawer.C:609
 SummarydNdetaDrawer.C:610
 SummarydNdetaDrawer.C:611
 SummarydNdetaDrawer.C:612
 SummarydNdetaDrawer.C:613
 SummarydNdetaDrawer.C:614
 SummarydNdetaDrawer.C:615
 SummarydNdetaDrawer.C:616
 SummarydNdetaDrawer.C:617
 SummarydNdetaDrawer.C:618
 SummarydNdetaDrawer.C:619
 SummarydNdetaDrawer.C:620
 SummarydNdetaDrawer.C:621
 SummarydNdetaDrawer.C:622
 SummarydNdetaDrawer.C:623
 SummarydNdetaDrawer.C:624
 SummarydNdetaDrawer.C:625
 SummarydNdetaDrawer.C:626
 SummarydNdetaDrawer.C:627
 SummarydNdetaDrawer.C:628
 SummarydNdetaDrawer.C:629
 SummarydNdetaDrawer.C:630
 SummarydNdetaDrawer.C:631
 SummarydNdetaDrawer.C:632
 SummarydNdetaDrawer.C:633
 SummarydNdetaDrawer.C:634
 SummarydNdetaDrawer.C:635
 SummarydNdetaDrawer.C:636
 SummarydNdetaDrawer.C:637
 SummarydNdetaDrawer.C:638
 SummarydNdetaDrawer.C:639
 SummarydNdetaDrawer.C:640
 SummarydNdetaDrawer.C:641
 SummarydNdetaDrawer.C:642
 SummarydNdetaDrawer.C:643
 SummarydNdetaDrawer.C:644
 SummarydNdetaDrawer.C:645
 SummarydNdetaDrawer.C:646
 SummarydNdetaDrawer.C:647
 SummarydNdetaDrawer.C:648
 SummarydNdetaDrawer.C:649
 SummarydNdetaDrawer.C:650
 SummarydNdetaDrawer.C:651
 SummarydNdetaDrawer.C:652
 SummarydNdetaDrawer.C:653
 SummarydNdetaDrawer.C:654
 SummarydNdetaDrawer.C:655
 SummarydNdetaDrawer.C:656
 SummarydNdetaDrawer.C:657
 SummarydNdetaDrawer.C:658
 SummarydNdetaDrawer.C:659
 SummarydNdetaDrawer.C:660
 SummarydNdetaDrawer.C:661
 SummarydNdetaDrawer.C:662
 SummarydNdetaDrawer.C:663
 SummarydNdetaDrawer.C:664
 SummarydNdetaDrawer.C:665
 SummarydNdetaDrawer.C:666
 SummarydNdetaDrawer.C:667
 SummarydNdetaDrawer.C:668
 SummarydNdetaDrawer.C:669
 SummarydNdetaDrawer.C:670
 SummarydNdetaDrawer.C:671
 SummarydNdetaDrawer.C:672
 SummarydNdetaDrawer.C:673
 SummarydNdetaDrawer.C:674
 SummarydNdetaDrawer.C:675
 SummarydNdetaDrawer.C:676
 SummarydNdetaDrawer.C:677
 SummarydNdetaDrawer.C:678
 SummarydNdetaDrawer.C:679
 SummarydNdetaDrawer.C:680
 SummarydNdetaDrawer.C:681
 SummarydNdetaDrawer.C:682
 SummarydNdetaDrawer.C:683
 SummarydNdetaDrawer.C:684
 SummarydNdetaDrawer.C:685
 SummarydNdetaDrawer.C:686
 SummarydNdetaDrawer.C:687
 SummarydNdetaDrawer.C:688
 SummarydNdetaDrawer.C:689
 SummarydNdetaDrawer.C:690
 SummarydNdetaDrawer.C:691
 SummarydNdetaDrawer.C:692
 SummarydNdetaDrawer.C:693
 SummarydNdetaDrawer.C:694
 SummarydNdetaDrawer.C:695
 SummarydNdetaDrawer.C:696
 SummarydNdetaDrawer.C:697
 SummarydNdetaDrawer.C:698
 SummarydNdetaDrawer.C:699