PAW与ROOT 用户界面:PAW≈ROOT 图形功能:PAW ≈ROOT 同等数据处理时间:PAW 快于ROOT 同等数据存储空间:PAW大于ROOT 2414133run615026.dat 58197330run615531.dat 1581056run615026.ntuple 内存不够 901766run615026.root 17552250run615531.root 我个人使用PAW与ROOT的感觉:对于单纯的数据处理,PAW使用 起来相对容易一些。对于非常复杂的数据结构和多次计算,ROOT 有它的优点,尤其是在处理数据量在102以上的应用。在很多指令 操作上,两者之间有不少一一对应的关系。 6
6 PAW 与 ROOT 用户界面:PAW ≈ ROOT 同等数据处理时间:PAW 快于 ROOT 同等数据存储空间:PAW 大于 ROOT 2414133 run_615026.dat 58197330 run_615531.dat 1581056 run_615026.ntuple 内存不够 901766 run_615026.root 17552250 run_615531.root 我个人使用PAW与ROOT的感觉: 对于单纯的数据处理, PAW使用 起来相对容易一些。对于非常复杂的数据结构和多次计算,ROOT 有它的优点,尤其是在处理数据量在1012以上的应用。在很多指令 操作上,两者之间有不少一一对应的关系。 我个人使用PAW与ROOT的感觉: 对于单纯的数据处理, PAW使用 起来相对容易一些。对于非常复杂的数据结构和多次计算,ROOT 有它的优点,尤其是在处理数据量在1012以上的应用。在很多指令 操作上,两者之间有不少一一对应的关系。 图形功能:PAW ≈ ROOT
数据库Ntuple Ntuple':是一个加有多种功能的N-维数据库。数据在Ntuple中按行或 列排列,而各行或列有N个数据块。例如,在分析练习中说给的数据 事例号光电倍增管号码时间测量值电荷测量值 就可以形成这样能被PAW或者ROOT识别的数据库。包含在这两种物 理分析工作平台的各种统计分析工具就可以得到充分的利用。 为了优化数据结构,可以在 PAW:CWN.RWN.BLOCK.. ROOT:TREE.BRANCH... 以加速数据处理的时间。 7
7 数据库Ntuple “Ntuple”: 是一个加有多种功能的N-维数据库。数据在 Ntuple 中按行或 列排列,而各行或列有 N 个数据块。例如,在分析练习中说给的数据 … 事例号 光电倍增管号码 时间测量值 电荷测量值 … 就可以形成这样能被 PAW 或者 ROOT 识别的数据库。包含在这两种物 理分析工作平台的各种统计分析工具就可以得到充分的利用。 为了优化数据结构,可以在 PAW: CWN, RWN,BLOCK… ROOT: TREE, BRANCH… 以加速数据处理的时间
PAW数据中的行排列与列排列 假设每个事例有观测量(x,y,z,t) Ntuple Header Header created by HBOOKN) 按行排列 x1Y12151x2Y2z2t2x3Y333t3·· Buffer filled by HFN) 用于观测量较少的情况。如果 内存大,数据处理时间较短。 LRECL HBOOK/RZ direct-access file NWBUFF Ntuple Header Header created by HBNT,HBNAME) 按列排列 Buffers filled by HFNT) x1x2X3x×5· YYzy3YYs· 2122232425 t,52t36,ts… NWBUFF 用于观测量较多的情况。该排 列方式不适用于本课程的练习。 LRECL HBOOK/RZ direct-access file 8
8 PAW数据中的行排列与列排列 假设每个事例有观测量(x,y,z,t) 按行排列 按列排列 用于观测量较少的情况。如果 内存大,数据处理时间较短。 用于观测量较少的情况。如果 内存大,数据处理时间较短。 用于观测量较多的情况。该排 列方式不适用于本课程的练习。 用于观测量较多的情况。该排 列方式不适用于本课程的练习
ROOT数据中的TREE结构 步骤: 1.建立一个TFi1e TFile *hfile new TFile("AFile.root","RECREATE"): 2.建立一个Ttree TTree *tree=new TTree("myTree","A ROOT tree"); TTree aliTree("aliTree","/aliroot"): 3.把TBranch加到Ttree Event *event=new Event(); myTree->Branch("EventBranch","Event",&event): 4.填入tree myTree->FillO); Tree H1F,H2F,Ntuple 5.写到一个文件上 等等。 hfile->Write(); 9
9 ROOT数据中的TREE结构 步骤: 1. 建立一个 TFile 2. 建立一个 Ttree 3. 把 TBranch 加到 Ttree 4. 填入 tree 5. 写到一个文件上 TFile *hfile = new TFile("AFile.root","RECREATE"); TTree *tree = new TTree("myTree","A ROOT tree"); TTree aliTree("aliTree", "/aliroot"); Event *event = new Event(); myTree->Branch("EventBranch","Event",&event); myTree->Fill(); hfile->Write(); Tree = H1F, H2F, Ntuple 等等
如何生成Ntuple数据库 subroutine readin integer nevent,pmtid 在ROOT平台 real time,charge,vect(4) gROOT->Reset(); #include "Riostream.h" parameter (nwpawc=50000,ndim=4) ifstream in; character*15 ntit(ndim) in.open("run_615026.dat"); data ntit/"nevent','pmtid','time','charge'/ Float t nevent,pmtid,time,charge; TFile *f =new TFile("run_615026.root","RECREATE"); common/pawc/h(nwpawc) TNtuple *ntuple=new TNtuple("ntuple", call hbookn(100,'Test',ndim,'',1024,ntit) "data from ascii file","nevent:pmtid:time:charge"); open(61,file='run_615026.dat') while (1){ read(61,*,end=10)nevent,pmtid,time,charge in >nevent>>pmtid >time >charge; vect(1)=nevent if (!in.good())break; ntuple->Fill(nevent,pmtid,time,charge); vect(2)=pmtid vect(3)=time in.close(); vect(4)=charge f->WriteO); root -b -q readin.C+ call hfn(100,vect) go to 1 PAW>call readin.f 10 close(61) PAW>h/fil 1 run_615026.ntuple N;cd //lun1;hrout 0;close 1 return end PAWROOT:h2root run_615026.ntuple run_615026.root
10 如何生成Ntuple数据库 subroutine readin integer nevent,pmtid real time,charge,vect(4) parameter (nw pawc=50000,ndim=4) character*15 ntit(ndim) data ntit/'nevent','pmtid','time','charg e'/ common/pawc/h(nwpaw c) call hbook n(100,'Test',ndim,' ',1024,ntit) open(61,file=‘run_615026.dat') 1 read(61,*,end=10)nevent,pmtid,tim e,charge vect(1)=nevent vect(2)=pmtid vect(3)=time vect(4)=charge call hfn(100,vect) go to 1 10 clos e(61) return end { gROOT->Reset(); #include "Riostrea m.h" ifstream in; in.open("run_615026.dat”); Float_t nevent,pmtid,time,charge; TFile *f =new TFile( "run_615026.root ","RECREATE"); TNtuple *ntuple = new TNtuple("ntuple", "data from ascii file ","nevent:pmtid:time:charg e "); w hile (1) { in >> nevent >> pmtid >> time >> charge; if (!in.good()) brea k; ntuple->Fill(nevent,pmtid,time,charge); } in.close(); f->Write(); } root –b –q readin.C+ PAW>call readin.f PAW>h/fil 1 run_615026.ntuple ! N;cd //lun1;hrout 0;close 1 在ROOT平台 从PAW 到ROOT: h2root run_615026. ntu ple ru n_615026.ro o t