anaroot_nadeko
現状
完全にANAROOTに組み込まれての開発となっていて、且つsvnで管理しています。
こちらのページはかなり古い内容となりますので、とりあえず
こちらや、
こちらへ。
概要
磯部さんたちが開発しているANAROOTにanapaw likeなコマンドを追加した(といっても独立)もの+NEBULAのencfile的なもの。
最近はanafileやhcutにも対応した。
元となっているANAROOTのバージョンの後ろにNadekoのバージョンが付加されている。
なお、anarootのsubversionにも更新してます(2012SAMURAI.tanaka)。
最新
- 現在はsvnで管理しているので、そちらの2012SAMURAI.tanakaというbranchをお使いください。
- 120210:anaroot_v4.4.0.nadeko.5.2
HPCを追加。
それに合わせて変数名とかを整理。
analoopの途中で手動でloopを抜ける(valにaddしない)ときに
速度が落ちないようにした。
その他
anapawライクなディレクトリ構造、analoginならぬanarootlogin
Nadeko単独
ROOTにanapaw likeなコマンドを追加するためのmodule。anaroot_nadekoで開発していたものを抜き出した。
sample data(でかかったので消しました)
関数一覧
doxygenを一度使ってみたけど、まぁもう古くて下手にhitするとあれなので消します。
結構便利だから公式でやらないかなー。
実装した関数(実装したけどニッチなものは載せてない)
Nadeko側(anaroot等に依存しないので標準のROOTにそのまま使える。)
fetch,hstore,ls,hdel,print,ht,htp,hn,hb,
lgx,lgy,lgz,lnx,lny,lnz,lg,ln,
size,cd,cdn,cdp,zone,
fit,fitp,fite,fitg,fitl,xfitp,xfite,xfitg,xfitl,figa
pfx,pfy,prx,pry,bnx,bny,slx,sly
xstan,xval,yval,xyval,
cpro,blow,blowxyz,blowx,blowy,blowz,zoom,unzoom,mami
chbin,scale,add,multiply,divide
AnaLoop側(anapawのana以下にあったコマンドに対応する。)
book,start,stop,end,push,pop,clear,status,hcut
link
更新履歴
- 120210:anaroot_v4.4.0.nadeko.4.26
NEBULAに必要な値を書ききったつもり。
- 120209:anaroot_v4.4.0.nadeko.4.25
コードが読みにくくなる最適化をした。
before:histからvalを探して詰める
after:valからhistを探して詰める
と言うふうにした。
これだけ見るとなんか早くならない気がするが二倍ぐらい早くなった。
もちろん場合によるがNEBULA単体で10000cps程度の解析速度は出る感じ。
NEBULAの解析部分も早くした(Findするところは全てstd::mapの探索でアクセスできるようにした)
ROOTのネイティブコードだと25000cpsとかいく(AnaLoopクラス自体は足を引っ張っていいない)。
これでだいぶ使い物になる感じ。
あとはNEBULAのparameterをU,D分けてたのをPlaごとにした。
これに合わせて関数もちょこちょこ変わったりしている。
- 120208:anaroot_v4.4.0.nadeko.4.21
nadekoを実際に使って使いにくい点を改善。
・lgzとかを実行すると全てのキャンバスに適応する様にした。
・zoomを値指定できるようにした。
・fitはデフォルトで"S"オプションをつけることにした。そのため戻り値でTFitResultPtrを受け取れる。
・macro中でdrawしても、キャンバスをupdateしないと描画されない。そのためupdate()という安直な関数をつくった。
・raisewindow()を呼ぶとwindowが全面に...来るときがある。
・wait()関数を作った。Press Enterと表示されて、Enterの入力を待つ。
・watch()関数を作った。LINUXのwatchと似ている。watch("ls()", 1000, 10)でls()を1000msごとに10回実行する。
・ht(int i, Option_t* option)として、htだけはoptionを渡せるようにした。
・TArtCalibNEBULAを更新。メンバ変数を増やした。(TArtAnaLoopNEBULAを更新するの忘れた)
・NEBULA.xmlのパラメータを一部更新。マップが正しくなったのと現在取っているデータのpedestalが入った。
- 120208:anaroot_v4.4.0.nadeko.4.19
defaultのスタイルを見やすくした。
rootlogon.Cに書いただけなので必要に応じて変更ください。
- 120208:anaroot_v4.4.0.nadeko.4.18
AnaFileまわりのコードを速度を得られるように最適化した。当社比1.5倍速(anafileを使った場合)。
MAXの値を固定値でもつことで早くした(analyser(128),wnum(128),index(2048))ので、
トレードオフで、メモリを食うようになった。
また、上限が足りない場合は増やすこと。(TArtAnaFileに直書き)
増やしても速度はあまり落ちないがメモリ使用量が大きくなる。
- 120207:anaroot_v4.4.0.nadeko.4.12
趣味で解析速度を表示するようにした(固定時間かかるところは計測していない)。
やっぱりanafile使うと速度半減だなー。
- 120207:anaroot_v4.4.0.nadeko.4.11
ROOTユーザーを意識して.LでTArtAnaLoopクラスを継承したクラス(macros/analoop/以下)を読み込んで走らせるsampleを作った。
macro/example_root.C
ANAPAWユーザーはanafileを使う感じで
macro/example_anapaw.C
を使ってください(ほとんど呼び方に違いはない)。
少しsrcやNadekoの関数を整理した。
- 120206:anaroot_v4.4.0.nadeko.4.5
マルチスレッド部分の問題を多分解決した。
なのでgSystem->sleepとかはいれなくても大丈夫。
また、概念を整理して、bookはanaloopとanafileをセットする関数とし、
ファイル読み込みはpush("run0000.ridf")でridfファイルを追加する(複数とか初回とかそんなのは関係ない)。
これらの行為は独立に行える。
解析の実行はstart()とかなんだけどrun/kumac/example.Cとかを見てください。
一部、環境によりコンパイルできないところがあったのを修正(std::findが使えないとか死んでくれ)
おそらく、これでanafile,analoop関連は基本的に完成(改めて言うがanalyserとかstopとかはない)。
自分デバグでは基本的に落ちていない。
ちなみにanapawではgateを増やすと重くなったがこっちはgateの数はあまり解析時間に効かない気がする。
- 120204:anaroot_v4.4.0.nadeko.4.1
IDの重複問題を解決するためにWNumとかの宣言の仕方を変えた。
あとはマルチスレッド部分にいろいろ問題があることが分かった
(手打ちでやっている分には問題は表面化しないがMacroでstartとpushをある呼び方されると
落ちる可能性がある。gSystem->sleep(100)である程度対処できる)。
タスク並列なので根本的にいろいろ構造を変えないといけなそうで辛い。
- 120204:anaroot_v4.4.0.nadeko.4.0
複数のridfファイルを読み込み可能にした。
pushコマンドでridfファイルをstuckするようにした。
bookする前した後解析中一切関係なく、pushしてstuckに積むことができる。
解析しているanaloopが終了すると(end()を呼ぶことで手動で終了させられる。)自動で
stuckに積まれているものの解析が始まる。online、offlineの区別はファイル名があるかないかだけなので
問題なし(のはず)。
現在解析中のridfやevent数、stuckの状況は常にstatus()コマンドで確認できる。
あと、いつ何時にbookやstartを読んでも落ちないようになったはず。
clear()はanaloop、anafile、hist全てを消す関数。これで基本的に初期化しているつもり。
結構いい感じの拡張になったのでバージョンアップ。
開発者以外関係ない気がするが、bookを少し賢くした(analoopを指定しないときの動作とか。)
- 120204:anaroot_v4.4.0.nadeko.3.8
circle cut(略してcc。CCさくら)を実装した。anafileで直接記述
あとはanafileのソースを整理した。
- 120203:anaroot_v4.4.0.nadeko.3.5
hcutに対応した。
anafileで他のanafileをincludeできるようにした。
cutもanafileと同じ扱いなので直接anafileに書いてもいいです。
標準としてはhoge.cutをcut以下においてそれをincludeする感じです。
bnxとかしてしまうとhcutできなくなりますが、近いうちに対応させます。
(NadekoAnaLoopがつながるのがいやだけど。。。)。
TArtAnaFileのsrcはひっちゃかめっちゃかですがいずれ綺麗にします。
土日だーーー。
- 120203:anaroot_v4.4.0.nadeko.3.2
sourceを少し整理した。
mapは整理してくれるから使いようによっては早い感じ。
- 120202:anaroot_v4.4.0.nadeko.3.0
sourceを少し整理してほんの少しだけ最適化した。
何かだいぶ変わったのでバージョンアップ。
しばらくはこれがベースになりそう。
- 120202:anaroot_v4.4.0.nadeko.2.18
TArtAnaLoopを改善した、TArtAnaFileクラスを作って、anapawと同じように
anafileっぽいものが使えるようになった。
nadekoを一部修正
- 120130:anaroot_v4.4.0.nadeko.2.7
TArtAnaLoopクラスでfilenameを空白にするとonline解析になるようになった(一応動作確認した)。
onlineでバックで解析しつつそのままhistを見れるのは結構いい感じ。
あとはencNEBULA的なものを整理した。
おそらくid vs qdcとかは正しく見えている気がする。
projectionの仕様を変更(見えているものだけプロジェクション)
他細かい更新
- 120129:anaroot_v4.4.0.nadeko.2.3
TArtAnaLoopクラスを継承したTArtAnaLoopNEBULAを作って、
これをTArtAnaLoopManagerに渡すことによって
解析をバックグラウンドで行うことができるようになった
(サンプル:run/Macros/sample/NEBULA/TestNEBULA_analoop.C)。
TArtAnaLoopNEBULAがencの一部とanafileを担っている感じ。
start(),stop(),end()と解析threadのコントロールは可能。
anasta()で現在の解析状況が見える。
現在のディレクトリにできるhist等は解析でfillしている「そのもの」なので
deleteしたりするとエラー処理してない限り落ちるので気をつける必要がある。
それでもNadekoと組み合わせるとかなりいけてるんじゃないかと。
他細かい更新
- 120128:anaroot_v4.4.0.nadeko.2.0
TArtAnaLoopクラスを作って、解析のループを途中で抜けるだけでなく、
再会することができるようなものを作った。
ちょうどanapawのana/loopっぽいことができる。
複数のファイルに対する対応はまだ。
サンプルはrun/ananebula.C。
TArtAnaLoopを継承してConstruct,Calculate,Destructを実装する必要がある。
こういうのに慣れていないと分かりにくいかもしれない。
他細かい更新
- 120126:anaroot_v4.4.0.nadeko.1.6
anarootがメジャーアップデートして実装が変わったのでNEBULAもそれに合わせて変更・アップデートした。
- Nadekoのみで配布開始。トップのNadekoへ。
- 120101:anaroot_v4.3.1.nadeko.3.20
忘れていたchbin, scale, add, multiply, divideを実装した。
今度こそ更新はしばらく中止。
- 111231:anaroot_v4.3.1.nadeko.3.19
anafile的な方法を作った。だいぶ違うけど。
optionの扱いを少し変えた・増やした。
基本的に更新はしばらく中止。現状でそれなりに使えるはず。
- 111226:anaroot_v4.3.1.nadeko.3.18
自分用up
- 111225:anaroot_v4.3.1.nadeko.3.17
hdel,slx,sly,print,xfithoge,xstaとかを実装した。
グラフィカルなblowはblowに統一した。
zoomも一つしてunzoomを作った。
xval,yvalはreturn値を使いたいことがあるので残した。
あとfileを読み込む・書き込む関数を作った。
細かいところを変更した。
- 111224:anaroot_v4.3.1.nadeko.3.13
新たにxzoom,yzoom,xyzoom,を実装した。
あとは、xval系をいろいろ真っ当にした。
細かいところを変更した。
- 111224:anaroot_v4.3.1.nadeko.3.11
新たにxval,yval,xyval,cpro,figa,zoom,zoomx,zoomy,zoomz,blow,blowx,blowy,blowz
xblow,yblow,xyblow,mamiを実装した(グラフィカルなものが結構まともに動く)。
htpとかhbに戻した。
- 111221:anaroot_v4.3.1.nadeko.3.7
新たにlgx,lgy,lgz,lnx,lny,lnz,lg,ln,size,cd,cdn,zone,fit,fitp,fite,fitg,fitl,
pfx,pfy,prx,pry,bnx,bnyを実装した。
hb→hp(hist previous)
htp→hc(hist current)
に変更した。自分もなれないけどhist backは変だから。
fetchってなんなんだろう。いずれ名前変える(増やす)かも。
あと重要なのはxval系,cpro,xsta的なものかな。数を数える系ですね。
chbin,histの足し算,xblowとかも必要か。。。最大最小とかも。mami,sly...
gTH1があるから細かいオプションとかはROOT標準で。
histmanagerがやたらと複雑になったのはエラーチェックのため。
現在のディレクトリからhistが動いたときにエラーで落ちないようにした。
(gTH1->SetDirectory(0)とかやっても正常に動く)
- 111221:anaroot_v4.3.1.nadeko.3.5
新たにhstore,ls,ht(id)を実装した
hstoreは現在のディレクトリにあるTH1を新しいファイルに保存する。
lsはanapawでいうiのことでidとhistの名前を表示する。
ht(id)はlsで表示されるidに対応したhistがdrawされる。
実装方法としては、TArtObjLinkManagerのインスタンスをTArtHistManagerのなかで
持っておいて、常に現在のObjLinkを管理するようになっている。
いろいろトリッキーなので中身をいじる場合はTArtHistManagerでの使い方を参考にしてください。
gObjLinkはやめた(dictionaryに残ってるけど消し忘れ)。
- 111220:anaroot_v4.3.1.nadeko.3.0
fetch,hp,hn,hbが簡単に実装できてしまった。また、gTH1とgTObjLinkを作った。
これでgTH1を基軸に他の関数をさくさく作れる。
ポイントはTListとかTObjLinkを理解することだったのね。
IDと合わせて現在のTH1をリストアップとかも簡単に作れそうだし大勝利だわ。
- 111219:anaroot_v4.3.1.nadeko.2.7
ディレクトリと名前を整理した。Reconstructの代わりにMethodAnalysisという謎な名前のディレクトリを作った。
基本となるクラスを継承するようにした。だいぶそれっぽくなってきた。
たぶんこの思想でいけそう。
- 111218:anaroot_v4.3.1.nadeko.2.4
UとDは別IDじゃないといけないのでDはマイナスにした。
初期化してなかった値を初期化した。
detectorのidがAとTで逆だった。
anarootの設計思想が気に入らないのでAnalysisManagerなるものを作った
(使い方のサンプルはrun/test_compile.C(cintがおバカさんなのでコンパイルしないと使えない))。
デフォルトのanarootはdetectorごとに処理の流れを考えているが、
AnalysisManagerを使う方法では、Data、Parameter、解析方法(Method)のオブジェクトを作り、
これをAnalysisMangerに渡して解析するので計算方法についての流れを持つ。
つまり、あれを計算した後これを計算したいってのが自然にコーディングできる。
今のところ結局中身はほとんど一緒だが、こういう方針の方が将来的に拡張しやすいしコードも理解しやすくなるとおもう。
- 111217:anaroot_v4.3.1.nadeko.1.1,
初版、といいながら1.1。