// distribuicao gerada pelo metodo da aceitacao-rejeicao.
//         jtmn, Ago, 2003

 Double_t mydist(Double_t x){
   Double_t fMax = 3.0;
   return fMax*TMath::Sin(x)/x;
    }

void aceit_rej()
{

 gROOT->Reset();
 gROOT->SetStyle("Plain"); 
TRandom *r3 = new TRandom3();

 const Int_t nPoints = 20000;

 Float_t  x[nPoints], y[nPoints];
 //gere pontos no plano
 for (Int_t i=0;i<nPoints;i++) {
   x[i] = 10.0*(r3->Rndm());
   y[i] =  4.0*(r3->Rndm())-1.0;
  }

 // mostre os pontos gerados
 TCanvas *c1 = new TCanvas("c1"," Points ", 600,600);
 TH2F *plane  = new TH2F("plane"," ", 50,0.0,10,50,-1.0,3.0);
 for (Int_t i=0;i<nPoints;i++){
   plane->Fill(x[i],y[i]);
  }
 plane->GetXaxis()->SetTitle("x_{todo}");
 plane->GetYaxis()->SetTitle("y_{todo}");
 plane.Draw();
 c1->Update();

 // mostre os pontos aceitos
 TCanvas *c2 = new TCanvas("c2"," Points ", 600,600);
 TH2F *plane2  = new TH2F("plane2"," ", 50,0.0,10,50,-1.0,3.0);
for (Int_t i=0;i<nPoints;i++){
  if (y[i] <= mydist(x[i])) plane2->Fill(x[i],y[i]);
  }
 plane2->GetXaxis()->SetTitle("x_{aceito}");
 plane2->GetYaxis()->SetTitle("y_{aceito}");
 plane2.Draw();
 c2->Update();

// mostre histograma (podia ter sido feito acima no mesmo loop)
 
 TCanvas *c3 = new TCanvas("c3"," Histograma ", 600,600);
 TH1F *histo  = new TH1F("histo"," ", 50,0.0,10);
for (Int_t i=0;i<nPoints;i++){
  if (y[i] <= mydist(x[i])) histo->Fill(x[i]);
  }
 histo->GetXaxis()->SetTitle("x_{aceito}");
 histo.Draw();
 c3->Update();
}
