Interactive Display Program P O L L Y o n L I N U X 岡村 弘之 東京大学理学部 0. 序  ̄ このプログラムは、主に原子核実験のデータ収集やオフライン解析時に ヒストグラム等の処理データをグラフィックス表示させるためのプロ グラムです。一口にヒストグラムと言っても、種々の属性を含めると 様々なタイプがあり、それらを対話的に、あるいはバッチ的に制御し、 グラフィックカーソルによるゲートの設定、ヒストグラムどうしの 演算や関数によるフィット等のデータの加工も支援する事を目指して います。もちろん実験データに限らず、モンテカルロシミュレーション 等にも利用可能です。 扱うデータは、主に Anna というデータ処理プログラムで生成される ものを想定しています。プログラムの名前は、二つを合わせて Pollyanna (E. Porter の同名小説から転じて「超楽観主義者」の意を 表す) となるように付けられたもので、単体の意味は有りません。 元々は、VAX/VMS 上で主にオンラインでの利用を想定して作られたもの ですが、'89 年当時は X Window System も一般的でなく、マシン性能も 1 MIPS 程度のものだったので、VT100 互換端末上でのキャラクター型 メニュー管理と、テクトロニクス互換グラフィック端末への出力を基本と していました。しかし、その後のコンピュータの性能/価格比の向上は 凄まじいものがあり、今回 UNIX に移植するに当たって、メニュー管理 部分をマウス操作中心の直観的なものに書き換え、基本的に X Window System と PostScript のみのサポートに変更しました。初心者にとって、 より使い易くなった点が特徴と言えますが、プログラム全体の基本構成に 大きな変化は無く、グラフィックカーソルの座標入力以外は、全てキー ボードでも操作できるという点は VMS 版と変わっていません。 1. インストール  ̄ ̄ ̄ ̄ ̄ ̄ メニュー管理部分は Tcl/Tk を使っていますが、Tcl7.5/Tk4.1 以降が インストールされている必要があります。Tcl7.4/Tk4.0 でも良いかも 知れませんが (未確認)、少なくとも Tk3.6 では動きません。Tcl8.0/ Tk8.0 でも動きますが、外見が微妙〜に変わるので御了承ください。 # ちなみに Tcl とは Tool Command Language (The Command Language # という説も有り)、Tk とは Tool Kit の略だそうです.... まず、適当なディレクトリに polly.tar.gz を展開します。Tk の所在は /usr/bin/wish が仮定されていますが、もし異なる場合には polly (Tcl スクリプトです) の一行目を変更してください。wish をインタープリタ として使っているので、メイン部分の make は必要ありません。 ヒストグラム管理/描画部分は FORTRAN で書かれています。gcc 2.7.2 以降の Linux-ELF 形式ならば、実行形式がそのまま走るので make の 必要はありません。他の環境で使うために実行形式を作り直す場合は、 サブディレクトリ src/ に移動し、Imakefile.def の先頭部分を適当に 編集してください。変更するのは、アーキテクチャ (動作確認されている 環境に付いては後節を参照してください) の定義と、ライブラリとして HandyPak (6.59) および UGS (2.10d) を使うので、その所在の定義です。 これらのライブラリがインストールされていない場合には、そちらを先に 行なってください。続いて % xmkmf % make clean % make all を実行してください。make install の必要はありません。 プログラムは幾つかの特殊なキーバインド (Alt+Control+.. によるショート カット等) を定義していますが、X サーバーによってはサービス機能をショ ートカットキーに割り当てているものが有り、競合する可能性があるので 注意して下さい。実際の事例については後述します。 メインプログラムは“polly”というファイルです。起動方法としては、 UNIX で通常使われている任意の方法 (シンボリックリンク、エイリアス、 フルパス指定等) が可能です。実行に際しては、複数のファイルを順次 読み込んだり、サブプロセスとして起動したりしますが、これらの ファイルの所在は、以下の二通りの方法で検索されます。 1. メインプログラム“polly”が存在するディレクトリを検索。 2. シェル変数 POLLYLIB で指定されるディレクトリを検索。 方法 2 は 1 より優先しますので、例えばユーザールーチンを付け加える 場合には、変更モジュールのみ POLLYLIB 以下に置くという事ができます。 2. 起動時オプション、初期化ファイル  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ プログラムの起動時には以下のオプションが指定可能です。 polly [-Help] [-M Macro] [-D histDir] [histFile] [-O [key]] -M : 起動時にマクロファイルを実行します (詳細は後述)。 -D : ヒストグラムの存在するディレクトリを指示します。 -O : オンライン操作 (共有メモリ上のヒストグラムを参照) を指示します。key は共有メモリの指定キーで、省略 された場合は HandyPak のデフォルトを使います。 この他に、通常の X アプリケーションと同様のオプションを、基本的には 受け付けます (上記オプションが大文字になっているのは、X のオプション との衝突を避けるためです)。が、有用なのは、以下のような極めて常識的な ものだけです。 -display: Display to use -geometry: Initial geometry for window -name: Name to use for application -sync: Use synchronous mode for display server --: Pass all remaining arguments through to script Generic options for all commands: -help: Print summary of command-line options and abort フォントやフォアグラウンド/バックグラウンドカラー等は、設定が非常に 多岐に渡るので、コマンドラインでの指定は意味が有りません。これらの X のリソースは、次節のリソース設定ファイルで行なわれます。 マクロとは、メニューによる対話型実行に対して、定型処理や繰り返し処理 等をバッチで実行する事を指します。詳細は以下の節を参照してください。 -M で指定されるマクロの他に、~/.pollyrc というファイルが存在する時は、 これもマクロとして起動時に実行されます。 起動時の各ファイルの処理は、 1. ヒストグラムファイルの読み込み 2. ~/.pollyrc スクリプトの実行 (恒久的初期化) 3. -M オプションで指定されたスクリプトの実行 (一時的初期化) の順番となっています。 比較的有用と思われる初期化設定と、そのデフォルト値を以下に列挙します。 set histMask [pwd]/*.hst{,.gz} ; # ヒストグラムの所在と拡張子(※) set macroMask [pwd]/*.mcr ; # マクロファイルの所在と拡張子 set cursorMask [pwd]/*.csr ; # カーソルファイルの所在と拡張子 set topdrawMask [pwd]/*.tdr ; # topdrawerファイルの所在と拡張子 set optResultMask [pwd]/*.res ; # 演算結果ファイルの所在と拡張子 set HpkGraphicsPSorient LANDSCAPE ; # PostScript 出力の方向(LANDSCAPE/PORTRAIT) set PostScriptSpool 1 ; # PostScript 出力をプリンターに自動スプール set PostScriptRename 0 ; # PostScript 出力をリネームして保存 ※ ヒストグラムファイルの拡張子に .gz が付加されている場合は、自動的 に gzip [-d] を実行した後、読み込み|書き込みされます。ただし、gzip がインストールされていないか、PATH が通っていない場合は、この機能は 無効となり、圧縮されていないファイルのみを扱うようになります。 これらは tcl/tk のコマンドですので、詳しい文法に関しては該当する参考書 を御覧ください。と言っても代入文 (set) は上記の通りなのですが、ちょっと 凝った事、例えば、HistMask という環境変数を参照させたいならば、連想配列 env を使って catch {set histMask $env(HistMask)/*.hst} 等とやります。HistMask が定義されていない場合に、エラーで polly 全体が 止まってしまうのを避けるため、catch を使っている点に注意してください。 デフォルトでは、focus の切替えはマウスクリック、Alt-キー、TAB によって 行われます。クリック無しで focus がマウスに追従するようにするには、 tk_focusFollowsMouse を初期化ファイルに書き加えてください。 3. リソース設定ファイル  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ 上記以外の特殊な(?)リソース設定は、通常の X のアプリケーションと 同様に、~/.Xdefaults に書く事ができます。アプリケーション名は Polly です。デフォルトの (優先度が Tk 標準のものより高く、~/.Xdefaults より 低い) 設定は、polly と同じディレクトリにある Polly.ad というファイルで 行なわれますので、書式の参考にしてください。また、ノートパソコン等の VGA や 800×600 の低解像度で使う場合のサンプルを Xdefaults.NotePC に 用意しました。優先度が同じリソース指定の場合、Tk の解釈は通常の X アプリケーションと異なる事に注意して下さい。Tk では「後から」定義され たものが優先されます (通常は具体的な指定が抽象的な指定に優先されます)。 さて、リソースと一口に言っても Widget にどんな名前が付けられているか 知らなくては設定のしようが有りません。Xtoolkit を用いた X アプリケー ションでは editres を用いてリソースを調べる事ができますが、Tk は Xlib のみで書かれていて editres に反応しないので、Help メニューに簡単なリソ ースブラウザを用意しました。 Tk で管理している (メニュー表示) 部分のリソースは上記の通りですが、 ヒストグラム描画部分は、UGS を使ったプログラムを子プロセスとして 走らせているので、別管理となっています。アプリケーション名は Ugs で、 リソース名と省略値は Ugs*width: 768 # ウィンドウの大きさ Ugs*height: 585 Ugs*white: White # UGS の色指定に対応して Ugs*red: Red # 実際に使われるの色の名前 Ugs*green: Green # または‘#RRGGBB’の文字列 Ugs*blue: Blue Ugs*yellow: Yellow Ugs*magenta: Magenta Ugs*cyan: Cyan Ugs*background: Black Ugs*fontPattern: -adobe-helvetica-medium-r-normal--*-*-75-75-* # 前述のビットマップフォントを参照 Ugs*title: UGS on X Window System # タイトルバー Ugs*iconName: UGS Ugs*geometry: (指定無し) # +0+0 等とすれば画面の左上端にウィンドウを開く 等となっています。変更したい場合は ~/.Xdefaults にこれらの行を書き 加えてください (font>PN