%jsroot on
TFile *ipf=new TFile("./tracking/homework2.1.root");
TTree *tree=(TTree*) ipf->Get("tree");
TCanvas *c1=new TCanvas("c1","c1");
TCut c1atrack="abs(xxfit[0])<100 && abs(yyfit[0])<100";//拟合径迹穿过探测器的灵敏面积
TCut c1aanode="anode[0]>-999";//阳极有信号
TCut c1axa="abs(xx[0])<100 && anode[0]>-999";//x面有正确信号,即x面和阳极同时有信号
TCut c1aya="abs(yy[0])<100 && anode[0]>-999";//y面有正确信号,即y面和阳极同时有信号
TCut c1axya="abs(xx[0])<100 && abs(yy[0])<100 && anode[0]>-999";//xy面有正确信号,即xy面和阳极同时有信号
Long64_t N_track;
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack,"colz");//fitted
N_track=tree->GetEntries( c1atrack);//得到给定条件下的计数。
cout<<N_track<<endl;
c1->Draw();
Long64_t Na_det,Nxa_det, Nya_det,Nxya_det,Nxya1_det;
tree->Draw("yy[0]:xx[0]>>(200,-100,100,200,-100,100)",c1axya&&c1atrack,"colz");
Na_det=tree->GetEntries(c1aanode && c1atrack);//Anode 数目
Nxa_det=tree->GetEntries(c1axa && c1atrack);// cathod-x 数目
Nya_det=tree->GetEntries(c1aya && c1atrack);// cathod-y 数目
Nxya_det=tree->GetEntries(c1axa &&c1aya && c1atrack);//cathod-x && cathod-y 数目
Nxya1_det=tree->GetEntries(c1axya && c1atrack);//cathod-x-y 数目
cout<<Na_det<<" "<<Nxa_det<<" "<<Nya_det<<" "<<Nxya_det<<" "<<Nxya1_det<<endl;
c1->Draw();
Double_t effa,effxa,effya,effxya2,effxya;effxya1;
effa=Double_t(Na_det)/N_track;
effxa=Double_t(Nxa_det)/N_track;//ex*ea
effya=Double_t(Nya_det)/N_track;//ey*ea
effxya=Double_t(Nxya_det)/N_track;//ex*ey*ea*ea
effxya1=Double_t(Nxya1_det)/N_track;//ex*ey*ea
effxya2=Double_t(Nxya_det)/N_track /effa;//ex*ey*ea*ea->ex*ey*ea
TString eff;
eff.Form("PPAC1A:\n eff_a=%.2f%%,\n eff_xa=%.2f%%, \n eff_ya=%.2f%%",effa*100,effxa*100,effya*100);
cout<<eff.Data()<<endl;
eff.Form("\n eff_xya=%.2f%% \n eff_xya1=%.2f%% \n eff_xya2=%.2f%%",effxya*100,effxya1*100,effxya2*100);
cout<<eff.Data()<<endl;
注意
TCut c1axa="abs(xx[0])<100 && anode[0]>-999";//x面有正确信号,即x面和阳极同时有信号
TCut c1aya="abs(yy[0])<100 && anode[0]>-999";//y面有正确信号,即y面和阳极同时有信号
TCut c1axya="abs(xx[0])<100 && abs(yy[0])<100 && anode[0]>-999";//xy面有正确信号,即xy面和阳极同时有信号
Nxya_det=tree->GetEntries(c1axa &&c1aya && c1atrack);//cathod-x && cathod-y 数目
Nxya1_det=tree->GetEntries(c1axya && c1atrack);//cathod-x-y 数目
由探测器组合:1B,2B,3,得到PPAC1A的x效率effx;
Int_t N_trackX_nodet;
TCut combine1X_nodet = "NumX == 3 && WhichX[0] == 1 && WhichX[1] == 3 && WhichX[2] == 4";//探测器组合1:1B,2B,3
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1X_nodet,"colz");//fitted
N_trackX_nodet=tree->GetEntries( c1atrack && combine1X_nodet);//得到给定条件下的计数。
cout<<N_trackX_nodet<<endl;
c1->Draw();
Int_t N_trackX_det;
TCut combine1X_det = "NumX == 4 && WhichX[0] == 0 && WhichX[1] == 1 && WhichX[2] == 3 && WhichX[3] == 4";//探测器组合1:1A,1B,2B,3
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1X_det,"colz");//fitted
N_trackX_det=tree->GetEntries( c1atrack && combine1X_det);//得到给定条件下的计数。
cout<<N_trackX_det<<endl;
Double_t effx =Double_t( N_trackX_det)/(N_trackX_det+N_trackX_nodet);
cout<<"effx: "<<effx*100<<"%"<<endl;
c1->Draw();
由探测器组合:1B,2B,3,得到PPAC1A的y效率effy;
Int_t N_trackY_nodet;
TCut combine1Y_nodet = "NumY == 3 && WhichY[0] == 1 && WhichY[1] == 3 && WhichY[2] == 4";//探测器组合1:1B,2B,3
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1Y_nodet,"colz");//fitted
N_trackY_nodet=tree->GetEntries( c1atrack && combine1Y_nodet);//得到给定条件下的计数。
cout<<N_trackY_nodet<<endl;
c1->Draw();
Int_t N_trackY_det;
TCut combine1Y_det = "NumY == 4 && WhichY[0] == 0 && WhichY[1] == 1 && WhichY[2] == 3 && WhichY[3] == 4";//探测器组合1:1A,1B,2B,3
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1Y_det,"colz");//fitted
N_trackY_det=tree->GetEntries( c1atrack && combine1Y_det);//得到给定条件下的计数。
cout<<N_trackY_det<<endl;
Double_t effy =Double_t( N_trackY_det)/(N_trackY_det+N_trackY_nodet);
cout<<"effy: "<<effy*100<<"%"<<endl;
c1->Draw();
由探测器组合:1B,2B,3,得到PPAC1A的xy效率effxy;
Int_t N_trackXY_det;
TCut WhichY0 = "WhichY[0] ==0";
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1X_det && WhichY0,"colz");//fitted
N_trackXY_det=tree->GetEntries( c1atrack && combine1X_det && WhichY0);//得到给定条件下的计数。
cout<<N_trackXY_det<<endl;
Double_t effxy=Double_t( N_trackXY_det)/(N_trackX_det+N_trackX_nodet);
cout<<"effxy: "<<effxy*100<<"%"<<endl;
c1->Draw();
Int_t N_trackYX_det;
TCut WhichX0 = "WhichX[0] ==0";
tree->Draw("yyfit[0]:xxfit[0]>>(200,-100,100,200,-100,100)",c1atrack && combine1Y_det && WhichX0,"colz");//fitted
N_trackYX_det=tree->GetEntries( c1atrack && combine1Y_det && WhichX0);//得到给定条件下的计数。
cout<<N_trackYX_det<<endl;
Double_t effyx=Double_t( N_trackYX_det)/(N_trackY_det+N_trackY_nodet);
cout<<"effyx: "<<effyx*100<<"%"<<endl;
c1->Draw();
由探测器组合:1B,2B,3得到的PPAC1A的效率
cout<<"effx: "<<effx*100<<"%"<<endl;
cout<<"effy: "<<effy*100<<"%"<<endl;
cout<<"effxy: "<<effxy*100<<"%"<<endl;
cout<<"effyx: "<<effyx*100<<"%"<<endl;
TCut c5track="abs(xxfit[4])<100 && abs(yyfit[4])<100";//拟合径迹穿过探测器的灵敏面积
TCut c5anode="anode[4]>-999";//阳极有信号
TCut c5xa="abs(xx[4])<100 && anode[4]>-999";//x面有正确信号,即x面和阳极同时有信号
TCut c5ya="abs(yy[4])<100 && anode[4]>-999";//y面有正确信号,即y面和阳极同时有信号
TCut c5xya="abs(xx[4])<100 && abs(yy[4])<100 && anode[4]>-999";//xy面有正确信号,即xy面和阳极同时有信号
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track,"colz");//fitted
N_track=tree->GetEntries( c5track);//得到给定条件下的计数。
cout<<N_track<<endl;
c1->Draw();
tree->Draw("yy[4]:xx[4]>>(200,-100,100,200,-100,100)",c5xya&&c5track,"colz");
Na_det=tree->GetEntries(c5anode && c5track);//Anode 数目
Nxa_det=tree->GetEntries(c5xa && c5track);// cathod-x 数目
Nya_det=tree->GetEntries(c5ya && c5track);// cathod-y 数目
Nxya_det=tree->GetEntries(c5xa &&c5ya && c5track);//cathod-x && cathod-y 数目
Nxya1_det=tree->GetEntries(c5xya && c5track);//cathod-x-y 数目
cout<<Na_det<<" "<<Nxa_det<<" "<<Nya_det<<" "<<Nxya_det<<" "<<Nxya1_det<<endl;
c1->Draw();
effa=Double_t(Na_det)/N_track;
effxa=Double_t(Nxa_det)/N_track;//ex*ea
effya=Double_t(Nya_det)/N_track;//ey*ea
effxya=Double_t(Nxya_det)/N_track;//ex*ey*ea*ea
effxya1=Double_t(Nxya1_det)/N_track;//ex*ey*ea
effxya2=Double_t(Nxya_det)/N_track /effa;//ex*ey*ea*ea->ex*ey*ea
eff.Form("PPAC3:\n eff_a=%.2f%%,\n eff_xa=%.2f%%, \n eff_ya=%.2f%%",effa*100,effxa*100,effya*100);
cout<<eff.Data()<<endl;
eff.Form("\n eff_xya=%.2f%% \n eff_xya1=%.2f%% \n eff_xya2=%.2f%%",effxya*100,effxya1*100,effxya2*100);
cout<<eff.Data()<<endl;
由探测器组合:1A,1B,2B,得到PPAC3的x效率effx;
TCut combine5X_nodet = "NumX == 3 && WhichX[0] == 0 && WhichX[1] == 1 && WhichX[2] == 3";//探测器组合1:1A,1B,2B
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5X_nodet,"colz");//fitted
N_trackX_nodet=tree->GetEntries( c5track && combine5X_nodet);//得到给定条件下的计数。
cout<<N_trackX_nodet<<endl;
c1->Draw();
TCut combine5X_det = "NumX == 4 && WhichX[0] == 0 && WhichX[1] == 1 && WhichX[2] == 3 && WhichX[3] == 4";//探测器组合1:1A,1B,2B,3
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5X_det,"colz");//fitted
N_trackX_det=tree->GetEntries( c5track && combine5X_det);//得到给定条件下的计数。
cout<<N_trackX_det<<endl;
effx =Double_t( N_trackX_det)/(N_trackX_det+N_trackX_nodet);
cout<<"effx: "<<effx*100<<"%"<<endl;
c1->Draw();
由探测器组合:1A,1B,2B,得到PPAC3的y效率effy;
TCut combine5Y_nodet = "NumY == 3 && WhichY[0] == 0 && WhichY[1] == 1 && WhichY[2] == 3";///探测器组合1:1A,1B,2B,
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5Y_nodet,"colz");//fitted
N_trackY_nodet=tree->GetEntries( c5track && combine5Y_nodet);//得到给定条件下的计数。
cout<<N_trackY_nodet<<endl;
c1->Draw();
TCut combine5Y_det = "NumY == 4 && WhichY[0] == 0 && WhichY[1] == 1 && WhichY[2] == 3 && WhichY[3] == 4";//探测器组合1:1A,1B,2B,3
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5Y_det,"colz");//fitted
N_trackY_det=tree->GetEntries( c5track && combine5Y_det);//得到给定条件下的计数。
cout<<N_trackY_det<<endl;
effy =Double_t( N_trackY_det)/(N_trackY_det+N_trackY_nodet);
cout<<"effy: "<<effy*100<<"%"<<endl;
c1->Draw();
由探测器组合:1A,1B,2B,得到PPAC3的xy效率effxy;
TCut WhichY4 = "WhichY[0] ==4|| WhichY[1] ==4|| WhichY[2] ==4|| WhichY[3] ==4|| WhichY[4] ==4";
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5X_det && WhichY4,"colz");//fitted
N_trackXY_det=tree->GetEntries( c5track && combine5X_det && WhichY4);//得到给定条件下的计数。
cout<<N_trackXY_det<<endl;
effxy=Double_t( N_trackXY_det)/(N_trackX_det+N_trackX_nodet);
cout<<"effxy: "<<effxy*100<<"%"<<endl;
c1->Draw();
TCut WhichX4 = "WhichX[0] ==4|| WhichX[1] ==4|| WhichX[2] ==4|| WhichX[3] ==4|| WhichX[4] ==4";
tree->Draw("yyfit[4]:xxfit[4]>>(200,-100,100,200,-100,100)",c5track && combine5Y_det && WhichX4,"colz");//fitted
N_trackYX_det=tree->GetEntries( c5track && combine5Y_det && WhichX4);//得到给定条件下的计数。
cout<<N_trackYX_det<<endl;
effyx=Double_t( N_trackYX_det)/(N_trackY_det+N_trackY_nodet);
cout<<"effyx: "<<effyx*100<<"%"<<endl;
c1->Draw();
由探测器组合:1B,2B,3得到的PPAC1A的效率
cout<<"effx: "<<effx*100<<"%"<<endl;
cout<<"effy: "<<effy*100<<"%"<<endl;
cout<<"effxy: "<<effxy*100<<"%"<<endl;
cout<<"effyx: "<<effyx*100<<"%"<<endl;
PPAC1A-anode | PPAC1A-det | PPAC3-anode | PPAC3-det | |
---|---|---|---|---|
a | 99.11 | 56.18 | ||
x | 93.81 | 93.92 | 52.12 | 50.67 |
y | 91.04 | 90.13 | 51.53 | 50.34 |
xy | 85.74 | 85.35 | 47.47 | 31.55 |
yx | 84.73 | 33.73 |
!jupyter nbconvert homework2.1_efficiency --to html