May 6, 2013

How to embed root code inside Geant4 using CMakeFile.txt

To use root modules inside Geant4 framework, we must have (1) already compiled root library with header files somewhere like /usr/local/root. (2) Then we must define some compile option in CMakeFile.txt which is located in our geant4 project directory (such like /path_to/examples/N03). If we use make, definition should be in GMakefile(or Makefile) instead of CMakeFile.txt. That's all.

I assume that we already have well compiled recent release of root and geant4 and we already know how to use both of code. if you need to know installing and using method of both code, please visit geant4 and root homepage.

To use following configuration, ROOTSYS environment variable must be set already.
     export ROOTSYS=/path/to/root





If you use recent cmake distribution, you might have following error.



Then simply open your FindROOT.cmake file at /path/to/root/etc/FindROOT.cmake. And replace
   include(CMakeMacroParseArguments)
   to
   include(CMakeParseArguments)
CMakeMacroParseArguments is deprecated method in recent cmake utility.

Dec 19, 2011

Geant4 9.5 Released (1). CMake의 등장

12월 2일 지안트4 가 9.4p2 에서 9.5로 프로덕션 버전을 업데이트를 했다[2].
필자는 지안트 9.5의 새로운 기능들 중 다음의 세 가지를 손꼽는데,

1. cmake의 등장과 clhep의 내장
2. 저 에너지 영역의 em 계산을 기본 em physics builder 에 내장
3. multi-thread 가능

이들 중 지금은 1번에 관해 설명하려고 한다.


cmake의 등장으로
윈도우, 리눅스, 맥 어떤 플랫폼이건 지안트의 개발 환경은 전 보다 훨씬 간편해지고 쉬워지고 가벼워졌다.
예를 들어 9.4 버전과 비교하자면, 그땐 윈도우에서 지안트를 설치 및 실행 하기 위해 cygwin을 깔아야 했고 make.exe 등의 파일 패치도 해야했다.
gcc는 불안했기 때문에 vc++ 를 또 설치해야 했고, root 연동 같은 것들이 쉽지 않았다.

조금 뒤에 설명할테지만, 지금(v 9.5)은 여느 윈도우 프로그램 처럼 클릭 만으로 지안트 윈도우 버전이 설치되고 그 뒤의 코드 실행과 수정은 친절한 vc++ 윈도우 프레임 안에서 쉽게 이루어 진다.

이 모든 내용에 관해 자세히 알고 싶다면 사용자 메뉴얼 설치편[1]과 새로 바뀐 사항[2] 을 참고하시라.

아래는 바뀐 cmake 때문에 윈도우 버전 설치와 실행이 얼마나 단순해 졌는지에 관한 테스트 기록이다.

윈도우용 지안트의 설치

그림 1 지안트 홈페이지의 다운로드 섹션

그림1의 맨 아래를 보면, executable installer !!, 그냥 마우스 클릭으로 설치가 완료된다는 것이다.

다시 그 아랫 줄을 보면, clhep 2.1.1.0 이 내장 되있다고 한다, 전처럼 별도로 clhep을 설치할 필요가 없다.

그럼 다운 받아 설치 하자,

그림 2 설치 직후 지안트 폴더(C:/Program Files/Geant4 9.5/)

설치과정은 생략했다. 그냥 [Next] 버튼만 클릭하면 되니까... 설치가 끝나면, 그림 2와 같이 지안트 설치가 되어있다. Geant4 9.5 디렉토리 아래 data를 만들고 그 안에 그림1 에서 봤던 데이터 파일들(그림 1에선 맨 위에 세 줄 다운로드가 보임, 안보이는 모든 데이터를 다운받아  그림 3을 보고 따라하시라)을 모두 다운로드 받아 압축 해제 한뒤 그림 3과 같이 풀어 놓자.

그림 3 데이터 세트를 설치한 모습(C:/Program Files/Geant4 9.5/data/)

위 페이지에 쓰여 있는 대로, 환경 변수를 설정한다.
지안트는 반응 단면적 실험데이터를 기초하여 몬테카를로 데이터를 셈플링한다.
때문에 계산시에 늘 이 자료를 필요로 한다. 그러므로 그림3 의 데이터 세트는 어디에 있든
위치는 별로 중요하지 않지만, 지안트에게 정확히 알려는 줘야 한다.
그래서 환경변수 설정이 필요하다.
(예전 버전에 비하면 환경 변수는 거의 없어진거라고 봐도 과언이 아니다.
9.4 대의 버전만 해도 이것 저것 심심하면 다 환경변수로 도배질이 되어 있었다.)

지안트의 설치는 이로서 끝이다.



예제의 실행

그림 4 예제는 share 폴더 아래 있음. 만일 없다면? 이 압축 파일을 share폴더에 해제 하면 된다.


좀 전에 얘기했던 cmake가 등장할 대목이다. 지안트의 설치도 그렇고, 실행도 그렇고 예전에 사용하던  "gnumake" 에서 "cmake 후 빌더"로 바뀌었다.

cmake는 이기종에서 컴파일할 때 사용하면 편리한 툴이다(여기까지만 설명하겠다 ㅎㅎㅎ 사실 필자도 cmake에 관해 잘 알지 못한다, 단, 중요한 것은 cmake는 여러 빌더에 맞는 환경을 선택해서 만들어 줄 수 있다는 것이다).

 이해가 어렵다면, 어쨌든 필요하니까 다운받아 설치하자.
 또한 visual c++ express도 다운받아 설치하자. (위는 모두 공짜이다)

이제 novice 예제 N05번을 컴파일 하려고 한다.

 우선 cmake를 실행 (그림 5 참고)
(1) source code 에  N05폴더를,
(2) build the bin. 에 N05 폴더를 적어주고,
좌측 하단의 Configure, Generate 버튼을 차례로 눌렀다.
이렇게 하면 vc++ 에서 예제를 컴파일 할 수 있도록  N05.sln 솔루션 파일이 생긴다.

그림 5 cmake 로 예제 돌릴 준비.

실제 N05 예제 폴더에 가보니, 위에서 언급한 대로 visual c++ project가 생겼다.
더블클릭하여 vc++로 들어가보자.


그림 6. 만들어진 프로젝트의 빌드


N05.sln을 클릭하면, vc++ 프로젝트 화면으로 진입하고, 이제 F7로 솔루션을 빌드하면 예제가
컴파일 된다.

그림 7 빌드 성공

가벼웁게 ㅠㅠ 완셩!!!

복습하는 겸 해서 위에서 했던 순서는
1. cmake로 예제 안에다 vc++ 용 sln 관련 파일 생성.
2. vc++로 sln을 로드한 다음 솔루션 빌드 클릭
끝.

아래는 실행된 모습. 설치와 예제 실행에 시행착오를 포함하여 공들인 시간 약... 두어 시간...
감동이지 않을 수 없다.
게다 vc++ express 라는 훌륭한 빌더와 에디터의 공짜 사용은 보다 큰 감동!

오래전 지도교수님을 통해 접한 지안트, 설치만 꼬박 2주가 걸렸고, 예제 분석에 한두달이 걸렸던 기억이 난다. 유닉스와 c언어의 조작이 어렵지 않았던 필자 였음에도 난생 처음 보는 코드를 설치하기 위해 혼자 헤딩했던 그 때의 기억을 떠올리면 지금도 끔찍하다. ㅎㅎ

그림 8 실행 (visualization macro를 이용)



한 가지 아쉬운 점은 아직 모든 example들이 cmake 화 되지 않았다는 것이다. 대부분 간단히 example 상위 폴더에 CMakeList.txt 파일을 만들면 모두 cmake환경에서 실행 가능하다.


얼마나 변했을까 싶어서 한번 시도 해 봤더니, 정말 많이 쉬워지고 간편해졌다. 적어도 설치 실행에 들이는 공을 줄일 수 있다는 면에서 주목할 만 하다.

하지만 여전히 초보자들에게는 c++ 의 벽이 큰건 사실이다. 허나 이 또한 훌륭한 M$ vc++ builder의 힘을 빌면(자동완성 기능이랄지, 소스 검색 기능이랄지) 충분히 해 볼만 하다.


참고 문헌

[1] Geant4 9.5 Installation Guide
[2] Geant4 9.5 Release Note
[3] CMake: Cross Platform MAKE

Dec 16, 2011

Single File Example of Geant4

간단한 지안트 예제를 만들어 봤다. 목적은 입문자의 맛베기용.

간단한 원통형 철(Fe) 덩어리에 양성자 60MeV를 조사하는 예제이다.
그냥 예제니까, Hadronic interaction을 뺐다. 따라서 모사된 현상은 물리적으로 완전하지 못하다.
아, 이렇게 만들어서 쓰는거구나 를 알면 목적은 달성이므로...

개별 힛 정보에 접근해서 데이터를 빼 내는것도 몇 줄 담았다.
이것이 가장 핵심이다.


예제 다운로드

Nov 15, 2011

python으로 web server를 CherryPy

1. 소개
cherry-pypython기반의 web server 이다. python 자체가 원래 web api를 충실히 지원하긴 하지만 cherry-py는 사용이 훨씬 간결하고 편리하다. 특히 저자 처럼 python을 신봉하는 사람이라면 CGI 분야로의 python의 저변 확대는 너무 반가운 얘기이지 않을 수 없다.

cherry-py가 php, asp, jsp 등과 비교하여 무엇이 우월한지는 잘 모르겠다. 원래부터 컴퓨터 언어라는 것이 본인이 사용하기에 편하고 목적 구현에 효율적이기만 하다면 되는거다. 굳이 비교하여 사용의 당위성을 입증할 필요는 없다. 필자에게 제일 재미있는 언어는 python 이다. 사용이 편하고, 목적에 효율적이며, 다루는 재미가 있어서 cherry-py로 간단한 CGI 서버를 만들기로 선택했다.


2. 설치
설치는 별게 아니라 python용 라이브러리를 만드는 일이다.  목적은 그저

import cherrypy

위의 한 줄이 동작하도록 cherry-py library를 설치하는 것이다.
필자의 오래된 macbook pro에는 python 2.7이 mac port로 설치되어 있어서 그것을 이용하였다.
우선,  CherryPy-3.2.2.tar.gz를 다운로드 받고, 압축을 해제한 후, CherryPy-3.2.2 디렉토리 안에 들어가서 아래와 같이 타이핑 한다.
python setup.py install


다 끝나면 설치 완료, 참 간단하다.


3. 실행
cherry-py는 클릭 하면 실행되거나 daemon 형태로 돌면서 특정 디렉토리 안의 소스들을 무작정 서비스 하는 그런 코드가 아니다. 설치 섹션에서 압축을 해제했던 .../CherryPy-3.2.2/cherrypy/tutorial 에는 친절한 튜토리얼이 있다.
실행법은 다음과 같다.


huiso:tutorial garam$ pwd
/Users/garam/Downloads/CherryPy-3.2.2/cherrypy/tutorial
huiso:tutorial garam$ ls
README.txt                     tut02_expose_methods.py        tut08_generators_and_yield.py
__init__.py                    tut03_get_and_post.py          tut09_files.py
bonus-sqlobject.py             tut04_complex_site.py          tut10_http_errors.py
custom_error.html              tut05_derived_objects.py       tutorial.conf
pdf_file.pdf                   tut06_default_method.py
tut01_helloworld.py            tut07_sessions.py
huiso:tutorial garam$ python2.7 tut01_helloworld.py 
[14/Nov/2011:23:50:48] ENGINE Listening for SIGHUP.
[14/Nov/2011:23:50:48] ENGINE Listening for SIGTERM.
[14/Nov/2011:23:50:48] ENGINE Listening for SIGUSR1.
[14/Nov/2011:23:50:48] ENGINE Bus STARTING
[14/Nov/2011:23:50:48] ENGINE Started monitor thread 'Autoreloader'.
[14/Nov/2011:23:50:48] ENGINE Started monitor thread '_TimeoutMonitor'.
[14/Nov/2011:23:50:48] ENGINE Serving on 127.0.0.1:8080
[14/Nov/2011:23:50:48] ENGINE Bus STARTED

웹 브라우저로 접속해보자.



해 준 일은 다음과 같다.


Line 1 : cherrypy 모듈을 불렀다.
Line 3-6 : class 를 하나 만들고, member function index와 member variable exposed를 정의했다.
Line 8-9 : tutorial.conf 파일의 전체 경로를 문자 변수로 들고 있는 tutconf 변수를 정의했다.
                 설정파일은 별게 없고, 서버명, 포트번호 정도가 적혀있다.
Line 11 : 체리파이에게 위에서 만든 class를 서비스 하라고 시켰다.

아, 이 얼마나 아름다운가. 미니멀리즘이란 바로 이런 것이 아닌가!!

견고한 웹 서버와 hello world 예제가 "단지 이게 다" 이다.