void ratioPlots( TCanvas* c1, TH1* h_r, TH1* h_i, string xTitle, string yTitle, string savePath, double fitMin=-100000, double fitMax=100000, bool doubleColFit=0 ){ double xMaximum = h_r->GetXaxis()->GetBinUpEdge(h_r->GetXaxis()->GetLast()); double xMinimum = h_r->GetXaxis()->GetBinLowEdge(h_r->GetXaxis()->GetFirst()); double yMaximum; double yMinimum; h_i->Sumw2(); h_r->Sumw2(); TLine* line1 = new TLine(xMinimum,1,xMaximum,1); line1->SetLineColor(1); line1->SetLineWidth(2); line1->SetLineStyle(7); TF1* fpol1 = new TF1("fpol1", "pol1", fitMin, fitMax); fpol1->SetLineColor(2); fpol1->SetLineWidth(3); fpol1->SetLineStyle(7); TH1* hRatio = (TH1*)h_r->Clone("clone_record"); hRatio->Divide(h_i); yMaximum = hRatio->GetMaximum(); yMinimum = hRatio->GetMinimum(0); hRatio->GetYaxis()->SetRangeUser(yMinimum/2.5,yMaximum+yMaximum/5); hRatio->SetXTitle(xTitle.c_str()); hRatio->SetYTitle(yTitle.c_str()); hRatio->SetLineColor(9); hRatio->SetLineWidth(2); hRatio->SetMarkerStyle(8); hRatio->Draw("e"); hRatio->Fit("fpol1", "L"); line1->Draw("SAME"); if(doubleColFit){ double p0=fpol1->GetParameter(0); double p1=fpol1->GetParameter(1); double endPoint=double(fitMax*p1)+p0; double p1new=(endPoint-1)/(fitMax-fitMin); char fun[100], text[100]; sprintf(fun,"x*(%f)+1",p1new); sprintf(text,"Tangent: %f",p1new); TF1* fnew = new TF1("fnew", fun, fitMin, fitMax); fnew->SetLineColor(2); fnew->SetLineWidth(3); fnew->Draw("SAME"); TText* Title = new TText( fitMax/12, yMinimum, text); Title->SetTextColor(2); Title->SetTextSize(0.035); Title->Draw("SAME"); } c1->SaveAs(savePath.c_str()); c1->cd(); }
TH1F* mix(int run=21, int cut=1, int bin1=3, int bin2=1, int plot=1, int method=1, TH1F* mix0=0, TH1F* mix1=0){ readfile(OPT,run); TH1F* h1= (TH1F*)mTFile->Get(Form("phi1_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h2= (TH1F*)mTFile->Get(Form("phi2_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h3= (TH1F*)mTFile->Get(Form("dphi_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h4= (TH1F*)h3->Clone(Form("mix_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h5= (TH1F*)h3->Clone(Form("dphi_corr_%1d%1d_c%d",bin1,bin2,cut)); h4->Reset(); h5->Reset(); mixing(h1,h2,h3,h4,1); h5->Divide(h3,h4); mix0=h4; TH1F* h11= (TH1F*)mTFile->Get(Form("phi0_%1d_c%d",bin1,cut)); TH1F* h12= (TH1F*)mTFile->Get(Form("phi0_%1d_c%d",bin2,cut)); TH1F* h13= (TH1F*)mTFile->Get(Form("dphi_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h14= (TH1F*)h3->Clone(Form("mix2_%1d%1d_c%d",bin1,bin2,cut)); TH1F* h15= (TH1F*)h3->Clone(Form("dphi_corr2_%1d%1d_c%d",bin1,bin2,cut)); h14->Reset(); h15->Reset(); mixing(h11,h12,h13,h14,0); h15->Divide(h13,h14); mix1=h14; if(plot==1){ TText* t; gStyle->SetOptStat(0); c1->Divide(2,2); c1->cd(1); h1->SetMinimum(0); h1->SetLineWidth(2); h1->Draw(); h11->Scale(h1->GetEntries()/h11->GetEntries()); h11->SetLineWidth(2); h11->SetLineColor(6); h11->Draw("same"); t = new TText(0.2, 0.85,Form("%s %s",CBEAM,CCUT[cut])); t->SetNDC(); t->SetTextSize(0.06); t->SetTextColor(1); t->Draw(); c1->cd(2); h2->SetMinimum(0); h2->SetLineWidth(2); h2->Draw(); if(h11!=h12)h12->Scale(h2->GetEntries()/h12->GetEntries()); h12->SetLineWidth(2); h12->SetLineColor(6); h12->Draw("same"); float m4=h4->GetMaximum(); c1->cd(4); h4->SetMinimum(0); h4->SetLineWidth(2); h4->SetMaximum(m4*1.1); h4->Draw(); h14->SetLineWidth(2); h4->SetLineColor(6); h14->Draw("same"); c1->cd(3); h3->Rebin(2); h5->Rebin(2); h15->Rebin(2); float m3=h3->GetBinContent(h3->GetNbinsX()*3/4); h3->SetMinimum(0); h3->SetLineWidth(2); h3->SetMaximum(m3*1.5); h3->SetLineColor(1); h3->Draw(); h5->SetLineWidth(2); h5->SetLineColor(2); h5->Draw("same"); h15->SetLineWidth(2); h15->SetLineColor(6); h15->Draw("same"); t= new TText(0.20, 0.25,"UnCorrected"); t->SetTextSize(0.05); t->SetTextColor(1); t->SetNDC(); t->Draw(); t= new TText(0.20, 0.20,"Corrected"); t->SetTextSize(0.05); t->SetTextColor(2); t->SetNDC(); t->Draw(); t= new TText(0.20, 0.15,"Corrected2"); t->SetTextSize(0.05); t->SetTextColor(6); t->SetNDC(); t->Draw(); c1->SaveAs(Form("plot/mix_%s_%1d%1d_c%d.png",CBEAM,bin1,bin2,cut)); } if(method==0) return h5; else return h15; }
void drawHistos(TCanvas * C, TString filename, TString category, TTree* Tmine, TTree* Tother,TString var, int nbins, float xmin, float xmax, TString selection, TString myGroup, TString myRootFile, TString group, TString groupRootFile,TString mySel="1",TString groupSel="1"){ TH1F* Hmine = new TH1F(TString("Hmine")+var,"",nbins,xmin,xmax); Hmine->GetYaxis()->SetTitle(category); Hmine->GetXaxis()->SetTitle(var); Hmine->SetLineColor(1); Hmine->SetStats(0); TH1F* Hother = new TH1F(TString("Hother")+var,"",nbins,xmin,xmax); Hother->GetYaxis()->SetTitle(category); Hother->GetXaxis()->SetTitle(var); Hother->SetLineColor(2); Hother->SetStats(0); TText TXmine; TXmine.SetTextColor(1); TXmine.SetTextSize(.04); TText TXother; TXother.SetTextColor(2); TXother.SetTextSize(.04); Tmine->Draw(var+">>"+Hmine->GetName(),selection+"*("+mySel+")"); Tother->Draw(var+">>"+Hother->GetName(),selection+"*("+groupSel+")"); ////Draw one histogram on top of the other C->Clear(); //Hmine->Scale(1./Hmine->Integral()); //Hother->Scale(1./Hother->Integral()); //Hother->Scale(968134./688134.); //GGH e-tau if(Hmine->GetMaximum()>Hother->GetMaximum()) Hmine->GetYaxis()->SetRangeUser(0,Hmine->GetMaximum()*1.1); else Hmine->GetYaxis()->SetRangeUser(0,Hother->GetMaximum()*1.1); Hmine->Draw("hist"); Hother->Draw("histsame"); // ///Draw the difference of the historgrams // TH1F*HDiff=(TH1F*)Hmine->Clone("HDiff"); // HDiff->Add(Hother,-1); // int max= abs(HDiff->GetMaximum())>abs( HDiff->GetMinimum()) ? abs(HDiff->GetMaximum()): abs( HDiff->GetMinimum()); // HDiff->GetYaxis()->SetRangeUser(-2*(max>0?max:1),2*(max>0?max:1)); // HDiff->Draw("hist"); // TLine line; // line.DrawLine(HDiff->GetXaxis()->GetXmin(),0,HDiff->GetXaxis()->GetXmax(),0); //Print the integrals of the histograms a the top //TXmine.DrawTextNDC(.2,.965,myGroup+"_"+myRootFile+": "+(long)(Hmine->Integral(0,Hmine->GetNbinsX()+1))); //TXother.DrawTextNDC(.2,.93,group+"_"+groupRootFile+": "+(long)(Hother->Integral(0,Hother->GetNbinsX()+1))); TXmine.DrawTextNDC(.2,.965,myGroup+" : "+(long)(Hmine->Integral(0,Hmine->GetNbinsX()+1))); TXother.DrawTextNDC(.2,.93,group+": "+(long)(Hother->Integral(0,Hother->GetNbinsX()+1))); C->Print(filename); delete Hmine; delete Hother; }
//-------------------------------------------------------------------------------------------------- void overlayFrame(TString text, bool align) { // Overlay a linear frame from user coordinates (0 - 1, 0 - 1) and put the frame text // Create new transparent pad for the text TPad *transPad = new TPad("transPad","Transparent Pad",0,0,1,1); transPad->SetFillStyle(4000); transPad->Draw(); transPad->cd(); // Overlay the text in a well defined frame TText *plotText = new TText(); plotText->SetTextColor(kBlue); plotText->SetTextSize(0.04); plotText->SetNDC(); // Draw text at top right if (align) { plotText->SetTextColor(kBlack); plotText->SetTextAlign(33); plotText->DrawText(0.92,0.95,text.Data()); } // Draw text at bottom left else plotText->DrawText(0.01,0.01,text.Data()); return; }
void PaintOverflow(TH1 *h) { // This function paint the histogram h with an extra bin for overflows char* name = h->GetName(); char* title = h->GetTitle(); Int_t nx = h->GetNbinsX()+1; Double_t x1 = h->GetBinLowEdge(1); Double_t bw = h->GetBinWidth(nx); Double_t x2 = h->GetBinLowEdge(nx)+bw; // Book a temporary histogram having ab extra bin for overflows TH1F *htmp = new TH1F(name, title, nx, x1, x2); // Fill the new hitogram including the extra bin for overflows for (Int_t i=1; i<=nx; i++) { htmp->Fill(htmp->GetBinCenter(i), h->GetBinContent(i)); } // Fill the underflows htmp->Fill(x1-1, h->GetBinContent(0)); // Restore the number of entries htmp->SetEntries(h->GetEntries()); // Draw the temporary histogram htmp->Draw(); TText *t = new TText(x2-bw/2,h->GetBinContent(nx),"Overflow"); t->SetTextAngle(90); t->SetTextAlign(12); t->SetTextSize(0.03);; t->Draw(); }
void greyscale() { TCanvas *c = new TCanvas("grey", "Grey Scale", 500, 500); c->SetBorderMode(0); Int_t n = 200; // tunable parameter Float_t n1 = 1./n; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { TBox *b = new TBox(n1*j, n1*(n-1-i), n1*(j+1), n1*(n-i)); Float_t grey = Float_t(i*n+j)/(n*n); b->SetFillColor(TColor::GetColor(grey, grey, grey)); b->Draw(); } } TPad *p = new TPad("p","p",0.3, 0.3, 0.7,0.7); const char *guibackground = gEnv->GetValue("Gui.BackgroundColor", ""); p->SetFillColor(TColor::GetColor(guibackground)); p->Draw(); p->cd(); TText *t = new TText(0.5, 0.5, "GUI Background Color"); t->SetTextAlign(22); t->SetTextSize(.09); t->Draw(); c->SetEditable(kFALSE); }
void table(Float_t x1, Float_t x2, Float_t yrange, TText *t, const char **symbol, Bool_t octal) { Int_t i; Int_t n = 0; for (i=0;i<1000;i++) { if (!strcmp(symbol[i],"END")) break; n++; } Float_t y1 = 2.5; Float_t y2 = yrange - 0.5; Float_t dx = (x2-x1)/5; Float_t dy = (y2 - 1 -y1)/(n+1); Float_t y = y2 - 1 - 0.7*dy; Float_t xc0 = x1 + 0.5*dx; Float_t xc1 = xc0 + dx; Float_t xc2 = xc1 + dx; Float_t xc3 = xc2 + dx; Float_t xc4 = xc3 + dx; TLine *line = new TLine(); line->DrawLine(x1,y1,x1,y2); line->DrawLine(x1,y1,x2,y1); line->DrawLine(x1,y2,x2,y2); line->DrawLine(x2,y1,x2,y2); line->DrawLine(x1,y2-1,x2,y2-1); line->DrawLine(x1+ dx,y1,x1+ dx,y2); line->DrawLine(x1+2*dx,y1,x1+2*dx,y2); line->DrawLine(x1+3*dx,y1,x1+3*dx,y2); line->DrawLine(x1+4*dx,y1,x1+4*dx,y2); TText *tit = new TText(0,0,"a"); tit->SetTextSize(0.015); tit->SetTextFont(72); tit->SetTextAlign(22); tit->DrawText(xc0,y2-0.6,"Input"); tit->DrawText(xc1,y2-0.6,"Roman"); tit->DrawText(xc2,y2-0.6,"Greek"); tit->DrawText(xc3,y2-0.6,"Special"); tit->DrawText(xc4,y2-0.6,"Zapf"); char text[12]; for (i=0;i<n;i++) { if (octal) { unsigned char value = *symbol[i]; sprintf(text,"@\\ %3o",value); } else { strcpy(text,symbol[i]); } t->DrawText(xc0,y,text); sprintf(text,"%s",symbol[i]); t->DrawText(xc1,y,text); sprintf(text,"`%s",symbol[i]); t->DrawText(xc2,y,text); sprintf(text,"'%s",symbol[i]); t->DrawText(xc3,y,text); sprintf(text,"~%s",symbol[i]); t->DrawText(xc4,y,text); y -= dy; } }
void drift_chisq() { int i; events = (TTree*)f.Get("events"); c1.Divide(2, 2, 0.01, 0.02); c2.Divide(2, 2, 0.01, 0.02); i = 0; c1.cd(++i); makehist("t3X", 2); c1.cd(++i); makehist("t4X", 2); c1.cd(++i); makehist("t3Y", 2); c1.cd(++i); makehist("t4Y", 2); i = 0; c2.cd(++i); makehist("t3X", 1); c2.cd(++i); makehist("t4X", 1); c2.cd(++i); makehist("t3Y", 1); c2.cd(++i); makehist("t4Y", 1); TText *t; TTree *info = (TTree*)f.FindObjectAny("info"); TString info_str = get_info_str(info); c1.cd(0); t = new TText(0.005, 0.005, info_str); t->SetTextSize(0.02); t->Draw(); c2.cd(0); t = new TText(0.005, 0.005, info_str); t->SetTextSize(0.02); t->Draw(); c1.Show(); c2.Show(); }
void compareHistos( char *Current, char *Reference=0 ) { TText* te = new TText(); te->SetTextSize(0.1); TFile * curfile = new TFile( TString(Current)+".root" ); TFile * reffile = curfile; if (Reference) reffile = new TFile(TString(Reference)+".root"); char * prefix="DQMData/MixingV/Mixing"; //1-Dimension Histogram TDirectory * refDir=reffile->GetDirectory(prefix); TDirectory * curDir=curfile->GetDirectory(prefix); TList* list = refDir->GetListOfKeys(); TObject* object = list->First(); int iHisto = 0; char title[50]; while (object) { // find histo objects std::cout << " object :" << object->GetName() << std::endl; TProfile * h1 = dynamic_cast<TProfile*>( refDir->Get(object->GetName())); TProfile * h2 = dynamic_cast<TProfile*>( curDir->Get(object->GetName())); bool isHisto = (refDir->Get(object->GetName()))->InheritsFrom("TProfile"); std::cout << " isHisto = " << isHisto << std::endl; if (isHisto && h1 && h2 && *h1->GetName()== *h2->GetName()) { iHisto++; char title[50]; // draw and compare std::cout << " Start draw and compare" << std::endl; TCanvas c1; TProfile htemp2; h2->Copy(htemp2);// to keep 2 distinct histos h1->SetLineColor(2); htemp2.SetLineColor(3); h1->SetLineStyle(3); h1->SetMarkerColor(3); htemp2.SetLineStyle(5); htemp2.SetMarkerColor(5); TLegend leg(0.1, 0.15, 0.2, 0.25); leg.AddEntry(h1, "Reference", "l"); leg.AddEntry(&htemp2, "New ", "l"); h1->Draw(); htemp2.Draw("Same"); leg.Draw(); sprintf(title,"%s%s", object->GetName(),".gif"); c1.Print(title); } // go to next object object = list->After(object); } }
void SetupTowerDisplay(TH2F *hist) { hist->SetStats(kFALSE); hist->SetXTitle("ieta"); hist->SetYTitle("iphi"); hist->GetXaxis()->CenterTitle(); hist->GetYaxis()->CenterTitle(); hist->GetXaxis()->SetNdivisions(65); hist->GetXaxis()->SetLabelColor(0); hist->GetXaxis()->SetTickLength(.78); hist->GetXaxis()->SetTitleOffset(0.95); hist->GetYaxis()->SetNdivisions(72); hist->GetYaxis()->SetLabelColor(0); hist->GetYaxis()->SetTitleOffset(0.85); TText *yLabel = new TText(); TLine *pLine = new TLine(); pLine->SetLineStyle(1); pLine->SetLineColor(1); pLine->SetLineWidth(1); yLabel->SetTextAlign(22); yLabel->SetTextSize(0.015); char phi_num[3]; char eta_num[3]; TText *xLabel = new TText(); xLabel->SetTextSize(0.015); xLabel->SetTextAlign(22); for (Int_t i=1; i<73; ++i) { sprintf(phi_num,"%d",i); if(TMath::Abs(i%2)==1) {yLabel->DrawText(-33,0.5+i,phi_num);} else {yLabel->DrawText(-34.5,0.5+i,phi_num);} pLine->DrawLine(-32,i,33,i); } for (Int_t i=-32; i<33;++i) { sprintf(eta_num,"%d",i); if(TMath::Abs(i%2)==0) {xLabel->DrawText(0.5+i,-0.5,eta_num);} else {xLabel->DrawText(0.5+i,-2,eta_num);} pLine->DrawLine(i,1,i,72); } }
//______________________________________________________________________________ void DrawPeriod(int runmin, int runmax, int run1, int run2, double ymin, double ymax, const char* label) { if ( run1 < runmin || run1 > runmax || run2 < runmin || run2 > runmax ) return; TBox* b = new TBox(run1,ymin,run2,ymax); b->SetFillColor(5); b->Draw(); TText* text = new TText((run1+run2)/2.0,ymax*0.6,label); text->SetTextAlign(22); text->SetTextSize(0.02); text->Draw(); }
void DoCompare( char *Current, char *Reference=0 ){ TText* te = new TText(); te->SetTextSize(0.1); gROOT->ProcessLine(".x HistoCompare.C"); HistoCompare * myPV = new HistoCompare(); TFile * curfile = new TFile( TString(Current)+".root" ); TFile * reffile = curfile; if (Reference) reffile = new TFile(TString(Reference)+".root"); char * prefix="DQMData/MixingV/"; //1-Dimension Histogram TDirectory * refDir=reffile->GetDirectory(prefix); TDirectory * curDir=curfile->GetDirectory(prefix); TList* list = refDir->GetListOfKeys(); TObject* object = list->First(); int iHisto = 0; char title[50]; while (object) { // find histo objects TH1F * h1 = dynamic_cast<TH1F*>( refDir->Get(object->GetName())); TH1F * h2 = dynamic_cast<TH1F*>( curDir->Get(object->GetName())); bool isHisto = (refDir->Get(object->GetName()))->InheritsFrom("TH1F"); if (isHisto && h1 && h2 && *h1->GetName()== *h2->GetName()) { iHisto++; char title[50]; // draw and compare TCanvas c1; TH1F htemp2; h2->Copy(htemp2);// to keep 2 distinct histos h1->SetLineColor(2); htemp2.SetLineColor(3); h1->SetLineStyle(3); htemp2.SetLineStyle(5); TLegend leg(0.1, 0.15, 0.2, 0.25); leg.AddEntry(h1, "Reference", "l"); leg.AddEntry(&htemp2, "New ", "l"); h1->Draw(); htemp2.Draw("Same"); leg.Draw(); myPV->PVCompute(h1,&htemp2, te); sprintf(title,"%s%s", object->GetName(),".eps"); c1.Print(title); } // go to next object object = list->After(object); } }
void drawSignalDiff(TCanvas* C,TString Group1,TFile* F1,TString Group2,TFile* F2,TString channel,TString category,TString signal){ // drawSignalDiff( C, Group1, F1, Group2 ,F2, channel, "boost_high", "ggH"); C->Clear(); TGraph G1; TGraph G2; float max=0.; for(Int_t i=0;i<8;i++){ long mass=110+i*5; TH1F* H1 = (TH1F*) F1->Get(channel+"_"+category+"/"+signal+mass); TH1F* H2 = (TH1F*) F2->Get(channel+"_"+category+"/"+signal+mass); G1.SetPoint(i,mass,H1->Integral()); G2.SetPoint(i,mass,H2->Integral()); if(H1->Integral()>max)max=H1->Integral(); } G1.GetYaxis()->SetRangeUser(0.,max*1.1); G1.SetTitle(category+" "+signal); G1.GetYaxis()->SetTitle("signal yield"); G1.GetXaxis()->SetTitle("m_{H}"); G1.Draw("ap"); G2.SetLineColor(2); G2.Draw("lsame"); TText TXmine; TXmine.SetTextColor(1); TXmine.SetTextSize(.04); TXmine.DrawTextNDC(.25,.845,Group1); TText TXother; TXother.SetTextColor(2); TXother.SetTextSize(.04); TXother.DrawTextNDC(.25,.81,Group2); C->Print(TString(C->GetName())+".pdf"); }
void postprocess(TCanvas* c2, const char* name, Int_t rWrite, Int_t rPerformance) { if (rPerformance){ TLatex *alice = new TLatex(0.65,0.47,"Performance"); alice->SetNDC(); alice->SetTextColor(myDarkRed); alice->SetTextFont(42); alice->SetTextSize(0.05); alice->SetLineWidth(2); alice->Draw(); TLatex *alice2 = new TLatex(0.62,0.41,"LHC10h - Pass2"); alice2->SetNDC(); alice2->SetTextColor(myDarkRed); alice->SetTextFont(42); alice2->SetTextSize(0.05); alice2->SetLineWidth(2); alice2->Draw(); TText *date = new TText(0.68,0.35,cStamp2); date->SetNDC(); date->SetTextFont(42); date->SetTextSize(0.04); date->Draw(); //Acquire canvas proportions Double_t AliLogo_LowX = 0.67; Double_t AliLogo_LowY = 0.53; Double_t AliLogo_Height = 0.22; //ALICE logo is a png file that is 821x798 pixels->should be wider than a square Double_t AliLogo_Width = (821./798.) * AliLogo_Height * gPad->GetWh() / gPad->GetWw(); TPad *myPadLogo = new TPad("myPadLogo", "Pad for ALICE Logo",AliLogo_LowX,AliLogo_LowY,AliLogo_LowX+AliLogo_Width,AliLogo_LowY+AliLogo_Height); // myPadLogo->SetFillColor(2); // color to first figure out where is the pad then comment ! myPadSetUp(myPadLogo,0,0,0,0); //myPadLogo->SetFixedAspectRatio(1); myPadLogo->Draw(); myPadLogo->cd(); TASImage *myAliceLogo = new TASImage("alice_logo_transparent.png"); myAliceLogo->Draw(); } if (rWrite == 1) c2->SaveAs(Form("%s.png",name)); if (rWrite == 2) c2->SaveAs(Form("%s.eps",name)); }
void fill_with_text(TGraph *real, TGraph *down, TGraph *up, TVirtualPad *can, int scantype, std::string scanx = "") { can->cd(); float xpos_of_text = 0.22; TLegend* this_leg = new TLegend(xpos_of_text,0.6,0.38,0.75); //TLegend* this_leg = new TLegend(xpos_of_text,0.55,0.45,0.75,"n_{jets} #geq 3"); // this was the style of the paper. this_leg->SetFillColor(0); this_leg->SetBorderSize(0); this_leg->SetTextSize(0.035); //this_leg->SetTextSize(0.04); // paper style. if(scantype==PlottingSetup::SMS||scantype==PlottingSetup::GMSB) { //this_leg->AddEntry(real,"#sigma^{prod} = #sigma^{NLO-QCD}" , "l"); //this_leg->AddEntry(up,"#sigma^{prod} = 3 #times #sigma^{NLO-QCD}" , "l"); //this_leg->AddEntry(down,"#sigma^{prod} = 1/3 #times #sigma^{NLO-QCD}" , "l"); this_leg->AddEntry(real,"#sigma^{NLO-QCD}" , "l"); this_leg->AddEntry(up,"3 #times #sigma^{NLO-QCD}" , "l"); this_leg->AddEntry(down,"1/3 #times #sigma^{NLO-QCD}" , "l"); } else { write_warning(__FUNCTION__,"Not implemented yet for mSUGRA"); } this_leg->Draw(); TText *title = write_text(xpos_of_text+0.005,0.52,"JZB"); title->SetTextSize(0.04); title->SetTextAlign(13); title->SetTextFont(62); title->Draw(); write_SMS_text( scantype, scanx, xpos_of_text ); // //string legT5zz="pp #rightarrow #tilde{g} #tilde{g}, #tilde{g} #rightarrow 2j + #chi^{0}_{1}, #chi^{0}_{1} #rightarrow Z + #tilde{G}"; // string legT5zz="pp #rightarrow #tilde{g} #tilde{g}, #tilde{g} #rightarrow 2j + #chi^{0}_{2}, #chi^{0}_{2} #rightarrow Z #chi^{0}_{1}"; // string legT5zzl2="m(#tilde{q}) >> m(#tilde{g}), x = "+scanx; // string legT5zzl3=" GMSB"; // TText *title = write_text(xpos_of_text,0.85,legT5zz); // title->SetTextAlign(11); // title->SetTextSize(0.035); // if(scantype!=PlottingSetup::mSUGRA) title->Draw("same"); // TText *title2 = write_text(xpos_of_text,0.79,legT5zzl2); // title2->SetTextAlign(11); // title2->SetTextSize(0.035); // if(scantype!=PlottingSetup::mSUGRA) title2->Draw("same"); // TText *title3 = write_text(0.40,0.79,legT5zzl3); // title3->SetTextAlign(11); // title3->SetTextSize(0.035); // title3->SetTextColor(kRed); //// if(scantype==PlottingSetup::GMSB) title3->Draw("same"); DrawPrelim(); draw_diagonal_xchange( scantype, scanx ); }
TCanvas* pHitSpecDet(const std::string& s) { TCanvas* c = new TCanvas( ("HitSpecDet"+s).c_str(), ("HitSpecDet"+s).c_str(), -2); c->SetLogx(); TH2D* h = (TH2D*)gROOT->FindObject(s.c_str()); h->GetXaxis()->SetRange(4,32); std::stringstream str; str<<h->GetTitle(); TText t; t.SetTextColor(4); t.SetTextAlign(11); t.SetTextSize(0.035); h->DrawCopy("box"); t.DrawTextNDC(0.17,0.2, str.str().c_str()); return c; }
//-------------------------------------------------------------------------------------------------- void overlayFrame(TString text) { // Overlay a linear frame from user coordinates (0 - 1, 0 - 1) and put the frame text // create new transparent pad for the text TPad *transPad = new TPad("transPad","Transparent Pad",0,0,1,1); transPad->SetFillStyle(4000); transPad->Draw(); transPad->cd(); // overlay the text in a well defined frame TText *plotText = new TText(0.01,0.01,text.Data()); plotText->SetTextSize(0.04); plotText->SetTextColor(kBlue); plotText->Draw(); return; }
void write_SMS_text(int scantype, std::string& scanx, float xpos = 0.22 ) { string legT5zz="pp #rightarrow #tilde{g} #tilde{g}, #tilde{g} #rightarrow 2j + #chi^{0}_{2}, #chi^{0}_{2} #rightarrow Z #chi^{0}_{1}"; if ( scantype==PlottingSetup::GMSB) legT5zz="pp #rightarrow #tilde{g} #tilde{g}, #tilde{g} #rightarrow 2j + #chi^{0}_{1}, #chi^{0}_{1} #rightarrow Z #tilde{G}"; string legT5zzl2="m(#tilde{q}) >> m(#tilde{g})"; if (scantype==PlottingSetup::SMS) legT5zzl2 += ", x = "+scanx; string legT5zzl3=" GMSB"; TText *title = write_text(xpos,0.85,legT5zz); title->SetTextAlign(11); title->SetTextSize(0.035); if(scantype!=PlottingSetup::mSUGRA) title->Draw("same"); TText *title2 = write_text(xpos,0.79,legT5zzl2); title2->SetTextAlign(11); title2->SetTextSize(0.035); if(scantype!=PlottingSetup::mSUGRA) title2->Draw("same"); TText *title3 = write_text(0.40,0.79,legT5zzl3); title3->SetTextAlign(11); title3->SetTextSize(0.035); title3->SetTextColor(kRed); // if(scantype==PlottingSetup::GMSB) title3->Draw("same"); }
void hlHisto4() { TCanvas *c1 = new TCanvas("c1", "", 0, 0, 600, 400); TF1 *f1 = new TF1("f1", "x*gaus(0) + [3]*abs(sin(x)/x)", -50.0, 50.0); f1->SetParameters(20.0, 4.0, 1.0, 20.0); TH1F *h1 = new TH1F("h1", "Test random numbers", 200, -50.0, 50.0); h1->FillRandom("f1", 100000); h1->Draw(); h1->Fit(f1, "Q"); gStyle->SetGridColor(kGray); c1->SetGrid(); TText *info = new TText(0.0, h1->GetMaximum()*0.7, "please move the mouse over the frame"); info->SetTextSize(0.04); info->SetTextAlign(22); info->SetTextColor(kRed-1); info->SetBit(kCannotPick); info->Draw(); c1->Update(); h1->SetHighlight(); c1->HighlightConnect("HighlightZoom(TVirtualPad*,TObject*,Int_t,Int_t)"); }
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 plottingmacro_IVF() { double fa = 0.46502; double fb = 0.53498; bool debug_ = true; // std::string path("Nov10thFall11Plots/"); // std::string path("Nov10Fall1160MTopSlimPlots/"); std::string path("Nov10Fall1160MTopIVFPlots_b/"); if(debug_) std::cout << "Init the style form setTDRStyle" << std::endl; setTDRStyle(); gStyle->SetErrorX(0.5); gROOT->ForceStyle(); initOptions(); if(debug_) std::cout << "Init the sample" << std::endl; // std::vector<Sample> s = Nov10thDiJetPtUpdatedSlimHistos(); //std::vector<Sample> s = Nov10Fall1160MTopSlimHistos(); std::vector<Sample> s = Nov10Fall1160MTopIVFHistos(); Sample data(1,"fake data","S1.root",0,true,1000); if(debug_) std::cout << "Init the data sample" << std::endl; for(size_t i=0;i< s.size();i++) if(s[i].data) {data=s[i];break;} if(debug_) std::cout << "Ls data sample" << std::endl; data.file()->ls(); if(debug_) std::cout << "Init the mc sample" << std::endl; for(size_t i=0;i< s.size();i++) s[i].dump(1,fa,fb); std::vector<std::string> names; if(debug_) std::cout << "Get List of Keys" << std::endl; TList * subs = data.file()->GetListOfKeys(); for(size_t i=0;i< subs->GetSize();i++) { TString nn = subs->At(i)->GetName(); if( nn.Contains(TRegexp("Count*")) ) continue; if(debug_) std::cout << "Get List of Keys in subdirs" << std::endl; TList * objs = ((TDirectoryFile *)data.file()->Get(subs->At(i)->GetName()))->GetListOfKeys(); for(size_t j=0;j< objs->GetSize();j++) { if(debug_) std::cout << "Name = " << subs->At(i)->GetName()+std::string("/") + objs->At(j)->GetName() << std::endl; names.push_back(subs->At(i)->GetName()+std::string("/") + objs->At(j)->GetName()); // std::cout << subs->At(i)->GetName() << "/" << objs->At(j)->GetName() << std::endl; //TODO: select plots via regexp } } if(debug_) std::cout << "Starting plotting" << std::endl; std::string process; for(size_t i = 0 ; i < names.size() ; i++) { std::map<std::string,TH1F *> grouped; TString n=names[i]; // if(!n.Contains(TRegexp("VlightRegionHZee/HiggsPtVlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("VlightRegionHZee/ZPtVlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("VlightRegionHZee"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZmmSV"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZeeSV"))) continue; // if(!n.Contains(TRegexp("ZSVRegionZcombSV"))) continue; // if(!n.Contains(TRegexp("ZSVPureRegionZcombSV"))) continue; // if(!n.Contains(TRegexp("ZSVTTbarPureRegionZcombSV"))) continue; if(!n.Contains(TRegexp("TTbarRegionZeeSVJets"))) continue; if(n.Contains(TRegexp("RegionHZcomb"))) process = "Z(l^{+}l^{-})H(b#bar{b})"; if(n.Contains(TRegexp("RegionHZmm"))) process = "Z(#mu^{+}#mu^{-})H(b#bar{b})"; if(n.Contains(TRegexp("RegionHZee"))) process = "Z(e^{+}e^{-})H(b#bar{b})"; if(debug_) std::cout << "Creating the Canvas" << std::endl; TCanvas *c = new TCanvas(); c->SetLogy(false); c->SetTitle(names[i].c_str()); if(debug_) std::cout << "Creating histograms" << std::endl; TH1F *hd = ((TH1F*)data.file()->Get(names[i].c_str())); hd->Sumw2(); Options o=options[names[i]]; // hd->Rebin(o.rebin); hd->SetMarkerStyle(20); hd->GetXaxis()->SetLabelOffset(99); hd->SetYTitle(o.yaxis.c_str()); double nbin = hd->GetNbinsX(); double min_bin = hd->GetXaxis()->GetXmin(); double max_bin = hd->GetXaxis()->GetXmax(); TH1F *hmc = new TH1F("hmc","hmc", nbin, min_bin, max_bin); hmc->SetFillColor(kWhite); hmc->Sumw2(); // hmc->Rebin(o.rebin); if(debug_) std::cout << "Creating the THStack and Legend" << std::endl; THStack * sta = new THStack("sta",hd->GetTitle()); TLegend * l = new TLegend(o.legendx1,o.legendy1,o.legendx2,o.legendy2); //0.7,0.1,0.9,0.6); l->SetFillColor(kWhite); l->SetBorderSize(0); l->SetTextFont(62); l->SetTextSize(0.03); if(debug_) std::cout << "Adding data to the legend" << std::endl; l->AddEntry(hd, "Data","P"); if(debug_) std::cout << "Adding MC to the THStack" << std::endl; //with the proper trigger eff // double SF[] = {1.01,1.03,1.00}; // double SF[] = {1.03,1.054,1.032}; double SF[] = {1.0,1.0,1.0}; if(debug_){ for(int i = 0; i< 3; ++i) std::cout << "SF [" << i << "] = " << SF[i] << std::endl; } double mcIntegral=0; for(size_t j=0;j< s.size() ;j++) { if(!s[j].data) { if(debug_) std::cout << "Creating TH1F from file " << s[j].name << std::endl; TH1F * h = ((TH1F*)s[j].file()->Get(names[i].c_str())); h->Sumw2(); if(debug_){ std::cout << "TH1F created from file " << s[j].name << std::endl; std::cout << "Scaling : " << s[j].scale(data.lumi(),fa,fb) << std::endl; std::cout << "Scaling with SF : " << s[j].scale(data.lumi(),fa,fb,SF) << std::endl; std::cout << "Histo integral before scaling = " << h->Integral() << std::endl; } h->Scale(s[j].scale(data.lumi(),fa,fb,SF)); if(debug_){ std::cout << "Histo integral after scaling = " << h->Integral() << std::endl; std::cout << "Managing style... " << std::endl; } h->SetLineWidth(1.); h->SetFillColor(s[j].color); h->SetLineColor(s[j].color); // h->Rebin(options[names[i]].rebin); if(debug_) std::cout << "Cloning and update legend " << std::endl; if(grouped.find(s[j].name) == grouped.end()){ l->AddEntry(h,s[j].name.c_str(),"F"); } std::cout << "Sample : " << s[j].name << " - Integral for plot " << names[i] << " = " << h->Integral(-10000,10000) << std::endl; mcIntegral += h->Integral(); sta->Add(h); hmc->Add(h); //TO FIX grouped map // sovrascrive histo con lo stesso nome tipo VV o ST etc... grouped[s[j].name]=(TH1F *)h->Clone(("_"+names[i]).c_str()); } } if(debug_){ std::cout << "Data total = " << hd->Integral() << std::endl; std::cout << "MC = " << mcIntegral << std::endl; std::cout << "Data/MC = " << hd->Integral()/mcIntegral << std::endl; } TPad * TopPad = new TPad("TopPad","Top Pad",0.,0.3,1.,1. ) ; TPad * BtmPad = new TPad("BtmPad","Bottom Pad",0.,0.,1.,0.313 ) ; TopPad->SetBottomMargin(0.02); BtmPad->SetTopMargin(0.0); BtmPad->SetFillStyle(4000); TopPad->SetFillStyle(4000); BtmPad->SetFillColor(0); BtmPad->SetBottomMargin(0.35); TopPad->Draw() ; BtmPad->Draw() ; std::cout << "hd maximum = " << hd->GetMaximum() << " sta maximum = " << sta->GetMaximum() << std::endl; double maxY; if(hd->GetMaximum() > sta->GetMaximum()) maxY = (hd->GetMaximum())*1.5; else maxY = (sta->GetMaximum())*1.5; TopPad->cd(); hd->Draw("E1X0"); sta->Draw("sameHIST"); hmc->Draw("sameE2"); hmc->SetFillColor(2); hmc->SetMarkerSize(0); hmc->SetFillStyle(3013); hd->Draw("E1X0same"); l->Draw("same"); std::cout << "Set Maximum to = " << maxY << std::endl; hd->GetYaxis()->SetRangeUser(0.,maxY); hd->GetXaxis()->SetRangeUser(options[names[i]].min,options[names[i]].max); BtmPad->cd(); std::cout << "Division" << std::endl; TH1D * divisionErrorBand = (TH1D*)(hmc)->Clone("divisionErrorBand"); divisionErrorBand->Sumw2(); divisionErrorBand->Divide(hmc); divisionErrorBand->Draw("E2"); divisionErrorBand->SetMaximum(2.49); divisionErrorBand->SetMinimum(0); divisionErrorBand->SetMarkerStyle(20); divisionErrorBand->SetMarkerSize(0.55); divisionErrorBand->GetXaxis()->SetTitleOffset(1.12); divisionErrorBand->GetXaxis()->SetLabelSize(0.12); divisionErrorBand->GetXaxis()->SetTitleSize(0.5); divisionErrorBand->GetYaxis()->SetTitle("Data/MC"); divisionErrorBand->GetYaxis()->SetLabelSize(0.12); divisionErrorBand->GetYaxis()->SetTitleSize(0.12); divisionErrorBand->GetYaxis()->SetTitleOffset(0.40); divisionErrorBand->GetYaxis()->SetNdivisions(505); //divisionErrorBand->UseCurrentStyle(); divisionErrorBand->SetFillColor(2); divisionErrorBand->SetFillStyle(3001); divisionErrorBand->SetMarkerSize(0.); TH1D * division = (TH1D*)(hd)->Clone("division"); division->Sumw2(); division->Divide(hmc); // division->SetMaximum(2.5); // division->SetMinimum(0); // division->SetMarkerStyle(20); // division->SetMarkerSize(0.55); // division->GetXaxis()->SetLabelSize(0.12); // division->GetXaxis()->SetTitleSize(0.14); // division->GetYaxis()->SetLabelSize(0.10); // division->GetYaxis()->SetTitleSize(0.10); // division->GetYaxis()->SetTitle("Data/MC"); Double_t min = division->GetXaxis()->GetXmin(); Double_t max = division->GetXaxis()->GetXmax(); division->Draw("E1X0same"); TLine *line = new TLine(min, 1.0, max, 1.0); line->SetLineColor(kRed); line->Draw("same"); TLegend * leg3 =new TLegend(0.50,0.86,0.69,0.96); leg3->AddEntry(divisionErrorBand,"MC uncert. (stat.)","f"); leg3->SetFillColor(0); leg3->SetLineColor(0); leg3->SetShadowColor(0); leg3->SetTextFont(62); leg3->SetTextSize(0.06); leg3->Draw(); TPaveText *pave = new TPaveText(0.15,0.85,0.32,0.96,"brNDC"); pave->SetTextAlign(12); pave->SetLineColor(0); pave->SetFillColor(0); pave->SetShadowColor(0); //TText *text = pave->AddText(Form("#chi_{#nu}^{2} = %.3f, K_{s} = %.3f",histDt->Chi2Test(histCopyMC5,"UWCHI2/NDF"),histDt->KolmogorovTest(histCopyMC5))); // stat + sys TText *text = pave->AddText(Form("#chi_{#nu}^{2} = %.3f, K_{s} = %.3f",hd->Chi2Test(hmc,"UWCHI2/NDF"),hd->KolmogorovTest(hmc))); // stat only text->SetTextFont(62); text->SetTextSize(0.08); pave->Draw(); TopPad->cd(); TLatex latex; latex.SetNDC(); latex.SetTextAlign(12); latex.SetTextSize(0.052); latex.DrawLatex(0.17,0.89,"CMS Preliminary"); latex.SetTextSize(0.04); latex.DrawLatex(0.17,0.84,"#sqrt{s} = 7 TeV, L = 4.7 fb^{-1}"); // latex.DrawLatex(0.17,0.79,"Z(e^{+}e^{-})H(b#bar{b})"); latex.DrawLatex(0.17,0.79,process.c_str()); c->Update(); std::string cName= hd->GetName(); cName += "_bare.pdf"; cName = path+cName; c->Print(cName.c_str(),"pdf"); // std::cout << names[i] << " d: " << hd->Integral() << " "; // THStack * sta2 = new THStack("sta2",hd->GetTitle()); // float tot=0; // float toterr2=0; // if(debug_) // std::cout << "Putting the iterator in the for loop" << std::endl; // for(std::map<std::string,TH1F *>::reverse_iterator it=grouped.rbegin(); it!=grouped.rend();++it) // { // if(debug_) // std::cout << "Using the iterator" << std::endl; // std::cout << (*it).first << " " << (*it).second->Integral() << " | " << std::endl ; // if((*it).second->GetEntries() > 0) { // float er=1.*sqrt((*it).second->GetEntries())/(*it).second->GetEntries()*(*it).second->Integral(); // toterr2+=er*er; // } // tot+=(*it).second->Integral(); // sta2->Add(it->second); // } // std::cout << " Tot: " << tot << "+-" << sqrt(toterr2) << " SF: " << hd->Integral()/tot << std::endl; // TCanvas *c2 = new TCanvas(); // c2->SetTitle(names[i].c_str()); // std::cout << "hd maximum = " << hd->GetMaximum() << " sta2 maximum = " << sta2->GetMaximum() << std::endl; // if(hd->GetMaximum() > sta2->GetMaximum()) maxY = hd->GetBinContent(hd->GetMaximumBin()) * 1.5; // else maxY = ( sta2->GetMaximum())*1.5; // // hd->Draw("E1"); // sta2->Draw("PADSHIST"); // // hd->Draw("E1same"); // // l->Draw("same"); // std::cout << "Set Maximum to = " << maxY << std::endl; // hd->GetYaxis()->SetRangeUser(0.,maxY); // hd->GetXaxis()->SetRangeUser(options[names[i]].min,options[names[i]].max); // c2->Update(); // std::string c2Name = hd->GetName(); // c2Name = path+c2Name; // c2Name += "_norm.pdf"; // c2->Print(c2Name.c_str(),"pdf"); } }
// input: - Input file (result from TMVA) // - use of TMVA plotting TStyle void mvas( TString fin = "TMVA.root", HistType htype = MVAType, Bool_t useTMVAStyle = kTRUE ) { // set style and remove existing canvas' TMVAGlob::Initialize( useTMVAStyle ); // switches const Bool_t Save_Images = kTRUE; // checks if file with name "fin" is already open, and if not opens one TFile* file = TMVAGlob::OpenFile( fin ); // define Canvas layout here! Int_t xPad = 1; // no of plots in x Int_t yPad = 1; // no of plots in y Int_t noPad = xPad * yPad ; const Int_t width = 600; // size of canvas // this defines how many canvases we need TCanvas *c = 0; // counter variables Int_t countCanvas = 0; // search for the right histograms in full list of keys TIter next(file->GetListOfKeys()); TKey *key(0); while ((key = (TKey*)next())) { if (!TString(key->GetName()).BeginsWith("Method_")) continue; if( ! gROOT->GetClass(key->GetClassName())->InheritsFrom("TDirectory") ) continue; TString methodName; TMVAGlob::GetMethodName(methodName,key); TDirectory* mDir = (TDirectory*)key->ReadObj(); TIter keyIt(mDir->GetListOfKeys()); TKey *titkey; while ((titkey = (TKey*)keyIt())) { if (!gROOT->GetClass(titkey->GetClassName())->InheritsFrom("TDirectory")) continue; TDirectory *titDir = (TDirectory *)titkey->ReadObj(); TString methodTitle; TMVAGlob::GetMethodTitle(methodTitle,titDir); cout << "--- Found directory for method: " << methodName << "::" << methodTitle << flush; TString hname = "MVA_" + methodTitle; if (htype == ProbaType ) hname += "_Proba"; else if (htype == RarityType ) hname += "_Rarity"; TH1* sig = dynamic_cast<TH1*>(titDir->Get( hname + "_S" )); TH1* bgd = dynamic_cast<TH1*>(titDir->Get( hname + "_B" )); if (sig==0 || bgd==0) { if (htype == MVAType) cout << "mva distribution not available (this is normal for Cut classifier)" << endl; else if(htype == ProbaType) cout << "probability distribution not available (this is normal for Cut classifier)" << endl; else if(htype == RarityType) cout << "rarity distribution not available (this is normal for Cut classifier)" << endl; else if(htype == CompareType) cout << "overtraining check not available (this is normal for Cut classifier)" << endl; else cout << endl; } else { cout << endl; // chop off useless stuff sig->SetTitle( Form("TMVA response for classifier: %s", methodTitle.Data()) ); if (htype == ProbaType) sig->SetTitle( Form("TMVA probability for classifier: %s", methodTitle.Data()) ); else if (htype == RarityType) sig->SetTitle( Form("TMVA Rarity for classifier: %s", methodTitle.Data()) ); else if (htype == CompareType) sig->SetTitle( Form("TMVA overtraining check for classifier: %s", methodTitle.Data()) ); // create new canvas TString ctitle = ((htype == MVAType) ? Form("TMVA response %s",methodTitle.Data()) : (htype == ProbaType) ? Form("TMVA probability %s",methodTitle.Data()) : (htype == CompareType) ? Form("TMVA comparison %s",methodTitle.Data()) : Form("TMVA Rarity %s",methodTitle.Data())); TString cname = ((htype == MVAType) ? Form("output_%s",methodTitle.Data()) : (htype == ProbaType) ? Form("probability_%s",methodTitle.Data()) : (htype == CompareType) ? Form("comparison_%s",methodTitle.Data()) : Form("rarity_%s",methodTitle.Data())); c = new TCanvas( Form("canvas%d", countCanvas+1), ctitle, countCanvas*50+200, countCanvas*20, width, (Int_t)width*0.78 ); // set the histogram style TMVAGlob::SetSignalAndBackgroundStyle( sig, bgd ); // normalise both signal and background TMVAGlob::NormalizeHists( sig, bgd ); // frame limits (choose judicuous x range) Float_t nrms = 4; cout << "--- Mean and RMS (S): " << sig->GetMean() << ", " << sig->GetRMS() << endl; cout << "--- Mean and RMS (B): " << bgd->GetMean() << ", " << bgd->GetRMS() << endl; Float_t xmin = TMath::Max( TMath::Min(sig->GetMean() - nrms*sig->GetRMS(), bgd->GetMean() - nrms*bgd->GetRMS() ), sig->GetXaxis()->GetXmin() ); Float_t xmax = TMath::Min( TMath::Max(sig->GetMean() + nrms*sig->GetRMS(), bgd->GetMean() + nrms*bgd->GetRMS() ), sig->GetXaxis()->GetXmax() ); Float_t ymin = 0; Float_t maxMult = (htype == CompareType) ? 1.3 : 1.2; Float_t ymax = TMath::Max( sig->GetMaximum(), bgd->GetMaximum() )*maxMult; // build a frame Int_t nb = 500; TString hFrameName(TString("frame") + methodTitle); TObject *o = gROOT->FindObject(hFrameName); if(o) delete o; TH2F* frame = new TH2F( hFrameName, sig->GetTitle(), nb, xmin, xmax, nb, ymin, ymax ); frame->GetXaxis()->SetTitle( methodTitle + ((htype == MVAType || htype == CompareType) ? " response" : "") ); if (htype == ProbaType ) frame->GetXaxis()->SetTitle( "Signal probability" ); else if (htype == RarityType ) frame->GetXaxis()->SetTitle( "Signal rarity" ); frame->GetYaxis()->SetTitle("Normalized"); TMVAGlob::SetFrameStyle( frame ); // eventually: draw the frame frame->Draw(); c->GetPad(0)->SetLeftMargin( 0.105 ); frame->GetYaxis()->SetTitleOffset( 1.2 ); // Draw legend TLegend *legend= new TLegend( c->GetLeftMargin(), 1 - c->GetTopMargin() - 0.12, c->GetLeftMargin() + (htype == CompareType ? 0.40 : 0.3), 1 - c->GetTopMargin() ); legend->SetFillStyle( 1 ); legend->AddEntry(sig,TString("Signal") + ((htype == CompareType) ? " (test sample)" : ""), "F"); legend->AddEntry(bgd,TString("Background") + ((htype == CompareType) ? " (test sample)" : ""), "F"); legend->SetBorderSize(1); legend->SetMargin( (htype == CompareType ? 0.2 : 0.3) ); legend->Draw("same"); // overlay signal and background histograms sig->Draw("samehist"); bgd->Draw("samehist"); if (htype == CompareType) { // if overtraining check, load additional histograms TH1* sigOv = 0; TH1* bgdOv = 0; TString ovname = hname += "_Train"; sigOv = dynamic_cast<TH1*>(titDir->Get( ovname + "_S" )); bgdOv = dynamic_cast<TH1*>(titDir->Get( ovname + "_B" )); if (sigOv == 0 || bgdOv == 0) { cout << "+++ Problem in \"mvas.C\": overtraining check histograms do not exist" << endl; } else { cout << "--- Found comparison histograms for overtraining check" << endl; TLegend *legend2= new TLegend( 1 - c->GetRightMargin() - 0.42, 1 - c->GetTopMargin() - 0.12, 1 - c->GetRightMargin(), 1 - c->GetTopMargin() ); legend2->SetFillStyle( 1 ); legend2->SetBorderSize(1); legend2->AddEntry(sigOv,"Signal (training sample)","P"); legend2->AddEntry(bgdOv,"Background (training sample)","P"); legend2->SetMargin( 0.1 ); legend2->Draw("same"); } Int_t col = sig->GetLineColor(); sigOv->SetMarkerColor( col ); sigOv->SetMarkerSize( 0.7 ); sigOv->SetMarkerStyle( 20 ); sigOv->SetLineWidth( 1 ); sigOv->SetLineColor( col ); sigOv->Draw("e1same"); col = bgd->GetLineColor(); bgdOv->SetMarkerColor( col ); bgdOv->SetMarkerSize( 0.7 ); bgdOv->SetMarkerStyle( 20 ); bgdOv->SetLineWidth( 1 ); bgdOv->SetLineColor( col ); bgdOv->Draw("e1same"); ymax = TMath::Max( ymax, TMath::Max( sigOv->GetMaximum(), bgdOv->GetMaximum() )*maxMult ); frame->GetYaxis()->SetLimits( 0, ymax ); // for better visibility, plot thinner lines sig->SetLineWidth( 1 ); bgd->SetLineWidth( 1 ); // perform K-S test cout << "--- Perform Kolmogorov-Smirnov tests" << endl; Double_t kolS = sig->KolmogorovTest( sigOv ); Double_t kolB = bgd->KolmogorovTest( bgdOv ); cout << "--- Goodness of signal (background) consistency: " << kolS << " (" << kolB << ")" << endl; TString probatext = Form( "Kolmogorov-Smirnov test: signal (background) probability = %5.3g (%5.3g)", kolS, kolB ); TText* tt = new TText( 0.12, 0.74, probatext ); tt->SetNDC(); tt->SetTextSize( 0.032 ); tt->AppendPad(); } // redraw axes frame->Draw("sameaxis"); // text for overflows Int_t nbin = sig->GetNbinsX(); Double_t dxu = sig->GetBinWidth(0); Double_t dxo = sig->GetBinWidth(nbin+1); TString uoflow = Form( "U/O-flow (S,B): (%.1f, %.1f)%% / (%.1f, %.1f)%%", sig->GetBinContent(0)*dxu*100, bgd->GetBinContent(0)*dxu*100, sig->GetBinContent(nbin+1)*dxo*100, bgd->GetBinContent(nbin+1)*dxo*100 ); TText* t = new TText( 0.975, 0.115, uoflow ); t->SetNDC(); t->SetTextSize( 0.030 ); t->SetTextAngle( 90 ); t->AppendPad(); // update canvas c->Update(); // save canvas to file TMVAGlob::plot_logo(1.058); if (Save_Images) { if (htype == MVAType) TMVAGlob::imgconv( c, Form("plots/mva_%s", methodTitle.Data()) ); else if (htype == ProbaType) TMVAGlob::imgconv( c, Form("plots/proba_%s", methodTitle.Data()) ); else if (htype == CompareType) TMVAGlob::imgconv( c, Form("plots/overtrain_%s", methodTitle.Data()) ); else TMVAGlob::imgconv( c, Form("plots/rarity_%s", methodTitle.Data()) ); } countCanvas++; } } } }
int visualizationTracker(float minZ, float maxZ, float minX, float maxX, float theta, float phi){ gSystem->Load("libGeom"); //++++++++++++++++++++ Set up stuff ++++++++++++++++++++// TGeoManager *geom = new TGeoManager("simple1", "Simple geometry"); //--- define some materials and media TGeoMaterial *matVacuum = new TGeoMaterial("Vacuum", 0,0,0); TGeoMedium *Vacuum = new TGeoMedium("Vacuum",1, matVacuum); //--- make the top container volume TGeoVolume *top = geom->MakeBox("TOP", Vacuum, 500., 500., 500.); //TGeoVolume *toptop = geom->MakeBox("TOPTOP", Vacuum, 1000., 1000., 500.); geom->SetTopVolume(top); int count = 0; for (int i = 0; i < _nEntries; ++i){ _inTree->GetEntry(i); if (isRightSubDet()&&(_zVal >= minZ && _zVal < maxZ)&&(_xVal >= minX && _xVal < maxX)/*&&(_rVal <= 12)&&(_rVal >=8)*/){ char modName[192]; sprintf(modName, "testModule%i", i); TGeoVolume* testMod = geom->MakeBox( modName, Vacuum, 90., 90., 40. ); getModule( geom, top, testMod ); count++; } } if(count == 0) return -1; getBeamVisuals(geom, top, minZ, maxZ); //--- close the geometry geom->CloseGeometry(); // -- draw geom->SetVisLevel(4); TCanvas * c = new TCanvas(); c->SetTheta(theta); c->SetPhi(phi); top->Draw(); //--- putting words on canvas... bool with0T = true; //can play with these numbers double widthofeach = 0.07; double textsize = 0.05; double xmax = 2*widthofeach; if (with0T) xmax = widthofeach; TPaveText* pt = new TPaveText(0,0,xmax,1,"brNDC"); pt->SetBorderSize(0); pt->SetFillStyle(0); pt->SetTextAlign(22); pt->SetTextFont(42); pt->SetTextSize(0.1); TText *text = pt->AddText(0,0,TString("#font[42]{"+_line1+"}")); text->SetTextSize(textsize); text->SetTextAngle(90); pt->Draw(); TPaveText *pt2 = new TPaveText(widthofeach, 0, 2*widthofeach, 1, "brNDC"); pt2->SetBorderSize(0); pt2->SetFillStyle(0); pt2->SetTextAlign(22); pt2->SetTextFont(42); pt2->SetTextSize(0.1); TText *text2 = pt2->AddText(0,0,TString("#font[42]{"+_line2+"}")); text2->SetTextSize(textsize); text2->SetTextAngle(90); pt2->Draw(); TPaveText *pt3 = new TPaveText(2*widthofeach, 0, 3*widthofeach, 1, "brNDC"); pt3->SetBorderSize(0); pt3->SetFillStyle(0); pt3->SetTextAlign(22); pt3->SetTextFont(42); pt3->SetTextSize(0.1); TText *text3 = pt3->AddText(0,0,TString("#font[42]{"+_line3+"}")); text3->SetTextSize(textsize); text3->SetTextAngle(90); pt3->Draw(); string str = string("i") + to_string(_i) + string(".gif"); c->SaveAs(TString(str)); gSystem->Exec(TString("mv "+str+" images/"+str)); delete c; cout << "Created image " << str << endl; return 0; }
PigsGUI::PigsGUI(const TGWindow *p) : TGMainFrame(p, fGUIsizeX, fGUIsizeY) { // Creates the GUI if(fVerbose) std::cout<<__PRETTY_FUNCTION__ << std::endl; daq = 0; storage = 0; ev = 0; // Initialize local variables year = month = day = hour = min = sec = 0; fAcqThread = 0; keepAcquiring = kFALSE; useIntegration = kTRUE; const int32_t fHistColors[] = { kMagenta+1, kGreen+1, kBlue+1, kRed+1 }; fAboutMsg = (char*) "\n" "\n" " _____ _____ ______ _______\n" " |_____] | | ____ |______\n" " | __|__ |_____| ______|\n" "\n" "\n" " *** Position Indicating Gamma Sensor ***\n" " * CAEN DT-5781 Data Acquisition System *\n" " Four Channel Version\n" "\n" " by Ondrej Chvala <*****@*****.**>\n" " version 0.097, July 2015\n" " https://github.com/ondrejch/DAQ-DT5781\n" " GNU/GPL"; int32_t i = 0; // helper variable for (i=0; i<4; i++) { fScaleFactor[i] = 1.0; fNormAvgH[i] = 0; } fIntegralMin = 1; fIntegralMax = 16384; // *** Main GUI window *** fMainGUIFrame = new TGMainFrame(gClient->GetRoot(),10,10,kMainFrame | kVerticalFrame); #include "fpigsicon.xpm" TImage *tmpicon = TImage::Create(); tmpicon->SetImageBuffer((char**)fpigsicon_xpm, TImage::kXpm); gVirtualX->SetIconPixmap(fMainGUIFrame->GetId(),tmpicon->GetPixmap()); delete tmpicon; fMainGUIFrame->SetName("fMainGUIFrame"); fMainGUIFrame->SetWindowName("F-PIGS"); // GUI window name fMainGUIFrame->SetLayoutBroken(kTRUE); ufont = gClient->GetFont("-*-*-bold-r-*-*-16-*-*-*-*-*-*-*"); // ufont = gClient->GetFont("-*-helvetica-medium-r-normal-*-14-*-*-*-*-*-iso8859-1"); // ufont = gClient->GetFont("-urw-nimbus sans l-bold-r-normal--0-0-0-0-p-0-iso8859-1"); valTitle.fMask = kGCForeground | kGCBackground | kGCFillStyle | kGCFont | kGCGraphicsExposures; gClient->GetColorByName("#0000FF",valTitle.fForeground); gClient->GetColorByName("#e0e0e0",valTitle.fBackground); valTitle.fFillStyle = kFillSolid; valTitle.fFont = ufont->GetFontHandle(); valTitle.fGraphicsExposures = kFALSE; uGC = gClient->GetGC(&valTitle, kTRUE); fMainTitle = new TGLabel(fMainGUIFrame,"Four-channel Position Identifying Gamma Sensor (F-PIGS)", uGC->GetGC(),ufont->GetFontStruct()); fMainTitle->SetTextJustify(36); fMainTitle->SetMargins(0,0,0,0); fMainTitle->SetWrapLength(-1); fMainGUIFrame->AddFrame(fMainTitle, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fMainTitle->MoveResize(0,0,fGUIsizeX-4,32); fMainGUIFrame->Connect("CloseWindow()", "PigsGUI", this, "~PigsGUI()"); // call class destructor on alt+f4 fMainGUIFrame->DontCallClose(); // Buttons for main GUI fStartDAQ = new TGTextButton(fMainGUIFrame, "Start DAQ"); // start DAQ fStartDAQ->SetTextJustify(36); fStartDAQ->SetMargins(0,0,0,0); fStartDAQ->Resize(90,25); fMainGUIFrame->AddFrame(fStartDAQ, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fStartDAQ->MoveResize(50,fGUIsizeY-30,90,25); gClient->GetColorByName("green", fColor); fStartDAQ->ChangeBackground(fColor); fStartDAQ->SetState(kButtonDisabled); fStartDAQ->Connect("Clicked()","PigsGUI",this,"RunAcquisition()"); fStopDAQ = new TGTextButton(fMainGUIFrame, "Stop DAQ"); // stop DAQ fStopDAQ->SetTextJustify(36); fStopDAQ->SetMargins(0,0,0,0); fStopDAQ->Resize(90,25); fMainGUIFrame->AddFrame(fStopDAQ, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fStopDAQ->MoveResize(fGUIsizeX-50-90,fGUIsizeY-30,90,25); gClient->GetColorByName("red", fColor); fStopDAQ->ChangeBackground(fColor); fStopDAQ->SetState(kButtonDisabled); fStopDAQ->Connect("Clicked()","PigsGUI",this,"StopAcquisition()"); fExitDAQ = new TGTextButton(fMainGUIFrame, "Exit DAQ"); // exit DAQ fExitDAQ->SetTextJustify(36); fExitDAQ->SetMargins(0,0,0,0); fExitDAQ->Resize(90,25); fMainGUIFrame->AddFrame(fExitDAQ, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fExitDAQ->MoveResize(fGUIsizeX/2-45,fGUIsizeY-30,90,25); fExitDAQ->Connect("Clicked()","PigsGUI",this,"~PigsGUI()"); // *** Tab widget **** fTabHolder = new TGTab(fMainGUIFrame,fGUIsizeX-4,fGUIsizeX-4);//,uGC->GetGC()); // *** Container of "CurrentHistogram" *** fCurHistFrame = fTabHolder->AddTab("CurrentHistogram"); fCurHistFrame->SetLayoutManager(new TGVerticalLayout(fCurHistFrame)); // embedded canvas fLatestHistoCanvas = new TRootEmbeddedCanvas("CurrentHEC",fCurHistFrame,fGUIsizeX-10,fGUIsizeY-140); Int_t wfLatestHistoCanvas = fLatestHistoCanvas->GetCanvasWindowId(); cCurrHCanvas = new TCanvas("cCurrHCanvas", 10, 10, wfLatestHistoCanvas); fLatestHistoCanvas->AdoptCanvas(cCurrHCanvas); cCurrHCanvas->Divide(2,2); fCurHistFrame->AddFrame(fLatestHistoCanvas, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fHCurrHProgressBar = new TGHProgressBar(fCurHistFrame,fGUIsizeX-5); fHCurrHProgressBar->SetFillType(TGProgressBar::kBlockFill); fHCurrHProgressBar->ChangeOptions(kSunkenFrame | kDoubleBorder | kOwnBackground); // will reflect user color changes gClient->GetColorByName("#ffffff",fColor); fHCurrHProgressBar->SetBackgroundColor(fColor); fHCurrHProgressBar->SetPosition(1); fCurHistFrame->AddFrame(fHCurrHProgressBar, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // *** Container of "History" *** fTabHisto = fTabHolder->AddTab("History"); fTabHisto->SetLayoutManager(new TGVerticalLayout(fTabHisto)); // embedded canvas fLastMeas = new TRootEmbeddedCanvas("HistoryHEC",fTabHisto,fGUIsizeX-10,fGUIsizeY-110); Int_t wfLastNspectra = fLastMeas->GetCanvasWindowId(); cLastMeas = new TCanvas("cLastMeas", 10, 10, wfLastNspectra); fLastMeas->AdoptCanvas(cLastMeas); fMG = new TMultiGraph("fMG",""); for (i=0; i<4; i++) { fGraph[i] = new TGraph(); fGraph[i]->SetName(Form("gCh%d",i)); fGraph[i]->SetDrawOption("AP"); fGraph[i]->SetMarkerColor(fHistColors[i]); fGraph[i]->SetMarkerStyle(21); fGraph[i]->SetMarkerSize(2.0); fGraph[i]->SetLineWidth(0.5); fGraph[i]->SetLineColor(i+12); fGraph[i]->SetFillStyle(0); fMG->Add(fGraph[i]); } fTabHisto->AddFrame(fLastMeas, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // *** Container of "Average" *** fTabSum = fTabHolder->AddTab("Average"); fTabSum->SetLayoutManager(new TGVerticalLayout(fTabSum)); // embedded canvas fSumSpectra = new TRootEmbeddedCanvas("SumHEC",fTabSum,fGUIsizeX-10,fGUIsizeY-110); Int_t wfSumSpectra = fSumSpectra->GetCanvasWindowId(); cSumSpectra = new TCanvas("cSumSpectra", 10, 10, wfSumSpectra); fSumSpectra->AdoptCanvas(cSumSpectra); cSumSpectra->Divide(2,2); for (i=1; i<5; i++) { cSumSpectra->GetPad(i)->SetLogx(); cSumSpectra->GetPad(i)->SetLogy(); } fTabSum->AddFrame(fSumSpectra, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // *** Container of "Arrow" *** fTabArrow = fTabHolder->AddTab("Arrow"); fTabArrow->SetLayoutManager(new TGVerticalLayout(fTabArrow)); fArrowECanvas = new TRootEmbeddedCanvas("ArrowHEC",fTabArrow,fGUIsizeX-10,fGUIsizeY-110); Int_t wfArrowECanvas = fArrowECanvas->GetCanvasWindowId(); cArrowCanvas = new TCanvas("cArrowCanvas", 5, 5, wfArrowECanvas); // Draw compass circle TEllipse *el1 = new TEllipse(0.5,0.5,0.48,0.48); el1->SetFillColor(14); el1->SetFillStyle(1001); el1->SetLineColor(1); el1->SetLineWidth(6); el1->Draw(); // Add bearing labels TText *north = new TText(0.5,0.9,"N"); north->SetTextColor(2); north->SetTextSize(0.1); north->SetTextAlign(12); north->SetTextAlign(21); north->Draw(); TText *south = new TText(0.5,0.04,"S"); south->SetTextSize(0.1); south->SetTextAlign(12); south->SetTextAlign(21); south->Draw(); TText *east = new TText(0.92,0.5,"E"); east->SetTextSize(0.1); east->SetTextAlign(12); east->SetTextAlign(21); east->Draw(); TText *west = new TText(0.08,0.5,"W"); west->SetTextSize(0.1); west->SetTextAlign(12); west->SetTextAlign(21); west->Draw(); // Draw initial arrow pointing North ar1 = new TArrow(0.5,0.3,0.5,0.7,0.3,"|>"); ar1->SetAngle(30); ar1->SetLineWidth(5); ar1->SetFillColor(4); ar1->Draw(); fArrowECanvas->AdoptCanvas(cArrowCanvas); fTabArrow->AddFrame(fArrowECanvas, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); // *** Container of "Config" *** fTabConfig = fTabHolder->AddTab("Config"); fTabConfig->SetLayoutManager(new TGVerticalLayout(fTabConfig)); // Acquisition time settings fControlFrame = new TGGroupFrame(fTabConfig, "Acquisition time [sec]"); fControlFrame->SetTitlePos(TGGroupFrame::kCenter); // Acquisition time entry fAcqTimeFrame = new TGCompositeFrame(fControlFrame, 200, 10, kHorizontalFrame); fAcqTimeSlider = new TGHSlider(fAcqTimeFrame,300,kSlider1 | kScaleBoth,-1); //fAcqTimeSlider = new TGHSlider(fControlFrame,300,kSlider1 | kScaleBoth,-1); fAcqTimeSlider->Connect("PositionChanged(Int_t)", "PigsGUI", this, "SetAcquisitionLoopTimeSlider()"); //fAcqTimeSlider->Connect("PositionChanged(Int_t)", "TGLabel", fAcqTimeLabel, "SetText(Int_t)"); fAcqTimeSlider->SetRange(1,6000); // time in 100 ms increments => [0.1 - 600 sec] fAcqTimeSlider->SetPosition(fDefaultAcqTime*10); // 10 second acquire time by default fAcqTimeFrame->AddFrame(fAcqTimeSlider, new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5)); //fAcqTimeEntry = new TGNumberEntry(fControlFrame, (Double_t) fDefaultAcqTime ,5,-1, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,TGNumberFormat::kNELLimitMinMax, 0.1, 600); fAcqTimeEntry = new TGNumberEntry(fAcqTimeFrame, (Double_t) fDefaultAcqTime ,5,-1, TGNumberFormat::kNESRealOne, TGNumberFormat::kNEAPositive,TGNumberFormat::kNELLimitMinMax, 0.1, 600); fAcqTimeEntry->GetNumberEntry()->SetToolTipText("Time for one DAQ loop in seconds."); fAcqTimeEntry->GetNumberEntry()->Connect("TextChanged(char*)", "PigsGUI", this, "SetAcquisitionLoopTimeNumberEntry()"); fAcqTimeEntry->GetNumberEntry()->Connect("ReturnPressed()", "PigsGUI", this, "SetAcquisitionLoopTimeNumberEntry()"); fAcqTimeFrame->AddFrame(fAcqTimeEntry, new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5)); //fControlFrame->AddFrame(fAcqTimeEntry, new TGLayoutHints(kLHintsNormal, 5, 5, 5, 5)); // Disable acquisition time adjustment until DAQ initialized fAcqTimeEntry->SetState(kFALSE); fAcqTimeSlider->SetState(kFALSE); /* fAcqTimeLabelFrame = new TGCompositeFrame(fTabConfig, 100, 10, kHorizontalFrame); fAcqTimeLabelText = new TGLabel(fAcqTimeLabelFrame,"Acquire time:", uGC->GetGC(),ufont->GetFontStruct()); fAcqTimeLabelText->SetTextJustify(kTextLeft); fAcqTimeLabelText->SetWrapLength(-1); fAcqTimeLabel = new TGLabel(fAcqTimeLabelFrame," ", uGC->GetGC(),ufont->GetFontStruct()); fAcqTimeLabel->SetTextColor(0x0066ff); fAcqTimeLabel->SetTextJustify(kTextCenterX); fAcqTimeLabel->SetWrapLength(-1); fAcqTimeLabel->SetMinWidth(3); fAcqTimeLabelFrame->AddFrame(fAcqTimeLabelText, new TGLayoutHints(kLHintsLeft, 10, 5, 10, 10)); fAcqTimeLabelFrame->AddFrame(fAcqTimeLabel, new TGLayoutHints(kLHintsRight, 0, 10, 10, 10 )); */ fControlFrame->AddFrame(fAcqTimeFrame, new TGLayoutHints(kLHintsTop, 10, 10, 5, 5)); // fControlFrame->AddFrame(fAcqTimeLabelFrame, new TGLayoutHints(kLHintsBottom, 10, 10, 5, 5)); fTabConfig->AddFrame(fControlFrame, new TGLayoutHints(kLHintsNormal, 10, 10, 10, 10)); // Scale Factor setting fScalerFrame = new TGGroupFrame(fTabConfig, "Channel gain compensation"); fScalerFrame->SetTitlePos(TGGroupFrame::kCenter); for (i=0; i<4; i++){ fScalerInput[i] = new PigsScalerInput(fScalerFrame, Form("ch %d scaling", i)); fScalerInput[i]->GetEntry()->Connect("TextChanged(char*)", "PigsGUI", this, Form("SetGainScalerCh%d()",i)); fScalerInput[i]->GetEntry()->SetToolTipText( "Channel gain is a multiplicative factor used in detector response calculation."); fScalerFrame->AddFrame(fScalerInput[i], new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2)); } fTabConfig->AddFrame(fScalerFrame, new TGLayoutHints(kLHintsNormal, 10, 10, 10, 10)); // Integration Limits fIntLimFrame = new TGGroupFrame(fTabConfig, "ADC window for integration"); fIntLimFrame->SetTitlePos(TGGroupFrame::kCenter); fUseIntegration = new TGCheckButton(fIntLimFrame, "Energy integration On/Off"); fUseIntegration->SetOn(kFALSE); // Start with regular counts fUseIntegration->SetToolTipText("If enabled, the detector response is calculated by integrating " "the energy deposited in ADC bins within the limits specidied below.\n" "If disabled, the hit count is used as a detector response."); fUseIntegration->Connect("Toggled(Bool_t)", "PigsGUI", this, "ToggleUseIntegration()"); fIntLimFrame->AddFrame(fUseIntegration, new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2)); fIntLimInputMin = new PigsIntLimInput(fIntLimFrame, "Lower limit"); fIntLimInputMin->GetEntry()->SetIntNumber(fIntegralMin); fIntLimInputMin->GetEntry()->Connect("TextChanged(char*)", "PigsGUI", this, "SetIntegralLimitMin()"); fIntLimFrame->AddFrame(fIntLimInputMin, new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2)); fIntLimInputMax = new PigsIntLimInput(fIntLimFrame, "Upper limit"); fIntLimInputMax->GetEntry()->SetIntNumber(fIntegralMax); fIntLimInputMax->GetEntry()->Connect("TextChanged(char*)", "PigsGUI", this, "SetIntegralLimitMax()"); fIntLimFrame->AddFrame(fIntLimInputMax, new TGLayoutHints(kLHintsNormal, 0, 0, 2, 2)); fTabConfig->AddFrame(fIntLimFrame, new TGLayoutHints(kLHintsNormal, 10, 10, 10, 10)); this->ToggleUseIntegration(); // Updates the integration entries' status // *** Container of "DT5781" *** fTabDT5781 = fTabHolder->AddTab("DT5781"); fTabDT5781->SetLayoutManager(new TGVerticalLayout(fTabDT5781)); gClient->GetColorByName("white", fColor); fDTinfo = new TGTextView(fTabDT5781,fGUIsizeX-120,fGUIsizeY-150,"DAQ not initialized.",kSunkenFrame,fColor); fTabDT5781->AddFrame(fDTinfo, new TGLayoutHints(kLHintsNormal)); fDTinfo->MoveResize(10,50,fGUIsizeX-120,fGUIsizeY-150); fInitDAQ = new TGTextButton(fTabDT5781, "Init DAQ"); // button InitDAQ fInitDAQ->SetTextJustify(36); fInitDAQ->SetMargins(0,0,0,0); fInitDAQ->Resize(90,25); fMainGUIFrame->AddFrame(fInitDAQ, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); gClient->GetColorByName("light blue", fColor); fInitDAQ->ChangeBackground(fColor); fInitDAQ->MoveResize(fGUIsizeX-50-60,50,90,25); fInitDAQ->Connect("Clicked()","PigsGUI",this,"InitDAQ()"); fDisconnectDAQ = new TGTextButton(fTabDT5781, "Disconnect DAQ"); // buttons DisconnectDAQ fDisconnectDAQ->SetTextJustify(36); fDisconnectDAQ->SetMargins(0,0,0,0); fDisconnectDAQ->Resize(90,25); fMainGUIFrame->AddFrame(fDisconnectDAQ, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); gClient->GetColorByName("light blue", fColor); fDisconnectDAQ->MoveResize(fGUIsizeX-50-60,150,90,25); fDisconnectDAQ->ChangeBackground(fColor); fDisconnectDAQ->Connect("Clicked()","PigsGUI",this,"DisconnectDAQ()"); // *** Container of "About" *** fTabAbout = fTabHolder->AddTab("About"); fTabAbout->SetLayoutManager(new TGVerticalLayout(fTabAbout)); ufont = gClient->GetFont("-*-fixed-medium-r-*-*-15-*-*-*-*-*-*-*"); fAboutText = new TGTextView(fTabAbout,1,1,"SPIGS",kSunkenFrame); fAboutText->SetFont(ufont->GetFontStruct()); fTabAbout->AddFrame(fAboutText, new TGLayoutHints(kLHintsNormal)); fAboutText->LoadBuffer(fAboutMsg); //------------------------------------------------------------------------- // Change to the starting tab fTabHolder->SetTab("DT5781"); // Display the GUI fTabHolder->Resize(fTabHolder->GetDefaultSize()); fMainGUIFrame->AddFrame(fTabHolder, new TGLayoutHints(kLHintsLeft | kLHintsTop,2,2,2,2)); fTabHolder->MoveResize(0,32,fGUIsizeX-2,fGUIsizeY-80); fMainGUIFrame->SetMWMHints(kMWMDecorAll, kMWMFuncAll, kMWMInputModeless); fMainGUIFrame->MapSubwindows(); fMainGUIFrame->Resize(fMainGUIFrame->GetDefaultSize()); fMainGUIFrame->MapWindow(); fMainGUIFrame->Resize(fGUIsizeX,fGUIsizeY); static const int32_t tmpw = 410; // Constants for About window placement static const int32_t tmph = 260; fAboutText->MoveResize((fGUIsizeX-tmpw)/2,(fGUIsizeY-tmph)/3,tmpw,tmph); }
void archi() { TCanvas *c1 = new TCanvas("c1","Dictionary Architecture",20,10,750,930); c1->SetBorderSize(0); c1->Range(0,0,20.5,26); TPaveLabel *title = new TPaveLabel(4,24,16,25.5,c1->GetTitle()); title->SetFillColor(46); title->Draw(); TPavesText *dll = new TPavesText(0.5,19,4.5,23,5,"tr"); dll->SetFillColor(39); dll->SetTextSize(0.023); dll->AddText(" "); dll->AddText("Dynamically"); dll->AddText("Linked"); dll->AddText("Libraries"); dll->Draw(); TPaveLabel *dlltitle = new TPaveLabel(1.5,22.6,3.5,23.3,"DLLs"); dlltitle->SetFillColor(28); dlltitle->Draw(); TPavesText *cpp = new TPavesText(5.5,19,9.5,23,5,"tr"); cpp->SetTextSize(0.023); cpp->AddText(" "); cpp->AddText("Commented"); cpp->AddText("Header"); cpp->AddText("Files"); cpp->Draw(); TPaveLabel *cpptitle = new TPaveLabel(6.5,22.6,8.5,23.3,"C++"); cpptitle->SetFillColor(28); cpptitle->Draw(); TPavesText *odl = new TPavesText(10.5,19,14.5,23,5,"tr"); odl->SetTextSize(0.023); odl->AddText(" "); odl->AddText("Objects"); odl->AddText("Description"); odl->AddText("Files"); odl->Draw(); TPaveLabel *odltitle = new TPaveLabel(11.5,22.6,13.5,23.3,"ODL"); odltitle->SetFillColor(28); odltitle->Draw(); TPavesText *idl = new TPavesText(15.5,19,19.5,23,5,"tr"); idl->SetTextSize(0.023); idl->AddText(" "); idl->AddText("Interface"); idl->AddText("Definition"); idl->AddText("Language"); idl->Draw(); TPaveLabel *idltitle = new TPaveLabel(16.5,22.6,18.5,23.3,"IDL"); idltitle->SetFillColor(28); idltitle->Draw(); TWbox *p1 = new TWbox(7.8,10,13.2,17,11,12,1); p1->Draw(); TText *pro1 = new TText(10.5,15.8,"Process 1"); pro1->SetTextAlign(21); pro1->SetTextSize(0.03); pro1->Draw(); TPaveText *p1dict = new TPaveText(8.8,13.8,12.2,15.6); p1dict->SetTextSize(0.023); p1dict->AddText("Dictionary"); p1dict->AddText("in memory"); p1dict->Draw(); TPavesText *p1object = new TPavesText(8.6,10.6,12.1,13.0,5,"tr"); p1object->SetTextSize(0.023); p1object->AddText("Objects"); p1object->AddText("in memory"); p1object->Draw(); TWbox *p2 = new TWbox(15.5,10,20,17,11,12,1); p2->Draw(); TText *pro2 = new TText(17.75,15.8,"Process 2"); pro2->SetTextAlign(21); pro2->SetTextSize(0.03); pro2->Draw(); TPaveText *p2dict = new TPaveText(16,13.8,19.5,15.6); p2dict->SetTextSize(0.023); p2dict->AddText("Dictionary"); p2dict->AddText("in memory"); p2dict->Draw(); TPavesText *p2object = new TPavesText(16.25,10.6,19.25,13.0,5,"tr"); p2object->SetTextSize(0.023); p2object->AddText("Objects"); p2object->AddText("in memory"); p2object->Draw(); TWbox *stub1 = new TWbox(12.9,11.5,13.6,15.5,49,3,1); stub1->Draw(); TText *tstub1 = new TText(13.25,13.5,"Stub1"); tstub1->SetTextSize(0.025); tstub1->SetTextAlign(22); tstub1->SetTextAngle(90); tstub1->Draw(); TWbox *stub2 = new TWbox(15.1,11.5,15.8,15.5,49,3,1); stub2->Draw(); TText *tstub2 = new TText(15.45,13.5,"Stub2"); tstub2->SetTextSize(0.025); tstub2->SetTextAlign(22); tstub2->SetTextAngle(-90); tstub2->Draw(); TArrow *ar1 = new TArrow(); ar1->SetLineWidth(6); ar1->SetLineColor(1); ar1->SetFillStyle(1001); ar1->SetFillColor(1); ar1->DrawArrow(13.5,14,15,14,0.012,"|>"); ar1->DrawArrow(15.1,13,13.51,13,0.012,"|>"); TPaveText *cint = new TPaveText(1.0,15.0,8.0,17.5); cint->SetFillColor(39); cint->SetBorderSize(1); cint->SetTextSize(0.023); cint->AddText("C++ Interpreter"); cint->AddText("and program builder"); cint->Draw(); TPaveText *command = new TPaveText(2.5,13.4,8.0,14.5); command->SetTextSize(0.023); command->SetFillColor(39); command->SetBorderSize(1); command->AddText("Command Thread"); command->Draw(); TPavesText *view = new TPavesText(1.0,9.5,7.7,12.6,3,"tr"); view->SetFillColor(39); view->SetBorderSize(2); view->SetTextSize(0.023); view->AddText("Viewer Thread(s)"); view->AddText("Picking"); view->AddText("Context Menus"); view->AddText("Inspector/Browser"); view->Draw(); TPavesText *web = new TPavesText(0.5,5,6,8.5,5,"tr"); web->SetTextSize(0.023); web->AddText(" "); web->AddText("generated"); web->AddText("automatically"); web->AddText("from dictionary"); web->AddText("and source files"); web->Draw(); TPaveLabel *webtitle = new TPaveLabel(1.5,8.1,5.0,8.8,"HTML Files"); webtitle->SetFillColor(28); webtitle->Draw(); TPavesText *printed = new TPavesText(0.5,1.0,6,4,5,"tr"); printed->SetTextSize(0.023); printed->AddText(" "); printed->AddText("generated"); printed->AddText("automatically"); printed->AddText("from HTML files"); printed->Draw(); TPaveLabel *printedtitle = new TPaveLabel(1.5,3.6,5.0,4.3,"Printed Docs"); printedtitle->SetFillColor(28); printedtitle->Draw(); TBox *box1 = new TBox(0.2,9.2,14.25,17.8); box1->SetFillStyle(0); box1->SetLineStyle(2); box1->Draw(); TBox *box2 = new TBox(10.2,18.7,20.2,23.6); box2->SetFillStyle(0); box2->SetLineStyle(3); box2->Draw(); ar1->DrawArrow(2.5,17.5,2.5,18.9,0.012,"|>"); ar1->DrawArrow(5.5,9.2,5.5,8.7,0.012,"|>"); ar1->DrawArrow(5.5,5,5.5,4.2,0.012,"|>"); ar1->DrawArrow(8.5,9.2,8.5,8.2,0.012,"|>"); ar1->DrawArrow(9.5,8.1,9.5,9.0,0.012,"|>"); ar1->DrawArrow(6.5,19,6.5,17.6,0.012,"|>"); ar1->DrawArrow(8.5,19,8.5,17.1,0.012,"|>"); ar1->DrawArrow(11.5,19,11.5,17.1,0.012,"|>"); TPaveLabel *ootitle = new TPaveLabel(10.5,7.8,17,8.8,"Objects Data Base"); ootitle->SetFillColor(28); ootitle->Draw(); TPad *pio = new TPad("pio","pio",0.37,0.02,0.95,0.31,49); pio->Range(0,0,12,8); pio->Draw(); pio->cd(); TPavesText *raw = new TPavesText(0.5,1,2.5,6,7,"tr"); raw->Draw(); TPavesText *dst1 = new TPavesText(4,1,5,3,7,"tr"); dst1->Draw(); TPavesText *dst2 = new TPavesText(6,1,7,3,7,"tr"); dst2->Draw(); TPavesText *dst3 = new TPavesText(4,4,5,6,7,"tr"); dst3->Draw(); TPavesText *dst4 = new TPavesText(6,4,7,6,7,"tr"); dst4->Draw(); Float_t xlow = 8.5; Float_t ylow = 1; Float_t dx = 0.5; Float_t dy = 0.5; for (Int_t j=1;j<9;j++) { Float_t y0 = ylow + (j-1)*0.7; Float_t y1 = y0 + dy; for (Int_t i=1;i<5;i++) { Float_t x0 = xlow +(i-1)*0.6; Float_t x1 = x0 + dx; TPavesText *anal = new TPavesText(x0,y0,x1,y1,7,"tr"); anal->Draw(); } } TText *daq = new TText(); daq->SetTextSize(0.07); daq->SetTextAlign(22); daq->DrawText(1.5,7.3,"DAQ"); daq->DrawText(6,7.3,"DST"); daq->DrawText(10.,7.3,"Physics Analysis"); daq->DrawText(1.5,0.7,"Events"); daq->DrawText(1.5,0.3,"Containers"); daq->DrawText(6,0.7,"Tracks/Hits"); daq->DrawText(6,0.3,"Containers"); daq->DrawText(10.,0.7,"Attributes"); daq->DrawText(10.,0.3,"Containers"); c1->cd(); }
void massPlot(double lumi=-1., double maxInstLumi=-1.) { setTDRStyle(); //tdrGrid(false, tdrStyle); writeExtraText = true; //extraText = "Preliminary Simulation"; //lumi_8TeV = ""; int iPeriod = 2; // 1=7TeV, 2=8TeV, 3=7+8TeV, 7=7+8+13TeV //int iPos=0; int iPos=11; //int iPos=22; if (lumi<0) lumi=LUMI; if (maxInstLumi<0) maxInstLumi=MAXINSTLUMI; DifferentXSLimitPlots plots(lumi); //mchamp index 0 is used, corresponds to 0th mass point = 100 GeV plots.calculateCrossSections(0,0,0,39,9); // three points on counting expt curve //TGraph* g_obs_gluino = plots.getMassLimitGluino(); TGraph* g_gluino = plots.getExpMassLimitGluino(); //TGraph* g_obs_stop = plots.getMassLimitStop(); TGraph* g_stop = plots.getExpMassLimitStop(); TGraph* g_obs_mchamp = plots.getMassLimitMchamp(); TGraph* g_mchamp = plots.getExpMassLimitMchamp(); //TGraphAsymmErrors* g_expGluino_1sig = plots.getExpMassLimitGluino1Sig(); //TGraphAsymmErrors* g_expGluino_2sig = plots.getExpMassLimitGluino2Sig(); //TGraphAsymmErrors* g_expStop_1sig = plots.getExpMassLimitStop1Sig(); //TGraphAsymmErrors* g_expStop_2sig = plots.getExpMassLimitStop2Sig(); TGraphAsymmErrors* g_exp_1sig = plots.getExpMassLimitMchamp1Sig(); TGraphAsymmErrors* g_exp_2sig = plots.getExpMassLimitMchamp2Sig(); // one point from lifetime fit TGraph* g_tpg = plots.getMassLimitGluinoTP(); TGraph* g_tps = plots.getMassLimitStopTP(); // theory prediction TGraph* g_thGluino = plots.getGluinoTheory(); TGraph* g_thStop = plots.getStopTheory(); TGraph* g_thMchamp = plots.getMchampTheory(); TCanvas* canvas = new TCanvas("canvas","",10,10,575,500); Double_t x[10], yMinus[10], x2[10], y[10], yPlus[10], z[10]; cout<<"MCHAMP LIMITS ARE: "<<endl; for(Int_t i=0; i<g_mchamp->GetN(); i++){ g_mchamp->GetPoint(i, x[i], y[i]); yPlus[i] = g_exp_1sig->GetErrorYhigh(i); yMinus[i] = g_exp_1sig->GetErrorYlow(i); g_obs_mchamp->GetPoint(i, x2[i], z[i]); cout<<" mass is: "<<x[i]<<", expected limit is: "<<y[i]<<", expected +1 sigma is: "<<yPlus[i]<<", expected -1 sigma is: "<<yMinus[i]<<", observed limit is: "<<z[i]<<endl; } //canvas->SetGrid(); canvas->SetLogy(); TH1 * h; //h = canvas->DrawFrame(100., 1e-5, 1500., 1e6); //2DSA gluios and stops h = canvas->DrawFrame(100., 1e-5, 1000., 1e3); //2DSA //h = canvas->DrawFrame(100., 1e-5, 1000., 1e4); //1DSA //h->SetTitle(";m [GeV];#sigma [pb]"); h->SetTitle(";m_{mchamp} [GeV];#sigma(pp #rightarrow mchamp mchamp) [pb]"); //h->SetTitle(";m_{mchamp} [GeV];#sigma(pp #rightarrow mch mch) #times BF(mch #rightarrow #mu#mu) [pb]"); //h->SetTitle("Beamgap Expt;m_{#tilde{g}} [GeV/c^{2}]; #sigma(pp #rightarrow #tilde{g}#tilde{g}) #times BR(#tilde{g} #rightarrow g#tilde{#chi}^{0}) [pb]"); // not covered region TBox* nc = new TBox(100., .1, 150., 5e2); nc->SetFillStyle(3354); nc->SetFillColor(kRed-4); //nc->Draw(); /* // details //TPaveText* blurb = new TPaveText(305., 1.e1, 550., 4.5e2); TPaveText* blurb = new TPaveText(0.25, 0.70, 0.50, 0.92, "NDC"); blurb->AddText("CMS Preliminary 2012"); std::stringstream label; label<<"#int L dt = 19.7 fb^{-1}"; blurb->AddText(label.str().c_str()); label.str(""); double peakInstLumi=maxInstLumi; int exponent=30; while (peakInstLumi>10) { peakInstLumi/=10.; ++exponent; } //label<<"L^{max}_{inst} = "<<peakInstLumi<<" x 10^{"<<exponent<<"} cm^{-2}s^{-1}"; //blurb->AddText(label.str().c_str()); //label.str(""); label << "#sqrt{s} = " << ENERGY << " TeV"; blurb->AddText(label.str().c_str()); //blurb->AddText("m_{#tilde{g}} - m_{#tilde{#chi}^{0}} = 100 GeV/c^{2}"); //blurb->AddText("m_{#tilde{t}} - m_{#tilde{#chi}^{0}} = 180 GeV/c^{2}"); blurb->SetTextFont(42); blurb->SetBorderSize(0); blurb->SetFillColor(0); blurb->SetShadowColor(0); blurb->SetTextAlign(12); blurb->SetTextSize(0.033); */ // legend TBox *legbg = new TBox(600., 1.e1, 900., 4e2); //legbg->Draw(); //TLegend *leg = new TLegend(600., 1.e1, 900., 4e2,"95% C.L. Limits",""); //TLegend* leg = new TLegend(0.67, 0.70, 0.82, 0.92,"95% CL Limits:","NDC"); /////////TLegend* leg = new TLegend(0.52, 0.70, 0.77, 0.92,"95% CL Limits:","NDC"); TLegend* leg = new TLegend(0.45, 0.70, 0.70, 0.92,"95% CL Limits:","NDC"); leg->SetTextSize(0.033); leg->SetBorderSize(0); leg->SetTextFont(42); leg->SetFillColor(0); leg->AddEntry(g_obs_mchamp, "Observed, 10 #mus - 1000 s", "lp"); leg->AddEntry(g_mchamp, "Expected, 10 #mus - 1000 s", "l"); leg->AddEntry(g_exp_1sig, "Expected #pm1#sigma, 10 #mus - 1000 s", "lf"); leg->AddEntry(g_exp_2sig, "Expected #pm2#sigma, 10 #mus - 1000 s", "lf"); leg->AddEntry(g_thMchamp, "LO Prediction", "l"); /* leg->AddEntry(g_gluino, "Expected Gluino Limit, 10 #mus - 1000 s", "l"); leg->AddEntry(g_thGluino, "Gluino LO Prediction", "l"); leg->AddEntry(g_stop, "Expected Stop Limit, 10 #mus - 1000 s", "l"); leg->AddEntry(g_thStop, "Stop LO Prediction", "l"); */ //leg->AddEntry(g_thGluino, "NLO+NLL #tilde{g}", "l"); //leg->AddEntry(g_gluino, "Obs.: 10 #mus - 1000 s Counting Exp. (#tilde{g})", "l"); //leg->AddEntry(g_tpg, "Obs.: 10 #mus Timing Profile (#tilde{g})", "l"); //leg->AddEntry(g_thStop, "NLO+NLL #tilde{t}", "l"); //leg->AddEntry(g_stop, "Obs.: 10 #mus - 1000 s Counting Exp. (#tilde{t})", "l"); //leg->AddEntry(g_tps, "Obs.: 10 #mus Timing Profile (#tilde{t})", "l"); //leg->AddEntry(graph_em, "Obs.: 10 #mus - 1000 s Counting Exp. (EM only)", "l"); // leg->AddEntry(graph1, "Obs.: 570 ns Counting Exp.", "l"); leg->Draw(); /* // gluino curves g_gluino->SetLineColor(kBlue); g_gluino->SetLineStyle(2); g_gluino->SetLineWidth(3); g_gluino->Draw("l"); g_tpg->SetLineColor(kBlue); g_tpg->SetLineStyle(3); g_tpg->SetLineWidth(3); //g_tpg->Draw("l"); // theory line g_thGluino->SetLineColor(kGreen); g_thGluino->SetLineStyle(1); g_thGluino->SetLineWidth(2); g_thGluino->SetFillStyle(3001); g_thGluino->SetFillColor(kGreen-4); g_thGluino->Draw("l3"); // stop curves g_stop->SetLineColor(kRed); g_stop->SetLineStyle(2); g_stop->SetLineWidth(2); g_stop->Draw("l"); g_tps->SetLineColor(kRed); g_tps->SetLineStyle(3); g_tps->SetLineWidth(3); //g_tps->Draw("l"); g_thStop->SetLineColor(kOrange); g_thStop->SetLineStyle(1); g_thStop->SetLineWidth(2); g_thStop->SetFillStyle(3001); g_thStop->SetFillColor(kOrange-4); g_thStop->Draw("l3"); */ // mchamp curves // 2 sigma band g_exp_2sig->SetLineColor(0); g_exp_2sig->SetLineStyle(0); g_exp_2sig->SetLineWidth(0); g_exp_2sig->SetFillColor(kYellow); g_exp_2sig->SetFillStyle(1001); g_exp_2sig->Draw("3"); // 1 sigma band // g_exp_1sig->SetLineColor(8); g_exp_1sig->SetLineColor(0); g_exp_1sig->SetLineStyle(0); g_exp_1sig->SetLineWidth(0); // g_exp_1sig->SetFillColor(8); g_exp_1sig->SetFillColor(kGreen); g_exp_1sig->SetFillStyle(1001); // g_exp_1sig->SetFillStyle(3005); g_exp_1sig->Draw("3"); // g_exp_1sig->Draw("lX"); g_obs_mchamp->SetLineStyle(1); g_obs_mchamp->SetLineWidth(2); g_obs_mchamp->SetMarkerStyle(20); g_obs_mchamp->SetMarkerSize(1); g_obs_mchamp->Draw("pl"); //g_mchamp->SetLineColor(kBlue); g_mchamp->SetLineStyle(2); //g_mchamp->SetLineStyle(1); g_mchamp->SetLineWidth(3); g_mchamp->SetMarkerStyle(20); g_mchamp->SetMarkerSize(1); g_mchamp->Draw("l"); // theory line g_thMchamp->SetLineColor(kRed); g_thMchamp->SetLineStyle(1); g_thMchamp->SetLineWidth(2); g_thMchamp->SetFillStyle(3001); g_thMchamp->SetFillColor(kRed-4); g_thMchamp->Draw("l3"); // theory line label TLatex* th = new TLatex(480., 4., "NLO+NLL #tilde{g}"); th->SetTextColor(kBlue); th->SetTextFont(42); th->SetTextSize(0.035); //th->Draw(); TLatex* ths = new TLatex(330., 2., "NLO+NLL #tilde{t}"); ths->SetTextColor(kRed); ths->SetTextFont(42); ths->SetTextSize(0.035); //ths->Draw(); TLatex* thm = new TLatex(480., 4., "NLO+NLL mchamp"); //thm->SetTextColor(kBlue); thm->SetTextFont(42); thm->SetTextSize(0.035); //thm->Draw(); // not explored label TText* ne = new TText(125., .2, "Not Sensitive"); ne->SetTextColor(kRed+1); ne->SetTextFont(42); ne->SetTextAngle(90); ne->SetTextSize(0.035); //ne->Draw(); //blurb->Draw(); canvas->RedrawAxis(); CMS_lumi(canvas, iPeriod, iPos); canvas->Print("massLimit.pdf"); canvas->Print("massLimit.png"); canvas->Print("massLimit.C"); plots.calculateIntercepts(); TFile* fnew = new TFile("histos.root", "recreate"); fnew->cd(); g_obs_mchamp->Write(); g_mchamp->Write(); g_thMchamp->Write(); }
void drawHisto(TCanvas* C,TString Group1,TFile* F1,TString Group2,TFile* F2,TString channel,TString category,TString sample,bool PrintDiff){ C->Clear(); TH1F* H1 = (TH1F*) F1->Get(channel+"_"+category+"/"+sample); TH1F* H2 = (TH1F*) F2->Get(channel+"_"+category+"/"+sample); if(!H1||!H2||H1->Integral()!=H1->Integral()||H2->Integral()!=H2->Integral()){ if(H1&&H1->Integral()==H1->Integral())H1->Draw("histpe"); if(H2&&H2->Integral()==H2->Integral())H2->Draw("histpe"); TText cat; cat.DrawTextNDC(.2,.5,channel+"_"+category+"/"+sample); if(!H1||H1->Integral()!=H1->Integral()) cat.DrawTextNDC(.2,.4,Group1+" is missing or 0"); if(!H2||H2->Integral()!=H2->Integral()) cat.DrawTextNDC(.2,.4,Group2+" is missing or 0"); if(PrintDiff)printf("| %.1f ",100); C->Print(TString(C->GetName())+".pdf"); return; } // cout<<channel<<" "<<category<<" "<<sample<<endl; // cout<<H1->Integral()<<" "<<H2->Integral()<<endl; // TText cat; // cat.DrawTextNDC(.2,.5,channel+"_"+category+"/"+sample); // C->Print(TString(C->GetName())+".pdf"); // return; TPad pad1("pad1","",0,0.2,1,1); TPad pad2("pad2","",0,0,1,0.2); //////////////////////////////////////////// pad1.cd(); //H1->SetTitle(""); H1->SetTitle(channel+" "+category+" "+sample); H1->GetXaxis()->SetTitle("mass"); H1->GetYaxis()->SetTitle(""); H1->GetYaxis()->SetRangeUser(0,(H1->GetMaximum()>H2->GetMaximum() ? H1->GetMaximum() : H2->GetMaximum())*1.2); H1->SetLineWidth(3); H1->SetLineColor(1); H1->SetFillColor(0); H1->Draw("histpe"); H2->SetMarkerSize(0.01); H2->SetLineWidth(3); H2->SetLineColor(2); H2->SetFillColor(0); H2->Draw("histesame"); TText TXmine; TXmine.SetTextColor(1); TXmine.SetTextSize(.04); TText TXother; TXother.SetTextColor(2); TXother.SetTextSize(.04); TText TXdiff; TXdiff.SetTextColor(4); TXdiff.SetTextSize(.03); char yield1[100]; sprintf(yield1,"%.2f",H1->Integral(1,H1->GetNbinsX())); char yield2[100]; sprintf(yield2,"%.2f",H2->Integral(1,H2->GetNbinsX())); TXmine.DrawTextNDC(.55,.845,Group1+" : "+yield1); TXother.DrawTextNDC(.55,.81,Group2+" : "+yield2); char txt[100]; float diff=100*2*fabs(H1->Integral(1,H1->GetNbinsX())-H2->Integral(1,H2->GetNbinsX()))/(H1->Integral(1,H1->GetNbinsX())+H2->Integral(1,H2->GetNbinsX())); sprintf(txt,"Difference = %.1f",diff); TXdiff.DrawTextNDC(.25,.85,TString(txt)+"%"); //////////////////////////////////////////// pad2.cd(); ///Draw the ratio of the historgrams TH1F*HDiff=(TH1F*)H2->Clone("HDiff"); HDiff->Divide(H1); HDiff->GetYaxis()->SetRangeUser(0.8,1.2); HDiff->GetYaxis()->SetNdivisions(3); HDiff->GetYaxis()->SetLabelSize(0.1); HDiff->GetYaxis()->SetTitleSize(0.1); HDiff->GetYaxis()->SetTitleOffset(0.5); //HDiff->GetYaxis()->SetTitle(myGroup + " / " + group); HDiff->GetYaxis()->SetTitle("Ratio"); HDiff->GetXaxis()->SetNdivisions(-1); HDiff->GetXaxis()->SetTitle(""); HDiff->GetXaxis()->SetLabelSize(0.0001); HDiff->SetMarkerSize(0.1); HDiff->Draw("histpe"); TLine line; line.DrawLine(HDiff->GetXaxis()->GetXmin(),1,HDiff->GetXaxis()->GetXmax(),1); C->Clear(); pad1.Draw(); pad2.Draw(); //cout<<setiosflags(ios::fixed)<<precision(2); //cout<<"| "<<diff<<" "<<endl; //if(PrintDiff)printf("| %.1f ",diff); C->Print(TString(C->GetName())+".pdf"); //delete H1; //delete H2; delete HDiff; }
void plotauto(TString infilename) { TString plname = infilename+".ps"; TCanvas* cc = new TCanvas("validate","validate",500,370); cc->Print(plname+"["); TText tt; tt.SetTextColor(2); tt.SetTextSize(0.02); gStyle->SetMarkerSize(0.1); gStyle->SetTitleSize(0.15,"ff"); gStyle->SetTitleTextColor(4); std::vector < TString > vnames; vnames.push_back("Sim_HitEn"); vnames.push_back("Sim_HitTime"); vnames.push_back("Sim_posXY"); vnames.push_back("Sim_posXZ"); vnames.push_back("Sim_posYZ"); vnames.push_back("Sim_posRZ"); std::vector <TString> exts; exts.push_back(""); exts.push_back("_posZ"); exts.push_back("_negZ"); TH1F* h; TH2F* hh; TKey *key; TIter next; TKey *key2; TIter next2; TFile* infile = new TFile(infilename, "read"); // overall geometry TDirectory* td = (TDirectory*) infile->Get("ALLCollections"); cc->Clear(); cc->Divide(3,3); cc->cd(1); hh = (TH2F*) td->Get("ALLCollections_overallhitZR"); hh->Draw("box"); cc->cd(2); int icol=1; bool first=true; TLegend* tl = new TLegend(0., 0., 1, 1); next = td->GetListOfKeys(); while ((key = (TKey*)next())) { TClass *cll = gROOT->GetClass(key->GetClassName()); if (cll->InheritsFrom("TH2F")) { hh = (TH2F*)key->ReadObj(); TString hn = hh->GetName(); if ( hn.Contains("ALL") ) continue; if ( hn.Contains("_Log") ) continue; hh->SetLineColor(icol); if ( first ) {hh->Draw("box"); first=false;} else hh->Draw("same;box"); icol++; if (icol==10) icol=1; TString ss = hn.ReplaceAll( "_overallhitZR", ""); tl->AddEntry(hh, ss , "l"); } } // the legend cc->cd(3); tl->Draw(); cc->cd(4); hh = (TH2F*) td->Get("ALLCollections_Log_overallhitZR"); hh->Draw("box"); cc->cd(5); icol=1; first=true; next = td->GetListOfKeys(); while ((key = (TKey*)next())) { TClass *cll = gROOT->GetClass(key->GetClassName()); if (cll->InheritsFrom("TH2F")) { hh = (TH2F*)key->ReadObj(); TString hn = hh->GetName(); if ( hn.Contains("ALL" ) ) continue; if ( ! hn.Contains("_Log_") ) continue; hh->SetLineColor(icol); if ( first ) {hh->Draw("box"); first=false;} else hh->Draw("same;box"); icol++; if (icol==10) icol=1; } } cc->cd(7); hh = (TH2F*) td->Get("ALLCollections_LogLog_overallhitZR"); hh->Draw("box"); cc->cd(8); icol=1; first=true; next = td->GetListOfKeys(); while ((key = (TKey*)next())) { TClass *cll = gROOT->GetClass(key->GetClassName()); if (cll->InheritsFrom("TH2F")) { hh = (TH2F*)key->ReadObj(); TString hn = hh->GetName(); if ( hn.Contains("ALL" ) ) continue; if ( ! hn.Contains("_LogLog_") ) continue; hh->SetLineColor(icol); if ( first ) {hh->Draw("box"); first=false;} else hh->Draw("same;box"); icol++; if (icol==10) icol=1; } } cc->Print(plname); // now collection-by-collection next = infile->GetListOfKeys(); while ((key = (TKey*)next())) { TClass *cll = gROOT->GetClass(key->GetClassName()); if (cll->InheritsFrom("TDirectory")) { td = (TDirectory*)key->ReadObj(); TString dirname = td->GetName(); if ( dirname=="ALLCollections" ) continue; // is it an endcap collection? bool isEndcap = td->Get(dirname+"_hitXY_posZ"); // first overall geometry cc->Clear(); cc->Divide(3,2); cc->cd(1); ( (TH2F*) td->Get(dirname+"_hitEn"))->Draw("box"); cc->cd(4)->SetLogy(); ( (TH2F*) td->Get(dirname+"_hitTime"))->Draw("box"); if ( isEndcap ) { cc->cd(2); ( (TH2F*) td->Get(dirname+"_hitXY_posZ"))->Draw("box"); cc->cd(3); ( (TH2F*) td->Get(dirname+"_hitXY_negZ"))->Draw("box"); cc->cd(5); ((TH2F*) td->Get(dirname+"_hitZR_posZ"))->Draw("box"); cc->cd(6); ((TH2F*) td->Get(dirname+"_hitZR_negZ"))->Draw("box"); } else { cc->cd(2); ( (TH2F*) td->Get(dirname+"_hitXY"))->Draw("box"); cc->cd(3); ( (TH2F*) td->Get(dirname+"_hitZR"))->Draw("box"); } cc->Print(plname); // then the cell indices // work out how many indices/variables we're dealing with std::vector < TString > indices; std::vector < TString > variables; next2 = td->GetListOfKeys(); while ((key2 = (TKey*)next2())) { cll = gROOT->GetClass(key2->GetClassName()); if (cll->InheritsFrom("TH2F")) { hh = (TH2F*) key2->ReadObj(); TString hn = hh->GetName(); if ( hn.Contains("Indx") ) { TString ss = hn.ReplaceAll(dirname+"_", ""); TString asas = ((TObjString*) (ss.Tokenize("_") -> At(0)))->GetString(); if ( find( indices.begin(), indices.end(), asas )==indices.end() ) indices.push_back(asas); asas = ((TObjString*) (ss.Tokenize("_") -> At(1)))->GetString(); if ( find( variables.begin(), variables.end(), asas )==variables.end() ) variables.push_back(asas); } } } if ( indices.size()==0 || variables.size()==0 ) continue; for (int inp=0; inp<2; inp++) { if ( !isEndcap && inp==1 ) continue; cc->Clear(); cc->Divide(indices.size(), variables.size()); int ic=1; next2 = td->GetListOfKeys(); while ((key2 = (TKey*)next2())) { cll = gROOT->GetClass(key2->GetClassName()); if (cll->InheritsFrom("TH2F")) { hh = (TH2F*) key2->ReadObj(); TString hn = hh->GetName(); if ( isEndcap ) { if ( inp==0 && ! hn.Contains("posZ") ) continue; else if ( inp==1 && ! hn.Contains("negZ") ) continue; } if ( hn.Contains("Indx") ) { TString asas = ((TObjString*) (hn.Tokenize("_") -> At(1)))->GetString(); asas = asas(4,asas.Length()); cc->cd(ic++); hh->Draw("box"); } } } cc->cd(); for ( size_t k=0; k<variables.size(); k++) { tt.DrawTextNDC( 0.0, 0.9 - (1.0*k)/(variables.size()), variables[k] ); } for ( size_t k=0; k<indices.size(); k++) { tt.DrawTextNDC( 0.05 + (1.0*k)/(indices.size()), 0.02, indices[k].ReplaceAll("Indx","Indx_") ); } tt.DrawTextNDC( 0.1, 0.99, dirname); if ( isEndcap ) { if (inp==0 ) tt.DrawTextNDC( 0.35, 0.99, "posZ"); else tt.DrawTextNDC( 0.35, 0.99, "negZ"); } cc->Print(plname); } } } infile->Close(); cc->Print(plname+"]"); }
int main(int argc, char** argv){ //=========Macro generated from canvas: Canvas_1/Canvas_1 //========= (Wed Aug 27 23:28:50 2014) by ROOT version5.34/04 TCanvas *Canvas_1 = new TCanvas("Canvas_1", "Canvas_1",258,73,1243,811); Canvas_1->Range(-0.0625,-0.0625,0.0625,0.0625); Canvas_1->SetFillColor(0); Canvas_1->SetBorderMode(0); Canvas_1->SetBorderSize(2); Canvas_1->SetFrameBorderMode(0); Canvas_1->SetFrameBorderMode(0); TFile f(argv[1],"r"); TH2F *h1 = (TH2F*)f.Get("h2dir/h4"); /* TPaletteAxis *palette = new TPaletteAxis(0.050625,-0.05,0.05625,0.05,h1); palette->SetLabelColor(1); palette->SetLabelFont(42); palette->SetLabelOffset(0.005); palette->SetLabelSize(0.035); palette->SetTitleOffset(1); palette->SetTitleSize(0.035); palette->SetFillColor(100); palette->SetFillStyle(1001); h1->GetListOfFunctions()->Add(palette,"br"); */ TPaveStats *ptstats = new TPaveStats(0.700565,0.6608696,0.9007264,0.9006211,"brNDC"); ptstats->SetName("stats"); ptstats->SetBorderSize(1); ptstats->SetFillColor(0); ptstats->SetTextAlign(12); ptstats->SetTextFont(42); TText *text = ptstats->AddText("h1"); text->SetTextSize(0.03676191); text = ptstats->AddText("Entries = 101 "); text = ptstats->AddText("Mean x = -0.0003512"); text = ptstats->AddText("Mean y = -0.0003318"); text = ptstats->AddText("RMS x = 0.01432"); text = ptstats->AddText("RMS y = 0.01428"); ptstats->SetOptStat(1111); ptstats->SetOptFit(0); ptstats->Draw(); h1->GetListOfFunctions()->Add(ptstats); ptstats->SetParent(h1); Int_t ci; // for color index setting ci = TColor::GetColor("#000099"); h1->SetLineColor(ci); h1->GetXaxis()->SetTitle("mm"); h1->GetXaxis()->SetLabelFont(42); h1->GetXaxis()->SetLabelSize(0.035); h1->GetXaxis()->SetTitleSize(0.035); h1->GetXaxis()->SetTitleFont(42); h1->GetYaxis()->SetTitle("mm"); h1->GetYaxis()->SetLabelFont(42); h1->GetYaxis()->SetLabelSize(0.035); h1->GetYaxis()->SetTitleSize(0.035); h1->GetYaxis()->SetTitleFont(42); h1->GetZaxis()->SetLabelFont(42); h1->GetZaxis()->SetLabelSize(0.035); h1->GetZaxis()->SetTitleSize(0.035); h1->GetZaxis()->SetTitleFont(42); h1->Draw("COLZ "); TPaveText *pt = new TPaveText(0.1594915,0.9368634,0.8405085,0.995,"blNDC"); pt->SetName("title"); pt->SetBorderSize(0); pt->SetFillColor(0); pt->SetFillStyle(0); pt->SetTextFont(42); text = pt->AddText("2D Energy deposit distribution at z=-25um"); pt->Draw(); Canvas_1->Modified(); Canvas_1->cd(); Canvas_1->SetSelected(Canvas_1); std::cout<<argv[1]<<std::endl; Canvas_1->SaveAs(TString(argv[1])+"35#.png"); }
//************************************************************* void arrangeCanvas(TCanvas *canv,TH1F* meanplots[100],TH1F* widthplots[100],Int_t nFiles, TString LegLabels[10], bool onlyBias){ //************************************************************* TPaveText *ali = new TPaveText(0.18,0.87,0.50,0.93,"NDC"); ali->SetFillColor(10); ali->SetTextColor(1); ali->SetTextFont(42); ali->SetMargin(0.); ali->SetLineColor(10); ali->SetShadowColor(10); // pt->SetTextAlign(11); TText *alitext = ali->AddText("Alignment: PCL"); //"Preliminary 2015 - 0T collision data"); alitext->SetTextSize(0.04); TLegend *lego = new TLegend(0.18,0.80,0.78,0.92); lego-> SetNColumns(2); //TLegend *lego = new TLegend(0.18,0.77,0.50,0.86); lego->SetFillColor(10); lego->SetTextSize(0.04); lego->SetTextFont(42); lego->SetFillColor(10); lego->SetLineColor(10); lego->SetShadowColor(10); TPaveText *pt = NULL; TPaveText *pt2 = NULL; TPaveText *pt3 = NULL; if(!onlyBias){ pt =new TPaveText(0.179,0.955,0.260,0.985,"NDC"); } else { pt =new TPaveText(0.179,0.955,0.260,0.985,"NDC"); } pt->SetFillColor(10); pt->SetTextColor(1); pt->SetTextFont(61); // pt->SetTextAlign(11); TText *text1 = pt->AddText("CMS"); //"Preliminary 2015 - 0T collision data"); text1->SetTextSize(0.05); float extraOverCmsTextSize = 0.76; if(!onlyBias){ pt2 =new TPaveText(0.3,0.95,0.503,0.98,"NDC"); } else { pt2 =new TPaveText(0.3,0.95,0.503,0.98,"NDC"); } pt2->SetFillColor(10); pt2->SetTextColor(1); pt2->SetTextFont(52); pt2->SetTextAlign(22); TText *text2 = pt2->AddText("work in progress"); text2->SetTextSize(0.05*extraOverCmsTextSize); if(!onlyBias){ pt3 =new TPaveText(0.6,0.95,0.98,0.98,"NDC"); } else { pt3 =new TPaveText(0.6,0.95,0.98,0.98,"NDC"); } pt3->SetFillColor(10); pt3->SetTextColor(1); pt3->SetTextFont(42); // pt2->SetTextAlign(11); TText *text3 = pt3->AddText("3.8T collision data 2015"); text3->SetTextSize(0.05*extraOverCmsTextSize); canv->SetFillColor(10); if(!onlyBias) { canv->Divide(2,1); canv->cd(1)->SetBottomMargin(0.12); canv->cd(1)->SetLeftMargin(0.17); canv->cd(1)->SetRightMargin(0.02); canv->cd(1)->SetTopMargin(0.06); canv->cd(2)->SetBottomMargin(0.12); canv->cd(2)->SetLeftMargin(0.17); canv->cd(2)->SetRightMargin(0.02); canv->cd(2)->SetTopMargin(0.06); canv->cd(1); } else { canv->cd()->SetBottomMargin(0.14); canv->cd()->SetLeftMargin(0.17); canv->cd()->SetRightMargin(0.02); canv->cd()->SetTopMargin(0.06); canv->cd(); } Double_t absmin(999.); Double_t absmax(-999.); for(Int_t i=0; i<nFiles; i++){ if(meanplots[i]->GetMaximum()>absmax) absmax = meanplots[i]->GetMaximum(); if(meanplots[i]->GetMinimum()<absmin) absmin = meanplots[i]->GetMinimum(); } Double_t safeDelta=(absmax-absmin)/2.; Double_t theExtreme=std::max(absmax,TMath::Abs(absmin)); for(Int_t i=0; i<nFiles; i++){ TString myTitle = meanplots[i]->GetName(); float axmin = -999; float axmax = 999.; int ndiv = 510; if(myTitle.Contains("eta")){ axmin = -2.5; axmax = 2.5; ndiv = 505; } else if (myTitle.Contains("phi")){ axmin = -TMath::Pi(); axmax = TMath::Pi(); ndiv = 510; } else { std::cout<<"unrecongnized variable"; } meanplots[i]->GetXaxis()->SetLabelOffset(999); meanplots[i]->GetXaxis()->SetTickLength(0); // Redraw the new axis gPad->Update(); TGaxis *newaxis = new TGaxis(gPad->GetUxmin(),gPad->GetUymin(), gPad->GetUxmax(),gPad->GetUymin(), axmin, axmax, //meanplots[i]->GetXaxis()->GetXmin(), //meanplots[i]->GetXaxis()->GetXmax(), ndiv,"SDH"); TGaxis *newaxisup = new TGaxis(gPad->GetUxmin(),gPad->GetUymax(), gPad->GetUxmax(),gPad->GetUymax(), axmin, axmax, //meanplots[i]->GetXaxis()->GetXmin(), //meanplots[i]->GetXaxis()->GetXmax(), ndiv,"-SDH"); newaxis->SetLabelOffset(0.02); newaxis->SetLabelFont(42); newaxis->SetLabelSize(.05); newaxis->Draw(); newaxisup->SetLabelOffset(-0.02); newaxisup->SetLabelFont(42); newaxisup->SetLabelSize(0); newaxisup->Draw(); if(i==0){ //meanplots[i]->GetYaxis()->SetRangeUser(absmin-safeDelta/2.,absmax+safeDelta); std::cout<<"name is: "<< meanplots[i]->GetName() << " absmin:" <<absmin<<" absmax: "<<absmax<<" safeDelta: "<<safeDelta<<std::endl; TString theTitle = meanplots[i]->GetName(); if( theTitle.Contains("Norm")){ meanplots[i]->GetYaxis()->SetRangeUser(std::min(-0.48,absmin-safeDelta),std::max(0.48,absmax+safeDelta)); } else { if(!onlyBias){ meanplots[i]->GetYaxis()->SetRangeUser(absmin-safeDelta,absmax+safeDelta); } else { meanplots[i]->GetYaxis()->SetRangeUser(-theExtreme-(TMath::Abs(absmin)/10.),theExtreme+(TMath::Abs(absmax/10.))); } //meanplots[i]->GetYaxis()->SetRangeUser(-theExtreme,theExtreme); } meanplots[i]->Draw("e1"); if(onlyBias){ Int_t nbins = meanplots[i]->GetNbinsX(); Double_t lowedge = meanplots[i]->GetBinLowEdge(1); Double_t highedge = meanplots[i]->GetBinLowEdge(nbins+1); TH1F* hzero = DrawZero(meanplots[i],nbins,lowedge,highedge); hzero->Draw("PLsame"); } } else meanplots[i]->Draw("e1sames"); lego->AddEntry(meanplots[i],LegLabels[i]); } //ali->Draw(); lego->Draw(); pt->Draw("same"); pt2->Draw("same"); pt3->Draw("same"); if(!onlyBias){ canv->cd(2); Double_t absmax2(-999.); for(Int_t i=0; i<nFiles; i++){ if(widthplots[i]->GetMaximum()>absmax2) absmax2 = widthplots[i]->GetMaximum(); } Double_t safeDelta2=absmax2/3.; for(Int_t i=0; i<nFiles; i++){ TString myTitle = widthplots[i]->GetName(); float axmin = -999; float axmax = 999.; int ndiv = 510; if(myTitle.Contains("eta")){ axmin = -2.5; axmax = 2.5; ndiv = 505; } else if (myTitle.Contains("phi")){ axmin = -TMath::Pi(); axmax = TMath::Pi(); ndiv = 510; } else { std::cout<<"unrecongnized variable"; } widthplots[i]->GetXaxis()->SetLabelOffset(999); widthplots[i]->GetXaxis()->SetTickLength(0); // Redraw the new axis gPad->Update(); TGaxis *newaxis2 = new TGaxis(gPad->GetUxmin(),gPad->GetUymin(), gPad->GetUxmax(),gPad->GetUymin(), axmin, axmax, //widthplots[i]->GetXaxis()->GetXmin(), //widthplots[i]->GetXaxis()->GetXmax(), ndiv,"SDH"); newaxis2->SetLabelOffset(0.02); newaxis2->SetLabelFont(42); newaxis2->SetLabelSize(.05); newaxis2->Draw(); TGaxis *newaxis2up = new TGaxis(gPad->GetUxmin(),gPad->GetUymax(), gPad->GetUxmax(),gPad->GetUymax(), axmin, axmax, //widthplots[i]->GetXaxis()->GetXmin(), //widthplots[i]->GetXaxis()->GetXmax(), ndiv,"-SDH"); newaxis2up->SetLabelOffset(-0.02); newaxis2up->SetLabelFont(42); newaxis2up->SetLabelSize(0.); newaxis2up->Draw(); if(i==0) widthplots[i]->Draw("e1"); else widthplots[i]->Draw("e1sames"); widthplots[i]->SetMinimum(0.5); widthplots[i]->SetMaximum(absmax2+safeDelta2); } lego->Draw(); pt->Draw("same"); pt2->Draw("same"); pt3->Draw("same"); } }