作成:2001/3/7

kblogrd.pyの使用法

KEKB制御グループ
山本 昇

始めに

kblogrd.pyはKEKB運転用にkekblogプログラムが記録しているArchived dataをpythonから利用するためのモジュールである。この文書はこのモジュールの利用法について説明する。

kblogrd.pyはkekblogのファイルを読み出すためのコマンドkblogrdを利用して、kekblogファイルのデータをPythonのtuple の リストとして読み出す機能を提供する。また、
レコード名からそのレコードが記録されているアーカイブグループ(PY/Physics, BM/DCCTなど)を検索するなどの機能を提供している。
 

使用法

モジュールのロード

kblogrd.pyは/proj/local/lib/pythonにおかれている。通常このディレクトリはPythonのデフォールト・パスに含まれているので、
 
import kblogrd


あるいは、
 

from kblogrd import *


をモジュールの機能を利用する前に実行しておく。
sys.pathにproj/local/lib/pythonが含まれていない場合には、
 

import sys
sys.path[:0]=["/proj/local/lib/python"]
import kblogrd


などとする。
 

データの読み出し:kblogrd.kblogrd()


kblogrdモジュールでkekblogからデータを読み出すには、kblogrd.kblogrd()関数を利用する。

関数定義:

def kblogrd(fname,recnames,format="python", From = None, To=None, timeInterval=30):

使用例:

data=kblogrd("PY/Physics",'Belle:Lum_EFC',From=(2001,3,8,0,0,0,0,0,0),
      To=(20001,3,8,0,1,0,0,0,0),format="sad")
fname, recnameはshell上のkblogrdコマンドと同じく、kekblogのデータグループを示す文字列と、レコード名である。recnameにはkblogrdと同様に複数のレコードを指定することができるが、この場合、"rec1,rec2,..."とレコード名が","で区切られた一つの文字列としてrecnamesに渡す。

formatはpython, free, kaleida, sadが指定可能である。default値はpythonである。formatにpythonを指定した場合には、kblogrdはデータをpythonの数値あるいは文字列として返すが、その他の形式を指定した場合には、戻り値はすべて文字列のリストである。

 From とToには引きだすデータの開始時刻と終了時刻をPythonでの時刻の表現である長さ9のtupleの形式  (year, month, day, hour, minute, second, 0,0,0) で指定する。

timeIntervalはkekblogrdコマンドの時間指定におけるd以下の部分となる。これをNoneとすると指定した時間内のすべてのデータを返す。数値をしていしたばあいには、その秒数間隔に整理されたデータを返す。

レコード名からファイル名の検索:dbmOpen()

kblogrd()関数でデータを引きだすにはfnameにそのレコードが属するグループとサブグループを示す文字列を指定する。kblogrdではこの対応表を事前にdbmファイルの形式で作成しており、これを使ってレコード名からこのfnameの文字列を検索することができる。
 

使用例:

>>> db=dbmOpen()
>>> print db["Belle:Lum_CsI"]
PY/Physics
dbmOpen()関数は事前に作成されているdbmファイルをオープンし、dbmオブジェクトを値として返す。dbmオブジェクトはレコード名をキーとするdictionaryとみなして扱うことができる。dictionaryの値はそのレコードが属するグループとサブグループを示す文字列である。
 
 

kblogrd()関数からの戻り値の形式

kblogrd()関数からの戻り値の形式は、timeInterval引き数に(0以外の)数値を指定した場合と、0またはNoneを指定した場合で異なっている。これは元になるshell コマンドのkblogrdコマンドの返すデータの形式を反映している。

また、formatに"python"を指定した場合と、それ以外の"free","sad","kaleida"を指定した場合にも違いがある。後者の場合には、戻り値はkblogrdの返す文字列そのものであるが、(既定値でもある)"python"を指定した場合には、数値データおよび時刻はPythonでの数値データとして戻り値の中に含まれる。
 

  1. timeIntervalに(0以外の)数値を指定した場合の戻り値は、以下の要素からなるリストである。
    1. 最初の要素は、戻り値に含まれるレコード名のリスト、
    2. それ以降の要素は次の形式のTupleである。

    3. ( <時刻をあらわす数値(UTC)>, <一番目のレコードの値のリスト>, ....)
  2. timeIntervalに0またはNoneを指定した場合の戻り値は、次ぎの要素からなるリストである。
    1. (<時刻をあらわす数値(UTC)>, <レコード名>, <レコードの値のリスト>)
いずれの場合にも、レコードの値のリストはそのレコード(チャンネル)が一つだけの要素を持つスカラー量であったとしても、それを要素とするリストが返されることに注意すべきである。
 

以上