from ROOT import TStyle, TText, TLatex, TPaveText, gROOT from Globals import * from array import array lhcbStyle = TStyle("lhcbStyle", "LHCb official plots style") lhcbLabel = TText() lhcbLatex = TLatex() lhcb7TeVPrelimL = TPaveText() lhcb0_9TeVPrelimL = TPaveText() def LHCbStyle(colzPlot=False, NCont=25): # ################################## # # PURPOSE: # # # # This file defines a reasonable style for (black-and-white) # # "publication quality" ROOT plots. The default settings contain # # many features that are either not desirable for printing on white # # paper or impair the general readability of plots. # # # # USAGE: # # Simply add the line # from LHCbStyle import LHCbStyle # at the beginning of your root program (and make sure LHCbStyle.py is # in a location accessible to the compiler). Then add the line # lhcbStyle() # somewhere at the beginning of your program # # SOME COMMENTS: # # Statistics and fit boxes: # # "Decorative" items around the histogram are kept to a minimum. # In particular there is no box with statistics or fit information. # You can easily change this either by editing your private copy # of this style file or by calls to "gStyle" in your macro. # For example, # gStyle->SetOptFit(1011); # will add some fit information. # # Font: # # The font is chosen to be 62, i.e.helvetica-bold-r-normal with # precision 2. Font is of course a matter of taste, but most people # will probably agree that Helvetica bold gives close to optimal # readibility in presentations. It appears to be the ROOT default, # and since there are still some features in ROOT that simply won't # respond to any font requests, it is the wise choice to avoid # ugly font mixtures on the same plot... The precision of the font (2) # is chosen in order to have a rotatable and scalable font. Be sure # to use true-type fonts! I.e. # Unix.*.Root.UseTTFonts: true in your .rootrc file. # # "Landscape histograms": # # The style here is designed for more or less quadratic plots. # For very long histograms, adjustements are needed. For instance, # for a canvas with 1x5 histograms: # TCanvas* c1 = new TCanvas("c1", "L0 muons", 600, 800); # c1->Divide(1,5); # adaptions like the following will be needed: # gStyle->SetTickLength(0.05,"x"); # gStyle->SetTickLength(0.01,"y"); # gStyle->SetLabelSize(0.15,"x"); # gStyle->SetLabelSize(0.1,"y"); # gStyle->SetStatW(0.15); # gStyle->SetStatH(0.5); # ################################## lhcbFont = 132 # Old LHCb style: 62 lhcbWidth = 2 # Old LHCb style: 3.00 lhcbTSize = 0.06 lhcbStyle.SetFillColor(1) lhcbStyle.SetFillStyle(1001) # solid lhcbStyle.SetFrameFillColor(0) lhcbStyle.SetFrameBorderMode(0) lhcbStyle.SetPadBorderMode(0) lhcbStyle.SetPadColor(0) lhcbStyle.SetCanvasBorderMode(0) lhcbStyle.SetCanvasColor(0) lhcbStyle.SetStatColor(0) lhcbStyle.SetLegendBorderSize(0) lhcbStyle.SetLegendFont(132) # If you want the usual gradient palette (blue . red) lhcbStyle.SetPalette(1) # If you want colors that correspond to gray scale in black and white: palette = array('i',[0, 5, 7, 3, 6, 2, 4, 1]) lhcbStyle.SetPalette(8, palette) # set the paper & margin sizes lhcbStyle.SetPaperSize(20, 26) lhcbStyle.SetPadTopMargin(0.05) lhcbStyle.SetPadRightMargin(0.05) # increase for colz plots lhcbStyle.SetPadBottomMargin(0.16) lhcbStyle.SetPadLeftMargin(0.14) # use large fonts lhcbStyle.SetTextFont(lhcbFont) lhcbStyle.SetTextSize(lhcbTSize) lhcbStyle.SetLabelFont(lhcbFont, "x") lhcbStyle.SetLabelFont(lhcbFont, "y") lhcbStyle.SetLabelFont(lhcbFont, "z") lhcbStyle.SetLabelSize(lhcbTSize, "x") lhcbStyle.SetLabelSize(lhcbTSize, "y") lhcbStyle.SetLabelSize(lhcbTSize, "z") lhcbStyle.SetTitleFont(lhcbFont) lhcbStyle.SetTitleFont(lhcbFont, "x") lhcbStyle.SetTitleFont(lhcbFont, "y") lhcbStyle.SetTitleFont(lhcbFont, "z") lhcbStyle.SetTitleSize(1.2*lhcbTSize, "x") lhcbStyle.SetTitleSize(1.2*lhcbTSize, "y") lhcbStyle.SetTitleSize(1.2*lhcbTSize, "z") # use medium bold lines and thick markers lhcbStyle.SetLineWidth(lhcbWidth) lhcbStyle.SetFrameLineWidth(lhcbWidth) lhcbStyle.SetHistLineWidth(lhcbWidth) lhcbStyle.SetFuncWidth(lhcbWidth) lhcbStyle.SetGridWidth(lhcbWidth) lhcbStyle.SetLineStyleString(2, "[12 12]") # postscript dashes lhcbStyle.SetMarkerStyle(20) lhcbStyle.SetMarkerSize(1.0) # label offsets lhcbStyle.SetLabelOffset(0.010, "X") lhcbStyle.SetLabelOffset(0.010, "Y") # by default, do not display histogram decorations: lhcbStyle.SetOptStat(0) #lhcbStyle.SetOptStat("emr"); # show only nent -e , mean - m , rms -r # full opts at http:#root.cern.ch/root/html/TStyle.html#TStyle:SetOptStat lhcbStyle.SetStatFormat("6.3g") # specified as c printf options lhcbStyle.SetOptTitle(0) lhcbStyle.SetOptFit(0) #lhcbStyle.SetOptFit(1011); # order is probability, Chi2, errors, parameters #titles lhcbStyle.SetTitleOffset(0.95, "X") lhcbStyle.SetTitleOffset(0.95, "Y") lhcbStyle.SetTitleOffset(1.2, "Z") lhcbStyle.SetTitleFillColor(0) lhcbStyle.SetTitleStyle(0) lhcbStyle.SetTitleBorderSize(0) lhcbStyle.SetTitleFont(lhcbFont, "title") lhcbStyle.SetTitleX(0.0) lhcbStyle.SetTitleY(1.0) lhcbStyle.SetTitleW(1.0) lhcbStyle.SetTitleH(0.05) # look of the statistics box: lhcbStyle.SetStatBorderSize(0) lhcbStyle.SetStatFont(lhcbFont) lhcbStyle.SetStatFontSize(0.05) lhcbStyle.SetStatX(0.9) lhcbStyle.SetStatY(0.9) lhcbStyle.SetStatW(0.25) lhcbStyle.SetStatH(0.15) # put tick marks on top and RHS of plots lhcbStyle.SetPadTickX(1) lhcbStyle.SetPadTickY(1) # histogram divisions: only 5 in x to avoid label overlaps lhcbStyle.SetNdivisions(505, "x") lhcbStyle.SetNdivisions(510, "y") ## add LHCb label #lhcbName = new TPaveText(gStyle.GetPadLeftMargin() + 0.05, # 0.87 - gStyle.GetPadTopMargin(), # gStyle.GetPadLeftMargin() + 0.20, # 0.95 - gStyle.GetPadTopMargin(), # "BRNDC"); #lhcbName.AddText("LHCb"); #lhcbName.SetFillColor(0); #lhcbName.SetTextAlign(12); #lhcbName.SetBorderSize(0); lhcbLabel.SetTextFont(lhcbFont) lhcbLabel.SetTextColor(1) lhcbLabel.SetTextSize(lhcbTSize) lhcbLabel.SetTextAlign(12) lhcbLatex.SetTextFont(lhcbFont) lhcbLatex.SetTextColor(1) lhcbLatex.SetTextSize(lhcbTSize) lhcbLatex.SetTextAlign(12) gROOT.SetStyle("lhcbStyle") gROOT.ForceStyle() return