01 root Getting Started

文章介绍了如何在ROOT框架中使用TF1类定义和操作函数,包括画图、积分和求导。同时,讲解了C++中的指针声明、初始化和操作,以及如何创建和填充直方图。此外,还展示了如何在直方图上叠加不同尺度的数据,并创建右侧轴以显示不同比例的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.画图

TF1 f1("func1","sin(x)/x",0,10)

  • "func1":函数的名称。这是你给函数起的一个标识符,可以根据需要自定义。
  • "sin(x)/x":函数的表达式。这里使用数学表达式描述了函数的形式。这个例子中,函数是sin(x)/x。你可以根据具体的数学函数来定义自己的函数表达式。
  • 0:函数的下限。这是函数定义的范围的下边界。在这个例子中,函数被定义在x的范围从0到10的区间内。
  • 10:函数的上限。这是函数定义的范围的上边界。

通过使用TF1类,你可以方便地定义和操作函数,包括在给定范围内进行积分、求解根等操作。你可以根据需要使用不同的函数表达式和范围来创建自己的TF1对象,并利用ROOT框架的功能进行数据分析和处理。在这个例子中,星号与 ptr 连在一起,表示对指针 ptr 进行解引用操作,获取其指向的内存位置的值。

2.C++指针如何表示?

声明指针变量:

int* ptr;  // 声明一个指向 int 类型的指针变量
初始化指针变量:

int* ptr = nullptr;  // 使用 nullptr 初始化指针,表示空指针
int* ptr = 0;        // 或者使用 0 初始化指针,表示空指针
int* ptr = new int;  // 使用 new 运算符分配动态内存并将其地址分配给指针
获取指针的地址:

int var = 10;
int* ptr = &var;  // 使用取地址运算符 & 获取变量 var 的地址,并将其赋值给指针
解引用指针:

int value = *ptr;  // 使用解引用运算符 * 访问指针指向的内存位置的值
操作指针变量:

ptr++;       // 将指针向前移动一个位置
ptr--;       // 将指针向后移动一个位置
int value = *(ptr + 1);  // 访问指针下一个位置的值

3.*是跟int连在一起还是跟ptr连在一起?

声明指针变量时,星号与标识符连在一起,用于指示该变量是一个指针类型。例如:

int* ptr;  // 声明一个指向 int 类型的指针变量 ptr
在这个例子中,星号与 int 连在一起,表示 ptr 是一个指向 int 类型的指针。

解引用指针时,星号与指针变量连在一起,用于访问指针指向的内存位置的值。例如:

int value = *ptr;  // 解引用指针 ptr,获取其指向位置的值并赋给 value
在这个例子中,星号与 ptr 连在一起,表示对指针 ptr 进行解引用操作,获取其指向的内存位置的值。

4.object.method_name(parameters)
The dot can be replaced by “->” if object is a pointer. In compiled code, the dot MUST be replaced by a “->” if object is a pointer.
object_ptr->method_name(parameters)

 f1.Eval(3) #计算值

f1.Derivative(3) #在x=3处求导

 f1.Integral(0,3) #在x=3处求积分

 f1.Draw() #画出对象f1的图

5.创建画布:

 TCanvas *MyC = new TCanvas("MyC","Test canvas",1)

划分画布:(上面两个画板,下面两个画板)

 MyC->Divide(2,2)

转到第一个画板,并将f1画到第一个画板上:

 MyC->cd(1)

 f1->Draw()

转到第三个画板:

MyC->cd(3) #等效于 MyC_3->cd()

保存画布:在root控制面板找到File menu / SaveAs. . .

6.命令行提示

l = new TLi<TAB> (<TAB>表示在此处按下Tab键)

7.编码规定

8.直方图

 9.

TH1* hc = (TH1*)h1->Clone()

  1. (TH1*):这是一种类型转换,将指针 h1 转换为 TH1* 类型的指针。这可能是因为 h1 的类型是某种基类或通用类型,而 TH1*TH1 类的指针类型。

  2. h1->Clone()h1 对象上的 Clone() 方法调用,用于创建一个与原始对象相同的副本。

  3. TH1* hc =:创建一个名为 hc 的指针变量,并将其初始化为 h1 的副本。TH1* 表示这是一个指向 TH1 类对象的指针。

综合起来,这行代码的作用是创建一个名为 hc 的指向 TH1 类对象的指针,并将其初始化为 h1 对象的副本。通过这种方式,你可以在不改变原始对象的情况下对副本进行操作,以便进行比较、修改等操作。

10.创造直方图

 11.恒定bin宽直方图

变bin宽直方图

 

12.填充直方图

h1->Fill(x, w) 是 ROOT 框架中的一个函数调用,用于向柱状图或其他直方图(例如 TH1 类型的对象)中填充数据。

  1. h1:这是一个指向柱状图或直方图对象的指针。它可以是 TH1 类型的对象或其子类的对象。

  2. Fill():这是 TH1 类中的一个方法,用于将数据填充到直方图中。

  3. x:这是要填充到直方图中的数据值。它可以是整数、浮点数或其他适当的数据类型,根据直方图的定义来确定。

  4. w:这是与数据值 x 相关的权重。在一些情况下,我们可能需要将不同的数据点赋予不同的权重,例如进行加权统计或纠正偏差。如果不需要权重,可以将 w 设置为默认值 1.0

通过调用 h1->Fill(x, w),你可以将数据值 x(带有权重 w)添加到直方图中的相应区间中。这将更新直方图的计数或权重,并反映数据的分布情况。填充直方图后,你可以使用其他函数来进一步分析、绘制或获取直方图中的信息,如计算均值、标准差、绘制直方图等。

13.填充随机数到直方图中

14.GetRandom()获取根据直方图内容分布的随机数

13.叠加不同尺度的直方图

The following script creates two histograms; the second histogram is the bins integral of the first one. It shows a procedure to draw the two histograms in the same pad and it draws the scale of the second histogram using a new vertical axis on the right side.

void twoscales() {
TCanvas *c1 = new TCanvas("c1","different scales hists",600,400);
//create, fill and draw h1
gStyle->SetOptStat(kFALSE);
TH1F *h1 = new TH1F("h1","my histogram",100,-3,3);
for (Int_t i=0;i<10000;i++) h1->Fill(gRandom->Gaus(0,1));
h1->Draw();
c1->Update();
//create hint1 filled with the bins integral of h1
TH1F *hint1 = new TH1F("hint1","h1 bins integral",100,-3,3);
Float_t sum = 0;
for (Int_t i=1;i<=100;i++) {
sum += h1->GetBinContent(i);
hint1->SetBinContent(i,sum);
}
//scale hint1 to the pad coordinates
Float_t rightmax = 1.1*hint1->GetMaximum();
Float_t scale = gPad->GetUymax()/rightmax;
hint1->SetLineColor(kRed);
hint1->Scale(scale);
hint1->Draw("same");
//draw an axis on the right side
TGaxis*axis = new TGaxis(gPad->GetUxmax(),gPad->GetUymin(),
gPad->GetUxmax(),gPad->GetUymax(),
0,rightmax,510,"+L");
axis->SetLineColor(kRed);
axis->SetLabelColor(kRed);
axis->Draw();
}

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值