ROOT学习——动态绘制一维直方图并进行高斯拟合(hksimple.C)

实际作图中,可能想要观察Entry前后分布的数值情况,可是使用动态绘制直方图的情况来了解,通过动态绘制直方图,能够大概知道前后Entry是随机分布,还是遵循何种规律。hksimple.C
下面介绍具体步骤:

  1. 创建一块画布:
TCanvas* c1 = new TCanvas("c1","Dynamic Filling Example",200,10,600,900);
  1. 创建一个TH1F直方图,和两个TH2K(高级直方图)直方图,TH1K类支持在聚类分析中广泛使用的最近K邻域方法,此方法对于小型统计尤其有用:
TH1 *hpx[3];
hpx[0]    = new TH1F("hp0","Normal histogram",1000,-4,4);
hpx[1]    = new TH1K("hk1","Nearest Neighbour of order 3",1000,-4,4);
hpx[2]    = new TH1K("hk2","Nearest Neighbour of order 16",1000,-4,4,16);
c1->Divide(1,3);
Int_t j;
for (j=0;j<3;j++) {
   c1->cd(j+1);
   hpx[j]->SetFillColor(48);
   hpx[j]->Draw();
}
  1. 随机填充直方图:
gRandom->SetSeed(12345);	//设置随机种子
Float_t px, py, pz;
const Int_t kUPDATE = 10;
for (Int_t i = 0; i <= 300; i++) {
   gRandom->Rannor(px,py);
   for (j=0;j<3;j++) {hpx[j]->Fill(px);}
   if (i && (i%kUPDATE) == 0) {
         padRefresh(c1);
   }
}

其中,padRefresh(c1)函数定义如下:

void padRefresh(TPad *pad,int flag=0)
{
   if (!pad) return;
   pad->Modified();
   pad->Update();
   TList *tl = pad->GetListOfPrimitives();
   if (!tl) return;
   TListIter next(tl);
   TObject *to;
   while ((to=next())) {
     if (to->InheritsFrom(TPad::Class())) padRefresh((TPad*)to,1);}
   if (flag) return;
   gSystem->ProcessEvents();
}
  1. 对一维直方图进行高斯拟合:
for (j=0;j<3;j++) hpx[j]->Fit("gaus");
padRefresh(c1);

代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/hksimple.C

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值