ROOT logo
#if !defined(__CINT__) || defined(__MAKECINT__)
#include <string.h>
#include "TFile.h"
#include "TTree.h"
#include "TKey.h"
#include "Riostream.h"
#include "TCanvas.h"
#include "TPad.h"
#include "TText.h"
#include "TError.h"
#endif

// Make a pdf with all QA plots 
// A. SHABETAI

TFile* sourceFile;
TObject* Myobj;
TCanvas* canvasDefault;
TString Mypath;
const char* title;

void recurseOverKeys( TDirectory *target, TString f);

//---------------------------------------------------------------------------------------
void MakeQAPdf(const char* fileName, int outputWidth  = 600,  int outputHeight = 600) 
{

  sourceFile = TFile::Open(fileName);

  canvasDefault = new TCanvas("canvasDefault","testCanvas",outputWidth,outputHeight);
  TString f = TString(fileName).ReplaceAll(".root","");
  
  canvasDefault->Print(Form("%s%s",f.Data(),".pdf["));
  gErrorIgnoreLevel = kInfo + 1;

  // Now actually find all the directories, canvas, and make a pdf..
  recurseOverKeys(sourceFile,f);  

  gPad->Print(Form("%s%s",f.Data(),".pdf]"),Form("Title:%s/%s",Mypath.Data(),title));
  gErrorIgnoreLevel = -1;
  sourceFile->Close(); 

}

//---------------------------------------------------------------------------------------
void recurseOverKeys( TDirectory *target,TString f ) 
{
 
  TString path = TString((char*)strstr( target->GetPath(), ":" ));
  path.Remove(0, 2);
 
  gErrorIgnoreLevel = kInfo + 1; 

  sourceFile->cd(path.Data());

  Mypath = path;
  Mypath.ReplaceAll("CaloQA_","");
  Mypath.ReplaceAll("default","trigMB");
  Mypath.ReplaceAll("trig","");

  TDirectory *current_sourcedir = gDirectory;

  TKey *key;
  TIter nextkey(current_sourcedir->GetListOfKeys());

  while ((key = (TKey*)nextkey())) 
  {

    Myobj = key->ReadObj();

    if (TString(Myobj->IsA()->GetName()).Contains("TCanvas")) 
      {
	title = Myobj->GetTitle();

	((TCanvas*)Myobj)->Print(Form("%s%s",f.Data(),".pdf"),Form("Title:%s/%s",Mypath.Data(),title));
      }
    else if ( Myobj->IsA()->InheritsFrom( "TDirectory" ) ) 
     {

      // Myobj is now the starting point of another iteration
      // obj still knows its depth within the target file via
      // GetPath(), so we can still figure out where we are in the recursion
      recurseOverKeys( (TDirectory*)Myobj, f );

    } // end of IF a TDriectory

  } // end of LOOP over keys

}
 MakeQAPdf.C:1
 MakeQAPdf.C:2
 MakeQAPdf.C:3
 MakeQAPdf.C:4
 MakeQAPdf.C:5
 MakeQAPdf.C:6
 MakeQAPdf.C:7
 MakeQAPdf.C:8
 MakeQAPdf.C:9
 MakeQAPdf.C:10
 MakeQAPdf.C:11
 MakeQAPdf.C:12
 MakeQAPdf.C:13
 MakeQAPdf.C:14
 MakeQAPdf.C:15
 MakeQAPdf.C:16
 MakeQAPdf.C:17
 MakeQAPdf.C:18
 MakeQAPdf.C:19
 MakeQAPdf.C:20
 MakeQAPdf.C:21
 MakeQAPdf.C:22
 MakeQAPdf.C:23
 MakeQAPdf.C:24
 MakeQAPdf.C:25
 MakeQAPdf.C:26
 MakeQAPdf.C:27
 MakeQAPdf.C:28
 MakeQAPdf.C:29
 MakeQAPdf.C:30
 MakeQAPdf.C:31
 MakeQAPdf.C:32
 MakeQAPdf.C:33
 MakeQAPdf.C:34
 MakeQAPdf.C:35
 MakeQAPdf.C:36
 MakeQAPdf.C:37
 MakeQAPdf.C:38
 MakeQAPdf.C:39
 MakeQAPdf.C:40
 MakeQAPdf.C:41
 MakeQAPdf.C:42
 MakeQAPdf.C:43
 MakeQAPdf.C:44
 MakeQAPdf.C:45
 MakeQAPdf.C:46
 MakeQAPdf.C:47
 MakeQAPdf.C:48
 MakeQAPdf.C:49
 MakeQAPdf.C:50
 MakeQAPdf.C:51
 MakeQAPdf.C:52
 MakeQAPdf.C:53
 MakeQAPdf.C:54
 MakeQAPdf.C:55
 MakeQAPdf.C:56
 MakeQAPdf.C:57
 MakeQAPdf.C:58
 MakeQAPdf.C:59
 MakeQAPdf.C:60
 MakeQAPdf.C:61
 MakeQAPdf.C:62
 MakeQAPdf.C:63
 MakeQAPdf.C:64
 MakeQAPdf.C:65
 MakeQAPdf.C:66
 MakeQAPdf.C:67
 MakeQAPdf.C:68
 MakeQAPdf.C:69
 MakeQAPdf.C:70
 MakeQAPdf.C:71
 MakeQAPdf.C:72
 MakeQAPdf.C:73
 MakeQAPdf.C:74
 MakeQAPdf.C:75
 MakeQAPdf.C:76
 MakeQAPdf.C:77
 MakeQAPdf.C:78
 MakeQAPdf.C:79
 MakeQAPdf.C:80
 MakeQAPdf.C:81
 MakeQAPdf.C:82
 MakeQAPdf.C:83
 MakeQAPdf.C:84
 MakeQAPdf.C:85
 MakeQAPdf.C:86
 MakeQAPdf.C:87
 MakeQAPdf.C:88
 MakeQAPdf.C:89
 MakeQAPdf.C:90