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

ANAPAW マクロ

自作したANAPAWのマクロ。
ここに置いてあるものは相互に連関しているため他のマクロを入れておかないと動かないものもある。
また、ヒストグラムIDが101以上であることを利用しているマクロがあるため、ヒストグラムIDを100以下にしたときバグるものがある。

注意

ある時点から自作のコマンドCIDを利用して現在のヒストグラムIDを取得できるのが前提になっている。 その場合は前述のページのような改造を行なって、ANAPAW_WORK/kumac/以下にread_cid.kumacが存在しないとマクロが正しく動かない。oldとなっているのはこれを前提としていない標準のANAPAWで動くバージョン。 ただし、更新されていないためにこのページに書いてある通りの動作をするとは限らない。
基本的にはこのコマンドによりヒストグラムIDの入力が必要なマクロはIDを省略すると現在のヒストグラムに対して作用するようになる。

Macro List

read_cid 現在のヒストグラムIDを取得する。
xleマウスを使ってランダウ分布 + exponentialでフィッティングする。
xlpマウスを使ってランダウ分布 + 一次関数でフィッティングする。
nw新たなワークステーション(ウィンドウ)にプロットする。
ew別の(既存の)ワークステーション(ウィンドウ)にプロットする。
hヒストグラムを表示する。(htの強化版)
n次のヒストグラムを表示する。#基準(hnの強化版)。
nn次のヒストグラムを表示する。HID基準(hnの強化版ではない)。
b前のヒストグラムを表示する。#基準(hbの強化版)。
bb前のヒストグラムを表示する。HID基準(hbの強化版ではない)。
mhZONEを自動定義して任意の個数のヒストグラムを連続表示/指定表示する。
cbaclearしてbookしてana/loopする。
epsonepsを保存するためにファイルを開く。
epsoffepsを保存するためにファイルを閉じる。

エイリアスのかけ方

例としてxleのエイリアスを作成する。
xfit_le.kumacをANAPAWのanaloginした先のkumac以下に置いておく。これは編集を容易にする為である。
~/exp/****/users/****/kumac$ ls
xfit_le.kumac
このままでも良いがANAPAW上から実行するためには
ANAPAW> exec kumac/xfit_le ID
と打たねばならない。これは面倒。そこでエイリアスをかける。

ANAPAWの起動時の.analogon.kumacにより
exec ini_alias
が実行されている。これは
~/usr/local/anapaw/Macros/ini_alias.kumac
に実体がある。中身は
alias/create pson 'exec ps_on'
alias/create pson2 'exec ps_on2'
alias/create psoff 'exec ps_close'
alias/create psclose 'exec ps_close'
alias/create bl 'exec hblow'
alias/create xbl 'exec xblow'
alias/create ybl 'exec yblow'
alias/create xybl 'exec xyblow'
alias/create xmami 'exec xmaxmin'
alias/create xfit 'exec xfiting'
alias/create xp 'exec xpfit'
alias/create lgx 'gra/opt logx'
alias/create lnx 'gra/opt linx'
alias/create lgy 'gra/opt logy'
alias/create lny 'gra/opt liny'
alias/create lgz 'gra/opt logz'
alias/create lnz 'gra/opt linz'
alias/create ntc 'exec ntcopy'
alias/create px 'exec projx'
alias/create py 'exec projy'
alias/create bx 'exec bandx'
alias/create by 'exec bandy'
alias/create sx 'exec slicex'
alias/create sy 'exec slicey'
alias/create i 'hlist'
alias/create ni 'nt/print'
alias/create alist 'alias/list'
alias/create table 'exec table1d'
alias/create table-e 'exec table1derr'
alias/create h 'mess;mess Use HT Command!!;mess'
alias/create xrms 'exec rms'
alias/create hrms 'exec rms2'
alias/create mrms 'exec mulrms'
alias/create hrebin 'exec historebin'
alias/create hcop 'exec hcopy'
alias/create histent 'exec histentry'
alias/create hipl 'exec histoplo'
alias/create xhistent 'exec xhistentry'
alias/create htp 'ht ! '
ここでalias/createによりエイリアスが張られている。そこでここに追加する。
alias/create xle 'exec xfit_le'
alias/create pson 'exec ps_on'
alias/create pson2 'exec ps_on2'
alias/create psoff 'exec ps_close'
(略)
ここで注意すべきことはマクロ名と違う名前でエイリアスを張る点。同じだとエラーになる。 さらにxfit_le.kumacの実体をanalogin先に置いてあるのでここにシンボリックリンクを張っておく。
~/usr/local/anapaw/Macros$ ln -s ~/exp/****/users/****/kumac/xfit_le.kumac xfit_le.kumac
これで準備は完了した。このようにエイリアスをかけておけば
ANAPAW> exec kumac/xfit_le ID
と打たなくても
ANAPAW> xle ID
と打つだけでマクロを実行出来る。さらにEVTLOOPの際は普通にexecとしてマクロを実行することができないようだが、エイリアスをかけておけばEVTLOOPを抜けることなく マクロを実行出来る。
以降、このページのマクロはエイリアスをかけておくのが前提としておく。

read_cid

read_cid.kumac
現在のヒストグラムを取得する。 基本的に他のマクロから実行することを前提にしている。
HID = $exec(kumac/read_cid)
とするとHIDに現在のヒストグラムIDが格納される。

コマンドラインから実行するとターミナル上に現在のヒストグラムIDが表示される。また、 ANAPAW_WORK/CurrentHID.txtにその値が書き出される。
ANAPAW> exec kumac/read_cid
Current HID : 357

xle

xfit_le.kumac
xfit_le.kumac (old)
宇宙線の作るエネルギー損失分布をランダウ分布(landau distribution) + exponentialで楽にフィッティングする。
ANAPAW> xle [ID] [textfile] [chopt]
  • ID : ヒストグラムID。省略すると現在のヒストグラムID。
  • textfile : IDとフィット結果のP2が記録されるファイル(省略可能)。デフォルトはtxt/landau.txt。したがってデフォルトで動かす場合txtディレクトリを作っておく必要がある。
  • chpot : オプション。デフォルトは' '
    • ' ' : ランダウ分布 + exponentialの関数のみを描く。
    • d : ランダウ分布 , exponentialの関数それぞれを重ねて描く。
  • (alias/create xle 'exec xfit_le')
宇宙線のピークがランダウピークであると近似して、そのピークより小さい領域で一点、ピークで一点、ピークより大きい領域で一点。合計三点マウスでクリックした後、右クリックで確定。三点以外だとエラーになるので注意。

ピークの左
+
ピーク

ピークの右

ランダウ分布 + exponential
このときP2がピーク値を示す。

xlp

xfit_lp.kumac
xfit_lp.kumac (old)
宇宙線の作るエネルギー損失分布をランダウ分布(landau distribution) + 一次関数で楽にフィッティングする。
ANAPAW> xlp [ID] [textfile] [chopt]
  • ID : ヒストグラムID。省略すると現在のヒストグラムID。
  • textfile : IDとフィット結果のP2が記録されるファイル(省略可能)。デフォルトはtxt/landau.txt。したがってデフォルトで動かす場合txtディレクトリを作っておく必要がある。
  • chpot : オプション。デフォルトは' '
    • ' ' : ランダウ分布 + 一次関数のみを描く。
    • d : ランダウ分布 , 一次関数それぞれを重ねて描く。
  • (alias/create xlp 'exec xfit_lp')
使い方はxleと同一。こちらはランダウ分布+一次関数でフィッティングを行う。

nw

nw_org.kumac
新たなワークステーション(ウィンドウ)にプロットする。
ANAPAW> nw IWKID CMD
  • IWKID : ワークステーションID
    • 1 : 新たにワークステーションを開かずそのまま実行する。
    • 2 : メタファイル用に使うIDの為エラーが出る。
    • 3以降の整数 : その数字でワークステーションが開かれる。
  • CMD : 新たなワークステーションで行うコマンド
  • (alias/create nw 'exec nw_org')
PAWのデフォルトのコマンドは色々使いにくい。個人的には新たに開いたワークステーションはサブ的に使いたい。 つまりヒストグラム1つを別ウィンドウで開き続けておいてメインのウィンドウで作業を行い、必要に応じて別画面に表示を行う、というスタイル。 このスタイルを実現するためのマクロ。
別ウィンドウでCMDを実行後、そのウィンドウは自動的にDeactiveとなり、元のウィンドウに操作が戻る。しかも元のウィンドウのヒストグラムIDを保持しているため、 hnやhbが別ウィンドウに左右されない。また、ワークステーションを開くと左上にそのワークステーションのIDが表示される。
既に存在するワークステーションに対してはewを使う。

ew

ew_org.kumac
別の(既存の)ワークステーション(ウィンドウ)にプロットする。
ANAPAW> ew IWKID CMD
  • IWKID : ワークステーションID
    • 1 : 新たにワークステーションを開かずそのまま実行する。
    • 2 : メタファイル用に使うIDの為エラーが出る。
    • 3以降の整数 : その数字のワークステーションに対して操作を行う。
  • CMD : 指定したワークステーションで行うコマンド
  • (alias/create ew 'exec ew_org')
nwで開いた既存のワークステーションに対してコマンドを実行する。実行後はやはり自動的にワークステーション1に戻る。

h

h_org.kumac
h_org.kumac (old)
ヒストグラムを表示する。
ANAPAW> h [HID] [CHOPT]
  • HID : ヒストグラムID。省略すると現在のヒストグラム。
  • CHOPT : プロットオプション。デフォルトはcolz
  • (alias/create h 'exec h_org')
基本的にhtと同じ。ターミナル上にhstaによる統計情報を表示し、二次元の場合にはcolzを自動補完、ヒストグラムの左上にはXBINS,YBINSを表示する。

n

n_org.kumac
n_org.kumac (old)
次のヒストグラムを表示する(#基準)。
ANAPAW> n [CHOPT]
  • CHOPT : プロットオプション。デフォルトはcolz
  • (alias/create n 'exec n_org')
基本的にhnと同じ。
ANAPAW標準では
ANAPAW> hn colz
と打たねばならないが、この面倒さを回避できる。

nn

nn_org.kumac
次のヒストグラムを表示する(HID基準)。
ANAPAW> nn [CHOPT]
  • CHOPT : プロットオプション。デフォルトはcolz
  • (alias/create nn 'exec nn_org')
hnと動作が異なる。#基準ではなくHID基準で次に移動する。h_orgをラップしている。

b

b_org.kumac
b_org.kumac (old)
前のヒストグラムを表示する(#基準)。
ANAPAW> b [CHOPT]
  • CHOPT : プロットオプション。デフォルトはcolz
  • (alias/create b 'exec b_org')
基本的にhbと同じ。また、本来コマンド「b」はbugreportのコマンドであるため、PAW標準のコマンドを1つ潰してエイリアスをかけていることになる。これを避けるためにはb以外のバッティングしないコマンドに設定すべし。

bb

bb_org.kumac
前のヒストグラムを表示する(HID基準)。
ANAPAW> b [CHOPT]
  • CHOPT : プロットオプション。デフォルトはcolz
  • (alias/create b 'exec b_org')
hbと動作が異なる。#基準ではなくHID基準で前に移動する。h_orgをラップしている。

mh

multi_h.kumac
ZONEを自動定義して任意の個数のヒストグラムを連続表示/指定表示する。
ANAPAW> mh Arg1 Arg2,....
このコマンドは第一引数Arg1および第二引数Arg2の値により挙動が変化する (ヒストグラムIDが101以上であることを前提とすることで同一のコマンドに複数の動作を設定している)。
  • Arg1 = i : 連続表示モード(#基準)。
  • Arg1 <= 100 : 指定表示モード。
  • Arg1 > 100 : 連続表示モード(HID基準)。
    • Arg2 > 100 : ヒストグラムID指定
    • Arg2 <= 100 : 個数指定
  • (alias/create mh 'exec multi_h')

連続表示モード(#基準)

ヒストグラムIDと連続表示するヒストグラムの個数を指定した後、zoneの横を指定する。 順番は#基準。つまり、hnの順番。
ANAPAW> mh i HID1 Hnumber [HORIZON]
  • i : 連続表示モード(#基準)を使うときのオプション。
  • HID1 : 表示するヒストグラムの最初のID。
  • Hnumber : 連続表示するヒストグラムの個数。省略するとHID1のみ表示する。
  • HORIZON : zoneの横の数。縦の数はHID1からHID#まで1つに収まるよう自動計算される。zoneの制約から来るsize依存の上限値が存在する。
このモードはprxなどで新たに作成したヒストグラムと元々のヒストグラムを連続で表示するときなどに役立つ。

指定表示モード

zoneの横を指定し、表示するヒストグラムIDを一つひとつ指定して表示する。
ANAPAW> mh HORIZON HID1 HID2 [HID3] [HID4],.... [HID#]
  • HORIZON : zoneの横の数。縦の数はHID1からHID#まで1つに収まるよう自動計算される。指定表示モードの時は省略不可。zoneの制約から来るsize依存の上限値が存在する。
  • HID1 : 表示するヒストグラムの最初のID。
  • HID2 : 表示するヒストグラムの二番目のID。
  • HID3 : 表示するヒストグラムの三番目のID。最低2つのヒストグラムを指定しなければならない。したがって三番目以降は省略が可能。
例えば、
ANAPAW> mh 3 101 103 105 107 108
とするとzoneの横が3に変更された後,ヒストグラム101,103,105,107,108が表示される。

連続表示モード(HID基準)/ヒストグラムID指定

連続表示する最初と最後のヒストグラムIDを指定した後、zoneの横を指定する。
ANAPAW> mh HID1 [HID2] [HORIZON]
  • HID1 : 連続表示するヒストグラムの最初のID。
  • HID2 : 連続表示するヒストグラムの最後のID。省略するとHID1のみ表示する。
  • HORIZON : zoneの横の数。縦の数はHID1からHID2まで1つに収まるよう自動計算される。省略すると現在のzoneを変更せずにそのまま適用する。
例えば、
ANAPAW> mh 101 105 2

連続表示モード(HID基準)/個数指定

連続表示する最初のヒストグラムIDと連続表示するヒストグラムの個数を指定した後、zoneの横を指定する。
ANAPAW> mh HID1 Hnumber [HORIZON]
  • HID1 : 連続表示するヒストグラムの最初のID。
  • Hnumber : 連続表示するヒストグラムの個数。省略するとHID1のみ表示する。
  • HORIZON : zoneの横の数。縦の数はHID1から指定した個数のヒストグラムを1つに収まるよう自動計算される。省略すると現在のzoneを変更せずにそのまま適用する。
例えば、
ANAPAW> mh 101 5 2
とすると先のヒストグラムID指定の時と同じ結果を得る。
HID基準の表示モードはprxなどで新たに作成したヒストグラムのみを連続で表示していくときに役立つ。

挙動はhiplに似ているが実情に即して使いやすくしたつもり。
hstaの統計情報が自動的にターミナルに表示され、二次元ヒストグラムの際にはcolzが自動で補完される。

cba

cba_org.kumac
clearしてbookしてana/loopする。
ANAPAW> cba anafile runNO
  • anafile : bookするanafile。ana/*****.anaの*****の部分。
  • runNO : ana/loopするデータファイル。rdf/*****.rdfの*****の部分。
  • (alias/create cba 'exec cba_org')
ひどいマクロだが楽になるのは確か。
これ単体ではあまり意味がないが、epson, epsoffと組み合わせた時、anaファイルとrunナンバーが自動的に補完されることによって真価を発揮する。

epson

eps_on.kumac
epsを保存するためにファイルを開く。
ANAPAW> epson filename [CHOPT]
  • filename : 保存するepsのファイル名。eps/*****.epsの*****の部分。つまり、.epsは自動補完される。
  • CHOPT : オプション。デフォルトはd
    • d : ファイル名に日付が自動補完される。つまり、eps/yyyy-mm-ddfilename.epsというファイル名になる。
    • n : ファイル名に日付が補完されない。つまり、eps/filename.epsというファイル名になる。
  • (alias/create epson 'exec eps_on')
基本的にはpsonのeps版だが色々楽になるよう仕込みがなされている。
ファイルは./eps以下に保存されるので予めANAPAWのワーキングディレクトリにepsというディレクトリを作っておく。

以下、細かい話。epsonを作った背景にはpsonで生成されるpsファイルが扱いづらいからである。 psは他の文章に挿入されることを想定しておらず、一方でepsは元々挿入することを前提としたファイルである。そのため、すぐにTeXに張り付けたい時などは大変に不便。そこで便利な機能を加えたepsonを作るに至った。

epsoff

eps_off.kumac
epsを保存するためにファイルを開く。
ANAPAW> epsoff [CHOPT] [Print_flag]
  • CHOPT : オプション。デフォルトは' '
    • ' ' : epsの左上にepsファイル名、anaファイル名、runナンバーを自動補完する。
    • h : 自動補完しない。
  • Print_flag : プリントフラグ。デフォルトはy
    • y : epsを作成後、自動で印刷する。
    • n : 自動で印刷しない。
  • (alias/create epsoff 'exec eps_off')
anaファイル名、runナンバーはcbaを利用して補完している。したがってcbaでana/loopしない限り正しく動作しない。また、epsファイル名もepsonを利用しているので必ずepsonの後に実行する。
例えば、ファイル名の補完はするが、印刷はしないとき、
ANAPAW> epsoff ! n
とすればよい。


cba, epson, epsoffを組み合わせた時の出力結果。