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

/**
 * Class to draw summary of unfolding
 * 
 * @ingroup pwglf_forward_multdist
 */
struct SummaryUnfoldedDrawer : public SummaryDrawer
{

  SummaryUnfoldedDrawer() : SummaryDrawer() {}
  //____________________________________________________________________
  void Run(const char* fname)
  {
    TString filename(fname);
    TFile* file = TFile::Open(filename,"READ");
    if (!file) { 
      Error("Run", "Failed to open \"%s\"", filename.Data());
      return;
    }
    
    TString pdfName(filename);
    pdfName.ReplaceAll(".root", ".pdf");
    CreateCanvas(pdfName, 0); // what & kLandscape);

    // --- Title page ------------------------------------------------
    DrawTitlePage(file);
    
    // --- Loop over all keys in the file ----------------------------
    TIter next(file->GetListOfKeys());
    TKey* k  = 0;
    while ((k = static_cast<TKey*>(next()))) {
      file->cd();

      TString clName = k->GetClassName();
      TClass* cl     = gROOT->GetClass(clName);
      if (!cl) { 
	// Warning("Run", "Ignoring object %s of unknown type %s", 
	//         k->GetName(), clName.Data());
	continue;
      }
      if (!cl->InheritsFrom(TDirectory::Class())) {
	// Warning("Run", "Ignoring object %s of type %s", 
	//         k->GetName(), clName.Data());
	continue;
      }
      file->cd(k->GetName());
      ProcessType(gDirectory);
    }
    file->cd();
    CloseCanvas();
  }
  //____________________________________________________________________
  void DrawTitlePage(const TDirectory* file)
  {
    fBody->cd();

    TLatex* ltx = new TLatex(.5, .7, "Raw P(#it{N}_{ch}) #rightarrow "
			     "corrected P(#it{N}_{ch})");
    ltx->SetNDC();
    ltx->SetTextSize(0.07);
    ltx->SetTextAlign(22);
    ltx->Draw();

    Double_t y = .6;
    
    Double_t save = fParName->GetTextSize();
    fParName->SetTextSize(0.03);
    fParVal->SetTextSize(0.03);

    TObject* method = GetObject(file, "method");
    TObject* sys    = GetObject(file, "sys");
    TObject* sNN    = GetObject(file, "sNN");
    TObject* trig   = GetObject(file, "trigger");
    Double_t regP;
    Double_t minIpZ;
    Double_t maxIpZ;
    Bool_t   self;
    GetParameter(file, "regParam", regP);
    GetParameter(file, "minIpZ", minIpZ);
    GetParameter(file, "maxIpZ", maxIpZ);
    GetParameter(file, "self", self);

    DrawParameter(y, "Consistency check", self ? "yes" : "no");
    DrawParameter(y, "System", sys->GetTitle());
    DrawParameter(y, "#sqrt{s_{NN}}", sNN->GetTitle());
    DrawParameter(y, "Trigger", trig->GetTitle());
    DrawParameter(y, "Method", method->GetTitle());
    DrawParameter(y, "Reg. param.", Form("%g", regP));
    DrawParameter(y, "IP_{z} range", Form("%+5.2fcm - %+5.2fcm", 
					  minIpZ, maxIpZ));


    PrintCanvas("Title page");
    fParName->SetTextSize(save);
    fParVal->SetTextSize(save);
  }
  //____________________________________________________________________
  void ProcessType(TDirectory* d) 
  { 
    Printf(" ProcessType: %s", d->GetPath());
    // d->ls();
    MakeChapter(d->GetName()); 
    static TRegexp regex("[pm][0-9]d[0-9]*_[pm][0-9]d[0-9]*");

    // --- Loop over bins in this directory --------------------------
    TIter next(d->GetListOfKeys());
    TKey* k  = 0;
    while ((k = static_cast<TKey*>(next()))) {
      d->cd();
      TString clName = k->GetClassName();
      TClass* cl     = gROOT->GetClass(clName);
      if (!cl) { 
	// Warning("ProcessType", "Ignoring object %s of unknown type %s", 
	// k->GetName(), clName.Data());
	continue;
      }
      if (!cl->InheritsFrom(TDirectory::Class())) {
	// Warning("ProcessType", "Ignoring object %s of type %s", 
	//  k->GetName(), clName.Data());
	continue;
      }
      TString n(k->GetName());
      if (n.Index(regex) == kNPOS) { 
	Warning("ProcessType", "Ignoring non-bin directory %s", n.Data());
	continue;
      }
      d->cd(n);
      ProcessBin(gDirectory);
    }
    d->cd();
    DrawResults(d);
  }
  //____________________________________________________________________
  void DrawResults(TDirectory* d) 
  { 
    THStack* c = GetStack(d, "corrected");
    if (!c) {
      Warning("DrawResults", "Stack of corrected results not found!");
      return;
    }
    DrawInPad(fBody, 0, c, "nostack", kLogy);
    c->GetXaxis()->SetTitle("#it{N}_{ch}");
    c->GetYaxis()->SetTitle("P(#it{N}_{ch})");

    TObject* alice = d->Get("alice");
    TObject* cms   = d->Get("cms");
    if (cms)   cms->Draw();
    if (alice) alice->Draw();

    if (alice || cms) { 
      TObject* dummy = 0;
      TLegend* l = new TLegend(0.15, 0.12, .4, .3, "", "NDC");
      l->SetFillColor(0);
      l->SetFillStyle(0);
      l->SetBorderSize(0);
      TLegendEntry* e = l->AddEntry(dummy, "This work", "F");
      e->SetFillColor(kRed+2);
      e->SetFillStyle(1001);
      if (alice) { 
	e = l->AddEntry(dummy, "ALICE", "F");
	e->SetFillColor(kPink+1);
	e->SetFillStyle(1001);
      }
      if (cms) { 
	e = l->AddEntry(dummy, "CMS", "F");
	e->SetFillColor(kGreen+2);
	e->SetFillStyle(1001);
      }
      l->Draw();
    }
    PrintCanvas(" Results");

    THStack* s = GetStack(d, "ratios");
    if (s) {
      fBody->SetLogy(false);
      DrawInPad(fBody, 0, s, "nostack", kGridy);
      s->GetYaxis()->SetTitle("(this - other)/other");
      s->GetXaxis()->SetTitle("#it{N}_{ch}");

      TObject* dummy = 0;
      TLegend* l = new TLegend(0.65, 0.12, .95, .3, "", "NDC");
      TLegendEntry* e = 0;
      l->SetFillColor(0);
      l->SetFillStyle(0);
      l->SetBorderSize(0);
      if (alice) { 
	e = l->AddEntry(dummy, "to ALICE", "F");
	e->SetFillColor(kPink+1);
	e->SetFillStyle(1001);
      }
      if (cms) { 
	e = l->AddEntry(dummy, "to CMS", "F");
	e->SetFillColor(kGreen+2);
	e->SetFillStyle(1001);
      }
      l->Draw();
      if (s->GetMinimum() > -1) s->SetMinimum(-1);
      
      PrintCanvas("  Ratios");
    }
  }
  //____________________________________________________________________
  void ProcessBin(TDirectory* d) 
  {
    Printf("  ProcessBin: %s", d->GetPath());

    TString tmp(d->GetName());
    tmp.ReplaceAll("p", "+");
    tmp.ReplaceAll("m", "-");
    tmp.ReplaceAll("d", ".");
    tmp.ReplaceAll("_", " ");
    TObjArray* tokens = tmp.Tokenize(" ");
    if (!tokens || tokens->GetEntriesFast() < 2) { 
      Error("Other2Stack", "Failed to decode eta range from %s", 
	    d->GetName());
      if (tokens) tokens->Delete();
      return;
    }
    Double_t eta1 = static_cast<TObjString*>(tokens->At(0))->String().Atof();
    Double_t eta2 = static_cast<TObjString*>(tokens->At(1))->String().Atof();
    tokens->Delete();

    fBody->Divide(1,5,0,0);
    TVirtualPad* p = fBody->cd(5);
    p->SetRightMargin(0.15);
    p->SetTopMargin(0.05);
    p = fBody->cd(4);
    p->SetBottomMargin(0.15);
    THStack* all = GetStack(d,"all");
    if (!all) {
      Warning("ProcessBin", "Argh! All stack not found!");
      return;
    }
    DrawInPad(fBody,1,all, "nostack", kLogy);
    DrawInPad(fBody,2,GetH1(d,"ratioCorrTruth"), "", 0);
    DrawInPad(fBody,3,GetH1(d,"ratioUnfAcc"), "", 0);
    DrawInPad(fBody,4,GetH1(d,"triggerVertex"), "", 0);
    DrawInPad(fBody,5,GetH2(d,"response"), "colz", kLogz);
    all->GetXaxis()->SetTitle("#it{N}_{ch}");
    all->GetYaxis()->SetTitle("P(#it{N}_{ch})");

    PrintCanvas(Form(" %+5.2f<eta<%+5.2f", eta1, eta2));
    
    DrawSteps(all, eta1, eta2);
  }
  //____________________________________________________________________
  void DrawSteps(THStack* stack, Double_t e1, Double_t e2) 
  {
    fBody->Divide(2, 3, 0, 0);
    TList* hists = stack->GetHists();
    Int_t  nHist = hists->GetEntries(); 
    
    // Make a background stack 
    THStack* bg = static_cast<THStack*>(stack->Clone("bg"));
    bg->SetTitle();
    
    for (Int_t i = 0; i < nHist; i++) { 
      // Loop over histograms and set the saved color
      TH1* h        = static_cast<TH1*>(bg->GetHists()->At(i));
      h->SetMarkerColor(kGray+1);
      h->SetFillColor(kGray);
      h->SetLineColor(kGray);

      TList* lf = h->GetListOfFunctions();
      if (lf) { 
	TObject* ll = lf->FindObject("legend");
	if (ll) lf->Remove(ll);
      }
    }
    const char* txt[] = { "MC 'truth'", 
			  "Selected MC 'truth'", 
			  "Measured", 
			  "Unfolded", 
			  "Corrected" };
    // Now loop again, this time drawing the stack
    for (Int_t i = 0; i < nHist; i++) { 
      
      DrawInPad(fBody, i+1, bg, "nostack", kLogy);
      DrawInPad(fBody, i+1, hists->At(i), "same hist p e", kLogy);
      gPad->SetGridx();
      gPad->SetGridy();
      bg->GetXaxis()->SetTitle("#it{N}_{ch}");
      bg->GetYaxis()->SetTitle("P(#it{N}_{ch})");

      TLatex* l = new TLatex(.95, .95, Form("Step %d", i));
      l->SetNDC();
      l->SetTextAlign(33);
      l->SetTextSize(0.06);
      l->Draw();
      l->DrawLatex(.95, .88, txt[i]);
      
    }
    PrintCanvas(Form(" %+5.2f<eta<%+5.2f - Steps", e1, e2));
  }
};
//
// EOF
//

 SummaryUnfoldedDrawer.C:1
 SummaryUnfoldedDrawer.C:2
 SummaryUnfoldedDrawer.C:3
 SummaryUnfoldedDrawer.C:4
 SummaryUnfoldedDrawer.C:5
 SummaryUnfoldedDrawer.C:6
 SummaryUnfoldedDrawer.C:7
 SummaryUnfoldedDrawer.C:8
 SummaryUnfoldedDrawer.C:9
 SummaryUnfoldedDrawer.C:10
 SummaryUnfoldedDrawer.C:11
 SummaryUnfoldedDrawer.C:12
 SummaryUnfoldedDrawer.C:13
 SummaryUnfoldedDrawer.C:14
 SummaryUnfoldedDrawer.C:15
 SummaryUnfoldedDrawer.C:16
 SummaryUnfoldedDrawer.C:17
 SummaryUnfoldedDrawer.C:18
 SummaryUnfoldedDrawer.C:19
 SummaryUnfoldedDrawer.C:20
 SummaryUnfoldedDrawer.C:21
 SummaryUnfoldedDrawer.C:22
 SummaryUnfoldedDrawer.C:23
 SummaryUnfoldedDrawer.C:24
 SummaryUnfoldedDrawer.C:25
 SummaryUnfoldedDrawer.C:26
 SummaryUnfoldedDrawer.C:27
 SummaryUnfoldedDrawer.C:28
 SummaryUnfoldedDrawer.C:29
 SummaryUnfoldedDrawer.C:30
 SummaryUnfoldedDrawer.C:31
 SummaryUnfoldedDrawer.C:32
 SummaryUnfoldedDrawer.C:33
 SummaryUnfoldedDrawer.C:34
 SummaryUnfoldedDrawer.C:35
 SummaryUnfoldedDrawer.C:36
 SummaryUnfoldedDrawer.C:37
 SummaryUnfoldedDrawer.C:38
 SummaryUnfoldedDrawer.C:39
 SummaryUnfoldedDrawer.C:40
 SummaryUnfoldedDrawer.C:41
 SummaryUnfoldedDrawer.C:42
 SummaryUnfoldedDrawer.C:43
 SummaryUnfoldedDrawer.C:44
 SummaryUnfoldedDrawer.C:45
 SummaryUnfoldedDrawer.C:46
 SummaryUnfoldedDrawer.C:47
 SummaryUnfoldedDrawer.C:48
 SummaryUnfoldedDrawer.C:49
 SummaryUnfoldedDrawer.C:50
 SummaryUnfoldedDrawer.C:51
 SummaryUnfoldedDrawer.C:52
 SummaryUnfoldedDrawer.C:53
 SummaryUnfoldedDrawer.C:54
 SummaryUnfoldedDrawer.C:55
 SummaryUnfoldedDrawer.C:56
 SummaryUnfoldedDrawer.C:57
 SummaryUnfoldedDrawer.C:58
 SummaryUnfoldedDrawer.C:59
 SummaryUnfoldedDrawer.C:60
 SummaryUnfoldedDrawer.C:61
 SummaryUnfoldedDrawer.C:62
 SummaryUnfoldedDrawer.C:63
 SummaryUnfoldedDrawer.C:64
 SummaryUnfoldedDrawer.C:65
 SummaryUnfoldedDrawer.C:66
 SummaryUnfoldedDrawer.C:67
 SummaryUnfoldedDrawer.C:68
 SummaryUnfoldedDrawer.C:69
 SummaryUnfoldedDrawer.C:70
 SummaryUnfoldedDrawer.C:71
 SummaryUnfoldedDrawer.C:72
 SummaryUnfoldedDrawer.C:73
 SummaryUnfoldedDrawer.C:74
 SummaryUnfoldedDrawer.C:75
 SummaryUnfoldedDrawer.C:76
 SummaryUnfoldedDrawer.C:77
 SummaryUnfoldedDrawer.C:78
 SummaryUnfoldedDrawer.C:79
 SummaryUnfoldedDrawer.C:80
 SummaryUnfoldedDrawer.C:81
 SummaryUnfoldedDrawer.C:82
 SummaryUnfoldedDrawer.C:83
 SummaryUnfoldedDrawer.C:84
 SummaryUnfoldedDrawer.C:85
 SummaryUnfoldedDrawer.C:86
 SummaryUnfoldedDrawer.C:87
 SummaryUnfoldedDrawer.C:88
 SummaryUnfoldedDrawer.C:89
 SummaryUnfoldedDrawer.C:90
 SummaryUnfoldedDrawer.C:91
 SummaryUnfoldedDrawer.C:92
 SummaryUnfoldedDrawer.C:93
 SummaryUnfoldedDrawer.C:94
 SummaryUnfoldedDrawer.C:95
 SummaryUnfoldedDrawer.C:96
 SummaryUnfoldedDrawer.C:97
 SummaryUnfoldedDrawer.C:98
 SummaryUnfoldedDrawer.C:99
 SummaryUnfoldedDrawer.C:100
 SummaryUnfoldedDrawer.C:101
 SummaryUnfoldedDrawer.C:102
 SummaryUnfoldedDrawer.C:103
 SummaryUnfoldedDrawer.C:104
 SummaryUnfoldedDrawer.C:105
 SummaryUnfoldedDrawer.C:106
 SummaryUnfoldedDrawer.C:107
 SummaryUnfoldedDrawer.C:108
 SummaryUnfoldedDrawer.C:109
 SummaryUnfoldedDrawer.C:110
 SummaryUnfoldedDrawer.C:111
 SummaryUnfoldedDrawer.C:112
 SummaryUnfoldedDrawer.C:113
 SummaryUnfoldedDrawer.C:114
 SummaryUnfoldedDrawer.C:115
 SummaryUnfoldedDrawer.C:116
 SummaryUnfoldedDrawer.C:117
 SummaryUnfoldedDrawer.C:118
 SummaryUnfoldedDrawer.C:119
 SummaryUnfoldedDrawer.C:120
 SummaryUnfoldedDrawer.C:121
 SummaryUnfoldedDrawer.C:122
 SummaryUnfoldedDrawer.C:123
 SummaryUnfoldedDrawer.C:124
 SummaryUnfoldedDrawer.C:125
 SummaryUnfoldedDrawer.C:126
 SummaryUnfoldedDrawer.C:127
 SummaryUnfoldedDrawer.C:128
 SummaryUnfoldedDrawer.C:129
 SummaryUnfoldedDrawer.C:130
 SummaryUnfoldedDrawer.C:131
 SummaryUnfoldedDrawer.C:132
 SummaryUnfoldedDrawer.C:133
 SummaryUnfoldedDrawer.C:134
 SummaryUnfoldedDrawer.C:135
 SummaryUnfoldedDrawer.C:136
 SummaryUnfoldedDrawer.C:137
 SummaryUnfoldedDrawer.C:138
 SummaryUnfoldedDrawer.C:139
 SummaryUnfoldedDrawer.C:140
 SummaryUnfoldedDrawer.C:141
 SummaryUnfoldedDrawer.C:142
 SummaryUnfoldedDrawer.C:143
 SummaryUnfoldedDrawer.C:144
 SummaryUnfoldedDrawer.C:145
 SummaryUnfoldedDrawer.C:146
 SummaryUnfoldedDrawer.C:147
 SummaryUnfoldedDrawer.C:148
 SummaryUnfoldedDrawer.C:149
 SummaryUnfoldedDrawer.C:150
 SummaryUnfoldedDrawer.C:151
 SummaryUnfoldedDrawer.C:152
 SummaryUnfoldedDrawer.C:153
 SummaryUnfoldedDrawer.C:154
 SummaryUnfoldedDrawer.C:155
 SummaryUnfoldedDrawer.C:156
 SummaryUnfoldedDrawer.C:157
 SummaryUnfoldedDrawer.C:158
 SummaryUnfoldedDrawer.C:159
 SummaryUnfoldedDrawer.C:160
 SummaryUnfoldedDrawer.C:161
 SummaryUnfoldedDrawer.C:162
 SummaryUnfoldedDrawer.C:163
 SummaryUnfoldedDrawer.C:164
 SummaryUnfoldedDrawer.C:165
 SummaryUnfoldedDrawer.C:166
 SummaryUnfoldedDrawer.C:167
 SummaryUnfoldedDrawer.C:168
 SummaryUnfoldedDrawer.C:169
 SummaryUnfoldedDrawer.C:170
 SummaryUnfoldedDrawer.C:171
 SummaryUnfoldedDrawer.C:172
 SummaryUnfoldedDrawer.C:173
 SummaryUnfoldedDrawer.C:174
 SummaryUnfoldedDrawer.C:175
 SummaryUnfoldedDrawer.C:176
 SummaryUnfoldedDrawer.C:177
 SummaryUnfoldedDrawer.C:178
 SummaryUnfoldedDrawer.C:179
 SummaryUnfoldedDrawer.C:180
 SummaryUnfoldedDrawer.C:181
 SummaryUnfoldedDrawer.C:182
 SummaryUnfoldedDrawer.C:183
 SummaryUnfoldedDrawer.C:184
 SummaryUnfoldedDrawer.C:185
 SummaryUnfoldedDrawer.C:186
 SummaryUnfoldedDrawer.C:187
 SummaryUnfoldedDrawer.C:188
 SummaryUnfoldedDrawer.C:189
 SummaryUnfoldedDrawer.C:190
 SummaryUnfoldedDrawer.C:191
 SummaryUnfoldedDrawer.C:192
 SummaryUnfoldedDrawer.C:193
 SummaryUnfoldedDrawer.C:194
 SummaryUnfoldedDrawer.C:195
 SummaryUnfoldedDrawer.C:196
 SummaryUnfoldedDrawer.C:197
 SummaryUnfoldedDrawer.C:198
 SummaryUnfoldedDrawer.C:199
 SummaryUnfoldedDrawer.C:200
 SummaryUnfoldedDrawer.C:201
 SummaryUnfoldedDrawer.C:202
 SummaryUnfoldedDrawer.C:203
 SummaryUnfoldedDrawer.C:204
 SummaryUnfoldedDrawer.C:205
 SummaryUnfoldedDrawer.C:206
 SummaryUnfoldedDrawer.C:207
 SummaryUnfoldedDrawer.C:208
 SummaryUnfoldedDrawer.C:209
 SummaryUnfoldedDrawer.C:210
 SummaryUnfoldedDrawer.C:211
 SummaryUnfoldedDrawer.C:212
 SummaryUnfoldedDrawer.C:213
 SummaryUnfoldedDrawer.C:214
 SummaryUnfoldedDrawer.C:215
 SummaryUnfoldedDrawer.C:216
 SummaryUnfoldedDrawer.C:217
 SummaryUnfoldedDrawer.C:218
 SummaryUnfoldedDrawer.C:219
 SummaryUnfoldedDrawer.C:220
 SummaryUnfoldedDrawer.C:221
 SummaryUnfoldedDrawer.C:222
 SummaryUnfoldedDrawer.C:223
 SummaryUnfoldedDrawer.C:224
 SummaryUnfoldedDrawer.C:225
 SummaryUnfoldedDrawer.C:226
 SummaryUnfoldedDrawer.C:227
 SummaryUnfoldedDrawer.C:228
 SummaryUnfoldedDrawer.C:229
 SummaryUnfoldedDrawer.C:230
 SummaryUnfoldedDrawer.C:231
 SummaryUnfoldedDrawer.C:232
 SummaryUnfoldedDrawer.C:233
 SummaryUnfoldedDrawer.C:234
 SummaryUnfoldedDrawer.C:235
 SummaryUnfoldedDrawer.C:236
 SummaryUnfoldedDrawer.C:237
 SummaryUnfoldedDrawer.C:238
 SummaryUnfoldedDrawer.C:239
 SummaryUnfoldedDrawer.C:240
 SummaryUnfoldedDrawer.C:241
 SummaryUnfoldedDrawer.C:242
 SummaryUnfoldedDrawer.C:243
 SummaryUnfoldedDrawer.C:244
 SummaryUnfoldedDrawer.C:245
 SummaryUnfoldedDrawer.C:246
 SummaryUnfoldedDrawer.C:247
 SummaryUnfoldedDrawer.C:248
 SummaryUnfoldedDrawer.C:249
 SummaryUnfoldedDrawer.C:250
 SummaryUnfoldedDrawer.C:251
 SummaryUnfoldedDrawer.C:252
 SummaryUnfoldedDrawer.C:253
 SummaryUnfoldedDrawer.C:254
 SummaryUnfoldedDrawer.C:255
 SummaryUnfoldedDrawer.C:256
 SummaryUnfoldedDrawer.C:257
 SummaryUnfoldedDrawer.C:258
 SummaryUnfoldedDrawer.C:259
 SummaryUnfoldedDrawer.C:260
 SummaryUnfoldedDrawer.C:261
 SummaryUnfoldedDrawer.C:262
 SummaryUnfoldedDrawer.C:263
 SummaryUnfoldedDrawer.C:264
 SummaryUnfoldedDrawer.C:265
 SummaryUnfoldedDrawer.C:266
 SummaryUnfoldedDrawer.C:267
 SummaryUnfoldedDrawer.C:268
 SummaryUnfoldedDrawer.C:269
 SummaryUnfoldedDrawer.C:270
 SummaryUnfoldedDrawer.C:271
 SummaryUnfoldedDrawer.C:272
 SummaryUnfoldedDrawer.C:273
 SummaryUnfoldedDrawer.C:274
 SummaryUnfoldedDrawer.C:275
 SummaryUnfoldedDrawer.C:276
 SummaryUnfoldedDrawer.C:277
 SummaryUnfoldedDrawer.C:278
 SummaryUnfoldedDrawer.C:279
 SummaryUnfoldedDrawer.C:280
 SummaryUnfoldedDrawer.C:281
 SummaryUnfoldedDrawer.C:282
 SummaryUnfoldedDrawer.C:283
 SummaryUnfoldedDrawer.C:284
 SummaryUnfoldedDrawer.C:285
 SummaryUnfoldedDrawer.C:286
 SummaryUnfoldedDrawer.C:287
 SummaryUnfoldedDrawer.C:288
 SummaryUnfoldedDrawer.C:289
 SummaryUnfoldedDrawer.C:290
 SummaryUnfoldedDrawer.C:291
 SummaryUnfoldedDrawer.C:292
 SummaryUnfoldedDrawer.C:293
 SummaryUnfoldedDrawer.C:294
 SummaryUnfoldedDrawer.C:295
 SummaryUnfoldedDrawer.C:296
 SummaryUnfoldedDrawer.C:297
 SummaryUnfoldedDrawer.C:298
 SummaryUnfoldedDrawer.C:299
 SummaryUnfoldedDrawer.C:300
 SummaryUnfoldedDrawer.C:301
 SummaryUnfoldedDrawer.C:302
 SummaryUnfoldedDrawer.C:303
 SummaryUnfoldedDrawer.C:304