
import ROOT as rt
from ROOT import TMath, TH1D, TCanvas, TLegend, TLine, TIter, TH1, TH2D, TH2, TF2, TGraph
from ROOT import RooHist, TLatex, gROOT, TIter, TGraphErrors, TGaxis, TF1, TFrame, TH3D

#_____________________________________________________________________________
def invert_col(pad, bgcol=rt.kBlack):

   #set foreground and background color
   #fgcol = rt.kGreen
   fgcol = rt.kOrange-3

   pad.SetFillColor(bgcol)
   pad.SetFrameLineColor(fgcol)

   next = TIter(pad.GetListOfPrimitives())
   obj = next()
   while obj != None:
      #H1
      if obj.InheritsFrom(TH1.Class()) == True:
         if obj.GetLineColor() == rt.kBlack:
            obj.SetLineColor(fgcol)
            obj.SetFillColor(bgcol)
         if obj.GetMarkerColor() == rt.kBlack: obj.SetMarkerColor(fgcol)
         obj.SetAxisColor(fgcol, "X")
         obj.SetAxisColor(fgcol, "Y")
         obj.SetLabelColor(fgcol, "X")
         obj.SetLabelColor(fgcol, "Y")
         obj.GetXaxis().SetTitleColor(fgcol)
         obj.GetYaxis().SetTitleColor(fgcol)
      #Legend
      if obj.InheritsFrom(TLegend.Class()) == True:
         obj.SetTextColor(fgcol)
         #obj.SetFillStyle(1000)
         #obj.SetFillColor(fgcol)
         #obj.SetTextColor(bgcol)
         #ln = TIter(obj.GetListOfPrimitives())
         #lo = ln.Next()
         #while lo != None:
           #if lo.GetObject() == None:
             #lo = ln.Next()
             #continue
           #if lo.GetObject().InheritsFrom(TH1.Class()) == True:
             #hx = lo.GetObject()
             #hx.SetFillColor(bgcol)
             #if hx.GetMarkerColor() == rt.kBlack:
               #hx.SetMarkerColor(fgcol)
               #hx.SetLineColor(fgcol)
               #pass
           #lo = ln.Next()
      #RooHist
      if obj.InheritsFrom(RooHist.Class()) == True:
         if obj.GetMarkerColor() == rt.kBlack:
            obj.SetLineColor(fgcol)
            obj.SetMarkerColor(fgcol)
      #H2
      if obj.InheritsFrom(TH2.Class()) == True:
         obj.SetAxisColor(fgcol, "Z")
         obj.SetLabelColor(fgcol, "Z")
         obj.GetZaxis().SetTitleColor(fgcol)
         #obj.SetLineColor(fgcol)
         #obj.SetMarkerColor(fgcol)
      #TLatex
      if obj.InheritsFrom(TLatex.Class()) == True:
         if obj.GetTextColor() == rt.kBlack:
            obj.SetTextColor( fgcol )
      #F2
      if obj.InheritsFrom(TF2.Class()) == True:
        axes = [obj.GetXaxis(), obj.GetYaxis(), obj.GetZaxis()]
        for i in range(len(axes)):
            axes[i].SetAxisColor(fgcol)
            axes[i].SetLabelColor(fgcol)
            axes[i].SetTitleColor(fgcol)
      #F1
      if obj.InheritsFrom(TF1.Class()) == True:
        axes = [obj.GetXaxis(), obj.GetYaxis()]
        for i in range(len(axes)):
            axes[i].SetAxisColor(fgcol)
            axes[i].SetLabelColor(fgcol)
            axes[i].SetTitleColor(fgcol)
      #TGraph
      if obj.InheritsFrom(TGraph.Class()) == True:
            if obj.GetFillColor() == rt.kWhite:
                obj.SetFillColor(bgcol)
            ax = obj.GetXaxis()
            ay = obj.GetYaxis()
            ax.SetAxisColor(fgcol)
            ay.SetAxisColor(fgcol)
            ax.SetLabelColor(fgcol)
            ay.SetLabelColor(fgcol)
            ax.SetTitleColor(fgcol)
            ay.SetTitleColor(fgcol)
            if obj.GetLineColor() == rt.kBlack:
                obj.SetLineColor(fgcol)
                obj.SetMarkerColor(fgcol)
      #TGaxis
      if obj.InheritsFrom(TGaxis.Class()) == True:
            obj.SetLineColor(fgcol)
            obj.SetLabelColor(fgcol)
            obj.SetTitleColor(fgcol)

      #TFrame
      if obj.InheritsFrom( TFrame.Class() ) == True:
            if obj.GetLineColor() == rt.kBlack:
                obj.SetLineColor(fgcol)
                obj.SetFillColor(bgcol)

      #TLine
      if obj.InheritsFrom( TLine.Class() ) == True:
            if obj.GetLineColor() == rt.kBlack:
                obj.SetLineColor(fgcol)

      #move to next item
      obj = next()

