void compare_dat_sim(TString rfile){ // histo parameters gStyle->SetTitleYOffset(1.6); gStyle->SetTitleXOffset(1.6); gStyle->SetLabelSize(0.07,"x"); gStyle->SetLabelSize(0.07,"y"); gStyle->SetTitleSize(0.05,"x"); gStyle->SetTitleSize(0.05,"y"); gStyle->SetTitleX(0.3); gStyle->SetTitleW(0.6); gStyle->SetTitleBorderSize(0); gStyle->SetTitleFillColor(0); gStyle->SetTitleFontSize(0.09); // Fit and stat parameters gStyle->SetOptFit(0); gStyle->SetOptStat(0); gStyle->SetStatY(0.99); gStyle->SetStatX(0.99); gStyle->SetStatW(0.25); gStyle->SetStatH(0.15); Char_t filename[200]; //Get the root file //sprintf(filename,"../hbook/replayed/%s.root",rfile.Data()); //sprintf(filename,"../hbook/%s.root",rfile.Data()); //sprintf(filename,"../hbook/carbon/%s.root",rfile.Data()); sprintf(filename,"../hbook/aluminum/pass0/%s.root",rfile.Data()); TFile * f = new TFile(filename); if(!f->IsOpen()) exit(1); if (f->IsZombie()) exit(1); std::cout<<"Opened "<<filename<<"\n"; /****************** Draw all the 1D histograms *******************/ TCanvas * c = new TCanvas("c", "",0,0,1800,1000); c->Divide(4,4); // e data histos idbase = 1 // e sim histos idbase = 12 /* call hfill(3000+idbase,sngl(hsdelta),zero,sngl(weight)) call hfill(3100+idbase,sngl(hsxptar),zero,sngl(weight)) call hfill(3200+idbase,sngl(hsyptar),zero,sngl(weight)) call hfill(3300+idbase,sngl(hsytar),zero,sngl(weight)) call hfill(3400+idbase,sngl(hsxfp),zero,sngl(weight)) call hfill(3500+idbase,sngl(hsxpfp),zero,sngl(weight)) call hfill(3600+idbase,sngl(hsyfp),zero,sngl(weight)) call hfill(3700+idbase,sngl(hsypfp),zero,sngl(weight)) call hfill(3800+idbase,sngl(W),zero,sngl(weight)) call hfill(3900+idbase,sngl(Q2),zero,sngl(weight)) call hfill(4200+idbase,sngl(hstheta-th_rad),zero,sngl(weight)) call hfill(4300+idbase,sngl(eprime),zero,sngl(weight)) call hfill(4400+idbase,sngl(hsdelta),sngl(hstheta-th_rad),sngl(weight)) call hfill(4100+idbase,sngl(xi),zero,sngl(weight)) call hfill(4000+idbase,sngl(x_bj),zero,sngl(weight)) call hfill(4500+idbase,sngl(hsdelta),sngl(hsytar),sngl(weight)) call hfill(4600+idbase,sngl(hsxptar),sngl(hsyptar),sngl(weight)) C HISTOGRAM KEY C 1X01 DATA C 1X02 DATA (ELCLEAN) C 1X03 DATA(ELREAL)/DATA(ELCLEAN) C 1X04 POSITRONS C 1X05 DATA*(1-POSITRONS/DATA(ELCLEAN)) = DATA_POSCOR C 1X06 DUMMY C 1X07 DUMMY (ELCLEAN) C 1X08 DUMMY(ELREAL)/DUMMY(ELCLEAN) C 1X09 DUMMY POSITRONS C 1X10 DUMMY*( 1-(DUMMY POSITRONS)/DUMMY(ELCLEAN) ) = DUMMY_POSCOR C 1X11 DATA_POSCOR - DUMMY_POSCOR/7.2 * (DATA_CHARGE/DUMMY_CHARGE) C 1X12 SIMC C 1X13 DATA/SIMC C 1X14 (DATA/SIMC)*MODEL C 1X15 POSITRONS/DATA(ELCLEAN) What we should compare to check if the data matches simulation is SIMC (12) to DATA*(1-POSITRONS/DATA(ELCLEAN)) = DATA_POSCOR (5), the positron corrected dat or DATA_POSCOR - DUMMY_POSCOR/7.2 * (DATA_CHARGE/DUMMY_CHARGE) (11) same as positron corrected data since for the dummy target theres is DUMMY_POSCOR = 0. So compare idbase = 5/11 to sim idbase = 12 */ THStack *hs[15]; Double_t didbase = 0; Double_t sidbase = 0; Double_t histid[15]={3000,3100,3200,3300,3400,3500,3600,3700,3800,3900,4200,4300,4400,4100,4000}; TString histnam[15]={"hsdelta","hsxptar","hsyptar","hsytar","hsxfp","hsxpfp","hsyfp","hsypfp","W","Q2","hstheta","eprime","th_vs_delta","xi","x_bj"}; // loop over the 15 types of histos from data and sim and stack them for (Int_t i=0;i<15; i++){ // std::cout<<i<<std::endl; c->cd(i+1); // gPad->SetLogy(); hs[i] = new THStack("fs",Form("%s",histnam[i].Data())); // first get positron corrected electron data. This could be idbase = 5 or idbase = 11 (for dummy targets only) didbase =5; TH1F *hdat = (TH1F*)f->Get(Form("h%2.0f",histid[i]+didbase)); //std::cout<<Form("h%2.0f",histid[i]+didbase)<<std::endl; // next get sim histos sidbase = 12; TH1F *hsim = (TH1F*)f->Get(Form("h%2.0f",histid[i]+sidbase)); hsim->SetLineColor(kRed); // std::cout<<Form("h%2.0f",histid[i]+sidbase)<<std::endl; hs[i]->Add(hsim); hs[i]->Add(hdat); hs[i]->Draw("nostack,hist"); gPad->Update(); TLegend * leg = new TLegend(0.7,0.7,0.9,0.9); leg->AddEntry(hdat,Form("data(1x%2.0f)",didbase),"l"); leg->AddEntry(hsim,"simc(1x12)","l"); leg->Draw(); // c1->cd(i+1); // idbase = 1; // TH1F *hdat1 = (TH1F*)f->Get(Form("h%2.0f",histid[i]+idbase)); // //hdat1->SetLineColor(kGreen+2); // //hdat1->Add(hsim,0.0); // hdat1->Draw(); // hdat1->GetXaxis()->SetLabelSize(0.07); // hdat1->GetYaxis()->SetLabelSize(0.07); // gPad->Update(); } c->cd(16); TPaveText *pt = new TPaveText(.05,.1,.95,.8); pt->AddText("ROOT file used:"); pt->AddText(rfile); pt->AddLine(.0,.5,1.,.5); pt->Draw(); /****************** Draw the 2D histograms *******************/ //c->Print(Form("~/MyWork/HallC/SRC/xem/scripts/compare_dat_sim/stack_dat_%1.0f_sim_12_%s.png",didbase,rfile.Data())); //c->Print(Form("~/MyWork/HallC/SRC/xem/scripts/compare_dat_sim/stack_dat_%1.0f_sim_12_%s.C",didbase,rfile.Data())); //c1->Print(Form("diff_dat_sim_%s.png",rfile.Data())); //c1->Print(Form("diff_dat_sim_%s.C",rfile.Data())); }
void tree() { // // This macro displays the Tree data structures //Author: Rene Brun TCanvas* c1 = new TCanvas("c1","Tree Data Structure",200,10,750,940); c1->Range(0,-0.1,1,1.15); gBenchmark->Start("tree"); Int_t branchcolor = 26; Int_t leafcolor = 30; Int_t basketcolor = 42; Int_t offsetcolor = 43; TPaveLabel* title = new TPaveLabel(.3,1.05,.8,1.13,c1->GetTitle()); title->SetFillColor(16); title->Draw(); TPaveText* treePave = new TPaveText(.01,.75,.15,1.00); treePave->SetFillColor(18); treePave->SetTextAlign(12); TText *tnt = treePave->AddText("Tree"); tnt->SetTextAlign(22); tnt->SetTextSize(0.030); treePave->AddText("fScanField"); treePave->AddText("fMaxEventLoop"); treePave->AddText("fMaxVirtualSize"); treePave->AddText("fEntries"); treePave->AddText("fDimension"); treePave->AddText("fSelectedRows"); treePave->Draw(); TPavesText* farm = new TPavesText(.01,1.02,.15,1.1,9,"tr"); TText *tfarm = farm->AddText("CHAIN"); tfarm->SetTextSize(0.024); farm->AddText("Collection"); farm->AddText("of Trees"); farm->Draw(); TLine* llink = new TLine(.15,.92,.80,.92); llink->SetLineWidth(2); llink->SetLineColor(1); llink->Draw(); llink->DrawLine(.21,.87,.21,.275); llink->DrawLine(.23,.87,.23,.375); llink->DrawLine(.25,.87,.25,.775); llink->DrawLine(.41,.25,.41,-.025); llink->DrawLine(.43,.25,.43,.075); llink->DrawLine(.45,.25,.45,.175); TPaveLabel* branch0 = new TPaveLabel(.20,.87,.35,.97,"Branch 0"); branch0->SetTextSize(0.35); branch0->SetFillColor(branchcolor); branch0->Draw(); TPaveLabel* branch1 = new TPaveLabel(.40,.87,.55,.97,"Branch 1"); branch1->SetTextSize(0.35); branch1->SetFillColor(branchcolor); branch1->Draw(); TPaveLabel* branch2 = new TPaveLabel(.60,.87,.75,.97,"Branch 2"); branch2->SetTextSize(0.35); branch2->SetFillColor(branchcolor); branch2->Draw(); TPaveLabel* branch3 = new TPaveLabel(.80,.87,.95,.97,"Branch 3"); branch3->SetTextSize(0.35); branch3->SetFillColor(branchcolor); branch3->Draw(); TPaveLabel* leaf0 = new TPaveLabel(.4,.75,.5,.8,"Leaf 0"); leaf0->SetFillColor(leafcolor); leaf0->Draw(); TPaveLabel* leaf1 = new TPaveLabel(.6,.75,.7,.8,"Leaf 1"); leaf1->SetFillColor(leafcolor); leaf1->Draw(); TPaveLabel* leaf2 = new TPaveLabel(.8,.75,.9,.8,"Leaf 2"); leaf2->SetFillColor(leafcolor); leaf2->Draw(); TPaveText* firstevent = new TPaveText(.4,.35,.9,.4); firstevent->AddText("First event of each basket"); firstevent->AddText("Array of fMaxBaskets Integers"); firstevent->SetFillColor(basketcolor); firstevent->Draw(); TPaveLabel* basket0 = new TPaveLabel(.4,.25,.5,.3,"Basket 0"); basket0->SetFillColor(basketcolor); basket0->Draw(); TPaveLabel* basket1 = new TPaveLabel(.6,.25,.7,.3,"Basket 1"); basket1->SetFillColor(basketcolor); basket1->Draw(); TPaveLabel* basket2 = new TPaveLabel(.8,.25,.9,.3,"Basket 2"); basket2->SetFillColor(basketcolor); basket2->Draw(); TPaveText* offset = new TPaveText(.55,.15,.9,.2); offset->AddText("Offset of events in fBuffer"); offset->AddText("Array of fEventOffsetLen Integers"); offset->AddText("(if variable length structure)"); offset->SetFillColor(offsetcolor); offset->Draw(); TPaveText* buffer = new TPaveText(.55,.05,.9,.1); buffer->AddText("Basket buffer"); buffer->AddText("Array of fBasketSize chars"); buffer->SetFillColor(offsetcolor); buffer->Draw(); TPaveText* zipbuffer = new TPaveText(.55,-.05,.75,.0); zipbuffer->AddText("Basket compressed buffer"); zipbuffer->AddText("(if compression)"); zipbuffer->SetFillColor(offsetcolor); zipbuffer->Draw(); TArrow* ar1 = new TArrow(); ar1->SetLineWidth(2); ar1->SetLineColor(1); ar1->SetFillStyle(1001); ar1->SetFillColor(1); ar1->DrawArrow(.21,.275,.39,.275,0.015,"|>"); ar1->DrawArrow(.23,.375,.39,.375,0.015,"|>"); ar1->DrawArrow(.25,.775,.39,.775,0.015,"|>"); ar1->DrawArrow(.50,.775,.59,.775,0.015,"|>"); ar1->DrawArrow(.70,.775,.79,.775,0.015,"|>"); ar1->DrawArrow(.50,.275,.59,.275,0.015,"|>"); ar1->DrawArrow(.70,.275,.79,.275,0.015,"|>"); ar1->DrawArrow(.45,.175,.54,.175,0.015,"|>"); ar1->DrawArrow(.43,.075,.54,.075,0.015,"|>"); ar1->DrawArrow(.41,-.025,.54,-.025,0.015,"|>"); TLine* ldot = new TLine(.95,.92,.99,.92); ldot->SetLineStyle(3); ldot->Draw(); ldot->DrawLine(.9,.775,.99,.775); ldot->DrawLine(.9,.275,.99,.275); ldot->DrawLine(.55,.05,.55,0); ldot->DrawLine(.9,.05,.75,0); TText* pname = new TText(.46,.21,"fEventOffset"); pname->SetTextFont(72); pname->SetTextSize(0.018); pname->Draw(); pname->DrawText(.44,.11,"fBuffer"); pname->DrawText(.42,.01,"fZipBuffer"); pname->DrawText(.26,.81,"fLeaves = TObjArray of TLeaf"); pname->DrawText(.24,.40,"fBasketEvent"); pname->DrawText(.22,.31,"fBaskets = TObjArray of TBasket"); pname->DrawText(.20,1.0,"fBranches = TObjArray of TBranch"); TPaveText* ntleaf = new TPaveText(0.30,.42,.62,.7); ntleaf->SetTextSize(0.014); ntleaf->SetFillColor(leafcolor); ntleaf->SetTextAlign(12); ntleaf->AddText("fLen: number of fixed elements"); ntleaf->AddText("fLenType: number of bytes of data type"); ntleaf->AddText("fOffset: relative to Leaf0-fAddress"); ntleaf->AddText("fNbytesIO: number of bytes used for I/O"); ntleaf->AddText("fIsPointer: True if pointer"); ntleaf->AddText("fIsRange: True if leaf has a range"); ntleaf->AddText("fIsUnsigned: True if unsigned"); ntleaf->AddText("*fLeafCount: points to Leaf counter"); ntleaf->AddText(" "); ntleaf->AddLine(0,0,0,0); ntleaf->AddText("fName = Leaf name"); ntleaf->AddText("fTitle = Leaf type (see Type codes)"); ntleaf->Draw(); TPaveText* type = new TPaveText(.65,.42,.95,.7); type->SetTextAlign(12); type->SetFillColor(leafcolor); type->AddText(" "); type->AddText("C : a character string"); type->AddText("B : an 8 bit signed integer"); type->AddText("b : an 8 bit unsigned integer"); type->AddText("S : a 16 bit signed short integer"); type->AddText("s : a 16 bit unsigned short integer"); type->AddText("I : a 32 bit signed integer"); type->AddText("i : a 32 bit unsigned integer"); type->AddText("F : a 32 bit floating point"); type->AddText("D : a 64 bit floating point"); type->AddText("TXXXX : a class name TXXXX"); type->Draw(); TPaveLabel* typecode = new TPaveLabel(.7,.68,.9,.72,"fType codes"); typecode->SetFillColor(leafcolor); typecode->Draw(); ldot->DrawLine(.4,.75,.30,.7); ldot->DrawLine(.5,.75,.62,.7); TPaveText* ntbasket = new TPaveText(0.02,-0.07,0.35,.25); ntbasket->SetFillColor(basketcolor); ntbasket->SetTextSize(0.014); ntbasket->SetTextAlign(12); ntbasket->AddText("fNbytes: Size of compressed Basket"); ntbasket->AddText("fObjLen: Size of uncompressed Basket"); ntbasket->AddText("fDatime: Date/Time when written to store"); ntbasket->AddText("fKeylen: Number of bytes for the key"); ntbasket->AddText("fCycle : Cycle number"); ntbasket->AddText("fSeekKey: Pointer to Basket on file"); ntbasket->AddText("fSeekPdir: Pointer to directory on file"); ntbasket->AddText("fClassName: 'TBasket'"); ntbasket->AddText("fName: Branch name"); ntbasket->AddText("fTitle: TreePave name"); ntbasket->AddText(" "); ntbasket->AddLine(0,0,0,0); ntbasket->AddText("fNevBuf: Number of events in Basket"); ntbasket->AddText("fLast: pointer to last used byte in Basket"); ntbasket->Draw(); ldot->DrawLine(.4,.3,0.02,0.25); ldot->DrawLine(.5,.25,0.35,-.07); ldot->DrawLine(.5,.3,0.35,0.25); TPaveText* ntbranch = new TPaveText(0.02,0.40,0.18,0.68); ntbranch->SetFillColor(branchcolor); ntbranch->SetTextSize(0.015); ntbranch->SetTextAlign(12); ntbranch->AddText("fBasketSize"); ntbranch->AddText("fEventOffsetLen"); ntbranch->AddText("fMaxBaskets"); ntbranch->AddText("fEntries"); ntbranch->AddText("fAddress of Leaf0"); ntbranch->AddText(" "); ntbranch->AddLine(0,0,0,0); ntbranch->AddText("fName: Branchname"); ntbranch->AddText("fTitle: leaflist"); ntbranch->Draw(); ldot->DrawLine(.2,.97,.02,.68); ldot->DrawLine(.35,.97,.18,.68); ldot->DrawLine(.35,.87,.18,.40); TPavesText* basketstore = new TPavesText(.8,-0.088,0.952,-0.0035,7,"tr"); basketstore->SetFillColor(28); basketstore->AddText("Baskets"); basketstore->AddText("Stores"); basketstore->Draw(); c1->Update(); gBenchmark->Show("treePave"); }
void file(){ TCanvas *c1 = new TCanvas("c1","ROOT File description",200,10,700,550); c1->Range(0,-0.25,21,14); TPaveLabel *title = new TPaveLabel(5,12,15,13.7,c1->GetTitle()); title->SetFillColor(16); title->Draw(); // horizonthal file layout TPave *file = new TPave(1,8.5,20,11); file->SetFillColor(11); file->Draw(); TPave *fileh = new TPave(1,8.5,2.5,11); fileh->SetFillColor(44); fileh->Draw(); TPave *lrh = new TPave(2.5,8.5,3.3,11,1); lrh->SetFillColor(33); lrh->Draw(); lrh->DrawPave(6.9,8.5,7.7,11,1); lrh->DrawPave(10.5,8.5,11.3,11,1); lrh->DrawPave(14.5,8.5,15.3,11,1); TLine *ldot = new TLine(1,8.5,0.5,6.5); ldot->SetLineStyle(2); ldot->Draw(); ldot->DrawLine(2.5, 8.5, 9.4, 6.5); ldot->DrawLine(10.5, 8.5, 10, 6.5); ldot->DrawLine(11.3, 8.5, 19.5, 6.5); TLine *line = new TLine(2.6,11,2.6,11.5); line->Draw(); line->DrawLine(2.6,11.5,7,11.5); TArrow *arrow = new TArrow(7,11.5,7,11.1,0.01,"|>"); arrow->SetFillStyle(1001); arrow->Draw(); line->DrawLine( 7, 8.5, 7, 8.0); line->DrawLine( 7, 8.0, 10.6, 8); arrow->DrawArrow( 10.6,8, 10.6, 8.4,0.01,"|>"); line->DrawLine( 10.6, 11, 10.6, 11.5); line->DrawLine( 10.6, 11.5, 14.6, 11.5); arrow->DrawArrow( 14.6,11.5, 14.6,11.1,0.01,"|>"); line->DrawLine( 14.6, 8.5, 14.6, 8.0); line->DrawLine( 14.6, 8.0, 16, 8); ldot->DrawLine(16, 8, 19, 8); TText *vert = new TText(1.5,9.75,"File"); vert->SetTextAlign(21); vert->SetTextAngle(90); vert->SetTextSize(0.025); vert->Draw(); vert->DrawText(2.0, 9.75,"Header"); vert->DrawText(2.9, 9.75,"Logical Record"); vert->DrawText(3.2, 9.75,"Header"); vert->DrawText(7.3, 9.75,"Logical Record"); vert->DrawText(7.6, 9.75,"Header"); vert->DrawText(10.9,9.75,"Logical Record"); vert->DrawText(11.2,9.75,"Header"); vert->DrawText(14.9,9.75,"Logical Record"); vert->DrawText(15.2,9.75,"Header"); TText *hori = new TText(4.75,10,"Object"); hori->SetTextAlign(22); hori->SetTextSize(0.035); hori->Draw(); hori->DrawText(4.75, 9.5,"Data"); hori->DrawText(9.2, 10,"Deleted"); hori->DrawText(9.2, 9.5,"Object"); line->DrawLine( 6.9, 8.5, 10.5, 11); line->DrawLine( 6.9, 11, 10.5, 8.5); TText *tbig = new TText(17,9.75,"............"); tbig->SetTextAlign(22); tbig->SetTextSize(0.03); tbig->Draw(); tbig->DrawText(2.6, 7, "fBEGIN"); tbig->DrawText(20., 7, "fEND"); arrow->DrawArrow( 2.6,7, 2.6,8.4,0.01,"|>"); arrow->DrawArrow( 20,7, 20,8.4,0.01,"|>"); //file header TPaveText *header = new TPaveText(0.5,.2,9.4,6.5); header->SetFillColor(44); header->Draw(); TText *fh=header->AddText("File Header"); fh->SetTextAlign(22); fh->SetTextSize(0.04); header->SetTextSize(0.027); header->SetTextAlign(12); header->AddText(" "); header->AddLine(0,0,0,0); header->AddText("\"root\": Root File Identifier"); header->AddText("fVersion: File version identifier"); header->AddText("fBEGIN: Pointer to first data record"); header->AddText("fEND: Pointer to first free word at EOF"); header->AddText("fSeekFree: Pointer to FREE data record"); header->AddText("fNbytesFree: Number of bytes in FREE"); header->AddText("fNfree: Number of free data records"); header->AddText("fNbytesName: Number of bytes in name/title"); header->AddText("fUnits: Number of bytes for pointers"); header->AddText("fCompress: Compression level"); //logical record header TPaveText *lrecord = new TPaveText(10,0.2,19.5,6.5); lrecord->SetFillColor(33); lrecord->Draw(); TText *tlrh=lrecord->AddText("Logical Record Header (TKEY)"); tlrh->SetTextAlign(22); tlrh->SetTextSize(0.04); lrecord->SetTextSize(0.027); lrecord->SetTextAlign(12); lrecord->AddText(" "); lrecord->AddLine(0,0,0,0); lrecord->AddText("fNbytes: Length of compressed object"); lrecord->AddText("fVersion: Key version identifier"); lrecord->AddText("fObjLen: Length of uncompressed object"); lrecord->AddText("fDatime: Date/Time when written to store"); lrecord->AddText("fKeylen: Number of bytes for the key"); lrecord->AddText("fCycle : Cycle number"); lrecord->AddText("fSeekKey: Pointer to object on file"); lrecord->AddText("fSeekPdir: Pointer to directory on file"); lrecord->AddText("fClassName: class name of the object"); lrecord->AddText("fName: name of the object"); lrecord->AddText("fTitle: title of the object"); c1->Update(); c1->Print("file.png"); }