Analysis of Geant4 data by ROOT Tree
ROOTの機能を使うのでROOTのライブラリの場所のとかの指定をGNUmakefileに
書いておく。必ずbinmake.gmkをインクルードする前のところに書くこと
#-----------------------------------------------------------
# environment setting for ROOT output
#-----------------------------------------------------------
# enable ROOT output option
CPPFLAGS += -D__OUTPUT_ROOTFILE__
# add compile flags and extra libs for ROOT output
CPPFLAGS += $(shell $(ROOTSYS)/bin/root-config --cflags)
ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --glibs)
EXTRALIBS += $(ROOTLIBS)
#-----------------------------------------------------------
include $(G4INSTALL)/config/binmake.gmk
これができたらUserRunActionをいじる。
まずUserRunAction.hhにこんなことを書いておく。
private:
TFile *fOutfile; // output rootfile pointer
TTree *t1;
//variables for branch
G4double tE1,tE2;
public:
inline TFile* GetOutFilePtr() const {return fOutfile;}
inline TTree* GetTTreePtr() const {return t1;}
void SettE1(G4double *val){tE1 = *val;}
void SettE2(G4double *val){tE2a = *val;}
TFile.hとTTree.hのincludeは忘れずに。
次にBeginOfRunActionでROOTのアウトプットファイルとかTreeとかを定義。
fOutfile = new TFile("hoge.root","RECREATE"); // output file
t1 = new TTree("t1","hoge analysis"); // define the Tree
// define branches
t1 -> Branch("E1",&tE1,"tE1/D");
t1 -> Branch("E2",&tE2,"tE2/D");
こんなかんじ。さらにEndOfRunActionで確認のためのPrintと書き込みを行う。
t1->Print();
t1->Write();
さらにUserEventActionのEndOfEventActionでTreeへデータをFillしていく
UserRunAction *runAction = (UserRunAction *) runManager -> GetUserRunAction()
TTree *t1 = runAction -> GetTTreePtr();
if(evtn%2 == 0){
G4double val;
//G4double tEProton;
val = E1;
runAction -> SettE1(&val);
val = E2;
runAction -> SettE2(&val);
t1 -> Fill();
}
runActionはUserRunActionのポインタです。runManagerは自分で定義していなくても
G4UserRunAction持っている関数なので大丈夫です。
これでTreeに書き込めます。