// Test the TMath::LaplaceDist and TMath::LaplaceDistI functions
// author: Anna Kreshuk
   
#include "TMath.h"
#include "TCanvas.h"
#include "TF1.h"
#include "TLegend.h"

void mathLaplace(){
  TCanvas *c1=new TCanvas("c1", "TMath::LaplaceDist",600,800);
  c1->Divide(1, 2);
  TVirtualPad *pad1 = c1->cd(1);
  pad1->SetGrid();
  TF1 *flaplace = new TF1("flaplace", "TMath::LaplaceDist(x, [0], [1])", -10, 10);
  flaplace->SetParameters(0, 1);
  TF1 *f1 = flaplace->DrawCopy();
  f1->SetLineColor(kRed);
  f1->SetLineWidth(1);
  flaplace->SetParameters(0, 2);
  TF1 *f2 = flaplace->DrawCopy("same");
  f2->SetLineColor(kGreen);
  f2->SetLineWidth(1);
  flaplace->SetParameters(2, 1);
  TF1 *f3 = flaplace->DrawCopy("same");
  f3->SetLineColor(kBlue);
  f3->SetLineWidth(1);
  flaplace->SetParameters(2, 2);
  TF1 *f4 = flaplace->DrawCopy("same");
  f4->SetLineColor(kMagenta);
  f4->SetLineWidth(1);
  TLegend *legend1 = new TLegend(.7,.7,.9,.9);
  legend1->AddEntry(f1,"alpha=0 beta=1","l");
  legend1->AddEntry(f2,"alpha=0 beta=2","l");
  legend1->AddEntry(f3,"alpha=2 beta=1","l");
  legend1->AddEntry(f4,"alpha=2 beta=2","l");
  legend1->Draw();

  TVirtualPad *pad2 = c1->cd(2);
  pad2->SetGrid();
  TF1 *flaplacei=new TF1("flaplacei", "TMath::LaplaceDistI(x, [0], [1])", -10, 10);
  flaplacei->SetParameters(0, 1);
  TF1 *g1=flaplacei->DrawCopy();
  g1->SetLineColor(kRed);
  g1->SetLineWidth(1);
  flaplacei->SetParameters(0, 2);
  TF1 *g2=flaplacei->DrawCopy("same");
  g2->SetLineColor(kGreen);
  g2->SetLineWidth(1);
  flaplacei->SetParameters(2, 1);
  TF1 *g3=flaplacei->DrawCopy("same");
  g3->SetLineColor(kBlue);
  g3->SetLineWidth(1);
  flaplacei->SetParameters(2, 2);
  TF1 *g4=flaplacei->DrawCopy("same");
  g4->SetLineColor(kMagenta);
  g4->SetLineWidth(1);

  TLegend *legend2 = new TLegend(.7,.15,0.9,.35);
  legend2->AddEntry(f1,"alpha=0 beta=1","l");
  legend2->AddEntry(f2,"alpha=0 beta=2","l");
  legend2->AddEntry(f3,"alpha=2 beta=1","l");
  legend2->AddEntry(f4,"alpha=2 beta=2","l");
  legend2->Draw();
  c1->cd();
} 
