%jsroot on
TFile * ipf = new TFile("../f8ppac001.root","READ");//root -l *.root
ipf->ls();//ROOT环境下的.ls
tree->Print();
Branch | PPAC |
---|---|
F8PPACRawata[0][0] | PPAC 1 Layer A $T_{x1}$ |
F8PPACRawata[0][1] | PPAC 1 Layer A $T_{x2}$ |
F8PPACRawata[0][2] | PPAC 1 Layer A $T_{y1}$ |
F8PPACRawata[0][3] | PPAC 1 Layer A $T_{y2}$ |
F8PPACRawata[0][4] | PPAC 1 Layer A $T_a$ |
F8PPACRawata[1][0-4] | PPAC 1 Layer B |
F8PPACRawata[2][0-4] | PPAC 2 Layer A |
F8PPACRawata[3][0-4] | PPAC 2 Layer B |
F8PPACRawata[4][0-4] | PPAC 3 |
tree->Show(0);
tree->Show(1000);
TTree * tree = (TTree*)ipf->Get("tree");
TCanvas * c1 = new TCanvas("c1","c1");
tree->Draw("F8PPACRawData[0][0]>>hx1(1000,0,4200)");//F8PPAC1A-Tx1
tree->Draw("F8PPACRawData[0][1]>>hx2(1000,0,4200)");//F8PPAC1A-Tx2
TH1D *hx1=(TH1D*)gROOT->FindObject("hx1");
TH1D *hx2=(TH1D*)gROOT->FindObject("hx2");
hx1->SetLineColor(kBlue);
hx2->SetLineColor(kBlack);
hx1->Draw();
hx2->Draw("same");
c1->SetLogy();
c1->Draw();
tree->Draw("F8PPACRawData[0][2]>>hy1(1000,0,4200)");//F8PPAC1A-Ty1
tree->Draw("F8PPACRawData[0][3]>>hy2(1000,0,4200)");//F8PPAC1A-Ty2
TH1D *hy1=(TH1D*)gROOT->FindObject("hy1");
TH1D *hy2=(TH1D*)gROOT->FindObject("hy2");
hy1->SetLineColor(kBlue);
hy2->SetLineColor(kBlack);
hy1->Draw();
hy2->Draw("same");
c1->SetLogy();
c1->Draw();
tree->Draw("F8PPACRawData[0][4]>>ha(1000,0,4200)");//F8PPAC1A-Ta
ha->Draw();
c1->Draw();
TCut ca="Ta>200 && Ta<600";
TCut cx1="Tx1>0 && Tx1<1700" && ca;
TCut cx2="Tx2>0 && Tx2<1700" && ca;
TCut cy1="Ty1>0 && Ty1<1400" && ca;
TCut cy2="Ty2>0 && Ty2<1400" && ca;
TCut cppac=cx1 && cx2 && cy1 && cy2;
// F8PPAC
tree->SetAlias("Tx1","F8PPACRawData[0][0]");//F8PPAC1A-txl
tree->SetAlias("Tx2","F8PPACRawData[0][1]");//F8PPAC1A-txr
tree->SetAlias("Ty1","F8PPACRawData[0][2]");//F8PPAC1A-tyu
tree->SetAlias("Ty2","F8PPACRawData[0][3]");//F8PPAC1A-tyd
tree->SetAlias("Ta","F8PPACRawData[0][4]");//F8PPAC1A-Anode
tree->SetAlias("dtx1","Tx1-Ta");
tree->SetAlias("dtx2","Tx2-Ta");
tree->SetAlias("dty1","Ty1-Ta");
tree->SetAlias("dty2","Ty2-Ta");
tree->Draw("dtx1>>hdx1(1600,-100,1500)",cx1);
tree->Draw("dtx2>>hdx2(1600,-100,1500)",cx2);
TH1D *hdx1=(TH1D*)gROOT->FindObject("hdx1");
TH1D *hdx2=(TH1D*)gROOT->FindObject("hdx2");
hdx1->SetLineColor(kBlue);
hdx2->SetLineColor(kBlack);
hdx1->Draw();
hdx2->Draw("same");
c1->SetLogy();
c1->Draw();
c1->Draw();
tree->Draw("dtx1-dtx2>>(1500,-1500,1500)",cx1 && cx2);
c1->SetLogy();
c1->Draw();
tree->Draw("Tx1:Tx2>>(1000,0,2500,1000,0,2500)",cx1 && cx1,"colz");
gStyle->SetPalette(1);
c1->SetLogy(0);
c1->SetLogz();
c1->Draw();
tree->Draw("dtx1:dtx2>>(1600,-100,1500,1600,-100,1500)",cx1 && cx2 && ca,"colz");
gStyle->SetPalette(1);
c1->SetLogz();
c1->Draw();
在束流比较强的时候,需要考虑堆积(Pileup)事件的排除。堆积是由于同时有多个粒子打在PPAC上,造成delayline的x的两端的时间不是由同一个粒子给出的。换句话说,堆积信号的两端事件和不是常数。
tree->Draw("dtx1+dtx2>>hdxt(1200,400,1600)",cx1 && cx2);
hdxt->Fit("gaus","","",1130,1190);
gPad->SetLogy();
hdxt->Draw();
c1->Draw();
TF1 *fx=hdxt->GetFunction("gaus");
Double_t xpeak=fx->GetParameter(1);
Double_t xsigma=fx->GetParameter(2);
cout<<"range:"<<xpeak-3*xsigma<<"~"<<xpeak+3*xsigma<<endl;
tree->Draw("dty1+dty2>>hdyt(1200,0,1200)",cy1 && cy2 && ca);
hdyt->Fit("gaus","","",600,680);
gPad->SetLogy();
hdyt->Draw();
c1->Draw();
TF1 *fy=hdyt->GetFunction("gaus");
Double_t ypeak=fy->GetParameter(1);
Double_t ysigma=fy->GetParameter(2);
cout<<"range:"<<ypeak-3*ysigma<<"~"<<ypeak+3*ysigma<<endl;
TString spileup;
spileup.Form("abs(dtx1+dtx2-%f)<3*%f",xpeak,xsigma);
TCut cxpileup=spileup.Data();
spileup.Form("abs(dty1+dty2-%f)<3*%f",ypeak,ysigma);
TCut cypileup=spileup.Data();
TCut cpileup=cxpileup && cypileup;
tree->Draw("(Tx1+Tx2)/2:Ta>>(100,250,550,200,400,1400)",cppac,"colz");
gPad->SetLogy(0);
gPad->SetLogz();
c1->Draw();
tree->Draw("(Tx1+Tx2)/2:Ta>>(100,250,550,200,400,1400)",cppac&&cpileup,"colz");
gPad->SetLogy(0);
gPad->SetLogz();
c1->Draw();
tree->Draw("dty1-dty2:dtx1-dtx2",cppac&&cpileup,"colz");
gPad->SetLogy(0);
c1->Draw();
!jupyter nbconvert exercise2.1 --to html