General Particle Source (GPS) 는 초기 입자 생성을 매크로 파일을 통해서 생성할 수 있도록 도와준다. 이를 이용하면 컴파일을 다시 하지 않고도 초기 입자의 입력을 변경할 수 있다. 세번째 프로그램으로 부터 시작하여 GPS에 대하여 알아보자.
다음 GPS 소스와 아래 설명은 세번째 프로그램에서 업데이트(1,2)한 내용이다.
GPS를 사용할 때의 이점은 초기입자를 변경할 때 PrimaryGeneratorAction 클래스를 변경하지 않아도 되기 때문에 컴파일을 다시 할 필요가 없다는 것이다. 고정된 OTPrimaryGeneratorAction 의 내용은 다음과 같다.
헤더:
class OTPrimaryGeneratorAction : public G4VUserPrimaryGeneratorAction { public: OTPrimaryGeneratorAction(); virtual ~OTPrimaryGeneratorAction(); // method from the base class virtual void GeneratePrimaries(G4Event*); private: G4GeneralParticleSource* fParticleGun; };
소스:
OTPrimaryGeneratorAction::OTPrimaryGeneratorAction() : G4VUserPrimaryGeneratorAction() { fParticleGun = new G4GeneralParticleSource(); } OTPrimaryGeneratorAction::~OTPrimaryGeneratorAction() { delete fParticleGun; } void OTPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent) { //this function is called at the begining of each event fParticleGun -> GeneratePrimaryVertex(anEvent); }
세번째 프로그램과 다른점은 fParticleGun이 G4ParticleGun 클래스가 아닌 G4GeneralParticleSource 클래스를 이용한다는 점과 fParticleGun의 설정을 전혀 하지 않는 다는 점이다.
GPS의 설정은 Geant4 매크로 파일을 이용한다. 예제로 들어이있는 myrun 파일의 내용을 보자:
/gps/direction 0 0 1
/gps/particle e-
/gps/energy 10 MeV
/run/beamOn 2
/gps/position 0 0 0
/gps/direction 0 0 1
/gps/particle neutron
/gps/energy 50 MeV
/run/beamOn 5
/gps/position 0 0 0
/gps/direction 0 0 1
/gps/particle proton
/gps/energy 20 MeV
/run/beamOn 10
/gps/position 0 0 0
/gps/direction 0 0 1
/gps/particle gamma
/gps/energy 1 MeV
/run/beamOn 2
위 매크로는
- 10 MeV 전자 2개
- 50 MeV 중성자 5개
- 20 MeV 양성자 10개
- 1 MeV 감마 2개
를 차례대로 생성한다. 입자의 방향이나 에너지 영역을 더 세밀하게 조정하는 것도 가능하다. 이러한 설정들은 Geant4 GPS 설명서를 참고하도록 하자.
이때, 기존 OTRunAction 클래스의 내용으로는 명령어; /run/beamOn 가 실행될 때 마다 BeginOfRunAction() 함수가 실행되고 데이터 파일을 새로 생성한다. 즉 위 매크로를 이용하면 데이터 파일이 4번 새로 생성되고 덮어쓰인다.
이는 다음과 같은 변경을 적용하여 해결한다:
- G4AnalysisManager 생성을 BeginOfRunAction() 함수 에서 OTRunAction 생성자로 옮김
- G4AnalysisManager 저장을 EndOfRunAction() 함수 에서 OTRunAction 파괴자로 옮김
변경 이후 같은 매크로 파일을 이용시 4번의 런 정보가 한 파일에 저장되는 것을 확인 있 수 있다.
실행
실행 이후 myrun.root 파일이 생성되는 것을 확인하고 파일의 "event" ntuple의 엔트리가 19개(전자 2개 + 중성자 5개 + 양성자 10개 + 감마 2개)임을 확인할 수 있다.