ROOT学习——ntuple中直方图的Highlight显示(hlHisto3.C)
本示例演示了如何在ntuple上使用高亮机制,hsimple.root中的ntuple是用三种不同选择绘制的,将鼠标移到两个1D表示上方,将在2D图上显示有助于突出显示的bin的事件。
下面介绍具体步骤:
- 定义全局变量:
TList *list1 = 0;
TList *list2 = 0;
- 设置InitGraphs函数:
void InitGraphs(TNtuple *nt, TH1F *histo)
{Long64_t nev = nt->GetSelectedRows();Double_t *px = nt->GetV1();Double_t *py = nt->GetV2();Double_t *pz = nt->GetV3();auto list = new TList();if (histo->GetUniqueID() == 1) list1 = list;else if (histo->GetUniqueID() == 2) list2 = list;else return;Int_t nbins = histo->GetNbinsX();Int_t bin;TGraph *g;for (bin = 0; bin < nbins; bin++) {g = new TGraph();g->SetName(TString::Format("g%sbin_%d", histo->GetName(), bin+1));g->SetBit(kCannotPick);g->SetMarkerStyle(25);g->SetMarkerColor(histo->GetLineColor());list->Add(g);}Double_t value = 0.0;for (Long64_t ie = 0; ie < nev; ie++) {if (histo->GetUniqueID() == 1) value = pz[ie];if (histo->GetUniqueID() == 2) value = px[ie]*py[ie]*pz[ie];bin = histo->FindBin(value) - 1;g = (TGraph *)list->At(bin);if (!g) continue; // under/overflowg->SetPoint(g->GetN(), py[ie], px[ie]); // reverse as px:py}
}
- 设置Highlight函数:
void Highlight3(TVirtualPad *pad, TObject *obj, Int_t xhb, Int_t yhb)
{auto histo = (TH1F *)obj;if(!histo) return;TCanvas *Canvas2 = (TCanvas *)gROOT->GetListOfCanvases()->FindObject("Canvas2");if (!Canvas2) return;TGraph *gcommon = (TGraph *)Canvas2->FindObject("Graph");if (!gcommon) return;TList *list = 0;if (histo->GetUniqueID() == 1) list = list1; // case1else if (histo->GetUniqueID() == 2) list = list2; // case2if (!list) return;TGraph *g = (TGraph *)list->At(xhb);if (!g) return;TVirtualPad *savepad = gPad;Canvas2->cd();gcommon->Draw("AP");//gcommon->SetTitle(TString::Format("%d / %d", g->GetN(), gcommon->GetN()));if (histo->IsHighlight()) // don't draw g after highlight disabledif (g->GetN() > 0) g->Draw("P");Canvas2->Update();savepad->cd();
}
- 读取root文件:
auto dir = gROOT->GetTutorialDir();
dir.Append("/hsimple.C");
dir.ReplaceAll("/./","/");
if (!gInterpreter->IsLoaded(dir.Data())) gInterpreter->LoadMacro(dir.Data());
auto file = (TFile*)gROOT->ProcessLineFast("hsimple(1)");
if (!file) return;
- 获取ntuple:
TNtuple *ntuple;
file->GetObject("ntuple", ntuple);
if (!ntuple) return;
- 设置截断参数:
const char *cut = "pz > 3.0";
- 创建两块画布:
TCanvas *Canvas1 = new TCanvas("Canvas1", "Canvas1", 0, 0, 700, 500);
Canvas1->Divide(1, 2);
TCanvas *Canvas2 = new TCanvas("Canvas2", "Canvas2", 705, 0, 500, 500);
- 在第一块画布上方绘制histo1与pz的分布信息:
Canvas1->cd(1);
ntuple->Draw("pz>>histo1(100, 2.0, 12.0)", cut);
auto histo1 = (TH1F *)gPad->FindObject("histo1");
auto info1 = new TText(7.0, histo1->GetMaximum()*0.6,"please move the mouse over the frame");
info1->SetTextColor(histo1->GetLineColor());
info1->SetBit(kCannotPick);
info1->Draw();
- 在第一块画布下方绘制histo2与pxpypz的分布信息:
Canvas1->cd(2);
ntuple->Draw("(px*py*pz)>>histo2(100, -50.0, 50.0)", cut);
auto histo2 = (TH1F *)gPad->FindObject("histo2");
histo2->SetLineColor(kGreen+2);
auto info2 = new TText(10.0, histo2->GetMaximum()*0.6, info1->GetTitle());
info2->SetTextColor(histo2->GetLineColor());
info2->SetBit(kCannotPick);
info2->Draw();
Canvas1->Update();
- 设置Highlight:
histo1->SetHighlight();
histo2->SetHighlight();
Canvas1->HighlightConnect("Highlight3(TVirtualPad*,TObject*,Int_t,Int_t)");
- 在第二块画布上绘制graph信息:
Canvas2->cd();
ntuple->Draw("px:py", cut);
auto gcommon = (TGraph *)gPad->FindObject("Graph");
gcommon->SetBit(kCanDelete, kFALSE); // will be redraw
auto htemp = (TH2F *)gPad->FindObject("htemp");
gcommon->SetTitle(htemp->GetTitle());
gcommon->GetXaxis()->SetTitle(htemp->GetXaxis()->GetTitle());
gcommon->GetYaxis()->SetTitle(htemp->GetYaxis()->GetTitle());
gcommon->Draw("AP");
- 设置初始化graph(必须在最后一步):
ntuple->Draw("px:py:pz", cut, "goff");
histo1->SetUniqueID(1); // mark as case1
histo2->SetUniqueID(2); // mark as case2
InitGraphs(ntuple, histo1);
InitGraphs(ntuple, histo2);
代码地址:https://github.com/root-project/root/blob/master/tutorials/hist/hlHisto3.C
ROOT学习——ntuple中直方图的Highlight显示(hlHisto3.C)相关推荐
- ROOT学习——二维直方图的多种画法(draw2dopt.C)
二维直方图是数据处理中最常用的存储类型,二维直方图的绘制在ROOT中也有很多种类型,本文通过ROOT官方教程的draw2dopt.C示例,来具体讲述ROOT框架中二维直方图的绘制类型. 下面给出具体代 ...
- WPF学习笔记(7):DataGrid中数字自定义格式显示
WPF学习笔记(7):DataGrid中数字自定义格式显示 原文:WPF学习笔记(7):DataGrid中数字自定义格式显示 DataGrid中数据显示如下图,数据格式比较杂乱.希望达到以下要求:(1 ...
- QT学习之解决QT中QIcon图标不显示的问题
QT学习之解决QT中QIcon图标不显示的问题 参考文章: (1)QT学习之解决QT中QIcon图标不显示的问题 (2)https://www.cnblogs.com/yang12318/p/1069 ...
- ROOT学习——一维直方图的条形图示例(hbars.C)
条形图在日常统计数据时时常会用到,ROOT官方教程中给出了一个示例来讲述如何使用ROOT绘制条形图,绘制效果如下: 下面给出具体步骤: 首先打开tutorials / tree目录中的cernstaf ...
- OpenCV中直方图反向投影算法详解与实现
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达本文转自:opencv学堂 一:直方图交叉 OpenCV中直方图反向 ...
- youcans 的 OpenCV 学习课—2.图像读取与显示
youcans 的 OpenCV 学习课-2.图像读取与显示 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 本节介绍图像的读取.保存和显示.除基本方法和例程外,还给出了从 ...
- python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化
本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...
- web前端培训:CSS中单行文本溢出显示省略号的方法
CSS中单行文本溢出显示省略号的方法你知道吗?在web前端技术学习中,这个问题其实是属于老生常谈了,因为css单行文本的应用是非常频繁的,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没 ...
- php video标签使用方法,HTML_HTML5 video标签(播放器)学习笔记(一):使用入门,近有在学习html5中video标签(播 - phpStudy...
HTML5 video标签(播放器)学习笔记(一):使用入门 近有在学习html5中video标签(播放器)的使用,这里做一些学习笔记,方便自己查阅和记录,本文是第一篇,将介绍的是使用该标签初始化该做 ...
最新文章
- asp.net2.0学习历程 菜鸟到中级程序员的飞跃
- [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I
- Leetcode: 4Sum
- testflight测试软件怎么,TestFlight使用步骤
- 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...
- 计算机视觉论文-2021-09-07
- 推荐三款U盘烧写工具
- 防抖和节流的区别是什么?防抖和节流的实现 详解!
- UOJ275 [清华集训2016] 组合数问题 【Lucas定理】【数位DP】
- 集团进口煤炭行业经历“冰火两重天”说明了啥?
- 初手学堂:跟我学习安装配置RedHat9.0
- Emitted value instead of an instance of Error-编译vue文件时出现的错误解决
- 字库点阵数据的竖置横排和横置横排区别
- Mybatis-X使用
- Jetson Nano复制系统和U盘启动【第三部分】
- C语言:简单的利润与奖金
- ai突破性技术_人工智能还没有突破
- 存储过程中的when others then 和 raise
- 文本文件编码与格式转换
- [职场全攻略] 【职场攻略】看透“潜”职场规则
热门文章
- SWARD Camera Calibration Toolbox
- paypal braintree支付对接
- C# WPF 歌词控件(支持逐字定位描色效果)
- 打印机有墨水却打印不了,显示end of service
- python将子进程的输出抛向黑洞
- 论坛好版主(斑竹) 箴言
- 组策略找回桌面的IE图标
- 请求分页调度算法计算缺页率和命中率:FIFO LRU ORT
- 微信第一个支持小程序版本号与服务器不符,解决微信小程序更新发布之后线上还是之前的老版本...
- python程序项目报告_python程序设计实验报告