粒子物理與核物理實驗中的數據分析_第1頁
粒子物理與核物理實驗中的數據分析_第2頁
粒子物理與核物理實驗中的數據分析_第3頁
粒子物理與核物理實驗中的數據分析_第4頁
粒子物理與核物理實驗中的數據分析_第5頁
已閱讀5頁,還剩28頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

上講摘要C++基本概念類的定義與實現...Linux下用g++編譯C++程序

g++-ohello.exe-I<include>./src/*.cc

當前目錄下輸出指定include目錄源文件可執行文件hello.exe如-I./include用makefile進行C++編譯

gmake進行編譯

gmakeclean清除編譯結果使用ROOT腳本root-lhello.C第一頁1第二頁,共34頁。本講要點什么是ROOT?登錄ROOT環境和體驗中心ROOT的語法簡介ROOT的函數,直方圖,隨機數,文件,散點圖

TF1,TH1I,TH1F,TH1D,TRandom(gRandom)TF2,TF3,TH2F,...TFile第二頁2第三頁,共34頁。什么是

ROOT?ROOT:ExecutiveSummary...providesasetofOOframeworkswithall

thefunctionalityneededtohandleandanalyselargeamountsofdatainavery

efficientway....(摘自)關鍵字:面向對象的框架、所有功能、海量數據、非常有效結論:很不謙虛!第三頁3第四頁,共34頁。安裝ROOT(1)到ROOT主頁下載需要的版本到指定目錄。比如要在SLC3系統的/projects/yangzw目錄下安裝5.16.00版本(注:最新版本的ROOT已經不為SLC3提供預編譯版本了,而為SLC4和SLC5提供)cd/projects/$USER(注:對用戶yangzw,$USER=yangzw)wgettar–zxvfroot_v5.16.00.Linux.slc3.gcc3.2.3.tar.gz設置ROOT的環境變量exportROOTSYS=/projects/$USER/rootexportPATH=$ROOTSYS/bin:$PATHexportLD_LIBRARY_PATH=$ROOTSYS/lib:$LD_LIBRARY_PATH可以把上面這3行放到$HOME/.login或者.bashrc或者.tcshrc文件中,這樣每次登錄到Linux系統,系統就自動設置ROOT的環境變量這樣,進入linux系統之后,在終端提示行輸入:

root或

root-l即可進入ROOT環境。第四頁4第五頁,共34頁。安裝ROOT(2)如果是其它發行版的Linux,首先查看是否ROOT網站上是否有預編譯好的程序包,一般情況下,官方提供SLC4和SLC5在各種不同CPU以及不同gcc版本下的二進制包,ROOT官網也提供包括Solaris以及MacOSX以及Windows下的預編譯包。如果沒有適合你的操作系統的預編譯包,就需要到官網

下載ROOT的源代碼,按照安裝指南用gmake編譯安裝。Window用戶在官網下載相應的.msi文件直接安裝即可。Ubuntu8.10用戶可以到下面網頁下載5.22.00版本的二進制代碼,根據Readme.txt說明安裝使用。第五頁5第六頁,共34頁。安裝ROOT(3)實際上,Linux下安裝程序的基本套路很簡單:1.如果需要用源碼編譯

a)下載源碼壓縮包b)解壓縮c)編譯d)設置環境變量(如果需要)2.如果已有預編譯的包

a)下載

b)解壓縮

c)設置環境變量(如果需要)3.yum/apt-get直接用網絡源安裝(預編譯的包)4....第六頁6第七頁,共34頁。登錄ROOT環境運行>root退出root[0].q鍵入help指令,如

root[0]?

root[1].ls

root[2].!lsROOT環境其它常用指令:.Lmacro.CLoad文件macro.C.xmacro.C執行文件macro.C.ls顯示ROOT當前環境的所有信息.!ls顯示Linux系統當前目錄的所有信息注:ROOT環境中,ROOT指令都以“.”開頭系統指令都以“.!”開頭

第七頁7第八頁,共34頁。ROOT體驗中心(1)在$ROOTSYS/tutorials目錄下,有五花八門的例子。以后會經常與這個目錄打交道。先嘗試一下吧。嘗試方法:

>cd/projects/$USER

>cp-r$ROOTSYS/tutorials.(注意不要把這個"."漏掉了)>cdtutorials

然后找個感興趣的目錄/文件,執行ROOT腳本,比如

>cdroofit>root-lRoofitDemo.C小技巧提示:根據關鍵字"xxxx"從tuotorials的例子中尋找線索grep-sirn"xxxx"$ROOTSYS/tutorials比如找隨機數用法:grep-sirn"random"$ROOTSYS/tutorialsRoofit示例第八頁8第九頁,共34頁。ROOT體驗中心(2)還可以在ROOT網站上看到一些ROOT圖片:當然,ROOT的功能不只是做圖,它不是一個作圖工具。跟數據分析有關的東西,基本都是ROOT的擅長;跟物理有關的很多東西,ROOT基本都可以做得很好:事例產生、探測器模擬、事例重建、數據采集、數據分析第九頁9第十頁,共34頁。ROOT體驗中心(3-1)日本超級神岡中微子實驗事例顯示(byzhanghb)超大的水池,內外裝滿了光電倍增管,1萬多個第十頁10第十一頁,共34頁。ROOT體驗中心(3-2)僅顯示被擊中的光電倍增管第十一頁11第十二頁,共34頁。ROOT體驗中心(3-3)平面展開顯示第十二頁12第十三頁,共34頁。ROOT體驗中心(3-4)平面展開,鼠標縮放,顯示鼠標位置光電倍增管信息第十三頁13第十四頁,共34頁。ROOT語法(1)—基本信息ROOT使用C++語法一段C++程序可以直接在ROOT環境運行數據類型重定義

intInt_t

float

Float_tdoubleDouble_t

......ROOT的類都以T開頭如TFile,TH1F,TTree,...詳細規定參閱ROOT手冊(5.21版)第18-20頁,關于Convention和GlobalVariables部分。可以直接在ROOT環境中運行macro文件(自動調用cint編譯器),也可以在makefile中設置好相關參數用g++編譯得到可執行文件運行。第十四頁14第十五頁,共34頁。ROOT語法(2)—直方圖類ROOT中有眾多已經定義好的類可供使用,比如直方圖家族第十五頁15第十六頁,共34頁。ROOT語法(2)—其它類其它常用類數學函數:TF1,TF2,TF3...圖形:TGraph,TGraphErrors,TGraph2D,...文件:TFile畫布:TCanvas,TPad,...隨機數:TRandom,TRandom1,TRandom2,TRandom3周期109101711026106000速度(ns/call)342423745

比如跟數據結構和分析有關的:

TTree,TChain,...參見

(謹代表***邀請各位光臨敝舍。注:***=yangzw)還有很多全局函數,多數以g開頭,如:gRandom,gROOT,gStyle,gPad,gEnv,gFile...速度與CPU和編譯器有關第十六頁16第十七頁,共34頁。ROOT語法(3)—隨機數gRandom是指向當前隨機數產生子的指針,該產生子默認為TRandom3對象。(為什么看TRandom?因為TRandom1/2/3都繼承自TRandom)gRandom->Binomial(ntot,p):二項分布gRandom->BreiWigner(mean,gamma)Breit-Wigner分布gRandom->Exp(tau)指數分布gRandom->Gaus(mean,sigma)高斯分布gRandom->Integer(imax)(0,imax-1)隨機整數gRandom->Landau(mean,sigma)Landau分布gRandom->Poisson(mean)泊松分布(返回int)gRandom->PoissonD(mean)泊松分布(返回double)gRandom->Rndm()(0,1]均勻分布gRandom->Uniform(x1,x2)(x1,x2]均勻分布....使用前可根據需要改變隨機數種子和機制思考:什么情況下需要PoissonD(mean)?第十七頁17第十八頁,共34頁。ROOT腳本文件示例(1):Macro文件

/home/yangzw/examples/Lec3/ex31.C用花括號括起來,后綴名一般用”.C”{cout<<"HelloROOT"<<endl;intNum=5;for(inti=0;i<Num;i++){cout<<"i="<<i<<endl;}}純粹C++語法,執行的時候只需要在命令提示行:cd/projects/$USERcp-r~yangzw/examples/Lec3.(注意最后有個“.”)cdLec3root-lex31.C第十八頁18第十九頁,共34頁。ROOT中的數學函數root[0]TF1*f1=newTF1("f1","x*sin(x)",-5,5);制作一維函數曲線圖TF1*fun_name=newTF1("fun_name","expression",x_low,x_high);root[0]TF2*f2=newTF2("f2","x*sin(x)+y*cos(y)",-5,5,-10,10);制作二維函數曲線圖TF2*fun_name=newTF2("fun_name","expression",x_low,x_high,y_low,y_high);root[0]TF3*f3=newTF2("f3","x*sin(x)+y*cos(y)+z*exp(z)",-5,5,-10,10,-20,20);制作三維函數曲線圖TF3*fun_name=newTF3("fun_name","expression",x_low,x_high,y_low,y_high,z_low,z_high);畫圖時采用

root[1]fun_name.Draw();第十九頁19第二十頁,共34頁。數學函數的定義方式(1)利用c++數學表達式TF1*f1=newTF1("f1","sin(x)/x",0,10);利用TMath定義的函數TF1*f1=newTF1("f1","TMath::DiLog(x)",0,10);利用自定義c++數學函數Double_tmyFun(x){returnx+sqrt(x);}TF1*f1=newTF1("f1","myFun(x)",0,10);ROOT中定義數學函數的方式多種多樣以上函數都不含參數,但在數據擬合時,我們往往需要定義含未知參數的函數第二十頁20第二十一頁,共34頁。數學函數的定義方式(2)ROOT已經預定義了幾種常用的含參函數gaus:3個參數

f(x)=p0*exp(-0.5*((x-p1)/p2)^2))expo:2個參數

f(x)=exp(p0+p1*x)polN:N+1個參數

f(x)=p0+p1*x+p2*x^2+...

其中N=0,1,2,...,使用時根據需要用pol0,pol1,pol2...landau:3個參數朗道分布,沒有解析表達式ROOT中定義含未知參數的數學函數這些預定義函數可直接使用,比如histogram->Fit("gaus");//對直方圖進行高斯擬合TF1*f1=newTF1("f1","gaus",-5,5);第二十一頁21第二十二頁,共34頁。數學函數的定義方式(3)ROOT中自定義含未知參數的數學函數利用c++數學表達式TF1*f1=newTF1("f1","[0]*sin([1]*x)/x",0,10);利用c++數學表達式以及ROOT預定義函數TF1*f1=newTF1("f1","gaus(0)+[3]*x",0,3);利用自定義的c++數學函數Double_tmyFun(Double_t*x,Double_t*par){Double_txx=x[0];Double_tf=par[0]*exp(-xx/par[1]);returnf;}TF1*f1=newTF1("f1","myFun",0,10,2);指定參數數目定義了含參的TF1對象f1之后,可以設定參數初值,比如f1->SetParameter(0,value);//為第0個參數設初值為value第二十二頁22第二十三頁,共34頁。ROOT中統計直方圖定制一維直方圖TH1F*hist_name=newTH1F(“hist_name”,”hist_title”,num_bins,x_low,x_high);定制二維圖TH2F*hist_name=newTH2F(“hist_name”,”hist_title”,num_bins_x,x_low,x_high,num_bins_y,y_low,y_high);定制三維圖TH3F*hist_name=newTH3F(“hist_name”,”hist_title”,num_bins_x,x_low,x_high,num_bins_y,y_low,y_high,num_bins_z,z_low,z_high);填充統計圖hist_name.Fill(x);hist_name.Fill(x,y);Hist_name.Fill(x,y,z);繪圖:root[0]hist_name.Draw();第二十三頁23第二十四頁,共34頁。ROOT腳本文件示例(2):數學函數定義

/home/yangzw/examples/Lec3/ex32.C//asimpleROOTmacro,ex32.C//說明ROOT中數學函數的使用,如TF1voidex32(){//定義函數TF1*f1=newTF1("func1","sin(x)/x",0,10);f1->Draw();//畫出函數圖像

TF1*f2=newTF1("func1",“TMath::Gaus(x,0,1)",0,10);

f2->SetLineColor(2);//設置顏色為紅色f2->Draw(“same”);//用參數”same”,把f1,f2畫在同一個畫布上}函數名稱函數表達式函數區間提示:1)腳本中void函數的名字必須與文件名相同(如ex32)2)ROOT環境中定義類指針之后,如TF1*f1,之后輸入“f1->”,然后按一下Tab鍵,可以自動列出該類對象的成員函數和成員變量運行:在命令提示行下root-lex32.C或在ROOT環境下.xex32.C第二十四頁24第二十五頁,共34頁。ROOT腳本文件示例(3):畫布,保存圖片

/home/yangzw/examples/Lec3/ex33.C//說明ROOT畫布的使用,TCanvas,保存圖形voidex33(){//defineafunctionsin(x)/xTF1*f1=newTF1("func1","sin(x)/x",0,10);

//defineaGaussianfunction,mean=0,sigma=1TF1*f2=newTF1("func2","Gaus(x,0,1)",-3,3);

//定義一個畫布,TCanvas

TCanvas*myC1=newTCanvas("myC1","ACanvas",10,10,800,600);

//將畫布分成兩部分myC1->Divide(2,1);myC1->cd(1);//進入第一部分f1->Draw();myC1->cd(2);//進入第二部分f2->Draw();myC1->SaveAs(“myex33.gif”);myC1->SaveAs(“myex33.eps”);}運行:在命令提示行下>root-lex33.C或在ROOT環境下root[0].xex33.C名稱描述像素坐標(10,10):左上角

(800,600):右下角第二十五頁25第二十六頁,共34頁。ROOT腳本文件示例(4a):直方圖,隨機數

/home/yangzw/examples/Lec3/ex34a.C//說明ROOT直方圖、隨機數的使用,如TH1F,gRandomvoidex34a(){constInt_tNEntry=10000;//創建一個root文件TFile*file=newTFile(“hist1.root”,”RECREATE”);

TH1F*h1=newTH1F("h1","Asimplehisto",100,0,1);

//填充直方圖10000次,用(0,1)均勻分布for(inti=0;i<NEntry;i++)h1->Fill(gRandom->Uniform());h1->Draw();h1->GetYaxis()->SetRangeUser(0,150);h1->GetXaxis()->SetTitle("x");h1->GetXaxis()->CenterTitle();file->cd();//進入文件fileh1->Write();//將h1寫入文件}執行的時候只需要在命令提示行root-lex34a.C或者進入ROOT環境之后,運行.xex34a.C名稱調用均勻分布Uniform(),其它:Landau(mean,sigma);Binomial(ntot,prob);Poisson(mean);Exp(tau);BreitWigner

(mean,sigma);描述No.

ofBin區間第二十六頁26第二十七頁,共34頁。ROOT腳本文件示例(4b):隨機數-舍選法

/home/yangzw/examples/Lec3/ex34b.C執行的時候只需要在命令提示行root-lex34b.C或者進入ROOT環境之后,運行.xex34b.Cfloatmypdf(floatxMin,floatxMax){floatfmax=2.;//尋找分布函數最大值while(1){floatr=gRandom->Uniform(xMin,xMax);//1st隨機數(xMin,xMax)floatz=2.*r/xMax/xMax;//期待的分布函數floatu=gRandom->Uniform(0.,fmax);//2nd隨機數(0,fmax)if(u<=z)returnr;}}voidex34b(){//gDirectory->Delete("*;*");Float_txMin=0.0;Float_txMax=1.0;TH1F*hX=newTH1F("hX","sawtoothp.d.f.",100,xMin,xMax);

gRandom->SetSeed();for(inti=0;i<10000;i++){

floatx=mypdf(xMin,xMax);//舍選法產生隨機分布hX->Fill(x);}hX->Draw("e");}第二十七頁27第二十八頁,共34頁。ROOT腳本文件示例(4c):隨機數

/home/yangzw/examples/Lec3/ex34c.C也可以利用類TF1、TF2或TF3自定義函數,通過調用GetRandom()函數獲得服從自定義函數分布的隨機數:TF1*f1=newTF1("f1","abs(sin(x)/x)*sqrt(x)",0,10);doubler=f1->GetRandom();

voidex34c(){

//定義直方圖TH1F*h1=newTH1F("h1","histogramfromTF1",100,0,10);

//定義TF1函數TF1*f1=newTF1("f1","abs(sin(x)/x)*sqrt(x)",0,10);for(inti=0;i<10000;i++){doubler=f1->GetRandom();

//按照f1分布產生隨機數h1->Fill(r);}h1->Draw();}執行時只需要在命令提示行root-lex34c.C或進入ROOT環境后,運行.xex34c.C感興趣者可以看看TF1的GetRandom()函數是如何實現的。實際上,是把SDA(3.5)-(3.6)進行數值積分得到x(r).當函數f1有陡峰時,要小心!這時可能需要改變一些參數。第二十八頁28第二十九頁,共34頁。X軸的名稱直方圖統計信息事例數:Entries均值:Mean方差:RMS參見ROOT手冊37頁“StatisticsDisplay”直方圖的描述打開已有的root文件,如hist1.root:終端提示行下:root–lhist1.rootROOT環境下:T(“hist1.root”);.lsh1->Draw();直方圖、打開root文件第二十九頁29第三十頁,共34頁。//2維直方圖TH2F,散點圖,散點圖的協方差voidex35(){constInt_tNEntry=10000;

TH2F*hXY=newTH2F("hXY","2dhisto",100,0,1,100,-3,3);for(inti=0;i<NEntry;i++){floatx=gRandom->Rndm();floaty=gRandom->Gaus(0,1);hXY->Fill(x,y);//填充2維直方圖}hXY->Draw();//2維直方圖的散點圖hXY->GetXaxis()->SetTitle("X:Uniform");hXY->GetYaxis()->SetTitle("Y:Gaussian");Float_tcovar=hXY->GetCovariance();//協方差cout<<"Covariance="<<covar<<endl;}ROOT腳本文件示例(5):散點圖

/hom

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論