HABOC manual Version 2.0 takada@cr.scphys.kyoto-u.ac.jp
HABOC とは Event by event 解析用の Framework C++ による coding ANL や FULL の C++ 版を目標 ANL/FULL は Object Oriented な設計概念なので C++ と相性が良い Histogram や視覚化には ROOT(http://root.cern.ch) を使用 物理シミュレータとして Geant4 を使用
HABOC の install HABOCの本体のinstallは 1. src.tarを取ってくる 2. Tar ballを展開 > tar xvf src.tar 3. Directory 移動 > cd HABOC 4. Make > make で終わり 実行 file を作るには 1. Working directory を作る 2. Module 毎に directory を切って 解析 module の src を持ってくる (*.cxx, *.h, makeinfo の 3 files が最低必要 ) 3. 実行 file 作成用 Makefile を 取ってくる 4. Makefile を編集し module.list を作成する 5. Make で終わり
HABOC の動作概念 HABOC module A MList Main looting 起動時 event HABOC module A module E Analysis chain module A module B module C module D 解析実行時 起動時には module の list と空の解析 loop があるだけ List 内の module から使用する物を選び 順番に並べて analysis chain を作ると解析 loop に module が組み込まれる Analysis chain に従って 上流の module から data を受け取り module 内で処理した後 下流の module へ流す Event 毎に analysis chain の処理を実行 終了すると ROOT へ移行 一度 make すれば 登録されている module のつけはずしは自由
解析 module の動作 Analyze_Data 起動 Main menu Set_Paramet SetParameters() Init() InitHistogram() analysis menu Read_Data Begin() Quit Exit() 終了 Process(int) End() (loop)
解析 module 全ての解析 moduleはclass nameとmodule nameを持つ 全ての解析 module classはsmodule classを継承 全ての解析 moduleはmlistに組み込まれる analysis chainが定義されると HABOCはmodule nameを使って目的の解析 moduleを探す Module 間のdataのやりとりはBankを使って行う Module 間のevent flagのやり取りはevsを使って行う
Bank Bankはdataの格納場所 各 module 間のdataのやり取りに使用 Bankは全てBankListに組み込まれる Bankの作成は bnk->createbankint( Bankの名前, 要素数, clear flag); bnk->createbankdouble( Bankの名前, 要素数, clear flag); 等 clear flagがtrueだと process 開始時に0に初期化される Dataのやりとりをするときは HABOCはBankListの中から要求された名前に該当するBankを探す DataをBankに流すときは bnk->setbank( Bankの名前, dataのpointer); Dataを読み込むときは bnk->getbank( Bankの名前, dataのpointer);
EVS Module 間で受け渡しが可能なevent flag EVSは全てEVSListに組み込まれる EVSの作成は evs->createevs( EVSの名前 ); Dataのやりとりのとき HABOCはEVSListの中から要求された名前のEVSを探す Setするときは evs->set( EVSの名前 ); Getするときは evs->get( EVSの名前 ); Get した時 返値はbool (true/false) Analysis chainの開始時 EVSは全てfalseに初期化
HABOC Main menu (HABOC 起動時の menu) Define_Chain: analysis chain の定義表示された list の中から使用 module を順番に選択 Show_Chain: analysis chain の表示 Set_Paramet: 各 module で使用する parameter の設定 Analyze_Data: 解析 loop の start Save_Define: file に保存する histogram を選択 (module 毎に一括で ) Quit: 終了
Analysis menu (Analyze_Data 実行時の menu) Read_Data: analysis chainに定義した順番に処理を実行 Show_Status: 各 moduleを通った数やevs/bankの状態を表示 Reset: histogram/evs/bankをreset Save_Histo: 選択したmodule 内で定義したhistogramをfileに保存 Quit: 終了
Interrupted menu 解析実行時に Ctrl+c で現れる menu Continue: breakしたところに戻って再開 Save_Histo breakしたとこまで histogramをroot fileに保存 Quit: そのまま終了
解析 module の作り方 $(HABOC)/bin/MakeModule を実行すると 解析 Module の template を作ってくれる > $(HABOC)/bin/MakeModule <class name> > ls <class name> <class name>.cxx <class name>.h makeinfo *.cxx は source file *.h は header file makeinfo は Makefile から include される file もちろん 0 から作るのも可
module.list 解析 moduleのlist make 時に このfileからMListが作成される 文法は <class name 1> <module name 1> <class name 2> <module name 2> # で始まる行はcomment outとして扱う Class name / module nameに空白は使用禁止
CreateBank Bank 定義用のBankListメンバ関数 定義されている関数 CreateBankInt, CreateBankUInt, CreateBankChar, CreateBankShort, CreateBankUShort, CreateBankLong, CreateBankULong, CreateBankFloat, CreateBankDouble 引数は (const char* name, int size, bool flag) flagが1だとanalysis chainの初めに初期化 0だと何もしない sizeはbnkの深さ 空白はnameに使用できない 要素数を超えて書き込むと拡張される
SModule 全ての解析 module の親 class User 定義の解析 module classで定義すべきメンバ関数 int Init(); void SetParameters(); int Begin(); int Process(int); int End(); int Exit(); void InitHistgram(); User 定義の解析 module classで使用できる予約済みメンバ bnk: Bank List bnk->getbank( ), bnk->setbank( ) evs: EVS List evs->set( ), evs->get( ) hist: histogram list (TObjArray) list->add( ) ver: module version
メンバ関数 (Init / Exit) int Init() Main menu から Analyze_Data を選択後 analysis chain に入る前に各 module で一度だけ実行される関数 返値は default では ANL_OK int Exit() 解析 looting 終了 (analysis menuからquitを選択 ) した後 各 moduleで一度だけ実行される 返値はdefaultではANL_OK
メンバ関数 (Begin / End) int Begin() Analysis chainに入って Read_Dataを選択する度に各 moduleで一度実行される関数 返値はdefaultではANL_OK それ以外だと即 program 終了 int End() Read_Dataで始まったloopが終了した後 各 moduleで一度だけ実行される 返値はdefaultではANL_OK
メンバ関数 (Process) int Process(int identify) 解析 moduleのmain Event 毎に実行される関数 引数 identifyはprocessが実行された回数 Begin() が実行される毎に0にもどる 返値はdefaultではANL_OK 返値がANL_ENDのときloopが終了 返値がANL_QUITだとprogram 終了 返値がANL_LOOPだとProcess(int) をもう一度
メンバ関数 (SetParameters / InitHistogram) void SetParameters() Main menu から Set_Paramet が選択されたときに実行 解析 module 内で使用する parameter の設定関数 GetValue( 出力 comment, 入力先 pointer) という関数が SModule 内で定義されている void InitHistogram() File 保存用の histogram 定義関数 hist の初期化 (hist = new TObjArray;) を忘れずに Histgram を定義したら hist に加える htmp = new TH1F( test, Test, 100, 0, 1); hist->add(htmp);
HABOC_G4 HABOC 用 Geant4 core class Geant4のGeometry, PhysicsList, PrimaryGeneratorAction, StepActionの各 source codeが別途必要 詳細は高田まで
動的メモリ確保 (C++ の約束事 ) mallocは使うな newを使え C++ での動的メモリ確保は newが推奨 mallocとnewが混在すると誤作動の危険性があるので注意開放はdelete char *text = new char; int *data = new int[num]; delete text; delete [] data; 配列定義のときはdelete [] となるちなみに new/deleteは演算子なので () はいらない