
////////////////////////////////////////////////////////////////////
// PURPOSE:
//
// This macro 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 readibility of plots.
//
// USAGE:
//
// Simply include the line
//   gROOT->ProcessLine(".x $LHCBSTYLE/root/lhcbstyle.C");
// at the beginning of your root macro.
//
// 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);
//
////////////////////////////////////////////////////////////////////
#include "TROOT.h"
#include "TStyle.h"
#include "TPaveText.h"
#include "TText.h"
#include "TLatex.h"
#include "TColor.h"

#include "TSystem.h"
#include "TStreamerInfo.h"

#include <iostream>
#include <cstdlib>
using namespace std;



  
TStyle* lhcbStyle(){
  gROOT->Reset();


  // use plain black on white colors
  gROOT->SetStyle("Plain"); 
  
  TStyle *lhcbStyle= new TStyle("lhcbStyle","LHCb official plots style");

  // use helvetica-bold-r-normal, precision 2 (rotatable)
  Int_t lhcbFont     = 62;
  // line thickness
  Double_t lhcbWidth = 2.00;
  // Text size
  Double_t lhcbTSize = 0.06;
  
  if (atoi(gSystem->Getenv("LHCBSTYLE"))==1) {
    // Use times new roman, precision 2 
    lhcbFont        = 132;  // Old LHCb style: 62;
    // Line thickness
    lhcbWidth    = 2.00; // Old LHCb style: 3.00;
    // Text size
    lhcbTSize    = 0.06;
    gROOT->Info("lhcbStyle","Using style for publications");
  }else{
    gROOT->Info("lhcbStyle","Using style for presentations");
  }

  // use plain black on white colors
  lhcbStyle->SetFillColor(1);
  lhcbStyle->SetFillStyle(1001);   // solid
  lhcbStyle->SetFrameFillColor(0);
  lhcbStyle->SetFrameBorderMode(0);
  lhcbStyle->SetCanvasBorderMode(0);
  lhcbStyle->SetPadBorderMode(0);
  lhcbStyle->SetPadColor(0);
  lhcbStyle->SetCanvasColor(0);
  lhcbStyle->SetStatColor(0);
  lhcbStyle->SetPalette(1);
  
  // 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:
  int colors[8] = {0,5,7,3,6,2,4,1};
  lhcbStyle->SetPalette(8,colors);
  
  // 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.20);

  // 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,"x");
  lhcbStyle->SetTitleFont(lhcbFont,"y");
  lhcbStyle->SetTitleFont(lhcbFont,"z");
  lhcbStyle->SetTitleSize(lhcbTSize,"x");
  lhcbStyle->SetTitleSize(lhcbTSize,"y");
  lhcbStyle->SetTitleSize(lhcbTSize,"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.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); // show probability, parameters and errors

  //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(505,"y");


  // **** Added additionaly ****
  //lhcbStyle->SetLabelSize(0.04,"X");
  //lhcbStyle->SetLabelSize(0.04,"Y");
  
  
  // Legend
  lhcbStyle->SetLegendFont(lhcbFont);
  lhcbStyle->SetLegendBorderSize(0);
  lhcbStyle->SetLegendFillColor(0);
  
  
  //palette settings - completely independent
  const Int_t NRGBs = 5;
  const Int_t NCont = 999;
  Double_t stops[NRGBs] = { 0.0, 0.25, 0.50, 0.75, 1.00 };
  Double_t red[NRGBs]   = { 0.0, 0.00, 0.87, 1.00, 0.51 };
  Double_t green[NRGBs] = { 0.1, 0.81, 1.00, 0.20, 0.00 };
  Double_t blue[NRGBs]  = { 0.6, 1.00, 0.12, 0.00, 0.00 };
  
  TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
  lhcbStyle->SetNumberContours(NCont);
  
  

  gROOT->SetStyle("lhcbStyle");
  gROOT->ForceStyle();

  

  

    
  return lhcbStyle;
}

TPaveText* lhcbName(){ 
  
  
  // use helvetica-bold-r-normal, precision 2 (rotatable)
  Int_t lhcbFont     = 62;
  // line thickness
  //Double_t lhcbWidth = 2.00;
  // Text size
  //Double_t lhcbTSize = 0.06;
  
  if (atoi(gSystem->Getenv("LHCBSTYLE"))==1) {
    // Use times new roman, precision 2 
    lhcbFont        = 132;  // Old LHCb style: 62;
    // Line thickness
    //lhcbWidth    = 2.00; // Old LHCb style: 3.00;
    // Text size
    //lhcbTSize    = 0.06;
    gROOT->Info("lhcbStyle","Using style for publications");
  }else{
    gROOT->Info("lhcbStyle","Using style for presentations");
  }
  
  
  
  TPaveText *lhcbName = new TPaveText(gStyle->GetPadLeftMargin() + 0.05,
                                      0.87 - gStyle->GetPadTopMargin(),
                                      gStyle->GetPadLeftMargin() + 0.20,
                                      0.95 - gStyle->GetPadTopMargin(),
                                      "BRNDC");
  lhcbName->SetFillColor(0);
  lhcbName->SetTextAlign(12);
  lhcbName->SetTextFont(lhcbFont);
  lhcbName->SetBorderSize(0);
  lhcbName->AddText("LHCb");
  
  return lhcbName;
}

TText* lhcbLabel(){
  
  // use helvetica-bold-r-normal, precision 2 (rotatable)
  Int_t lhcbFont     = 62;
  // line thickness
  //Double_t lhcbWidth = 2.00;
  // Text size
  Double_t lhcbTSize = 0.06;
  
  if (atoi(gSystem->Getenv("LHCBSTYLE"))==1) {
    // Use times new roman, precision 2 
    lhcbFont        = 132;  // Old LHCb style: 62;
    // Line thickness
    //lhcbWidth    = 2.00; // Old LHCb style: 3.00;
    // Text size
    lhcbTSize    = 0.06; 
    gROOT->Info("lhcbStyle","Using style for publications");
  }else{
    gROOT->Info("lhcbStyle","Using style for presentations");
  }
  
  TText *lhcbLabel = new TText();
  lhcbLabel->SetTextFont(lhcbFont);
  lhcbLabel->SetTextColor(1);
  lhcbLabel->SetTextSize(lhcbTSize);
  lhcbLabel->SetTextAlign(12);
  return lhcbLabel;
}

TLatex* lhcbLatex(){
  
  // use helvetica-bold-r-normal, precision 2 (rotatable)
  Int_t lhcbFont     = 62;
  // line thickness
  //Double_t lhcbWidth = 2.00;
  // Text size
  Double_t lhcbTSize = 0.06;
  
  if (atoi(gSystem->Getenv("LHCBSTYLE"))==1) {
    // Use times new roman, precision 2 
    lhcbFont        = 132;  // Old LHCb style: 62;
    // Line thickness
    //lhcbWidth    = 2.00; // Old LHCb style: 3.00;
    // Text size
    lhcbTSize    = 0.06; 
    gROOT->Info("lhcbStyle","Using style for publications");
  }else{
    gROOT->Info("lhcbStyle","Using style for presentations");
  }
  
  TLatex *lhcbLatex = new TLatex();
  lhcbLatex->SetTextFont(lhcbFont);
  lhcbLatex->SetTextColor(1);
  lhcbLatex->SetTextSize(lhcbTSize);
  lhcbLatex->SetTextAlign(12);
  return lhcbLatex;
}

void BlueRedColorbar(){
  //palette settings - completely independent
  const Int_t NRGBs = 3;
  const Int_t NCont = 999;
  Double_t stops[NRGBs] = { 0.00, 0.50, 1.00 };
  
  Double_t red[NRGBs]   = { 0.00, 0.90, 0.90 };
  Double_t green[NRGBs] = { 0.00, 0.90, 0.00 };
  Double_t blue[NRGBs]  = { 0.90, 0.90, 0.00 };
  
  TColor::CreateGradientColorTable(NRGBs, stops, red, green, blue, NCont);
  
}


void lhcbstyle(){
  lhcbStyle();
  
}


