Geant4 가이드

메인 프로그램

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

1. 헤더파일

#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에게 어떤 초기화 클래스와 액션 클래스를 사용할지를 알려주어야 한다.

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 세팅

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

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

  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. 커맨드 라인을 열어서 직접 시뮬레이션을 돌리는 방법. 매크로와 함께 사용 가능.

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

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

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

> ./example run.mac

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

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

  else
  { 
    G4UIExecutive* ui = new G4UIExecutive(argc, argv);
    UImanager -> ApplyCommand("/control/execute vis.mac");
    ui -> SessionStart();
    delete ui;
  }

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

> ./example

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

    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 자세히 보기