Geant4 UI command에서 활용 가능한 반복문. /control/loop
와 /control/foreach
에 대해 알아봅니다.
개요
Geant4에서 built-in UI command로 제공하는 반복문은 두 가지입니다.
- /control/loop
- /control/foreach
이 반복문의 중요한 특징은 “다른 매크로파일을 반복적으로 실행시킨다“는 점입니다.
각각의 용법과 함께 좀 더 자세히 살펴보겠습니다.
/control/loop
/control/loop
반복문은 대개의 프로그래밍 언어가 제공하는 for문과 유사합니다.
시작, 끝, 간격을 입력하여 카운터를 증감시키며 다른 매크로파일을 실행시켜줍니다.
사용법
/control/loop 매크로파일명 카운터변수명 시작값 끝값 간격
의 형태로 입력합니다.
이 때, 매크로파일명
과 카운터변수명
은 문자열(string)로 인식하고, 시작값
, 끝값
, 간격
은 실수형(double)으로 인식합니다.
이렇게 입력하면, 매크로파일
에서 카운터변수
를 시작
~끝
값으로 aliasing 시켜줍니다. 즉, 매크로파일
내에서는 {카운터변수}
와 같이 입력하면 되는 것이죠.
간격
값은 생략 가능합니다. 생략할 경우 기본값으로 1이 사용됩니다.
사용예시
다음과 같은 example.mac 파일을 만든다고 생각해봅시다.
1/gun/energy 10. MeV
2/run/beamOn 10000
3
4/gun/energy 12. MeV
5/run/beamOn 10000
6
7/gun/energy 14. MeV
8/run/beamOn 10000
9
10/gun/energy 16. MeV
11/run/beamOn 10000
12
13/gun/energy 18. MeV
14/run/beamOn 10000
15
16/gun/energy 20. MeV
17/run/beamOn 10000
여기서 에너지 값이 10~20으로 2씩 바뀌고 있을 뿐, 나머지는 반복됩니다.
이 경우 다음과 같이 두 개의 파일로 나누어 작성하면 동일하게 동작합니다.
-
example.mac
1/control/loop myRun.mac ene 10. 20. 2.
-
myRun.mac
1/gun/energy {ene} MeV 2/run/beamOn 10000
/control/foreach
/control/foreach
반복문은 대개의 프로그래밍 언어가 제공하는 range-based for문과 유사합니다.
카운터를 제시된 목록의 각 값으로 바꾸어가며 다른 매크로파일을 반복적으로 실행합니다.
사용법
/control/foreach 매크로파일명 카운터변수명 "반복할값목록"
의 형태로 입력합니다.
여기서 "반복할값목록"
을 입력할 때 주의점이 두 가지 있습니다.
- 목록 전체를 반드시 ""(double-quote)로 감쌀 것
- 목록의 각 값은 띄어쓰기로 구분할 것
이렇게 입력하면, 매크로파일
에서 카운터변수
를 "반복할값목록"
에 적힌 각각의 값으로 aliasing 시켜줍니다. 즉, 매크로파일
내에서는 {카운터변수}
와 같이 입력하면 되는 것이죠.
사용예시
다음과 같은 example.mac 파일을 만든다고 생각해봅시다.
1/gun/particle p
2/run/beamOn 10000
3
4/gun/particle e-
5/run/beamOn 10000
6
7/gun/particle e+
8/run/beamOn 10000
9
10/gun/particle gamma
11/run/beamOn 10000
여기서는 입자가 p, e-, e+, gamma로 바뀌고 있을 뿐, 나머지는 반복됩니다.
이 경우 다음과 같이 두 개의 파일로 나누어 작성하면 동일하게 동작합니다.
-
example.mac
1/control/foreach myRun.mac pname "p e- e+ gamma"
-
myRun.mac
1/gun/particle {pname} 2/run/beamOn 10000