入射粒子入射到两条之间的缝隙,载流子被相邻两条收集;
某一条上有很大的能量沉积,导致相邻条产生感应信号;
相邻条之间的信号关联关系与粒子的入射位置,以及入射深度都有关系,如下图(入射粒子沉积能量相同)所示;
一般情况下ADC只接受正脉冲信号,因此只能看见(AHG)范围内的关联,即$E = E_{i} + E_{i+1}$;
%jsroot on
TFile * ipf = new TFile("../s4dith.root","read");
TTree * tree = (TTree*)ipf->Get("tree");
TCanvas * c1= new TCanvas;
tree->Draw("redith[14]:redith[13]>>h43a(800,0,1600,800,0,1600)","","colz");
c1->Draw();
tree->Draw("redith[12]:redith[13]>>h23a(800,0,1600,800,0,1600)","","colz");
gPad->SetLogz();
c1->Draw();
tree->Draw("redith[13]>>h1(800,0,1600)","redith[12]>0");
TH1F *h1=(TH1F*)gROOT->FindObject("h1");
tree->Draw("redith[13]>>h2(800,0,1600)","redith[14]>0");
h1->SetLineColor(kRed);
h1->Draw("same");
c1->Draw();
手动Cut操作方法
点击鼠标右键,选择SetName改名称;不改的话缺省为CUTG
将Cut结果存储成root文件(代码方法)
TFile *fout=new TFile("out.root","recreate"); //创建文件
cut1->Write();//写入cut1
cut2->Write();//写入cut2
存成文件(代码方法)
root [0] cut1->SaveAs("cut1.C")
Info in <TCutG::SaveAs>: C++ Macro file: cut1.C has been generated
加载已存储好的cut1.C文件(代码方法)
root [1] gROOT->Macro("cut1.C"); //等价于 .x cut1.C
Info in <TCanvas::MakeDefCanvas>: created default TCanvas with name c1
特别注意:
在
tree->Draw("re:pe");
图中选在区域存成的cut.C文件,其座标轴变量为
cutg->SetVarX("pe");
cutg->SetVarY("re");
因此,该文件在别的图中使用时,不起作用。
tree->Draw("re[10]:pe[10]","cut");//cut不会起作用
因此,需要修改相应的变量名称:
c+
cutg->SetVarX("pe[10]");
cutg->SetVarY("re[10]");
才能使用。
代码内使用TCutG
//载入TCutG
gROOT->Macro("cut1.C");//gROOT->ProcessLine(".x cut1.C");
//获得TCutG的pointer "cut1"为SetName时指定的name
TCutG *cutg1 = (TCutG *)gROOT->GetListOfSpecials()->FindObject("cut1");
TCutG *cutg2 = (TCutG *)gROOT->GetListOfSpecials()->FindObject("cut2");
...
//判断点(x,y)是否在TCutG以内,
bool bcut=cutg1->IsInside(Double_t x,Double_t y);//1-is inside, 0- not inside
if(bcut) {
...
}
!cat cut1.C cut2.C
正确的做法是将多个TCutG文件合并为一个并作适当修改;
合并
!rm allcut.C
!cat cut1.C>>allcut.C
!cat cut2.C>>allcut.C
!cat allcut.C
修改后
!cat allcut1.C
gROOT->Macro("allcut1.C");
c1->Clear();
tree->Draw("redith[14]:redith[13]>>(800,0,1600,800,0,1600)","cut2","colz");
c1->Draw();
tree->Draw("redith[14]:redith[13]>>h2(800,0,1600,800,0,1600)","cut1","colz");
c1->Draw();
$x$条能量-道址x的关系:$$e_{x} = k_{x}x + b_{x}$$ $y$条能量-道址x的关系:$$e_{y} = k_{y}y + b_{y}$$ $x$条和$y$条能量和:$$e = e_{x} + e_{y} = k_{x}x + k_{y}y + b_{x} + b_{y}$$ $x$条和$y$条能量关联:$$y = kx + b$$ 以上二式联立有:$$k = - \frac{k_{x}}{k_{y}}$$ $$b = \frac{e - b_{x} - b_{y}}{k_{y}}$$
TGraph * gr;
TF1 * fp1;
// fill selected tree data to a graph,
// refers to https://root.cern.ch/root/roottalk/roottalk03/0638.html
gr = new TGraph(tree->GetSelectedRows(),tree->GetV2(), tree->GetV1());
gr->Draw("p");//draw point
c1->Draw();
fp1= new TF1("fp1","pol1",0,1600);
fp1->SetLineColor(kRed);
gr->Fit(fp1);
fp1->Draw();
h2->Draw("same colz");
c1->Draw();
Double_t p0;
Double_t p1;
TString stree;
p0=fp1->GetParameter(0);
p1=fp1->GetParameter(1);
stree.Form("redith[14]:-%f*redith[13]+redith[14]>>hre2(800,0,1600,800,0,1600)",p1);
tree->Draw(stree.Data(),"redith[13]>0&&redith[14]>0","colz");
c1->Draw();
TH1F *hre=(TH1F*)hre2->ProjectionX();
hre->SetName("hre");
TH1F *h13=new TH1F("h13","h13",800,0,1600);
TH1F *h14=new TH1F("h14","h14",800,0,1600);
tree->Draw("redith[13]>>h13");
tree->Draw("redith[14]>>h14");
h13->SetLineColor(kGreen);
h14->SetLineColor(kBlue);
hre->SetLineColor(kRed);
hre->Draw();
h13->Draw("same");
h14->Draw("same");
c1->Draw();
!jupyter nbconvert example3_3.ipynb --to html