ANAPAW
オンライン解析
実験中、オンラインで解析する場合、以下のような手順を踏む。大田さんのページexp/anapawを参考にした。
$ analogin username $ anapaw ANAPAW > book ana/beam.ana ANAPAW > i ANAPAW > ana/loop ANAPAW/EVTLOOP > start ANAPAW/EVTLOOP > ht 101 ANAPAW/EVTLOOP > q ANAPAW > sh $ emacs ana/beam.ana & 編集 $ exit ANAPAW > clear f ANAPAW > book ana/beam.ana ANAPAW > ana/loop ANAPAW/EVTLOOP > start ANAPAW/EVTLOOP > ht 101 ANAPAW/EVTLOOP > q ANAPAW > q $
- $ analogin username
- ANAPAW を起動する前に username で analogin する。これで、username 用の ワーキングディレクトリに移動し、各種環境変数の設定が行われる。username は実験ごとに共用のものが大程あるので、そのユーザーで login する。MUST2@RIPS の実験では、test が共用のユーザーなのかも?
- $ anapaw
- ANAPAW 起動。この ANAPAW はワーキングディレクトリ内の src ディレクトリにある anapaw を起動しているはず。確認するには、analogin 後、端末で $ which anapaw と打ち alias の設定を見る。さらに、alias で設定されている環境変数を確認する。
[must2@ana test]$ which anapaw anapaw: aliased to cd $ANAPAW_WORK;$USER_SOURCE/anapaw [must2@ana test]$ echo $ANAPAW_WORK /home/must2/exp/rrc66/users/test [must2@ana test]$ echo $USER_SOURCE /home/must2/exp/rrc66/users/test/src
これより、anapaw というコマンドを打ったとき、 $ANAPAW_WORK というディレクトリに移動し、$USER_SOURCE ディレクトリにある anapaw を実行していることがわかる。echo コマンドの結果から、$ANAPAW_WORK ディレクトリは /home/must2/exp/rrc66/users/test であり、$USER_SOURCE /home/must2/exp/rrc66/users/test/src であることがわかる。よって test ユーザーの src ディレクトリ中の anapaw が起動されていることがわかる。
- ANAPAW 起動。この ANAPAW はワーキングディレクトリ内の src ディレクトリにある anapaw を起動しているはず。確認するには、analogin 後、端末で $ which anapaw と打ち alias の設定を見る。さらに、alias で設定されている環境変数を確認する。
ANAPAW > book ana/beam.ana
- ANAPAW 起動後、anaファイルを読み込み、ヒストグラムとしてどんな値を表示したいかを定義する(BOOK する)。ana ファイル はワーキングディレクトリの ana ディレクトリにある。大程、ほかの人がすでに作っているので、それをコピーし自分用に書き直す。
ANAPAW > i
- i コマンドは BOOK したヒストグラムの一覧を表示する。ANAPAW/EVTLOOP 時にも使用可。
ANAPAW > ana/loop
- ana/loop コマンドで解析したいデータを選択する。この例のように、引数がない場合は、オンラインのデータを解析することを意味する。保存されたデータを解析する場合(オフライン解析)は、以下のように、ridf 形式の raw data を ana/loop コマンドの引数とする。
ANAPAW > ana/loop ridf/Li9exp0004.ridf
- ana/loop コマンドで解析したいデータを選択する。この例のように、引数がない場合は、オンラインのデータを解析することを意味する。保存されたデータを解析する場合(オフライン解析)は、以下のように、ridf 形式の raw data を ana/loop コマンドの引数とする。
ANAPAW/EVTLOOP > start
- start コマンドで解析開始。これにより、BOOK したヒストグラムに値が詰められていく。Enter を押せば一時中断。再び start コマンドを打つと解析を再開する。q または exit で ANAPAW/EVTLOOP を抜ける。通常は start コマンドを打ち、少し待って Enter を押し、ヒストグラムを確認し、統計が足りなければ、また start コマンドを打つ。
ANAPAW/EVTLOOP > ht 101
- ヒストグラムの確認。この例では、ヒストグラム ID が 101 のものを表示している。統計が足りなければ、再び start。ID とヒストグラムのタイトルの関係は、i コマンドで確認。
ANAPAW/EVTLOOP > q
- ANAPAW/EVTLOOP を抜ける。ana ファイルを変更した場合は、ANAPAW/EVTLOOP を抜けて、再び BOOK する必要がある。また、 PAW のマクロである kumac は、ANAPAW/EVTLOOP を抜けないと使えないかも。
ANAPAW > sh
- sh コマンドで、一時的に sh を使えるようになる。exit と打てば、ANAPAW に戻る。
$ emacs ana/beam.ana &
この例では ana ファイルを編集している。& 付きで実行しているので、ANAPAW に戻っても、Emacs のウィンドウは消えない。
- $ exit
- exit コマンドで、 ANAPAW に戻る。
ANAPAW > clear f
- 以前に book した ana ファイルをクリアする。
ANAPAW > book ana/beam.ana
- 編集した ana ファイルを book する。
ANAPAW/EVTLOOP > start
ANAPAW/EVTLOOP > ht 101
ANAPAW/EVTLOOP > q
- 上記参照。
ANAPAW > q
- ANAPAW を抜ける。
ana ファイル
- ana ファイルでは、enc***.f 内で計算される値(valという名の配列に格納される)からヒストグラムとして表示したい値を選択する。例えばディテクターのシグナルのチェックをしたい場合は、raw データを選択し1次元ヒストグラムとして定義する。PI図を見たい場合は、エネルギー損失とTOF(Time of Flight)の二つの値を選択し、2次元ヒストグラムとして定義する。また、ゲートと呼ばれる条件を ana ファイル中で定義することで、上述の ANAPAW/EVTLOOP において、条件を満たしたイベントの値のみヒストグラムに詰めるということができる。実際の ana ファイルは次の通り。
analys 1 2 3 11 15 xygate @,cut/15b.cut gate 1, 11,1,1,6, 101., 105. 2, 2,1,1,6, 560., 730. and 3, 1,2 hst1 0, 2,1,1,6, 500,0.,2500., 'F2Pl TLraw vs QLraw' 3, 2,1,1,6, 500,0.,2500., 'F2Pl TLraw vs QLraw 11Li' -3, 2,1,1,6, 500,0.,2500., 'F2Pl TLraw vs QLraw other' hst2 0, 11,1,1,6, 2,1,1,6, 500,80.,120., 500,0.,2500.,'TOF(F2-F3) vs F2PlQ' 3, 11,1,1,6, 2,1,1,6, 500,80.,120., 500,0.,2500.,'TOF(F2-F3) vs F2PlQ 11Li' -3, 11,1,1,6, 2,1,1,6, 500,80.,120., 550,0.,2500.,'TOF(F2-F3) vs F2PlQ other' 1001,11,1,1,6, 2,1,1,6, 500,80.,120., 550,0.,2500.,'TOF(F2-F3) vs F2PlQ 15B' 0, 15,1,1,2, 15,1,1,3,200,-50.,50., 200,-50.,50.,'Target X vs Y' 3, 15,1,1,2, 15,1,1,3,200,-50.,50., 200,-50.,50.,'Target X vs Y 11Li' -3, 15,1,1,2, 15,1,1,3,200,-50.,50., 200,-50.,50.,'Target X vs Y other' 1001,15,1,1,2, 15,1,1,3,200,-50.,50., 200,-50.,50.,'Target X vs Y 15B' stop -3 gate 11, 1,103,103,2, -50.,50. 12, 1,103,103,3, -50.,50. and 13, 11,12 leff 3 11 12 13 exit
OR gate
- 以下の 4 と 5 の gate は同じ物。
gate 1, 1,1,1,2, 10.,20., 'gate1' 2, 1,2,2,2, 10.,20., 'gate2' 3, 1,3,3,2, 10.,20., 'gate3' 4, 1,1,3,2, 10.,20., 'gate1-3' or 5,1,2,3 hst1 4, 1,1,3,2, 100,0.,4000., 'test gate1-3' 5, 1,1,3,2, 100,0.,4000., 'test or gate'
stop
- stop は続けて書くことができる。
gate 1, 1,1,1,2, 10.,20., 'gate1' 2, 1,2,2,2, 10.,20., 'gate2' 3, 1,3,3,2, 10.,20., 'gate3' stop 1 2 3
- ここら辺の詳しい解説は、 Julien さんのマニュアルに書いてある。
仁科センター計算機環境 - RIBFDAQ - Tools - Analysis - ANAPAW - riken_guide.pdf
analogin 時の諸設定
- ANAPAW を実行する場合、実行前になんらかのユーザー名でANAPAW にログイン(?)する必要がある。すなわち、端末上で analogin ユーザー名と打つ。このとき、いくつかのシェルスクリプトが実行され、環境変数の設定などが行われる。実際には analogin コマンドによって、setupanapaw というスクリプトが実行され、そこから setup.exp, setlocal, setana というスクリプトが実行される。それぞれのスクリプトの内容は以下の通り。
ファイル名 |
ディレクトリ |
実行元 |
やっていること |
.cshrc |
$HOME |
c shell |
下記のように analogin のエイリアスを通す |
setupanapaw |
少し昔 |
analogin コマンド |
環境変数の設定 |
setup.exp |
$ANAPAW_SETUP |
setupanapaw |
初回ログインの場合、ワーキングディレクトリと下記のディレクトリを作成 |
setlocal |
$ANAPAW_WORK |
setupanapaw |
環境変数 USER_SOURCE の設定 |
setana |
$USER_SOURCE |
setupanapaw |
環境変数の設定 |
- 各ファイルで設定される環境変数は大体以下の通り。
ファイル名 |
環境変数 |
通常用いられる値 |
備考 |
.cshrc |
いろいろ |
|
ANAPAW に関する環境変数は、以下のシェルスクリプト内で設定を行う |
setupanapaw |
CERNLIB |
/cern/pro/lib |
CERN Program Library のディレクトリを指定 |
ANAPAW_HOME |
$HOME/src/anapaw |
ANAPAW 本体のディレクトリ |
|
ANAPAW_SOURCE |
$ANAPAW_HOME/src |
ANAPAW 本体のソースのディレクトリ |
|
ANAPAW_LIB |
$ANAPAW_HOME/lib |
makelib によって ANAPAW のライブラリがこのディレクトリに作られる |
|
ANAPAW_MACROS |
$ANAPAW_HOME/Macros |
ANAPAW のマクロ置場 |
|
ANAPAW_DOCS |
$ANAPAW_HOME/Documents |
ANAPAW のドキュメント置場?あまり使ったことない |
|
ANAPAW_SETUP |
$ANAPAW_HOME/Setup |
analogin 時に実行されるスクリプトがあるディレクトリ |
|
ANALOGON |
$ANAPAW_SETUP/analogon.kumac |
setup.exp にて上書きされる |
|
VIEWANA_SOURCE |
$ANAPAW_SOURCE/vana |
? |
|
VIEWANA_PARAM |
./viewana.prm |
setup.exp にて上書きされる |
|
VIEWANA_PID |
./viewana.pid |
setup.exp にて上書きされる |
|
NTUPLE_DIR |
./ntupl |
setup.exp にて上書きされる |
|
USER_LASTKUMAC |
./anapaw_last.kumac |
setup.exp にて上書きされる |
|
USER_LASTKUMAC_OLD |
./anapaw_last.kumacold |
setup.exp にて上書きされる |
|
ANAPAW_WORK |
$HOME/exp/sunday |
setup.exp にて上書きされる |
|
EXP_DIR |
$HOME/exp/sunday |
実験毎に用意されるディレクトリ |
|
setup.exp |
ANAPAW_USER |
ユーザー名 |
analogin したときのユーザー名 |
ANAPAW_WORK |
$EXP_DIR/users/$ANAPAW_USER |
ANAPAW のワーキングディレクトリ |
|
ANALOGON |
$ANAPAW_WORK/.analogon.kumac |
ANAPAW 起動時に実行される初期化マクロ |
|
VIEWANA_PARAM |
$ANAPAW_WORK/.viewana.prm |
? |
|
VIEWANA_PID |
$ANAPAW_WORK/.viewana.pid |
? |
|
NTUPLE_DIR |
$ANAPAW_WORK/ntupl |
Ntuple が保存されるディレクトリ |
|
EVS_DIR |
$ANAPAW_WORK/evs |
evs のディレクトリ? |
|
USER_LASTKUMAC |
$ANAPAW_WORK/anapaw_last.kumac |
anapaw_last.kumac て何? |
|
USER_LASTKUMAC_OLD |
$ANAPAW_WORK/anapaw_last.kumacold |
anapaw_last.kumacold て何? |
|
setlocal |
USER_SOURCE |
$ANAPAW_WORK/src |
ANAPAW のユーザーソースのディレクトリ |
setana |
???_PRM |
$USER_SOURCE/prm/???.prm |
ANAPAW のパラメータファイルのパス |
???_CONFIG |
$USER_SOURCE/prm/???.conf |
ANAPAW の設定ファイルのパス |
|
ANAPAW_STATCOM |
$HOME/epics/xmldipole.sh |
磁場の設定を読み込むスクリプト? |
|
IHIT_MIN0 |
2 |
IHIT_MIN0 の値。最近は使っていない? |
- 各ファイルで設定されるエイリアスは以下の通り。
ファイル名 |
エイリアス |
通常用いられる値 |
備考 |
.cshrc |
analogin |
alias analogin 'source $HOME/src/anapaw/Setup/setupanapaw' |
実験によっては、55login などになったりもする |
setupanapaw |
anapaw |
'cd $ANAPAW_WORK;$USER_SOURCE/anapaw' |
anapaw コマンド |
setana |
'source $USER_SOURCE/setana' |
analogin の時に実行されるスクリプトのエイリアス |
|
acd |
'cd $ANAPAW_WORK' |
ANAPAW のワーキングディレクトリに移動する |
|
setup.exp |
なし |
|
|
setlocal |
makelib |
'make -C $ANAPAW_SOURCE clean;make -C $ANAPAW_SOURCE;make -C $ANAPAW_SOURCE install' |
ANAPAW 本体をコンパイルし、ライブラリを作るコマンド |
makeana |
'make -C $USER_SOURCE clean;make -C $USER_SOURCE' |
ANAPAW のユーザーソースをコンパイルし、anapaw の実行ファイルを作るコマンド |
|
setana |
なし |
|
|
起動時の諸設定
- ANAPAWを実行すると、まず PAW の起動メッセージが表示され、ホームディレクトリに .pawlogon.kumac というファイル ($HOME/.pawlogon.kumac) があれば、それが実行される。通常はこのファイルは使用せず、後述の .analogon.kumac が使用される。
オプション -n で抑止可能 (参考: 高機能グラフ化ツール Paw by 松田さん)
- ANAPAW 起動のメッセージ表示後、環境変数 ANALOGON で指定されるファイルを実行する。通常は analogin 後に移動するワークディレクトリにある .analogon.kumac というファイル ($ANAPAW_WORK/.analogon.kumac) が実行される 。
通常、.analogon.kumac ファイル中では default コマンドによって、$ANAPAW_MACROS というディレクトリ (普通は、$HOME/usr/src/anapaw/Macros) がマクロの検索対象ディレクトリに設定される。すなわち、このディレクトリ中のマクロ (例えば、aaa.kumac) は、exec ファイル名とするだけで実行される (ANAPAW> exec aaa) 。
さらに .analogon.kumac ファイル中では exec コマンドで $ANAPAW_MACROS というディレクトリ中の ini_alias.kumac が実行される。このファイル中にて、様々なエイリアスが設定されている。
.pawlogon.kumac <- 通常はこのファイルは使用しない .analogon.kumac <- ANAPAW起動時に実行される default $ANAPAW_MACROS <- マクロの検索対象ディレクトリを設定 exec init_alias <- init_alias.kumac を実行し、エイリアスを設定
エイリアスの確認は、alias/list というコマンドで確認可能。
ANAPAW> al/lis Argument aliases: alist => alias/list bl => exec hblow bx => exec bandx by => exec bandy ...
デフォルトの .analogon.kumac ファイルで設定されている各々の値の意味は、以下の通り。set コマンド、および opt コマンドについては /GRAPHICS/SET, /GRAPHICS/OPTION を参照。
defaults $ANAPAW_MACROS | マクロ検索ディレクトリを環境変数 ANAPAW_MACROS で指定されるディレクトリにする host_psview gv | PostScrips viewer を gv に設定。PSVIEW コマンドで gv 実行 option fit | fit 結果を表示。nfit で非表示。 option grid | グリッドを表示。ngri で非表示。 set fit 111 | fit 結果表示の際すべての情報(カイ二乗、エラー、パラメータ)を表示 set vsiz 0.25 | 軸の数字のサイズを 0.25 cm set tsiz 0.34 | histogram のタイトルのサイズを 0.34 cm set tfon -20 | histogram のタイトルのフォントを Times-Bold set gfon -60 | グローバルタイトル(画面一番上に表示)のフォントを Helvetica-Bold set lfon -600 | 軸のラベルのフォント(atitle コマンドで有効)を -600 ? set vfon -20 | 軸の数字のフォントを Times-Bold set cfon -20 | コメント(ヒストグラム情報やフィット結果)のフォントを Times-Bold set xlab 1.2 | y 軸と x 軸のラベルとの距離を 1.2 cm set ylab 0.6 | x 軸と y 軸のラベルとの距離を 0.6 cm set yhti 0.95 | y 軸と ヒストグラムのタイトルとの距離を 0.95 cm graphics/viewing/size 18. 18. | 画面のサイズを横 18 cm、縦 18 cm set ncol 28 | 色の数 (color index) を 28 個 pal 1 | color index (8 ~ NCOL) を 青から赤のグラデーションにリセット set htyp -3 | ヒストグラムの内側を網模様にする set hcol 1012 | ヒストグラムの内側を表示 (1)、枠の色を 0 (白)、内側の色を 12 exec ini_alias | $ANAPAW_MACROS の ini_alias.kumac を実行
pal 1 の後に、color 8 1 1 1 というコマンドを追加することで、color index 8 の色を白(RGB:1 1 1)にする。これにより、二次元の scatter plot をカラーで表示した場合、背景の部分が白になる。
ANAPAW 独自のコマンド
ANAPAW では、PAW にはない独自の便利なコマンドが使える。それらのコマンドはマクロのエイリアスによって実現されているか、ANAPAW 本体のソースコードによって実現されている。マクロのエイリアスは、alias/list というコマンドで確認できる。マクロの動作を調べるには、マクロファイルを読めば良い。ANAPAW 本体のコマンドについて調べるには、 プロンプトで help と打ち、14 番の /ANALYS の項目を見ると良い。
ANAPAW> help From /... 1: KUIP Command Processor commands. 2: MACRO Macro Processor commands. 3: VECTOR Vector Processor commands. 4: HISTOGRAM Manipulation of histograms. Interface to the HBOOK package. 5: FUNCTION Operations with Functions. Creation and plotting. 6: NTUPLE Ntuple creation and related operations. 7: GRAPHICS Interface to the graphics packages HPLOT and HIGZ. 8: PICTURE Creation and manipulation of HIGZ pictures. 9: ZEBRA Interfaces to the ZEBRA RZ, FZ and DZ packages. 10: FORTRAN Interface to MINUIT, COMIS, SIGMA and FORTRAN Input/Output. 11: NETWORK To access files on remote computers. 12: MLP Multi-Layer Perceptron (MLP). 13: OBSOLETE Obsolete commands 14: ANALYS On(Off)-Line Analysis Software on PAW. Enter a number ('0'=Top, '\'=one level back, 'Q'=command mode): 14 Menu /ANALYS 1: /ANALYS On(Off)-Line Analysis Software on PAW. From /ANALYS/... 2: * LOOP This command provides you to see the histograms (1D and 2D-Histograms). For the 2D-Histogram, it is shown by using SCATTER-PLOT. 3: * STATUS Print Current Status. 4: * RDMP Store the Raw Data to a file with a given Gate. 5: * ANTUPLE Store the Raw Data to Ntuple files with a given Gate. 6: * UFLAG Change User Flag defined in ENC_***. 7: * SETNUMBER Set Run Number of a current data file. 8: DEFINITION Define and Book Histograms using ANALYS-CODE. 9: SWITCH Manipulation of RIDF analysis. 10: HISTOGRAM Manipulation of Histograms.
コマンドのことをさらに詳しく調べるには、ANAPAW 本体のソースを読むと良い。ANAPAW 本体のソースは、環境変数 ANAPAW_HOME で指定されるディレクトリ (通常は、$HOME/usr/src/anapaw/src) にある。各コマンドにはそれに対応したサブルーチンがあり、コマンドを実行するということはサブルーチンを実行することに相当する (例外もあるかも?) 。おおまかなコマンド実行の流れは、anapaw.f ファイルに記述されている CALL ANAMNU によって ANAMNU サブルーチン (anamnu.f で定義) が実行され、このサブルーチンがコマンドを受け取り (?) 、コマンドを ANAACT サブルーチン (anaact.f で定義) に渡す。ANAACT サブルーチンではコマンドに応じたサブルーチンを実行する。コマンドに応じたサブルーチンは大程、anasubplot.f, anasubutil.f で定義されている。よって、anasubplot.f, anasubutil.f を読むと、コマンドについて詳しく知ることができる。ANAPAW (anapaw.f) | +-- ANAMNU (anamnu.f) | +-- ANAACT (anaact.f) | +-- PLOTHIST (anasubplot.f) <- ht コマンドによって実行されるサブルーチン +-- BLOW (anasubplot.f) <- blow コマンドによって実行されるサブルーチン +-- ... +-- XTIFG (anasubutil.f) +-- FIGA (anasubutil.f) +-- ...
ソースを読む
- ANAPAW のプロンプトでコマンドを打ったときにどのサブルーチンが実行されているか、すなわち、ANAPAWのコマンドとサブルーチンの対応を調べるには、ソースを読めば良い。ソースを読むにあたり、サブルーチンがどのファイルのどこに書かれているかを 調べるには grep コマンドを用いるのが便利である。grep コマンドは、ある文字列がカレントディレクトリ中のどのファイルにある書かれているかを調べることができる。例えば、FIGA という文字列がどのファイルに書かれているかを調べるには、以下のようにする。ここで、オプション i は大文字と小文字の区別をしないことを表し、オプション n はファイルの行数を出力することを表す。
[koba@he src]$ grep -in FIGA ./* ... ./anaact.f:281: ElseIf (CMD(3) .EQ. 'FIGA') Then ./anaact.f:282: Call FIGA ./anamnu.f:586:C /ANALYS/HISTOGRAM/FIGA - COMMAND - ./anamnu.f:588: CALL KUCMD(' ','FIGA','C') ./anamnu.f:591: CALL KUGuID('FIGA',GuID,2,'S') ./anamnu.f:592: CALL KUACT('FIGA',ANAACT) ./anasubutil.f:410: Subroutine FIGA ...
- コマンドを入力したときに実行されるサブルーチンは、 ANAPAW 本体ソース ($ANAPAW_SOURCE ディレクトリ内) の anaact.f に書いてある。例えば、 HT コマンドは PLOTHIST を呼び出している。
ElseIf (CMD(3) .EQ. 'HT') Then Call KUGETI(HID) Call KUGETC(CKEY,L) If(L .EQ. 0)L=1 Call PLOTHIST(HID,CKEY,L)
ANAPAW on Scientific Linux 6.4 (x86_64)
S.Kawase's Web Page - Scientific Linux 6へのANAPAWのインストールを参考に ANAPAW を 64 bit の Scientific Linux 6.4 上で動かした。
- Extra Packages for Enterprise Linux (EPEL) リポジトリからダウンロードした cernlib-g77 パッケージにある共有ライブラリ (*.so) を使うと、ANAPAW の コンパイルは通るが、ANAPAW 実行時に以下のようなメッセージが出て起動できない。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! LOCB/LOCF: address 0x3d7ad037c0 exceeds the 32 bit address space or is not in the data segments This may result in program crash or incorrect results Therefore we will stop here !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- そこで、Extra Packages for Enterprise Linux (EPEL) リポジトリの cernlib-g77-static を使う。これは g77 でコンパイルした cernlib の静的ライブラリ (*.a) のようだ。下記のコマンドで、EPEL リポジトリを有効にし、cernlib-g77-static をインストールする。
$ su パスワード: root ユーザのパスワードを打つ # yum install epel-release # yum install cernlib-g77-static
- さらに、ANAPAW のユーザーソースの makefile を以下のように書き換える。
LDLIBS = -L/usr/X11R6/lib64 -lX11 -ldl -lcrypt -L$(ANAPAW_LIB) -lanalib \ -lXt -lXaw -lpthread -L$(CERNLIB) -lpawlib -lgraflib -lgrafX11 \ -lpacklib -lmathlib -lkernlib -Icern -lnsl -lreadline -ltermcap \ -lstdc++ -llapack -lblas -lexpat ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ LDLIBS = -L/usr/X11R6/lib64 -lX11 -ldl -lcrypt -L$(ANAPAW_LIB) -lanalib \ -lXt -lXaw -lpthread -L$(CERNLIB) -Wl,-Bstatic -lpawlib -lmathlib -lgraflib -lgrafX11 \ -lpacklib -lkernlib -Wl,-Bdynamic -Icern -lnsl -lreadline -ltermcap \ -lstdc++ -llapack -lblas -lexpat
すなわち、 pawlib, graflib, grafX11, packlib, mathlib, kernlib の静的ライブラリを読み込むために、これらの前後に -Wl,-Bstatic -Wl,-Bdynamic を追記する。 さらに、S.Kawase's Web Page - Scientific Linux 6へのANAPAWのインストール にも書いてある通り、-lpacklib と -lmathlib の位置を入れ換える必要がある。位置入れ換えないと makeana 実行時に以下のようなエラーが出る。どうやら、ライブラリを指定する順番が決まっているようだ。
g77 -o anapaw usersrc.o usersub.o add_ntuple.o util.o enccoin.o encpla.o loadplaconf.o loadplaprm.o encic.o loadicprm.o encppac.o loadppacconf.o loadppacprm.o calcppac.o encgammappac.o loadgppacconf.o loadgppacprm.o calcgppac.o encimage.o loadimageprm.o encmatrix.o loadmatrixconf.o loadmatrixprm.o encpid.o loadpidprm.o enctotale.o loadtotaleprm.o encgeneric.o encdali.o loaddaliprm.o encpileup.o enclabr.o encinit.o loadinitprm.o encmomd.o loadmomdprm.o /home/koba/src/anapaw/lib/anapaw.o /home/koba/src/anapaw/lib/libanalib.a -L/usr/X11R6/lib64 -lX11 -ldl -lcrypt -L/home/koba/src/anapaw/lib -lanalib -lXt -lXaw -lpthread -L/usr/lib64/cernlib/2006-g77/lib -Wl,-Bstatic -lpawlib -lgraflib -lgrafX11 -lpacklib -lmathlib -lkernlib -Wl,-Bdynamic -Icern -lnsl -lreadline -ltermcap -lstdc++ -llapack -lblas -lexpat -L/home/koba/cern/root_v5.27.04/lib/root -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lz -lGui -pthread -lm -ldl -rdynamic /usr/lib64/cernlib/2006-g77/lib/libmathlib.a(besi064.o): In function `__g77_masterfun_dbesi0': (.text+0xf77): undefined reference to `mtlprt_' ... /usr/lib64/cernlib/2006-g77/lib/libmathlib.a(relikc64.o): In function `__g77_masterfun_delikc': (.text+0x2e1): undefined reference to `mtlprt_' /usr/lib64/cernlib/2006-g77/lib/libmathlib.a(rexpin64.o):(.text+0x3c3): more undefined references to `mtlprt_' follow collect2: ld はステータス 1 で終了しました make: *** [anapaw] エラー 1 make: ディレクトリ `/home/koba/exp/sunday/users/koba/src' から出ます
- 以上のように、cernlib の静的ライブラリを使い、makefile を書き換えれば、Scientific Linux 6.4 (64 bit) で ANAPAW が動くようだ。
makelib のエラー (dayone の時のANAPAW)
古い ANAPAW 本体ソースをコンパイルするとき、gcc 4.1 ではコンパイルが通るが、gcc 4.4 だと通らないことがある。主にヘッダファイルがインクルードされていないことが原因。gcc 4.3 から明示的にインクルードしないといけないヘッダファイルがあるらしい。参考 : 蒼海の一粟 - netCDF
strncpy の未宣言のエラー
... g++ -O0 -ggdb -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL -c -o TArtDecoderFixed16.o TArtDecoderFixed16.cc TArtConfigFile.cc: In constructor ‘TArtConfigFile::TArtConfigFile(const char*, const char*, const char*, char)’: TArtConfigFile.cc:23: error: ‘strncpy’ was not declared in this scope TArtConfigFile.cc: In member function ‘const char* TArtConfigFile::GetNextToken()’: TArtConfigFile.cc:46: error: ‘strpbrk’ was not declared in this scope TArtConfigFile.cc:49: error: ‘strcmp’ was not declared in this scope TArtConfigFile.cc:52: error: ‘strpbrk’ was not declared in this scope make: *** [TArtConfigFile.o] エラー 1 make: *** 未完了のジョブを待っています.... make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' から出ます make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' に入ります mv anapaw.o /home/koba/src/anapaw_dayone/lib/anapaw.o mv: cannot stat `anapaw.o': そのようなファイルやディレクトリはありません make: *** [install] エラー 1 make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' から出ます
対処
TArtConfigFile.cc に string.h をインクルードすれば良い。具体的には、TArtConfigFile.cc の #include <limits.h> の後ろあたりに #include <string.h> と書けば良い。
memcpy の未宣言のエラー
... g77 -O0 -ggdb -fbounds-check -fno-f2c -funroll-loops -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL -c anapaw.f TArtParserRIDF.cc: In member function ‘virtual void TArtParserRIDF::GetNextEvent(TArtMapConfig*)’: TArtParserRIDF.cc:79: error: ‘memcpy’ was not declared in this scope TArtParserRIDF.cc: In member function ‘virtual int TArtParserRIDF::CopyPrevEvent(char*)’: TArtParserRIDF.cc:121: error: ‘memcpy’ was not declared in this scope make: *** [TArtParserRIDF.o] エラー 1 make: *** 未完了のジョブを待っています.... make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' から出ます make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' に入ります mv anapaw.o /home/koba/src/anapaw_dayone/lib/anapaw.o mv libanalib.a /home/koba/src/anapaw_dayone/lib/libanalib.a mv: cannot stat `libanalib.a': そのようなファイルやディレクトリはありません make: *** [install] エラー 1 make: ディレクトリ `/home/koba/src/anapaw_dayone_20110128/src' から出ます
対処
TArtParserRIDF.cc に string.h をインクルードすれば良い。具体的には、TArtParserRIDF.cc の #include "TArtDecoderFactory.h" の後ろあたりに #include <string.h> と書けば良い。(他のところに書くのが正しかったりするんだろうか?)
makelib のエラー (sunday の時のANAPAW)
sunday の時に使った ANAPAW は ROOT の Tree が導入されているようで、環境によってはエラーが生じる。近藤さんのメモを参考に対処した。
- ヘッダファイル見つからない。実際には存在するヘッダファイルなので、書き方の問題。
TPidDataDict.cc:16 から include されたファイル中: TPidDataDict.h:18:19: error: G__ci.h: そのようなファイルやディレクトリはありません
対処 : #include "G__ci.h" を #include <G__ci.h> に変更
定数が大きすぎる。32 bit PC でコンパイルすると出るエラーか? 参考 : ShiromaStyle
TArtDecoderTimeStamp.cc: In member function `virtual int TArtDecoderTimeStamp::Decode(unsigned char*&, const unsigned int&, TArtMap<TArtMap<int> >&, TArtMapConfig*)': TArtDecoderTimeStamp.cc:38: error: integer constant is too large for "long" type
対処 : ch = (evtdata[i] & 0xff00000000000000) >> 56; を ch = (evtdata[i] & 0xff00000000000000LL) >> 56; にする。
- ヘッダファイル見つからない。これは Include しているディレクトリ中になかった。
TDaliDataDict.h:19:29: FastAllocString.h: そのようなファイルやディレクトリはありません
- 対処 : root のバージョンを 5.18.00 から 5.28.00 (最新版)に変更。しかし、これにしても違うエラーが出るので、結局、最新版じゃなく 5.27.04 にする。
- 引数の数が違うエラー?
TDaliDataDict.cc:194: error: prototype for `void TDaliData::ShowMembers(TMemberInspector&, char*)' does not match any in class `TDaliData' TDaliData.h:39: error: candidate is: virtual void TDaliData::ShowMembers(TMemberInspector&) TDaliDataDict.cc: In member function `void TDaliData::ShowMembers(TMemberInspector&, char*)': /home/koba/cern/root_v5.28.00/include/root/RtypesImp.h:26: error: too many arguments to function `void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)' TDaliDataDict.cc:200: error: ファイルのこの位置 /home/koba/cern/root_v5.28.00/include/root/RtypesImp.h:26: error: too many arguments to function `void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)' TDaliDataDict.cc:203: error: ファイルのこの位置 /home/koba/cern/root_v5.28.00/include/root/RtypesImp.h:26: error: too many arguments to function `void ROOT::GenericShowMembers(const char*, void*, TMemberInspector&, bool)' TDaliDataDict.cc:206: error: ファイルのこの位置 TDaliDataDict.cc:208: error: no matching function for call to `TDaliData::ShowMembers(TMemberInspector&, char*&)' /home/koba/cern/root_v5.28.00/include/root/TObject.h:211: note: candidates are: virtual void TObject::ShowMembers(TMemberInspector&) g++34 -O0 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DBABIRL -D__OUTPUT_ROOTFILE__ -pthread -m32 -I/home/koba/cern/root_v5.28.00/include/root -c -o TMust2Data.o TMust2Data.cc make: *** [TDaliDataDict.o] エラー 1
- 対処 : root のバージョンを 5.28.00 から 5.27.04 に変更。これは sunday 実験のときに使っていたroot のバージョン。これで落ち着いた。
makeana のエラー (sunday の時のANAPAW)
- /usr/bin/ld: cannot find -lpawlib
- 対処 : いつも見慣れたエラー。$HOME/src/anapaw/Setup/setupanapaw.sunday 内で、CERNLIB の場所を正しく指定すれば良い。
- 自分の環境では、 setenv CERNLIB /usr/lib/cernlib/2006-g77/lib とした。
- /usr/bin/ld: cannot find -llapack3
- 対処 : いつも見慣れたエラー。 liblapack3.so から liblapack.so にリンクをはるか、ユーザーソースディレクトリ内の makefile 内のライブラリの指定を -llapack3 から -llapack に変更する。
- コンパイラの違いによるエラー。コンパイラがたくさんインストールされている場合は注意。
/home/koba/cern/root_v5.27.04/lib/root/libCint.so: undefined reference to `__cxa_get_exception_ptr@CXXABI_1.3.1' /home/koba/cern/root_v5.27.04/lib/root/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore(int)@GLIBCXX_3.4.5' /home/koba/cern/root_v5.27.04/lib/root/libCint.so: undefined reference to `std::basic_istream<char, std::char_traits<char> >::ignore()@GLIBCXX_3.4.5' collect2: ld はステータス 1 で終了しました make: *** [anapaw] エラー 1
- 対処 : ROOT を g++ 4.1 でコンパイルしていたのがまずかったかも。root_v5.27.04 を g++34 でコンパイルしてそれを使ったらうまくいった。ROOT のコンパイルは以下のようにする。
$ ./configure --prefix=/home/username/cern/root_v5.27.04 --etcdir=/home/username/cern/root_v5.27.04/etc --with-cc=gcc34 --with-cxx=g++34 $ make $ make install
メモ
- 起動時の画面の位置とサイズを指定
analogin したディレクトリ (ワーキングディレクトリ) に higz_windows.dat というファイルを置き、その中にサイズと位置を書く。詳しくは 宇宙線実験の覚え書き (大学院生版) を参照。
- higz_windows.dat ファイル自動生成の抑制
- higz_windows.dat が ANAPAW のワーキングディレクトリにない場合、ANAPAW を起動した際にホームディレクトリにhigz_windows.dat が作成される。これを防ぐには、あらかじめ higz_windows.dat を ANAPAW のワーキングディレクトリに置いておく。
フォントのエラー
Scientific Linux 5.1 (Boron)
- Kernel 2.6.12-53.1.4.el5 on an i686
- ANAPAW を他のコンピュータにログインし、 X を飛ばして起動しても、以下のエラーが出る。
ANAPAW> null 0 10 0 10 ***** ERROR in IKFNTX : X11 fonts not available *** Break *** Segmentation violation Traceq lun = 0, level = 99 TRACEQ. In-line trace-back still not available. Longjump
クライアント側で yum install xorg-x11-fonts* としてから(必要なかった?)、/etc/X11/xorg.conf に以下の行を追加で文字化けしなくなっ た。yum install xorg-x11-fonts* と実行するだけでも解決するかも?
Section "Files" FontPath "/usr/share/X11/fonts/local/" FontPath "/usr/share/X11/fonts/misc/" FontPath "/usr/share/X11/fonts/75dpi/:unscaled" FontPath "/usr/share/X11/fonts/100dpi/:unscaled" FontPath "/usr/share/X11/fonts/Type1/" FontPath "/usr/share/X11/fonts/Speedo/" FontPath "/usr/share/X11/fonts/75dpi/" FontPath "/usr/share/X11/fonts/100dpi/" EndSection
Fedora release 14 (Laughlin)
- 2.6.35.11-83.fc14.i686 #1 SMP Mon Feb 7 07:04:18 UTC 2011 i686 i686 i386 GNU/Linux
ANAPAW> ht 102 ***** ERROR in IKFNTX : X11 fonts not available *** Break *** Segmentation violation Traceq lun = 0, level = 99 TRACEQ. In-line trace-back still not available. Longjump
- ssh のクライアント側にフォントがインストールされてないとこのエラーが出る? yum install xorg-x11-fonts* と実行するだけで解決した。
Windows + putty + Xming
- クライアントが Windows + putty + Xming の場合は、xming の font を入れないとこのエラーが出るらしい。(石井君 Thanks!)
バグ取り
- usersrc中のバグ取りはソースの途中に適宜 write(*,*) を挿入し、値を確認する。
- 初期化の忘れ
Enc file 追加
- 運動量分布を計算する enc file (encmomd.f) を追加したときの覚え書き。編集、または追加したファイルは以下のとおり。
編集/新規追加 |
ファイル |
内容 |
編集 |
makefile |
OBJS に encmomd.o loadmomdprm.o を追加。 |
編集 |
usersrc.f |
External encmomd, Call Encmomd(val(1,1,18),nx,ny,naok(18)) の部分を追加。 |
編集 |
setana |
パラメータファイルのパスをここ書く。 |
追加 |
encmomd.f |
subroutine encmomd を書いた。実際の計算を行う。 |
追加 |
loadmomdprm.f |
subroutine loadmomdprm を書いた。パラメータファイルを読み込む。 |
追加 |
momd.fh |
パラメータの定義はここに書く。 |
追加 |
prm/momd.prm |
パラメータファイル。パラメータの値をここに書く。 |
追加 |
prm/momd/* |
ランごとのパラメータファイル。 |