Geant4는 시뮬레이션에 필요한 틀을 추상 클래스들로 만들어 놓았다. 사용자는 이 클래스들을 상속하는 새로운 클래스를 만들어서 필요한 함수에 내용을 채운 뒤 Geant4의 런 메니저에 연결해주기만 하면 된다. 사용자가 다룰 수 있는 클래스는 두가지 종류인 초기화 클래스(User initialization class)와 액션 클래스(User Action class)로 나뉜다.
초기화 클래스 (User initialization class)
초기화 클래스에는 다음과 같은 클래스들이 있다.
- G4VUserDetectorConstruction
- G4VUserPhysicsList
- G4VUserActionInitialization
초기화 클래스들은 시뮬레이션을 본격적으로 시작하기에 앞서 정의 하고 초기화 해야 하는 작업을 담당한다. DetectorConstruction 에서는 물질을 정의하고 PhysicsList 에서는 물리현상을 추가한다. 기본적으로 세개의 클래스 모두 필수 이지만 세번째, ActionInitialization 은 클래스로 만들지 않아도 간단한 작업으로 대체 할 수 있으므로 다루지 않겠다.
액션 클래스 (User action class)
액션 클래스에는 다음과 같은 클래스들이 있다.
- G4VUserPrimaryGeneratorAction
- G4UserRunAction
- G4UserEventAction
- G4UserTrackingAction
- G4UserSteppingAction
- G4UserStackingAction
액션 클래스는 시뮬레이션의 각 단계마다 런 메니저에 의해서 실행된다. 이 중에서 초기 입자 생성을 담당하는 첫번째, PrimaryGeneratorAction 만이 필수 클래스다. 나머지 5개 클래스는 시뮬레이션의 각 단계에 사용자가 접근을 하는 용도로 사용되는데 언제 어떤 데이터를 가져오고 싶은지에 따라서 사용해야 하는 클래스가 다르다.
RunAction, EventAction 그리고 TrackingAction 은 각각 런, 이벤트 그리고 트랙의 시작과 끝에 실행되는 함수가 있다. SteppingAction 에는 스텝이 생성될때 마다 실행되는 함수가 있다. StackingAction은 초기입자 그리고 중간에 생성된 입자가 자신의 차례를 기다리며 쌓여있는 "입자 스텍"을 다루는 클래스로 특별한 일이 없으면 만질일이 없다.
우리가 만들어 볼 클래스
- OTDetectorConstruction : public G4VUserDetectorConstruction
- OTPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction