// This macro plots all int/float/double ntuples from a root file in 1D histograms // the output is by default a multi page .pdf // R. Kliemt, 2008 // #include #include #include #include #include #include #include #include #include #include void plotsignalbgfromfiles(TString filename1, TString filename2, TString title1="Signal", TString title2="DPM", bool doscale=true, TString ext=".pdf", Int_t divx=4, Int_t divy=7, Int_t pix = 400) { // Plot all columns of an NTuple into a pdf (or ps file) TFile* file1 = new TFile(filename1.Data()); if (!file1) {cout<<"File 1 \""<SetCanvasSize(pixx,pixy); can->Divide(divx, divy); TString picname = filename1; ext="."+ext; ext.ReplaceAll("..","."); picname.ReplaceAll(".root",""); // ps, png, pdf ... picname = Form("%s_sigbg%s_%s",picname.Data(),(doscale) ? "_scaled" : "",ext.Data()); TString pic = picname + "["; // open empty ps cout << "opening: " << pic.Data()<Print(pic); pic=picname; can->cd(1); DrawText(0.1,0.5,title1.Data(),0.08,kRed); DrawText(0.1,0.3,title2.Data(),0.08,kBlue); TList* list1 = file1->GetListOfKeys(); if (!list1) {cout<<"List 1 not there..."<GetListOfKeys(); if (!list2) {cout<<"List 2 not there..."<GetEntries();i++) { TKey* key1 = (TKey*)list1->At(i); TKey* key2 = (TKey*)list2->At(i); keyclass = key1->GetClassName(); if(keyclass.CompareTo("TTree"))continue; TTree* baum1 = (TTree*)key1->ReadObj(); TTree* baum2 = (TTree*)key2->ReadObj(); printf("\t - Tree: %s\n",baum1->GetName()); TObjArray* aeste = baum1->GetListOfBranches(); for(int asti=0;astiGetEntriesFast();asti++) { TBranch* ast = (TBranch*)aeste->At(asti); printf("\t\t - Branch: %s\n",ast->GetName()); TObjArray* bleatter = ast->GetListOfLeaves(); for(int blatti=0;blattiGetEntriesFast();blatti++) { TLeaf* blatt = (TLeaf*)bleatter->At(blatti); TString blattsorte=blatt->GetTypeName(); if( !blattsorte.CompareTo("Float_t") || !blattsorte.CompareTo("Int_t") || !blattsorte.CompareTo("Double_t")) { if(padcount > divx*divy) { printf(" --- canvasdump ---"); can->Print(pic.Data()); can->Clear(); can->SetCanvasSize(pixx,pixy); can->Divide(divx, divy); padcount=1; } can->cd(padcount); printf("\t\t\t - Leaf: %s (%s)\n",blatt->GetName(),blatt->GetTypeName()); baum2->Draw(blatt->GetName()); TH1F *htmp = (TH1F*)gPad->GetPrimitive("htemp"); //TH1F *htmp = (TH1F*)gDirectory->Get("htemp1"); double maxbg=htmp->GetMaximum(); //htmp->SetLineColor(kRed);//dpm htmp->SetTitleSize(2); //if(doscale)htmp->Scale(1./maxbg); baum1->Draw(blatt->GetName(),"","same"); double maxsig=htmp->GetMaximum(); htmp->SetLineColor(kRed);//signal htmp->SetTitleSize(2); if(doscale)htmp->Scale(maxbg/maxsig); padcount++; } } } } can->Print(pic.Data()); pic = picname + "]"; // close ps can->Print(pic.Data()); cout << "closed: " << pic.Data()<Exec(convertcmd.Data()); delete can; return; } void DrawText(Double_t posX = 0., Double_t posY = 0., const char* text = "", Double_t size=0.08, Int_t col=1 // Int_t align=0, Double_t angle=0., // Int_t font, Bool_t bNDC=kTRUE ) { // Drawing some TLatex text in a root canvas, overlaying the content TLatex* pText=new TLatex(posX,posY,text); pText->SetNDC(kTRUE); // pText->SetNDC(bNDC); pText->SetTextColor(col); pText->SetTextSize(size); // pText->SetTextAngle(angle); // pText->SetTextFont(font); pText->SetTextAlign(align); pText->Draw(); }