# Global scope variables
from ROOT import *
from ROOT import Double
lhcbstyle = TStyle()     # general lhcb style
lhcbName  = TPaveText()  # standard lhcb text for plot
lhcbLabel = TText  # style for Ttext
lhcbLatex = TLatex #style for TLatex

# define names for colours
black=1
red=2
green=3
blue=4
yellow=5 
magenta=6
cyan=7
purple=9

def lhcbstyleSetup():

##################################
# PURPOSE:
#
# This macro defines a standard style for (black-and-white) 
# "publication quality" LHCb ROOT plots. 
#
# USAGE:
#
# Include the lines
#   gROOT.ProcessLine(".L lhcbstyle.C")
#   lhcbstyle()
# at the beginning of your root macro.
#
# Example usage is given in myPlot.C
#
# COMMENTS:
#
# Font:
# 
# The font is chosen to be 62, this is helvetica-bold-r-normal with
# precision 2.
#
# "Landscape histograms":
#
# The style here is designed for more or less square plots.
# For longer histograms, or canvas with many pads, 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:
#  lhcbstyle.SetTickLength(0.05,"x")
#  lhcbstyle.SetTickLength(0.01,"y")
#  lhcbstyle.SetLabelSize(0.15,"x")
#  lhcbstyle.SetLabelSize(0.1,"y")
#  lhcbstyle.SetStatW(0.15)
#  lhcbstyle.SetStatH(0.5)
#
# Authors: Thomas Schietinger, Andrew Powell, Chris Parkes
# Maintained by Editorial board member (currently Chris)
#################################/

 lhcbstyle=TStyle("lhcbstyle","Standard LHCb plots style")

# use helvetica-bold-r-normal, precision 2 (rotatable)
 lhcbFont = 62
# line thickness
 lhcbWidth = int(3.00)

# use plain black on white colors
 lhcbstyle.SetFrameBorderMode(0)
 lhcbstyle.SetCanvasBorderMode(0)
 lhcbstyle.SetPadBorderMode(0)
 lhcbstyle.SetPadColor(0)
 lhcbstyle.SetCanvasColor(0)
 lhcbstyle.SetStatColor(0)
 lhcbstyle.SetPalette(1)

# 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(0.08)
 lhcbstyle.SetLabelFont(lhcbFont,"x")
 lhcbstyle.SetLabelFont(lhcbFont,"y")
 lhcbstyle.SetLabelFont(lhcbFont,"z")
 lhcbstyle.SetLabelSize(0.05,"x")
 lhcbstyle.SetLabelSize(0.05,"y")
 lhcbstyle.SetLabelSize(0.05,"z")
 lhcbstyle.SetTitleFont(lhcbFont)
 lhcbstyle.SetTitleSize(0.06,"x")
 lhcbstyle.SetTitleSize(0.06,"y")
 lhcbstyle.SetTitleSize(0.06,"z")

# use bold lines and 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.5)

# label offsets
 lhcbstyle.SetLabelOffset(0.015)

# 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

# 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")


#define style for text
 lhcbLabel = TText()
 lhcbLabel.SetTextFont(lhcbFont)
 lhcbLabel.SetTextColor(1)
 lhcbLabel.SetTextSize(0.04)
 lhcbLabel.SetTextAlign(12)

# define style of latex text
 lhcbLatex = TLatex()
 lhcbLatex.SetTextFont(lhcbFont)
 lhcbLatex.SetTextColor(1)
 lhcbLatex.SetTextSize(0.04)
 lhcbLatex.SetTextAlign(12)

# set this style
 gROOT.SetStyle("lhcbstyle")
 gROOT.ForceStyle()


def printLHCb(optLR="L", optPrelim="Final", optText=""):
#####################################
# routine to print 'LHCb', 'LHCb Preliminary' on plots 
# options: optLR=L (top left) / R (top right) of plots
#          optPrelim= Final (LHCb), Prelim (LHCb Preliminary), Other
#          optText= text printed if 'Other' specified
##################################
  if optLR=="R" :   
    lhcbName = TPaveText(0.70 - lhcbstyle.GetPadRightMargin(),
					   0.75 - lhcbstyle.SetPadTopMargin(0.05),
					   0.95 - lhcbstyle.GetPadRightMargin(),
					   0.85 - lhcbstyle.SetPadTopMargin(0.05),
					   "BRNDC")
  elif optLR=="L":
    lhcbName = TPaveText(lhcbstyle.GetPadLeftMargin() + 0.05,
				       0.87 - lhcbstyle.GetPadTopMargin(),
				       lhcbstyle.GetPadLeftMargin() + 0.30,
				       0.95 - lhcbstyle.GetPadTopMargin(),
                                        "BRNDC")
  else :
   print "printLHCb: option unknown" , optLR  
  if optPrelim=="Final":
    lhcbName.AddText("LHCb")
  elif optPrelim=="Prelim":
    lhcbName.AddText("#splitline{LHCb}{#scale[1.0]{Preliminary}}")  
  elif optPrelim=="Other":
    lhcbName.AddText(optText)
  else :
    print "printLHCb: option unknown " , optPrelim
  lhcbName.SetFillColor(0)
  lhcbName.SetTextAlign(12)
  lhcbName.SetBorderSize(0)
  lhcbName.Draw()
