Locked History Actions

ANAPAW

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 > 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
  • 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

analogin 時の諸設定

  • ANAPAW を実行する場合、実行前になんらかのユーザー名でANAPAW にログイン(?)する必要がある。すなわち、端末上で analogin ユーザー名と打つ。このとき、いくつかのシェルスクリプトが実行され、環境変数の設定などが行われる。実際には analogin コマンドによって、setupanapaw というスクリプトが実行され、そこから setup.exp, setlocal, setana というスクリプトが実行される。それぞれのスクリプトの内容は以下の通り。

ファイル名

ディレクトリ

実行元

やっていること

.cshrc

$HOME

c shell
(端末起動時に実行)

下記のように analogin のエイリアスを通す
alias analogin 'source $HOME/src/anapaw/Setup/setupanapaw'

setupanapaw
(setupanapaw.sunday)

少し昔
  $HOME/usr/local/src/anapaw/Setup
最近のキャンペーン実験
  $HOME/src/anapaw/Setup

analogin コマンド

環境変数の設定
エイリアスの設定
setup.exp の実行
setlocal の実行
setana の実行
ANAPAW のワーキングディレクトリに移動

setup.exp

$ANAPAW_SETUP
通常 setupanapaw と同じディレクトリ

setupanapaw

初回ログインの場合、ワーキングディレクトリと下記のディレクトリを作成
  ana, cut, hbk, ntpl, evs
以下のファイルをこのディレクトリからワーキングディレクトリにコピー
  analogon.kumac, setlocal
環境変数の設定

setlocal

$ANAPAW_WORK

setupanapaw

環境変数 USER_SOURCE の設定
以下のエイリアスの設定
  makelib, makeana

setana

$USER_SOURCE
通常 $ANAPAW_WORK/src

setupanapaw

環境変数の設定
  パラメータファイルのパスはここで設定される
  IHIT_MIN0 もここで設定される

  • 各ファイルで設定される環境変数は大体以下の通り。

ファイル名

環境変数

通常用いられる値

備考

.cshrc

いろいろ

ANAPAW に関する環境変数は、以下のシェルスクリプト内で設定を行う

setupanapaw

CERNLIB

/cern/pro/lib

CERN Program Library のディレクトリを指定

ANAPAW_HOME

$HOME/src/anapaw

ANAPAW 本体のディレクトリ

ANAPAW_SOURCE

$ANAPAW_HOME/src

ANAPAW 本体のソースのディレクトリ
makelib をすると、ここのファイルがコンパイルされる

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 時に実行されるスクリプトがあるディレクトリ
setupanapaw 自身もここにある

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 のユーザーソースのディレクトリ
makeana をすると、ここのファイルがコンパイルされる

setana

???_PRM

$USER_SOURCE/prm/???.prm

ANAPAW のパラメータファイルのパス
例) ppac.prm, pla.prm

???_CONFIG

$USER_SOURCE/prm/???.conf

ANAPAW の設定ファイルのパス
例) mapper.conf, ppac.conf

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

なし

起動時の諸設定

  1. ANAPAWを実行すると、まず PAW の起動メッセージが表示され、ホームディレクトリに .pawlogon.kumac というファイル ($HOME/.pawlogon.kumac) があれば、それが実行される。通常はこのファイルは使用せず、後述の .analogon.kumac が使用される。
  2. ANAPAW 起動のメッセージ表示後、環境変数 ANALOGON で指定されるファイルを実行する。通常は analogin 後に移動するワークディレクトリにある .analogon.kumac というファイル ($ANAPAW_WORK/.analogon.kumac) が実行される 。
  3. 通常、.analogon.kumac ファイル中では default コマンドによって、$ANAPAW_MACROS というディレクトリ (普通は、$HOME/usr/src/anapaw/Macros) がマクロの検索対象ディレクトリに設定される。すなわち、このディレクトリ中のマクロ (例えば、aaa.kumac) は、exec ファイル名とするだけで実行される (ANAPAW> exec aaa) 。

  4. さらに .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 を実行
  5. pal 1 の後に、color 8 1 1 1 というコマンドを追加することで、color index 8 の色を白(RGB:1 1 1)にする。これにより、二次元の scatter plot をカラーで表示した場合、背景の部分が白になる。

  6. col8.png

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(*,*) を挿入し、値を確認する。
  • 初期化の忘れ
    • 初期化をしていないと、前のループの値が残ってしまい処理がおかしくなる。以下の図はTYsumtの初期化を忘れたために、前のループの値が残り二重に見えてしまうの図。
    • bug.png

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

パラメータファイルのパスをここ書く。
setenv MOMD_PRM $USER_SOURCE/prm/momd.prm
echo ' MOMD_PRM =' $MOMD_PRM

追加

encmomd.f

subroutine encmomd を書いた。実際の計算を行う。

追加

loadmomdprm.f

subroutine loadmomdprm を書いた。パラメータファイルを読み込む。

追加

momd.fh

パラメータの定義はここに書く。

追加

prm/momd.prm

パラメータファイル。パラメータの値をここに書く。

追加

prm/momd/*

ランごとのパラメータファイル。