验证事件的时间间隔分布(Distribution of time arrivals)

In [1]:
//%jsroot on

生成随机时间序列

In [2]:
TCanvas c;
double mu=100;//average count per second
double trange=10000;//time interval - seconds
int n=mu*trange;//number of events;
auto h1=new TH1D("h1","Time distribution of random events",200,0,trange);
gRandom=new TRandom3(0);
vector<double> vt;
// generate n uniform random numbers
for(int i=0;i<n;i++) {
    double t=gRandom->Rndm()*trange;
    vt.push_back(t);
    h1->Fill(t,1);
}
cout<<"unsorted random number:";
for(int i=0;i<5;i++) cout<<vt[i]<<" ";
cout<<endl;
//sort random numbers in ascending order
sort(vt.begin(),vt.end());//sort vector in ascending order 
cout<<"sorted random number:";
for(int i=0;i<5;i++) cout<<vt[i]<<" ";
cout<<endl;

h1->SetMinimum(0);
h1->Draw();
c.Draw();
unsorted random number:3074.19 5511.47 9305.47 3558.71 4800.69 
sorted random number:0.000721775 0.0382029 0.0428851 0.0467105 0.055274 

计算相邻以及间隔n个事件之间的时间差分布

  • 验证相邻事件的时间间隔分布
In [3]:
double xmax=3.0*7/mu;
double dx=xmax/1000.;
TH1D *h[5];
for(int i=0;i<5;i++) {
    h[i]=new TH1D(Form("hn%d",i+1),Form("Scaled interval distribution of %d-events.",i+1),1000,0,xmax);
}

for(int i=0; i<vt.size();i++) {
    for(int j=1;j<=5;j++) {
        if(i>=j) h[j-1]->Fill(vt[i]-vt[i-j],1./n/dx);
    }
}
gPad->SetLogy();
h[0]->Draw();
h[0]->Fit("expo");//fit with function of f(x) = exp(p0+p1*x)
h[1]->SetLineColor(kGreen);
h[1]->Draw("same");
h[2]->SetLineColor(kBlue);
h[2]->Draw("same");
h[3]->SetLineColor(kBlack);
h[3]->Draw("same");
h[4]->SetLineColor(kPink);
h[4]->Draw("same");
c.Draw();
 FCN=505.282 FROM MIGRAD    STATUS=CONVERGED      76 CALLS          77 TOTAL
                     EDM=2.10364e-12    STRATEGY= 1      ERROR MATRIX ACCURATE 
  EXT PARAMETER                                   STEP         FIRST   
  NO.   NAME      VALUE            ERROR          SIZE      DERIVATIVE 
   1  Constant     4.60630e+00   1.41549e-03   1.09894e-05   1.50974e-04
   2  Slope       -1.00158e+02   1.00347e-01   7.79066e-04  -1.88784e-05

验证分布为$\mu e^{-\mu t}$ , $\mu=100$

In [4]:
exp(4.60630)
(double) 100.11305
In [ ]:
!jupyter nbconvert distribution_of_time_intervals.ipynb --to html