%%cpp -d #include #include #include #include #include #include #if __has_include("TUnuran.h") // handy check %%cpp -d #include #include #endif #include void testAll() { int i, N = 2000000; float cpn = 1000000000./N; int N1 = N/10; float cpn1 = cpn*10; // for TRandom1 double x,y; TRandom *rsave = gRandom; TRandom *r0 = new TRandom(); TRandom *r1 = new TRandom1(); TRandom *r2 = new TRandom2(); TRandom *r3 = new TRandom3(); TRandom *r4 = new TRandomMixMax(); TRandom *r5 = new TRandomMixMax17(); TRandom *r6 = new TRandomGen>(); TRandom *r7 = new TRandomMixMax256(); TRandom *r8 = new TRandomGen>(); TRandom *r9 = new TRandomMT64(); TRandom *r10 = new TRandomRanlux48(); TStopwatch sw; printf("Distribution nanoseconds/call\n"); printf(" TRandom TRandom1 TRandom2 TRandom3 MixMax240 MixMax17 Mixmax256_0 MixMax256_2 MixMax256_4 MT_64 Ranlux48\n"); sw.Start(); for (i=0;iRndm(i); } printf("Rndm.............. %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); // new random generators sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndm(i); } printf(" %8.3f",sw.CpuTime()*cpn1); printf("\n\n"); // RNDMARRAY const int NR = 1000; double rn[NR]; sw.Start(); for (i=0;iRndmArray(NR,rn); } printf("RndmArray......... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRndmArray(NR,rn); } printf(" %8.3f\n",sw.CpuTime()*cpn1); // Gaus sw.Start(); for (i=0;iGaus(0,1); } printf("Gaus.............. %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iGaus(0,1); } printf(" %8.3f\n",sw.CpuTime()*cpn); // RANNOR sw.Start(); for (i=0;iRannor(x,y); } printf("Rannor............ %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iRannor(x,y); } printf(" %8.3f\n",sw.CpuTime()*cpn); // Landau sw.Start(); for (i=0;iLandau(0,1); } printf("Landau............ %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iLandau(0,1); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iLandau(0,1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iLandau(0,1); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iExp(1); } printf("Exponential....... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iExp(1); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iExp(1); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iExp(1); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(5,0.5); } printf("Binomial(5,0.5)... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(5,0.5); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iBinomial(5,0.5); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(5,0.5); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(15,0.5); } printf("Binomial(15,0.5).. %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(15,0.5); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iBinomial(15,0.5); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iBinomial(15,0.5); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(3); } printf("Poisson(3)........ %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(3); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iPoisson(3); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(3); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(10); } printf("Poisson(10)....... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(10); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iPoisson(10); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(10); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(70); } printf("Poisson(70)....... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(70); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iPoisson(70); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(70); } printf(" %8.3f\n",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(100); } printf("Poisson(100)...... %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(100); } printf(" %8.3f",sw.CpuTime()*cpn1); sw.Start(); for (i=0;iPoisson(100); } printf(" %8.3f",sw.CpuTime()*cpn); sw.Start(); for (i=0;iPoisson(100); } printf(" %8.3f\n",sw.CpuTime()*cpn); TF1 *f1 = new TF1("f1","gaus",-4,4); f1->SetParameters(1,0,1); gRandom = r0; sw.Start(); for (i=0;iGetRandom(); } printf("GausTF1........... %8.3f",sw.CpuTime()*cpn); gRandom = r1; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f",sw.CpuTime()*cpn); gRandom = r2; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f",sw.CpuTime()*cpn); gRandom = r3; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f\n",sw.CpuTime()*cpn); TF1 *f2 = new TF1("f2","landau",-5,15); f2->SetParameters(1,0,1); gRandom = r0; sw.Start(); for (i=0;iGetRandom(); } printf("LandauTF1......... %8.3f",sw.CpuTime()*cpn); gRandom = r1; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f",sw.CpuTime()*cpn); gRandom = r2; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f",sw.CpuTime()*cpn); gRandom = r3; sw.Start(); for (i=0;iGetRandom(); } printf(" %8.3f\n",sw.CpuTime()*cpn); // test using Unuran #if __has_include("TUnuran.h") TUnuran unr0(r0); TUnuran unr1(r1); TUnuran unr2(r2); TUnuran unr3(r3); // continuous distribution (ex. Gaus) TUnuranContDist dist(f1); // use arou method (is probably the fastest) unr0.Init(dist,"arou"); unr1.Init(dist,"arou"); unr2.Init(dist,"arou"); unr3.Init(dist,"arou"); sw.Start(); for (i=0;i 10e-8) { printf("i=%d x=%.8f but should be %.8f\n",i,x,RefValue[i]); rc1 += 1; } } // check whether a state can be saved and restored TFile *file = new TFile("random3.root","RECREATE"); file->SetCompressionLevel(0); r.Write("r"); delete file; file = new TFile("random3.root"); TRandom3 *rs = (TRandom3*) file->Get("r"); for (i=0;i<1000;i++) { if (r.Rndm() - rs->Rndm() != 0) rc2 += 1; } if (rc2 != 0) printf("state restoration failed\n"); return rc1 + rc2; } testRandom3(); testAll();