Geant4 코드 작성 시, 연동되는 Geant4의 버전을 확인하고 버전에 따라 동작을 달리 하도록 코딩하는 방법을 알아봅니다.
TL;DR
-
G4Version.hh 헤더를 포함시킴
-
#define
전처리기를 통해 정의되는G4VERSION_NUMBER
매크로상수를 이용하여 Geant4의 버전 번호 확인버전 번호는 정수값으로 부여되며 다음의 규칙을 따름
ABC
A: Major version number
B: Minor version number
C: patch number
-
예시
Geant4 Version 9.6의
G4VERSION_NUMBER
는 960Geant4 Version 10.7 patch 02의
G4VERSION_NUMBER
는 1072 -
이 외,
G4VERSION_TAG
매크로상수나, G4String 자료형의G4Version
,G4Date
변수를 이용할 수도 있음
G4Version.hh
Geant4에서는 현재 이용중인 Geant4 라이브러리의 버전 정보를 담고있는 G4Version.hh 헤더를 제공합니다.
사용자는, 코드 어느 곳에서든 이 헤더를 포함시켜서 Geant4의 버전 정보를 이용할 수 있습니다.
G4VERSION_NUMBER
가장 많이 쓰일 것으로 생각되는 매크로상수입니다.
G4Version.hh 파일 내에서, 다음과 같은 코드를 통해 정의되어 있습니다. (Version 10.7 patch 02 기준)
1#ifndef G4VERSION_NUMBER
2 #define G4VERSION_NUMBER 1072
3#endif
G4VERSION_NUMBER
라는 매크로상수는 Geant4의 버전 번호를 의미하는 정수값으로 부여되며 다음의 규칙을 따릅니다.
ABC
A: Major version number
B: Minor version number
C: patch number
예를 들어 Geant4 Version 9.6의 G4VERSION_NUMBER
는 960이 됩니다. (patch 번호가 없으면 0번으로 붙게됩니다)
또 다른 예로, Geant4 Version 10.7 patch 02의 G4VERSION_NUMBER
는 1072가 됩니다. (10.x 버전 이후의 경우에는 major version number가 두자리수가 됩니다)
사용자는 이 매크로상수를 다음과 같이 활용할 수 있습니다.
1#include "G4Version.hh"
2
3// ...
4
5if(G4VERSION_NUMBER >= 1000)
6{
7 // What to do when the version is 10.x
8}
9else
10{
11 // What to do when the version is 9.x
12}
G4VERSION_TAG
이 매크로상수는 G4Version.hh 파일 내에서, 다음과 같은 코드를 통해 정의되어 있습니다. (Version 10.7 patch 02 기준)
1#ifndef G4VERSION_TAG
2 #define G4VERSION_TAG "$Name: geant4-10-07-patch-02 $"
3#endif
Geant4의 버전명이 보다 상세하게 풀어서 쓰여있습니다.
G4Version
G4Version
은 G4Version.hh에 정의된 G4String형 변수입니다. 다음과 같은 코드를 통해 정의되어 있습니다. (Version 10.7 patch 02 기준)
1#ifdef G4MULTITHREADED
2static const G4String G4Version = "$Name: geant4-10-07-patch-02 [MT]$";
3#else
4static const G4String G4Version = "$Name: geant4-10-07-patch-02 $";
5#endif
G4VERSION_TAG
매크로상수와 기본적으로 같은 값을 가집니다만, Multi-threading 옵션을 켜고 설치한 Geant4의 경우에는 G4Version
변수의 끝에 [MT]
표시가 추가됩니다.
G4Date
G4Date
은 G4Version.hh에 정의된 G4String형 변수입니다. 다음과 같은 코드를 통해 정의되어 있습니다. (Version 10.7 patch 02 기준)
1static const G4String G4Date = "(11-June-2021)";
해당 버전이 출시된 날짜가 저장되어 있습니다.