東京工業大学大学院理工学研究科基礎物理学専攻中村研究室メンバーTakayuki Sako

PAW/ANAPAWのTips

Tips List

analogon
画像(.ps, .eps)を保存する
PAWのメモリーサイズを増やす
プロンプト表示を変更する。
下付き文字/上付き文字
二次元ヒストグラムのz軸の最大値・最小値を設定する
ヒストグラムのタイトルを書き換える
ana/loop中にヒストグラムを自動更新する
コマンドを一行で打つ

analogon

ANAPAWは起動時にワーキングディレクトリの.analogon.kumacを読み込んでいる。 今は.analogon.kumacには
defaults $ANAPAW_MACROS
exec kumac/initialize.kumac
とだけ書いてある。実体のinitialize.kumac
 macro initialize
	 host_pager less
	 host_editor 'emacs -nw'
	 option fit
	 option grid
	 set fit 111
	 set vsiz 0.25
	 set tsiz 0.34
	 set tfon -20
	 set gfon -60
	 set lfon -600
	 set vfon -20
	 set cfon -20
	 set xlab 1.2
	 set ylab 0.6
	 set yhti 0.95
	 set ncol 58
	 pal 1
	 set htyp -3
	 set lfon -132
	 
	 size 18 24
	 opt date
	 opt sta
	 opt ZFL1
	 opt tic
	 opt nbox
	 opt htit
	 set stat 1110001
	 set fcol 2
	 set fwid 7
	 set hwid 5
	 set bwid 7
	 set hcol 10418
	 set htyp 2
	 color 8 1 1 1
	 set chhe 0.28
	 set MTYP 20
	 set PMCI 1
	 
	 filecase keep 
	 
	 exec ini_alias
	 global/create current_ana
	 global/create current_anafile
 	 global/create current_runNO
	 current_anafile = 0 
	 current_ana = 0 
 	 current_runNO = 0 
 return
としている。

画像(.ps, .eps)を保存する

 →pic/pri

PAWのメモリーサイズを増やす

PAW(ANAPAW)を使っているとヒストグラムが多くなったときに
Not enough space in memory
と表示されてそれ以上ヒストグラムが生成されなくなることがある。この回避を行う。
メモリー不足に対してはPAWのオフィシャルな方法が存在する( How to rebuild PAW with a larger memory ?)が、今回はANAPAW上での回避方法を示す。

背景

PAWはmemory management and I/OにZEBRAを使っており、この中でNWPAWというパラメーターがPAWのメモリーサイズを決めている。 したがって、このパラメーターを書き換えてコンパイルし直せばエラー不足のメッセージは回避できる(この辺の理解は適当。間違っている部分もあるかも)。

ANAPAWでのNWPAW

ANAPAWの場合は
~/usr/local/anapaw/src/anapaw.f
の中でNWPAWが記述されている。デフォルトでは下記のような感じ。
      PROGRAM ANAPAW

      PARAMETER (NWPAW=10000000)


      COMMON/PAWC/PAWCOM(NWPAW)

      CHARACTER*256 ANALOG
      CHARACTER*80  BATCHF,PAWLOGF

      EXTERNAL ASTOP
      EXTERNAL PAEXIT

      CALL GETENV('ANALOGON',ANALOG)

      CALL PAWINT1('PAW',BATCHF,PAWLOGF)

      CALL PAWINT2(NWPAW,' ',PAEXIT,IWTYP)

      CALL PAWINT3

      CALL PAWINT4(PAWLOGF)

      CALL ANAMNU

      CALL ANATITLE(BATCHF)

      CALL ASTART

      CALL AINIT

      CALL KUEXEC('SET/PROMPT ''ANAPAW>''')

      CALL KUEXEC('EXEC '//ANALOG)

      CALL KUEXIT(ASTOP)

      CALL KUQUIT(ASTOP)

      IF (BATCHF .NE. ' ') THEN
         CALL KUEXEC('EXEC '//BATCHF)
         CALL PAEXIT
         STOP
      ENDIF

      CALL KUWHAG

      CALL PAEXIT
二行目のPARAMETER文で決められているのでこの数字を書き換えればればよい。 手元のPCでは10倍にしても正常に動くことを確認したが、最適値が分からないのでとりあえず50000000にして使っている。 ちなみに数値を書き換えた後はANAPAWのインストール時と同様、
makelib
makeana
すれば良い。

ちなみにanapaw.fとHow to rebuild PAW with a larger memory ?のpamain.fを見比べるとanapaw.fがpamain.fを内含していることが分かる。

問題点

上の方法でメモリー不足は解消できるが、以下のようにヒストグラムを表示しようとするときに ANAPAWがアボートすることがある。全く同じソース、データでもNWPAWを変えるだけで落ちる・落ちないが変わるのでPAW,もしくはANAPAWそのものの問題と考えられるが原因は今のところ分かっていない。
gdbを使うとPAW本体で落ちているように見えるものの、それ以上の追跡はしていない。
ANAPAW/EVTLOOP> ht 114
> ht 114
Floating Exception
Aborted
デフォルトの値を利用する限りは問題ない。

プロンプト表示を変更する。

デフォルトでは以下のように表示される。
ANAPAW> cba neut140 140
  
  ANAPAW-M : All definitions were cleared.
  

rdf/0140.rdf  Size :  96.3 MB   Block : 6163
ANAPAW/EVTLOOP> start
だが、その分文字数を圧迫して邪魔なので表示を変更する。
~/usr/local/anapaw/src/anapaw.f
CALL KUEXEC('SET/PROMPT ''ANAPAW>''')
CALL KUEXEC('SET/PROMPT ''A>''')
に変更。EVTLOOPについては
~/usr/local/anapaw/src/common.f
Character*16 CHPRMPT

(中略)

Parameter (CHPRMPT='ANAPAW/EVTLOOP>')
Character*5 CHPRMPT

(中略)

Parameter (CHPRMPT='A/E>')
に変更。後は
makelib
makeana
するだけ。これで
A> cba neut140 140
  
  ANAPAW-M : All definitions were cleared.
  

rdf/0140.rdf  Size :  96.3 MB   Block : 6163
A/E> start
となり、コマンドが長くなったときに邪魔にならない。

上付き文字/下付き文字

上付き文字
'^ue!normal'
下付き文字
'?shita!normal'
!は効果を打ち消す

二次元ヒストグラムのz軸の最大値・最小値を設定する

二次元ヒストグラムのz軸の最大値・最小値を設定するにはmaximum,minimumを使えば良い。PAWのhelpには明確にy軸を設定すると書いてあるが、二次元ヒストグラムの場合はz軸の設定が行われる。 z軸をlogでプロットする際には
PAW> min 0 0.1
がよく利用される。

ヒストグラムのタイトルを書き換える

ヒストグラムのタイトルを書き換えるにはhistogram/copyを利用すれば良い。
オフィシャルのFAQ : How to change the histogram title drawn by H/PLOT ? ではtitle_globalを使うことになっている。 つまり、オプションUTITをONにしてUオプション付きのtitle_globalで ヒストグラムの下にグローバルタイトルを設定するという方法だ。
PAW> opt utit
PAW> title NEW_title U
PAW> hi/plo 30000
だが、これはANAPAWのコマンドhtと相性が悪い。 hi/ploした場合はタイトルが表示されるが、htではタイトルが表示されない。 しかも、グローバルタイトルなのでヒストグラムに関係なく一括で変更されてしまう。 以上の理由からhistogram/copyの方が便利。ただし、このコマンドでは タイトルを消すことが(おそらく)できないので、タイトルを消すには
PAW> opt utit
PAW> title
としてしまえば良い(もちろん全てのヒストグラムのタイトルが消えることになる)。

ana/loop中にヒストグラムを自動更新する

通常、ana/loopの後、startするとデータを読み込んでいる間は既に表示しているヒストグラムがそのまま画面に表示されている。 だが、startする前に予めhst1を使っておくとana/loop中でもヒストグラムが自動更新されて表示される。 地味に便利。

コマンドを一行で打つ

ANAPAWに限らないが、;(セミコロン)を使うことでコマンドは一行で打つことができる。 例えば
ANAPAW> cle f ; book ana/filename.ana ; a/l
など。こうすると上キーを押して履歴を辿るのが早くなる。結果的に効率が上がる。

ディレクトリ構造

Ubuntu9.04/9.10にanapawをインストールする方法のメモでインストールしたときのディレクトリ構造。

$HOME
 ├/usr : 以下、ANAPAW本体
 | └/local
 |   ├anapaw -> anapaw_**** : 以下2つのどちらかへのシンボリックリンク
 |   ├/anapaw_ridf : RIBF ver
 |   └/anapaw_v-2-3-1 : RIBFでないver
 |     ├/Setup
 |     | ├setana
 |     | ├setupanapaw
 |     | ├setlocal
 |     | ├analogon.kumac
 |     | …
 |     ├/src : ANAPAW本体のソース
 |     | ├Makefile 
 |     | …
 |     ├/Macros
 |     …
 ├/exp : 以下、実験毎、ユーザー毎のファイル
 … ├/dayone : RIBF ver 用
   | └/users
   |   ├ …
   |   …
   └/nebulatst : RIBFでないver用
     ├/src : ユーザー毎のソース
     | ├Makefile
     | ├enc***
     | …
     ├/ana
     ├/cut
     ├/kumac
     …

.analogon.kumac

ANAPAWは起動時に.analogon.kumacを読み込む。
上記の環境ではここにある。
/home/rips/exp/nebulatest/.analogon.kumac
中身を見てみるとv2_3_1のデフォルトならば
less /home/rips/exp/nebulatest/.analogon.kumac

defaults $ANAPAW_MACROS
host_psview gv
option fit
option grid
set fit 111
set vsiz 0.25
set tsiz 0.34
set tfon -20
set gfon -60
set lfon -600
set vfon -20
set cfon -20
set xlab 1.2
set ylab 0.6
set yhti 0.95
graphics/viewing/size 18. 18.
set ncol 28
pal 1
set htyp -3
set hcol 1012
exec ini_alias
となっている。 ここに例えば
opt sta
を加えておくと統計の情報(ID,Entries,Mean,RMS)がデフォルトで表示されることになる。

色々いじった結果、現在使っている.analogon.kumac
defaults $ANAPAW_MACROS
host_pager less
option fit
option grid
set fit 111
set vsiz 0.25
set tsiz 0.34
set tfon -20
set gfon -60
set lfon -600
set vfon -20
set cfon -20
set xlab 1.2
set ylab 0.6
set yhti 0.95
set ncol 58
pal 1
set htyp -3
set lfon -132

size 18 24
opt date
opt sta
opt ZFL1
opt tic
opt nbox
set stat 1110001
set fcol 2
set fwid 7
set hwid 5
set bwid 7
set hcol 10418
set htyp 2
color 8 1 1 1
min 0 0.5
lgz

filecase keep

exec ini_alias
この.analogon.kumacによる出力サンプルは

cut

anaファイル中でgateのファイルを読み込むときスペースを挟んではならない。
xygate
@, cut/anapaw.cut
ではgateを正しく読み込まない。

xygate
@,cut/anapaw.cut
ならOK

ini_alias.kumac

ini_alias.kumac

.analogon.kumac

.analogon.kumac

RIBF-55(2010)exp のshift_watch.kumac

RIBF-55(2010)exp の shift_watch.kumac
実験中に適当に書いたもの。色々ひどい。

macro shift_watch [IDtemp]

global/create ID
global/create scale
global/create histMax
global/create dir


histMax = 12
dir = ./ps/shift

if [IDtemp] .eq. '' then
message
message please input run NO !
message
exitm
endif

ID = [IDtemp]


* lnz
* scale = 'linear'
* exec main
*
* wait

lgz
scale = 'log'
exec main

mes 'print out ?'
wait

* scale = 'linear'
* do i=1,[histMax]
* sh pwd
* sh ps2pdf [dir][ID]_[i]_[scale].ps [dir][ID]_[i]_[scale].pdf
* sh lpr -Pbripslw2 [dir][ID]_[i]_[scale].pdf
** sh lpr [dir][ID]_[i]_[scale].pdf
* enddo

scale = 'log'
do i=1,[histMax]
sh pwd
sh ps2pdf [dir][ID]_[i]_[scale].ps [dir][ID]_[i]_[scale].pdf
sh lpr -Pbripslw2 [dir][ID]_[i]_[scale].pdf
* sh lpr [dir][ID]_[i]_[scale].pdf
enddo

return


macro main

import *



size 18 24


opt date
opt sta
zone 2 3


set ygti 1.0
set gsize 0.6


* 1
num = 1

pson [dir][ID]_[num]_[scale].ps
title run[ID]


ht 101 colz
hn colz
hn colz

do i = 1,3
hn colz
do j = 1,6
exec dlx [j]+0.5
enddo
enddo

do i = 4,6
sel [i]*10
itx 1.8 2500 F3
itx 2.65 2500 F5-1
itx 3.65 2500 F5-2
itx 4.8 2500 F7
itx 5.8 2500 F8
itx 6.7 2500 F11
enddo

sel 1
itx 2 23 shift[num]
itx 3.5 23 [scale]


psoff

num = [num] + 1

wait

* 2
pson [dir][ID]_[num]_[scale].ps
title run[ID]

hn colz
do j = 1,6
exec dlx [j]+0.5
enddo


itx 1.8 2500 F3
itx 2.65 2500 F5-1
itx 3.65 2500 F5-2
itx 4.8 2500 F7
itx 5.8 2500 F8
itx 6.7 2500 F11


hn colz

opt nsta
zone 1 3 2 s
hn colz
exec dlx 2.5
exec dlx 4.5
exec dlx 8.5
exec dlx 9.5
exec dlx 13.5
exec dlx 14.5
exec dlx 18.5
exec dlx 22.5
exec dlx 26.5
exec dlx 30.5

hn colz
exec dlx 2.5
exec dlx 4.5
exec dlx 8.5
exec dlx 9.5
exec dlx 13.5
exec dlx 14.5
exec dlx 18.5
exec dlx 22.5
exec dlx 26.5
exec dlx 30.5

do i = 3,4
sel [i]*10
itx 1.2 4500 F1
itx 3 4500 F2
itx 6.1 4500 F3
itx 8.6 4500 F4
itx 11.2 4500 F5
itx 13.7 4500 F6
itx 16.2 4500 F7
itx 20.2 4500 F8
itx 24.2 4500 F9
itx 27.7 4500 F10
itx 32.2 4500 F11
enddo

sel 1
itx 2 23 shift[num]
itx 3.5 23 [scale]


psoff
wait

num = [num] + 1

* 3
pson [dir][ID]_[num]_[scale].ps
title run[ID]

zone 1 3
do i = 1,3
hn colz
exec dlx 2.5
exec dlx 4.5
exec dlx 8.5
exec dlx 9.5
exec dlx 13.5
exec dlx 14.5
exec dlx 18.5
exec dlx 22.5
exec dlx 26.5
exec dlx 30.5
enddo

do i = 1,3
sel [i]*10
itx 1.2 4500 F1
itx 3 4500 F2
itx 6.1 4500 F3
itx 8.6 4500 F4
itx 11.2 4500 F5
itx 13.7 4500 F6
itx 16.2 4500 F7
itx 20.2 4500 F8
itx 24.2 4500 F9
itx 27.7 4500 F10
itx 32.2 4500 F11
enddo

sel 1
itx 2 23 shift[num]
itx 3.5 23 [scale]


psoff

opt sta

num = [num] + 1


***
zone 2 3
do j = [num],[histMax]
wait
pson [dir][ID]_[j]_[scale].ps
title run[ID]
do i=1,6
hn colz
enddo

sel 1
itx 2 23 shift[j]
itx 3.5 23 [scale]

psoff
enddo


return


macro dly

xmin = $GRAFINFO('WNXMIN')
xmax = $GRAFINFO('WNXMAX')

if $OPTION('LOGX') = 1 then
xmin = $sigma(10**([xmin]))
xmax = $sigma(10**([xmax]))
endif

do i = 1,[#]
dline [xmin] [xmax] [[i]] [[i]]
enddo

return


macro dlx

ymin = $GRAFINFO('WNYMIN')
ymax = $GRAFINFO('WNYMAX')

if $OPTION('LOGY') = 1 then
ymin = $sigma(10**([ymin]))
ymax = $sigma(10**([ymax]))
endif

do i = 1,[#]
dline [[i]] [[i]] [ymin] [ymax]
enddo

return
実行結果の一部
shift422_2_log.pdf

マクロ

ANAPAW マクロ