作业 2.1:相邻事件时间间隔
模拟一个计数率稳定的随机计数过程,分别验证固定时间内计数的 Poisson 分布和相邻事件时间间隔的指数分布。
事件生成方法
设事件的平均计数率为 \(r_0=10\ \mathrm{s}^{-1}\),观测时间为 \(T=1000\ \mathrm{s}\)。先由均值为 \(r_0T\) 的 Poisson 分布产生总事件数 \(n\),再在 \([0,T]\) 内均匀产生 \(n\) 个随机事件时刻。
这样得到一组随机到达的事件。后面的计数与时间间隔都从这组事件时刻计算。
作业要求
-
统计每秒计数,画出它随时间的变化,以及每秒计数值的分布。计算均值 \(\mu\) 和标准差 \(\sigma\),比较 \(\sigma\) 与 \(\sqrt{\mu}\)。在计数分布上叠加均值为 10 的 Poisson 期望;用记录的总秒数乘以 Poisson 概率,使理论曲线与直方图具有相同的归一化。
-
将事件时刻从小到大排序,计算相邻事件时间间隔 \(\Delta t_i=t_i-t_{i-1}\)。画出 \(\Delta t\) 的分布,纵轴使用对数刻度,并用
\[ f(\Delta t)=A e^{-r\Delta t} \]进行拟合。给出计数率 \(r\) 及其拟合误差,并与输入值 \(r_0\) 比较。
-
由排序后的事件时刻计算等待后续第 5 个事件的时间
\[ T_{5,i}=t_i-t_{i-5}. \]画出 \(T_5\) 的分布,与相邻事件时间间隔分布比较,并检验其平均值是否接近 \(5/r_0\)。
进度对应第 2 章。
参考结果
左图显示连续 1 s 时间窗内的计数;右图比较计数分布与 \(\mu=10\) 的 Poisson 分布。
相邻事件时间间隔的指数拟合恢复输入计数率;\(T_5\) 分布在有限时间处出现峰值。
附录:本作业新增的 ROOT / PyROOT 用法
直方图的创建、绘制和拟合已在 ROOT Tutorial I(PyROOT · C++)中介绍。下面只列出本作业新增的用法。
| 用途 | C++ ROOT | PyROOT |
|---|---|---|
| 随机数发生器与 Poisson 总事件数 | TRandom3 rng(12345);int n = rng.Poisson(r0*T); |
rng = ROOT.TRandom3(12345)n = int(rng.Poisson(r0*T)) |
| 均匀事件时刻与排序 | rng.Uniform(0, T)std::sort(times.begin(), times.end()); |
rng.Uniform(0, T)times.sort() |
| 计数分布的宽度与 Poisson 概率 | h.GetStdDev()TMath::Poisson(k, mu) |
h.GetStdDev()ROOT.TMath.Poisson(k, mu) |
| 指数拟合及参数 | TF1 f("f", "[0]*exp(-[1]*x)", xmin, xmax);f.SetParameters(h.GetMaximum(), r0);f.GetParameter(1),f.GetParError(1) |
f = ROOT.TF1("f", "[0]*exp(-[1]*x)", xmin, xmax)f.SetParameters(h.GetMaximum(), r0)f.GetParameter(1),f.GetParError(1) |
在拟合函数中,参数 [0] 控制整体高度,参数 [1] 直接表示计数率 \(r\)。