Geant4 가이드

Event Action

G4UserEventAction 클래스는 이벤트가 시작할 때 사용되는 BeginOfEventAction(const G4Event *) 와 이벤트가 끝날 때 사용되는 EndOfEventAction(const G4Event *) 함수를 이용할 수 있다.

이 예제에서 Event Action 클래스(OTEventAction)는 볼륨1의 에너지 축적량을 초기화, 업데이트, 그리고 저장을 관리한다. 먼저 볼륨1의 에너지 축적량인 edep1을 OTEventAction.hh 에 정의한다.

private:
  G4double edep1;

변수의 초기화는 이벤트의 시작인 BeginOfEventAction 함수에서 해준다(OTEventAction.cc).

void OTEventAction::BeginOfEventAction(const G4Event*) {
  edep1 = 0.;
}

변수의 업데이트를 위해서 다음과 같은 함수를 정의 한다(OTEventAction.hh).

void AddEnergyDeposit1(G4double edep) { edep1 += edep; }

위 함수는 볼륨1에서 발생한 매 스텝마다 에너지를 추가하기 위해서 정의하였으며 OTSteppingAction의 UserSteppingAction 함수에서 사용한다.

OTEventAction *eventAction = (OTEventAction *) G4EventManager::GetEventManager() -> GetUserEventAction();
if (volumeID == 1)
  eventAction -> AddEnergyDeposit1(totalEdep);

Stepping Action에서 이벤트 아이디를 받아왔던 것 과 같이 G4EventManager::GetEventManager()를 통해서 지금 사용하고 있는 Action 클래스의 주소를 받아 올 수 있다. 여기서는 OTEventAction 클래스의 AddEnergyDeposit1() 함수를 용 하기 위해서 EventAction을 불러오는데 사용하였다.

마지막으로 이벤트가 끝날 때 Ntuple에 값을 저장한다.

void OTEventAction::EndOfEventAction(const G4Event*) {
  G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
  analysisManager -> FillNtupleDColumn(1, 0, edep1);
  analysisManager -> AddNtupleRow(1);
}

이 전 토픽에서 주의했던 것 과 같이 ntuple 번호 1을 적어주는 것을 잊지 말자.

 

참고

댓글

댓글 본문
작성자
비밀번호
버전 관리
ejungwoo
현재 버전
선택 버전
graphittie 자세히 보기