2009年7月17日金曜日

How to use pyROOT 基礎編 その5

2次元データのプロット

TGraph というクラスを使用する


次のコードでは、引数にプロットするデータファイルを指定する。

データファイルの形式は
data_x data_y


  1. #/bin/usr/env python  
  2.   
  3. import sys, os  
  4. import ROOT  
  5.   
  6.   
  7. if __name__=='__main__':  
  8.   
  9.   
  10.     if len(sys.argv) < 2 :  
  11.         sys.exit(1)  
  12.   
  13.     if not os.path.exists(sys.argv[1]) :  
  14.         sys.exit(1)  
  15.   
  16.     # read data from file  
  17.     fin = open(sys.argv[1], "r")  
  18.     fins = fin.readlines()  
  19.     fin.close()  
  20.   
  21.   
  22.     graph = ROOT.TGraph()  
  23.   
  24.     # set data point  
  25.     for data in fins :  
  26.         item = data.split(None)  
  27.         np = graph.GetN()  
  28.         graph.SetPoint(np, float(item[0]), float(item[1]))  
  29.   
  30.   
  31.     cv  = ROOT.TCanvas("cv""Graph Example"20010700500)  
  32.   
  33.     pad = cv.cd()    
  34.     pad.SetGridx(1)    
  35.     pad.SetGridy(1)  
  36.   
  37.     graph.Draw("APL")  
  38.     cv.Update()  
  39.   
  40.   
  41.     # export  
  42.     cv.Print("graph1.png")  






エラーバー付きのプロット

エラーバーを付けてプロットするには、 TGraphErrors クラスを使用する

ここでの引数にしていするデータファイルの形式は
data_x data_y data_x_err data_y_err


  1. #/bin/usr/env python  
  2.   
  3. import sys, os, array  
  4. import ROOT  
  5.   
  6.   
  7. if __name__=='__main__':  
  8.   
  9.   
  10.     if len(sys.argv) < 2 :  
  11.         sys.exit(1)  
  12.   
  13.     if not os.path.exists(sys.argv[1]) :  
  14.         sys.exit(1)  
  15.   
  16.     # read data from file  
  17.     fin = open(sys.argv[1], "r")  
  18.     fins = fin.readlines()  
  19.     fin.close()  
  20.   
  21.   
  22.     dat = {'X'     : array.array('f'),  
  23.            'X_ERR' : array.array('f'),  
  24.            'Y'     : array.array('f'),  
  25.            'Y_ERR' : array.array('f')}  
  26.   
  27.           
  28.     # set data point  
  29.     for data in fins :  
  30.         item = data.split(None)  
  31.         dat['X'].append(float(item[0]))  
  32.         dat['X_ERR'].append(float(item[2]))  
  33.         dat['Y'].append(float(item[1]))  
  34.         dat['Y_ERR'].append(float(item[3]))          
  35.   
  36.   
  37.     graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],  
  38.                               dat['X_ERR'], dat['Y_ERR'])  
  39.   
  40.   
  41.     cv  = ROOT.TCanvas("cv""Graph Example"20010700500)  
  42.   
  43.     pad = cv.cd()    
  44.     pad.SetGridx(1)    
  45.     pad.SetGridy(1)  
  46.   
  47.     graph.Draw("APL")  
  48.     cv.Update()  
  49.   
  50.   
  51.     # export  
  52.     cv.Print("graph2.png")  






Tips プロット時のオプション

Draw("**") のときの ** を変えることで、いろいろなグラフが描ける

A : 軸をグラフの周りに描く
P : データを指定したマーカー (default は ・) でプロットする
L : 折れ線グラフ
C : データの間を滑らかな曲線で結ぶ


1次関数で fitting

  1. #/bin/usr/env python  
  2.   
  3. import sys, os, array  
  4. import ROOT  
  5.   
  6.   
  7. if __name__=='__main__':  
  8.   
  9.   
  10.     if len(sys.argv) < 2 :  
  11.         sys.exit(1)  
  12.   
  13.     if not os.path.exists(sys.argv[1]) :  
  14.         sys.exit(1)  
  15.   
  16.     # read data from file  
  17.     fin = open(sys.argv[1], "r")  
  18.     fins = fin.readlines()  
  19.     fin.close()  
  20.   
  21.   
  22.     dat = {'X'     : array.array('f'),  
  23.            'X_ERR' : array.array('f'),  
  24.            'Y'     : array.array('f'),  
  25.            'Y_ERR' : array.array('f')}  
  26.   
  27.           
  28.     # set data point  
  29.     for data in fins :  
  30.         item = data.split(None)  
  31.         dat['X'].append(float(item[0]))  
  32.         dat['X_ERR'].append(float(item[2]))  
  33.         dat['Y'].append(float(item[1]))  
  34.         dat['Y_ERR'].append(float(item[3]))          
  35.   
  36.   
  37.     graph = ROOT.TGraphErrors(len(dat), dat['X'], dat['Y'],  
  38.                               dat['X_ERR'], dat['Y_ERR'])  
  39.   
  40.   
  41.     # fitting  
  42.     graph.Fit("pol1")  
  43.   
  44.     # output fitting parameters  
  45.     ROOT.gStyle.SetOptFit()  
  46.   
  47.     cv  = ROOT.TCanvas("cv""Graph Example"20010700500)  
  48.   
  49.     pad = cv.cd()    
  50.     pad.SetGridx(1)    
  51.     pad.SetGridy(1)  
  52.   
  53.     graph.Draw("AP")  
  54.     cv.Update()  
  55.   
  56.     # export  
  57.     cv.Print("graph3.png")  


0 件のコメント:

コメントを投稿