Geant4 가이드

메인 프로그램

메인 프로그램에서 해주어야 할 일을 각 단계별로 나누어서 보자.

1. 헤더파일

1
2
3
4
5
6
7
8
9
10
11
12
#include "globals.hh"
#include "G4RunManager.hh"
#include "G4VisExecutive.hh"
#include "G4UImanager.hh"
#include "G4UIExecutive.hh"
#include "QGSP_BERT.hh"
#include "OTDetectorConstruction.hh"
#include "OTPrimaryGeneratorAction.hh"
#include "OTEventAction.hh"
#include "OTSteppingAction.hh"

위에서 추가한 globals.hh, G4RunManager.hh, G4VisExecutive.hh, G4UImanager.hh 그리고 G4UIExecutive.hh는 거의 모든 메인 프로그램에 사용되므로 그대로 두자. 나머지는 사용자가 어떤 클래스를 이용할지에 따라 달라진다. QGSP_BERT는 우리 프로그램에 사용 할 Geant4에서 제공하는 기본 PhysicsList 중에 하나다.

2. G4RunManager 세팅

Geant4에는 시뮬레이션을 총괄하는 G4RunManager라는 것이 있다. 우리는 메인 프로그램에서 G4RunManager에게 어떤 초기화 클래스와 액션 클래스를 사용할지를 알려주어야 한다.

1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char** argv)
{
G4RunManager* runManager = new G4RunManager;
G4VModularPhysicsList* physicsList = new QGSP_BERT;
runManager -> SetUserInitialization(physicsList);
runManager -> SetUserInitialization(new OTDetectorConstruction());
runManager -> SetUserAction(new OTPrimaryGeneratorAction());
runManager -> SetUserAction(new OTEventAction());
runManager -> SetUserAction(new OTSteppingAction());
runManager -> Initialize();
...

G4RuManager를 생성하고 PhysicsList, 그리고 우리가 만들어 볼 클래스들을 추가하였다. 마지막으로 Initialize()를 하면 초기화 클래스를 돌려서 시뮬레이션 준비를 마친다.

메인 프로그램에서 가장 중요한 부분이며 사용자가 다른 메인 프로그램을 작성 하더라도 이 부분만을 변경할 가능성이 크다.

3. 디스플레이를 위한 G4VisManager 세팅

1
2
G4VisManager* visManager = new G4VisExecutive;
visManager -> Initialize();

4. 시뮬레이션 커맨드 라인을 위한 G4UImanager와 매크로 세팅

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
G4UImanager* UImanager = G4UImanager::GetUIpointer();
if (argc != 1)
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UImanager -> ApplyCommand(command+fileName);
}
else
{
G4UIExecutive* ui = new G4UIExecutive(argc, argv);
UImanager -> ApplyCommand("/control/execute vis.mac");
ui -> SessionStart();
delete ui;
}
delete visManager;
delete runManager;
return 0;
}

Geant4 시뮬레이션을 돌리는 방법에는 두가지 방법이 있다.

  1. 시뮬레이션을 돌리기 위해서 미리 만들어 둔 매크로 파일을 사용해서 한번에 돌리는 방법.
  2. 커맨드 라인을 열어서 직접 시뮬레이션을 돌리는 방법. 매크로와 함께 사용 가능.

미리 만들어 둔 매크로 파일을 사용해서 한번에 돌리는 방법은 프로그램이 완성되어 별다른 확인을 하지 않고 돌릴 수 있을 때 사용한다. 위 코드에서 

1
2
3
4
5
6
if (argc != 1)
{
G4String command = "/control/execute ";
G4String fileName = argv[1];
UImanager -> ApplyCommand(command+fileName);
}

부분에 해당된다. 이 코드는 프로그램을 돌릴 때

> ./example run.mac

처럼 run.mac 이라는 매크로를 사용 하면 이 매크로에 들어있는 명령을 실행하고 시뮬레이션을 종료하도록 한다.

커맨드 라인을 열어서 시뮬레이션을 돌리는 방법은 프로그램이 완성되기 전에 어떻게 돌아가는지 확인을 할 때 많이 사용한다. 코드에서는 다음 부분에 해당한다.

1
2
3
4
5
6
7
else
{
G4UIExecutive* ui = new G4UIExecutive(argc, argv);
UImanager -> ApplyCommand("/control/execute vis.mac");
ui -> SessionStart();
delete ui;
}

프로그램을 다음와 같이 매크로없이 돌렸을 때

> ./example

커맨드 라인을 실행한다. 위 코드에서

1
UImanager -> ApplyCommand("/control/execute vis.mac");

는 커맨드 라인을 실행하기 전에 vis.mac 이라는 매크로를 찾아서 실행하라는 명령이다. 매크로를 사용하기 싫다면 이 줄을 지우면 된다. 많은 경우 이벤트 디스플레이를 열어서 시뮬레이션의 진행상황을 확인 해보고 싶기 때문에 디스플레이 매크로를 넣어둔다.

이벤트 디스플레이를 사용하게 되면 시뮬레이션이 어떻게 돌아가는지 눈으로 확인 할 수 있지만 실행 시간이 몇배 이상 길어지게 되므로 오래걸리는 시뮬레이션을 돌릴 때는 사용하지 않도록 주의해야 한다.

참고

 

댓글

댓글 본문
  1. ejungwoo
    Geant4도 다양한 모양을 지원하고 회전과 각 모양의 덧샘, 뺄셈이 가능하기 때문에 충분히 복잡한 그림을 사용할 수 있습니다. 모양을 바꿔가면서 테스트할 계획이라면 시간을 들여서 만들어보는 것도 좋습니다.

    CAD와 같은 프로그램을 사용하여 만들어둔 도형이 있다면 G4TessellatedSolid 같은 클래스를 사용하여 가져오는 것도 가능하다고 합니다: http://geant4-userdoc.web.cern.ch......ids
    (저는 아직 이 기능을 사용해보지 않았습니다)

    도형을 만드는 방법은 다음 링크에 자세하게 설명이 되어 있습니다: http://geant4-userdoc.web.cern.ch......tml

    하다가 잘 안되거나 막히는 부분이 있을 때 물어보시면 최대한 도와드리겠습니다.
    대화보기
    • geant4
      안녕하세요 혹시 geant4 에 input으로 복잡한 그림을 사용하려면 어떻게 해야하나요?

      예를 들면 비행기 모양의 모형을 그려서 비쥬얼라이즈 한다던디 혹은 그외희 다른 모형들을 그린후에 비쥬얼라이

      한 후에 geant 4에서 그 자료를 사용하여 test를 돌리는 방법이 궁금합니다.
    버전 관리
    ejungwoo
    현재 버전
    선택 버전
    공동공부
    graphittie 자세히 보기