// // Determine Pi by integration of a circle with random numbers // int calc_pi(){ gStyle->SetOptStat(0); float pi=0.0; int Nac=0,Ntot=0; TCanvas *c1,*c2; TPad *pad,*padtx; int nevents=1000000; // create canvasses for c2 = new TCanvas("stat","Calculate Pi",200,10,800,600); TH1F* h1rnd = new TH1F("h1rnd","test",1000,0.,1.); TProfile* h1stat = new TProfile("h1stat","",(nevents-100.)/10.,100.,nevents,2.9,3.3,"s"); TF1 *f1 = new TF1("f1","3.1415-3.1415/sqrt(x)",0.,nevents) ; TF1 *f2 = new TF1("f2","3.1415+3.1415/sqrt(x)",0.,nevents) ; c1 = new TCanvas("cpi","Calculate Pi",200,10,700,800); // in c1 make pads for text and plot padtx = new TPad("pad2","Pad for value of Pi",0.02,0.92,0.98,0.98,21); padtx->Draw(); char text[50]; sprintf(text,"For N = %i pi = %f",Ntot,pi); TText* Pitxt=new TText(0.1,0.1,text); pad = new TPad("pad1","Pad for 2D Plot",0.02,0.02,0.98,0.9,21); pad->Draw(); TH2F* h2fac = new TH2F("h2fPiac","Circle accepted random numbers",1000,0.0,1.0,1000,0.,1.); h2fac->SetMarkerStyle(21); h2fac->SetMarkerSize(0.05); h2fac->SetMarkerColor(2); h2fac->SetFillColor(2); TH2F* h2frej = new TH2F("h2fPirej","Rejected random numbers",1000,0.0,1.0,1000,0.,1.); h2frej->SetMarkerStyle(21); h2frej->SetMarkerSize(0.05); h2frej->SetMarkerColor(3); h2frej->SetFillColor(3); // create random object (Argument 0 gives random seed) TRandom3 *myRnd=new TRandom3(0); float x1,x2; int j=10; for(int i=1;i<=nevents;++i) { x1 = myRnd->Rndm(); x2 = myRnd->Rndm(); Ntot++; if(sqrt(x1*x1+x2*x2) <= 1.0) { Nac++; h2fac->Fill(x1,x2); } else { h2frej->Fill(x1,x2); } h1rnd->Fill(x1); h1rnd->Fill(x2); pi = (float)Nac/(float)Ntot*4.0; sprintf(text,"N(events) = %i : pi(MC) = %f",Ntot,pi); h1stat->Fill(i,pi); h1stat->Fill(i,pi); // Draw only every 1000 events if(i%j == 0) { cout << j << " " << i << " " << pi << endl; if (j<=1000) j=j*10; c1->cd(); pad->cd(); h2fac->Draw(); h2frej->Draw("same"); if(Ntot > 0) pi = (float)Nac/(float)Ntot*4.0; padtx->cd(); Pitxt->SetTextSize(0.6); Pitxt->SetText(0.1,0.1,text); Pitxt->Draw(); gPad->Update(); c2->cd(); c2->SetLogx(); h1stat->SetMinimum(2.9); h1stat->SetMaximum(3.3); h1stat->SetMarkerStyle(20); h1stat->SetMarkerSize(0.1); h1stat->Draw("e1"); f1->Draw("same"); f2->Draw("same"); c2->Update(); gSystem->ProcessEvents(); } } return 0; }