tkGrayPhotoPutBlock module for EPICS/Python.

What it is?

tkGrayPhotoPutBlockはEPICSデータベース上のWaveformレコード上のデータを白黒の画像としてPython/Tkinterのウィンドウ中に表示するためのユーティリティである。tkGrayPhotoPutBlockはEPICS CAのMonitor EventをImage Updateのためのコールバックルーチンとを結びつける。これによって、Monitor EventによってTkのイメージを更新するためのC関数がPythonを経由する事無く呼び出される。このモジュールではWaveformレコードはunsigned  charの形式で白黒画像がおさめられていると仮定している。

How to Use?

以下にサンプルコードを示す。
import ca,Tkinter,tkGrayPhotoPutBlock #EPICS CA, Tkinter, 本モジュールのimport 
c=Tkinter.Canvas(width=540,height=300) #image widgetを作るための枠としてCanvasを作成
c.pack(expand=1,fill="both") 
im=Tkinter.PhotoImage(data="") # PhotoImageを大きさ0dで作成(?)
im.configure(width=128*4,height=48*2) #imageの大きさを指定。
canvasImage=c.create_image(10,110,image=im,anchor="nw") #image widgetを作成しWidgetに表示する。
interp=c.tk.interpaddr() # tkPhotoPutblockではInterpのアドレスが必要。
ch1=ca.channel("BMLSRM:IMG:VINTERF") # Channelを開く。
ch1.wait_conn(); #接続の完了を待つ。
tkGrayPhotoPutBlock.caGrayPhotoPutZoomedBlock(ch1.chid, interp, im.name,0,0,128,48,4,2,1) 
#EPICSチャンネルとImaage Widgetを結びつける。オフセット、画像サイズ、スケール等を設定。
c.mainloop() #Tk のメインループを起動

Module Interface

tkGrayPhotoPutBlockモジュールでは三つの関数が定義されている。

def caGrayPhotoPutBlock(chid, pinterp, imgname,  x, y, w, h, imgEnhance=0);
def caGrayPhotoPutZoomedBlock( chid,  pinterp,  imgname,  x,  y,  w,  h, zoomX =1,  zoomY=1,  subsampleX=1,  subsampleY=1, imgEnhance=0);
def caPseudoColorPhotoPutZoomedBlock( chid,  pinterp,  imgname,  x,  y,  w,  h, zoomX =1,  zoomY=1,  subsampleX=1,  subsampleY=1, imgEnhance=0);

caGrayPhotoPutBlockおよびcaGrayPhotoPutZoomedBlockはunsigned charのarrayをもつWave form レコードを255階調のグレースケール画像としてimagenameで指定されるimage widgetに表示する。caGrayPhotoPutZoomedBlockはさらにこの画像を拡大(zoom)あるいは縮小(subsample)した画像をimagenameに作成する。caPseudoColorPhotoPutZoomedBlockでは元のグレースケールを疑似カラー表示する。

imageEnhance以外は対応するTk-Widgetの引数と同じである。
imageEnhanceが1の場合、画像中の最大値が255になるようにWeveformデータを再スケールした後に画像データとする。
imageEnhanceが0であればデータの値がそのまま使われる。
x,yは画像の原点位置
w,hは画像の大きさ
zoomX, zoomY: 画像の拡大率
subsampleX,subsampleY:画像を拡大した際、データ点を間引ことで全体としてのデータ量を増やさない。

Install:


abco1/abco2/acsad0などのKEKB制御システムに接続されている計算機ではすでにPythonの標準Pathに入っている。
それ以外の計算機では以下の手順でモジュールを構築し、インストールする。
  1. EPICSライブラリをShared libraryとして構築。
  2. tarballを入手。
  3. make
  4. 出来上がったPythonモジュールと共有ライブラリを適当な場所(site-packagesなど)に移動する。