%jsroot on
TFile * ipf = new TFile("treeADC_xi.root");
TCanvas *c1 = new TCanvas();
c1->Clear();
/*
//李老师课程中1.3代码
tree->Draw("itu>>htu(420,0,4200)");
TH1D *htu=(TH1D*)gROOT->FindObject("htu");//得到histogram的指针,通过指针进行进一步操作。
tree->Draw("itd>>htd(420,0,4200)");
TH1D *htd=(TH1D*)gROOT->FindObject("htd");
htd->SetLineColor(kGreen);
htu->Draw();
htd->Draw("same");
c1->SetLogy();
c1->Draw();
*/
tree->Draw("itua>>htua(420,0,4200)");
TH1D *htua=(TH1D*)gROOT->FindObject("htua");//得到histogram的指针,通过指针进行进一步操作。
tree->Draw("itda>>htda(420,0,4200)");
TH1D *htda=(TH1D*)gROOT->FindObject("htda");
htda->SetLineColor(kGreen);
htua->Draw();
htda->Draw("same");
c1->SetLogy();
c1->Draw();
THStack *hs = new THStack("hs","test stacked histograms");
hs->Add(htua);
hs->Add(htda);
hs->Draw("nostack");//替换成hs->Draw();语句,观察效果。
c1->Draw();
//二维关联图
tree->Draw("itua:itda>>(420,0,4200,420,0,4200)","","colz");//加入pid条件观察图的变化,结合实验设置理解图中不同区域的含义。
gPad->SetLogz();
gPad->SetLogy(0);
c1->Draw();//* 在ROOT环境下可省略
//位置分布
tree->Draw("itua-itda");
gPad->SetLogy();
c1->Draw();
说明:在画图时,特别是需要用到运算时要注意排除超界信号(ch=0,4095,以及pedo);
tree->Draw("itua-itda>>hixa(3000,-2000,1000)","itua<4095 && itda<4095");//只有在合理的取值范围的前提下,才能对参数进行运算
gPad->SetLogy(0);
c1->Draw();
tree->Draw("itua-itda>>(1800,-2000,1000)","itua<4095 && itda<4095");//TDC 道值
gPad->SetLogy(0);
c1->Draw();//显示异常
tree->Draw("tua-tda>>(1800,-2000,1000)","tua<4095 && tda<4095");//原始参数
gPad->SetLogy(0);
c1->Draw();
tree->Draw("itua*0.3>>(1200,0,1200)");
c1->Draw();
tree->Draw("tua*0.3>>(1200,0,1200)");
c1->Draw();
tree->Draw("iqua>>hquaall(420,0,4200)");
TH1D *hquaall=(TH1D*)gROOT->FindObject("hquaall");
hquaall->SetLineColor(kBlack);
tree->Draw("iqua>>hqua1(420,0,4200)","pid==0 || pid==1");
TH1D *hqua1=(TH1D*)gROOT->FindObject("hqua1");
hqua1->SetLineColor(kRed);
tree->Draw("iqua>>hqua2(420,0,4200)","pid==2");
TH1D *hqua2=(TH1D*)gROOT->FindObject("hqua2");
hqua2->SetLineColor(kGreen);
tree->Draw("iqua>>hqua3(420,0,4200)","pid==3");
TH1D *hqua3=(TH1D*)gROOT->FindObject("hqua3");
hqua3->SetLineColor(kBlue);
THStack *hsqua=new THStack("hsqua","qua with different pid");
hsqua->Add(hquaall);
hsqua->Draw("nostack");
gPad->SetLogy();
c1->Draw();
hsqua->Add(hquaall);
hsqua->Add(hqua1);
hsqua->Add(hqua2);
hsqua->Add(hqua3);
hsqua->Draw("nostack");
gPad->SetLogy();
c1->Draw();//辨认pedal峰,超界位置。
tree->Draw("iqda>>hqdaall(420,0,4200)");
TH1D *hqdaall=(TH1D*)gROOT->FindObject("hqdaall");
hqdaall->SetLineColor(kBlack);
tree->Draw("iqda>>hqda1(420,0,4200)","pid==0 || pid==1");
TH1D *hqda1=(TH1D*)gROOT->FindObject("hqda1");
hqda1->SetLineColor(kRed);
tree->Draw("iqda>>hqda2(420,0,4200)","pid==2");
TH1D *hqda2=(TH1D*)gROOT->FindObject("hqda2");
hqda2->SetLineColor(kGreen);
tree->Draw("iqda>>hqda3(420,0,4200)","pid==3");
TH1D *hqda3=(TH1D*)gROOT->FindObject("hqda3");
hqua3->SetLineColor(kBlue);
THStack *hsqda=new THStack("hsqda","qda with different pid");
hsqda->Add(hqdaall);
hsqda->Add(hqda1);
hsqda->Add(hqda2);
hsqda->Add(hqda3);
hsqda->Draw("nostack");
gPad->SetLogy();
c1->Draw();//辨认pedal峰,超界位置
hquaall->Fit("gaus","","",0,250);
c1->Draw();
hqdaall->Fit("gaus","","",0,250);
c1->Draw();
TF1 *fgaus[2];
Double_t ped[2],sigma[2];//u,d
TString sqa[2]={"qua","qda"};
fgaus[0]=hquaall->GetFunction("gaus");//得到拟合函数的指针
fgaus[1]=hqdaall->GetFunction("gaus");
for(int i=0;i<2;i++) {
ped[i]=fgaus[i]->GetParameter(1);//得到拟合函数的第二个参数
sigma[i]=fgaus[i]->GetParameter(2);
//TString的格式化输出。用法与printf一致。
TString ss;
ss.Form("ped_%s=%.2f, sigma_%s=%.2f",sqa[i].Data(),ped[i],sqa[i].Data(),sigma[i]);
cout<<ss<<endl;
}
tree->Draw("iqua:iqda>>(420,0,4200,420,0,4200)","","colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();//* 在ROOT环境下可省略
//qua,qda减去ped,去掉噪声及超界值,选择合理的取值范围
TString stree,scut;
stree.Form("(iqua-%f):(iqda-%f)>>hsuda(200,0,4000,200,0,4000)",ped[0],ped[1]);//在""内加入动态数据的方法
scut.Form("iqua>(%f+3*%f) && iqua<4000 && iqda>(%f+3*%f) && iqda<4000",ped[0],sigma[0],ped[1],sigma[1]);
tree->Draw(stree.Data(),scut.Data(),"colz");
c1->Draw();
cout<<"tree: "<<stree.Data()<<endl;
cout<<"cut: "<<scut.Data()<<endl;
TString squaa,sqdaa;
squaa.Form("iqua-%f",ped[0]);
sqdaa.Form("iqda-%f",ped[1]);
tree->SetAlias("quaa",squaa.Data());
tree->SetAlias("qdaa",sqdaa.Data());
TCut cpid="pid=2";
tree->Draw("sqrt(quaa*qdaa)",scut.Data());
gPad->SetLogy();
c1->Draw();
TString stcut="itua>0&&itua<4000&&itda>0&&itda<4000";
scut=scut+" && "+stcut;//加入时间cut
tree->Draw("itda-itua:log(quaa/qdaa)",scut.Data(),"colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
tree->Draw("sqrt(quaa*qdaa):(itda+itua)/2",scut.Data(),"colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
tree->Draw("sqrt(iqua*iqda):(itda+itua)/2","iqua>165&&iqua<4000&&iqda>156&&iqda<4000","colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
tree->Draw("sqrt(iqub*iqdb):(itdb+itub)/2","iqub>16&&iqub<4000&&iqdb>15&&iqdb<4000","colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
TString cutb = "!(iqub>16&&iqub<4000&&iqdb>15&&iqdb<4000&&itub<4000&&itdb<4000)";//加入时间条件;
TString cuta = "iqua>165&&iqua<4000&&iqda>156&&iqda<4000";
cutb = cutb+"&&"+cuta;
tree->Draw("sqrt(iqua*iqda):(itda+itua)/2",cutb.Data(),"colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
tree->Draw("sqrt(iqua*iqda):(itda+itua)/2","iqua>165&&iqua<4000&&iqda>156&&iqda<4000&&pid!=2","colz");
c1->SetLogz();
c1->SetLogy(0);
c1->Draw();
ipf->Close();
!jupyter nbconvert homework1-2 --to html