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()
-
(TH1*)
:这是一种类型转换,将指针h1
转换为TH1*
类型的指针。这可能是因为h1
的类型是某种基类或通用类型,而TH1*
是TH1
类的指针类型。 -
h1->Clone()
:h1
对象上的Clone()
方法调用,用于创建一个与原始对象相同的副本。 -
TH1* hc =
:创建一个名为hc
的指针变量,并将其初始化为h1
的副本。TH1*
表示这是一个指向TH1
类对象的指针。
综合起来,这行代码的作用是创建一个名为 hc
的指向 TH1
类对象的指针,并将其初始化为 h1
对象的副本。通过这种方式,你可以在不改变原始对象的情况下对副本进行操作,以便进行比较、修改等操作。
10.创造直方图
11.恒定bin宽直方图
变bin宽直方图
12.填充直方图
h1->Fill(x, w)
是 ROOT 框架中的一个函数调用,用于向柱状图或其他直方图(例如 TH1
类型的对象)中填充数据。
-
h1
:这是一个指向柱状图或直方图对象的指针。它可以是TH1
类型的对象或其子类的对象。 -
Fill()
:这是TH1
类中的一个方法,用于将数据填充到直方图中。 -
x
:这是要填充到直方图中的数据值。它可以是整数、浮点数或其他适当的数据类型,根据直方图的定义来确定。 -
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();
}