import ROOT
import math

ROOT.gROOT.SetStyle("Plain")
rndm = ROOT.TRandom3()
rndm.SetSeed(123456)

expo = ROOT.TH1D("expo", "Exponential", 100, 0, 20)
for i in range(1, 10000):
  r = rndm.Uniform()
  x = - 3.5 * math.log(r)
  expo.Fill(x)

twoPi = 2*math.pi
sin2 = ROOT.TH1D("sin2", "Sine-squared", 100, 0, twoPi)
for i in range (1, 10000):
  while True:
    x = rndm.Uniform(0, twoPi)
    r = rndm.Uniform()
    if(r <= pow(math.sin(x),2)):
      break
  sin2.Fill(x)

sinexp = ROOT.TH1D("sinexp", "Exp times sine-squared", 100, 0, 20)
for i in range(1, 10000):
  while True:
    r = rndm.Uniform()
    x = - 3.5 * math.log(r)
    r = rndm.Uniform()
    if(r <= pow(math.sin(x),2)):
      break
  sinexp.Fill(x)  

ROOT.gStyle.SetOptLogy(0)
c1 = ROOT.TCanvas()
expo.Draw()
c1.SaveAs("03-expo.pdf")
sin2.Draw()
c1.SaveAs("03-sin2.pdf")
sinexp.Draw()
c1.SaveAs("03-sinexp.pdf")

ROOT.gStyle.SetOptLogy(1)
c2 = ROOT.TCanvas()
expo.SetLineColor(ROOT.kBlue)
expo.SetLineWidth(2)
expo.Draw()
c2.SaveAs("03-expo-logy.pdf")
sinexp.Draw()
c2.SaveAs("03-sinexp-logy.pdf")

