ROOT学习——绘制第一条轮廓线并单独显示在另一个画布中(FirstContour.C)

绘制轮廓线是在处理数据中的一种常用方法,下面根据ROOT官方教程中的FirstContour.C,来介绍对应于第一条轮廓线的TGraph对象被访问并显示在单独的画布中。

绘制轮廓图,并在TPolyMarker中获得第一个轮廓。 该宏通过从ntuple文件中选择条目来生成颜色轮廓图。ntuple相当于一个简单的tree,只能存浮点类型的数据。

下面给出具体代码步骤:

获取当前路经:

TString dir = gROOT->GetTutorialDir();

处理路经信息:

dir.Append("/hsimple.C");
dir.ReplaceAll("/./","/");

将宏加载到解释器的内存中:

if (!gInterpreter->IsLoaded(dir.Data())) gInterpreter->LoadMacro(dir.Data());

通过CINT解释器直接处理过程解释器命令:

TFile *file = (TFile*)gROOT->ProcessLineFast("hsimple(1)");

提取tree文件中的ntuple文件:

if (!file) return;
TTree *ntuple = (TTree*)file->Get("ntuple");

创建新的画布:

TCanvas *c1 = new TCanvas("c1","Contours",10,10,800,600);

绘制ntuple图像:

ntuple->Draw("py:px","px*px+py*py < 20", "contz,list");

必须调用Update来强制绘制画布。 绘制等高线图时,将生成等高线列表,并将其引用添加到特殊对象的“root”列表中

c1->Update();

创建第二块画板:

TCanvas *c2 = new TCanvas("c2","First contour",100,100,800,600);

定义数组对象类,在该目录内按名称查找对象contours:

TObjArray *contours = (TObjArray*)gROOT->GetListOfSpecials()->FindObject("contours");
if (!contours) return;

定义链表类(双链表,从TObject继承的所有类都可以插入到TList中):

TList *lcontour1 = (TList*)contours->At(0);
if (!lcontour1) return;

定义图像类(TGraph是由两个分别具有n个点的数组X和Y组成的对象。 借助TGraphPainter类,可以执行TGraph绘画):

TGraph *gc1 = (TGraph*)lcontour1->First();
if (!gc1) return;
if (gc1->GetN() < 10) return;

设置记号类型,绘制图像:

gc1->SetMarkerStyle(21);
gc1->Draw("alp");

使用从该图获得的数组制作TCutG对象:

TCutG *cutg = new TCutG("cutg",gc1->GetN(),gc1->GetX(),gc1->GetY());

从该图中创建一个具有npmax个点的多标记对象:

const Int_t npmax = 50000;
TPolyMarker *pm = new TPolyMarker(npmax);
Int_t np = 0;
while(1) {
   Double_t x = -4 +8*gRandom->Rndm();
   Double_t y = -4 +8*gRandom->Rndm();
   if (cutg->IsInside(x,y)) {
      pm->SetPoint(np,x,y);
      np++;
      if (np == npmax) break;
   }
}

将标记点绘制:

pm->Draw();

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值