val(1, naok)のチェック

解析でこのBUGにはまった。つまりval(1, naok) = idのidが大きくなり、他とかぶっていた。
意外と気がつかない。
なのでerror checkを含む関数を呼ぶことで安全に
naok = naok + 1
val(1,naok) = id
を行えるようにした。
anapaw_usr_src_my_modules.f
使い方は、まず適当に、
LOGICAL id_flag(nx)
とflagを作っておく。
で、次に初期化。
call init_id_flag(id_flag, nx)
で、本体は、
call next_naok(id_flag, naok, id, val, nx, ny)
と呼べば次のnaokに進んむ。idに直接数字を入れればその数字がval(1,naok)に入る。
DEBUGが必要なくなったらnext_naokの中身のif文を すっ飛ばせばよい。(本当は#ifdef DEBUG とか使いたいけど)

makefile

デフォルトで配布されてるuser sourceのmakefileが微妙なので、 依存関係とか考慮した普通のmakefileを書いた。
cもfと一緒にコンパイルできるように書いたので、cで関数書いて 混ぜこみたい方とか。
anapaw_usr_src_makefile
cの場合でも意識せずにコンパイルされるはず。
ただし、.cと.fで同じ名前のsrcファイルがある時は、cが優先される。
.SUFFIXESの.cと.f順番を入れ替えれば逆順になる。
binディレクトリにanapawをインストールする仕様にしているが、 これが嫌な人は無視しても大丈夫かと。

anapawのinstall

どうも、シェルはtcshがいいみたい。
とりあえず、インストールはtcshって打ってからスタート。

とりあえず武内さんのページを見ながら
.tcshrc にANAPAW_WORKを指定しても、 analogであとから上書きされるから、 そっちを書き換えればいいんじゃね?
ってことで、.tcshrcはanalogのエイリアスのみ

入れたもの
readline-devel
termcap(リンクがちゃんとはられてないので張る)
Xaw3d-devel

Xaw3dの本体は違うところにあるけど、 とりあえずlibXaw〜は/usr/libにある(正しくはリンカがある)
/usr/includeにあるのは。。。。
オプション-Iはユーザー定義ファイルの検索フォルダらしい。
小林さんのページに書いてあるもう一つの方は入れなくても通った。

undefined reference '********'
がでてきた。
正しい対処法は別にあるはずだが、 今回は、 cernlibは2002年のbinaryでやってたのをやめて、
2006年のcernlibを自分でmakeしたの +2002年binaryからlapack3とblasをコピーしたもの
をcernlibとして指定した。
これで問題なく通った。

anapaw移植

向こうの部屋でやるのが嫌なので、こっちにanapawを移植した。
通常のanapawはインストールできているものとする。

camacのanapawの本体は2.2.6だが こっちは2.3.1で、特にいじる必要もなさそう。
setupanapawだけ少し書き換える。

本筋は、bbdaq.prmとenc_bbdaqによってrdfファイルを読むだけである。 anapawにはlocalモード(モードってほどでもない?)とexpモードがあって、 デフォルトはlocalでは環境変数が微妙に足りない。
書いちゃえば通りそうだが、気持ち悪いのでexpモードにする。

具体的手順。

1. $ANAPAW_HOME/Setup/setupanapawを書き換える

    # For using on local.
    #source $ANAPAW_SETUP/setup.local(コメントアウトする)
    
    # For using on experiment.
    setenv EXP_DIR $HOME/exp/r337n(このディレクトリは好きな名前でよい)
    source $ANAPAW_SETUP/setup.exp(これでworkディレクトリとか設定される)

ここで
analogin user名 して入りたくなるが、初回は先にディレクトリ作らないとバグるのでだめ。

2. ということで先にさっき指定したEXP_DIRを作る。
    $EXP_DIR
    $EXP_DIR/src
    $EXP_DIR/users
の三つを作っておく。

3.rips@camacから良さげなユーザーソースを$EXP_DIR/srcにコピー
今回は
    /home/rips/exp/test/users/rips/src_tanaka
をもらった。

4.ここで
    analogin user名

5. user名で指定したディレクトリ($EXP_DIR/users/user名/)に
$EXP_DIR/srcへのリンクが貼られるが、
責任とれないのでリンク(リンカ?)を消して(間違えてリンク先を消したら死亡)、
$EXP_DIR/srcをまるごとコピーするのがいいかと。

6. 適当にanaファイルとrdfファイルをパクってきて。
    ana/sk8ch3.ana
    rdf/0527.rdf
とかにコピー。

7. makeanaって打つ
  makeana
makeanaはanaloginしたときのユーザー配下にあるsrcをmakeするalias

8. anapawを起動して読み込んでヒストグラム見てみて終了するまでのコマンド羅 列
    analogin user名   (user名用の環境変数整えて、ディレクトリ移動)
    anapaw   (anapaw起動)
    [Enter]   (何か聞かれるが、単にenter押すとwindowができる)
    book ana/sk8ch3.ana   (anaファイルを用意する)
    a/l rdf/0527.rdf   (rdfファイルを用意する)
    start   (rdfファイルを読み込んで計算してanaファイルの通りにヒストグラムに収める)
    i   (手持ちのヒストグラムの一覧)
    ht 101   (ID101を描画)
    hn   (次のIDのを描画)
    hb   (前のIDのを描画)
    erase   (rdfを忘れる)
    cle -f   (anaファイルとrdfを忘れる)
    quit   (終了)

9. 解析
srcにあるenc**.fってのが通称encファイル呼ばれるもので、 bbdaqがrdfファイルから読み込んだ値を物理的・数学的に処理してあげるところ。 そんで、anaファイルはヒストグラムの箱を作るところで、 その箱にencファイルが吐いた値を格納してヒストグラムになる。 だから、後はencファイルとanaファイルをいじればよい。

    
set hcol 1002 赤
set hcol 1012 anapaw def

set
opt

xval
dline 0.24 0.24 0.0 250.0
とか

atitle 'x' 'y' ! 220 とか
atitle 'x' 'y' ! 110 とか
hi/pl 147 でIDは出ない。htはanapawのコマンド
al/list
paw faqが強い

set asiz 2.0
set vsiz 1.0 
set lfon -60
set ylab 0.6
set xlab 1.6
set xlab 1.2


vec/read temp exp.dat
vec/pri
gra 20 temp temp2
vec/read temp1,temp2,temp3,temp4 exp.dat
hp/err temp1 temp2 temp3 temp4 20 1 0.0  w (cwで綺麗にする)
                                    ^^^
				    点のまわりが消える量
vec/fit temp1 temp2 temp3 test.f77 ! 2 par
vec/create min(2) R 0.980 5.6

vec/read temp1,temp2,temp3,temp4 exp.dat
hp/err temp1 temp2 temp4 temp3 20 1 ! 1cw
vec/create par(2) R 0.978 5.4
vec/create min(2) R 0.975 5.2
vec/create max(2) R 0.981 5.6
vec/create step(2) R 0.001 0.01
vec/fit temp1 temp2 temp3 test.f77 B 2 par step min max 


help fun1
fun1 110 test.f77(x) 100 0.0 100.0

fun1はカレントディレクトリにあるもののみしか動作しない
vec/fitは./func/以下とかでもOK
ファイル名と関数名が同じじゃないといけない

ii = 500000
write(*,'(a,$)') '-'
do i = 1, ii
a = sin(real(i+0.1))           
enddo
write(*,'(a,a,$)') '\b','\\'       
do i = 1, ii
a = sin(real(i+0.1))           
enddo
write(*,'(a,a,$)') '\b','|'       
do i = 1, ii
a = sin(real(i+0.1))           
enddo
write(*,'(a,a,$)') '\b','/'       
do i = 1, ii
a = sin(real(i+0.1))           
enddo
write(*,'(a,a,$)') '\b','-'       
do i = 1, ii
a = sin(real(i+0.1))           
enddo
write(*,'(a,a,$)') '\b','_'


名前が同じでないといけない
implicit noneが効かないから先にコンパイルしてチェック
関数名をrealで宣言するのを忘れない

.f .f77はコンパイルされるっぽい

X
Section "Screen"
    Option	   "BackingStore" "Yes"
これで背後のXが描画される

help hi/fit
でいろいろ見える。
これに、引数の並びとかがある。


fileへの書き込み。
vec/create dummy(1) R 0.0
vec/write dummy temp.dat ($) 'O'
do i = 109,118
vec/write par[i](3) temp.dat (f10.5) ""
enddo
vec/write dummy temp.dat ($) 'C'
こうしないと毎回上書きしてしまう。
dummyはそのなのとおりダミー
もっとスマート、、ってかappendが欲しいけど、なんかないんだよなー

末尾の_は継続をあらわすらしい。

vec/write XX,HIST temp.dat (F10.5,X,F10.5)
vec/list

exec ./bbtcal2#many
exec ./bbtcal2.kumac ID=129
.anapawlogin

n sta
hst1 2 4
107
0e


gate
101, .........

hst1
101,
-101, <- not

stop
101 <- これ以降101のイベントは解析しない

analys
2 上でPIしておいて、その範囲で解析するとか。

コマンドとか

book ***.ana 箱準備

localの場合
a/l ***.rdf データ読み込み
start

onlineの場合
a/l
start
[Enter](データ回収ストップ)



a/l: ana/loop
i: hist/list?
ht ID: hist/plot?
hn: hist/next?
hb: hist/back?
lgy: log y
lny: log 解除
pgx: progect?project?

anapaw関連でよく使うディレクトリ一覧

suse-tanaka
/home/ryuki/exp/r337n/users/ryuki
/home/ryuki/usr/local/anapaw/Setup

camac
/home/rips/exp/test/users/rips/src_tanaka
/home/rips/exp/test/users/ryuki
/home/rips/usr/local/anapaw