2.3.2 Cài đặt các file dữ liệu Trong trường hợp không chọn GEANT4_INSTALL_DATA trong quá trình cài đặt GEANT4, ta có thể cài đặt các file dữ liệu sau khi quá trình cài đặt GEANT4 đã hoàn
Trang 1Hướng dẫn sử dụng GEANT4 cho hệ điều
hành Windows
Đặng Nguyên Phương (tổng hợp)
TP Hồ Chí Minh − 10/2013
Trang 2Lời nói đầu 4
1.1 Giới thiệu 5
1.2 Lịch sử hình thành 5
1.3 Các chức năng chính và ưu nhược điểm 6
1.3.1 Chức năng chính 6
1.3.2 Ưu nhược điểm 6
1.4 Cấu trúc của GEANT4 7
1.5 Một số lưu ý khi sử dụng GEANT4 8
2 Cách thức cài đặt GEANT4 10 2.1 Cài đặt CMake 10
2.2 Cài đặt Microsoft Visual C++ 11
2.3 Cài đặt GEANT4 12
2.3.1 Cài đặt chương trình 12
2.3.2 Cài đặt các file dữ liệu 14
2.3.3 Sử dụng trực tiếp file cài đặt 17
2.4 Biên dịch ứng dụng với GEANT4 18
3 Xây dựng và thực thi chương trình 21 3.1 Hệ thống các đơn vị 21
3.1.1 Đơn vị cơ bản 21
3.1.2 Cách khai báo đơn vị 21
3.2 Cách thức xây dựng một ứng dụng trong GEANT4 22
3.2.1 Các bước cần thiết 22
3.2.2 Hàm main() 23
3.2.3 G4RunManager 24
3.2.4 G4UImanager 25
3.2.5 G4cout và G4cerr 25
3.2.6 Xây dựng hình học detector 25
3.2.7 Xác định quá trình vật lý 25
3.2.8 Tạo event sơ cấp 26
Trang 33.2.9 Cấu trúc mã nguồn của một ứng dụng 26
3.3 Cách thực thi ứng dụng 27
3.3.1 Batch mode 27
3.3.2 Batch mode với macro 28
3.3.3 Interactive mode 29
4 Xây dựng hệ detector 31 4.1 Xây dựng hình học 31
4.1.1 Tạo các khối hình học 32
4.1.2 Tạo các khối luận lý 33
4.1.3 Tạo các khối vật lý 35
4.2 Định nghĩa vật liệu 43
4.2.1 Định nghĩa vật liệu đơn 43
4.2.2 Định nghĩa phân tử 44
4.2.3 Định nghĩa hỗn hợp theo tỉ lệ khối lượng 44
4.2.4 Định nghĩa vật liệu dựa vào cơ sở dữ liệu của GEANT4 45
4.2.5 Định nghĩa vật liệu mới từ vật liệu có sẵn 45
4.3 Khai báo trường điện từ 45
4.3.1 Từ trường 46
4.3.2 Điện trường 47
5 Các quá trình vật lý 48 5.1 Khai báo hạt 48
5.1.1 Định nghĩa hạt 48
5.1.2 Động học hạt 49
5.2 Khai báo quá trình vật lý 50
5.2.1 Tương tác điện từ 51
5.2.2 Tương tác hadronic 52
5.2.3 Quá trình phân rã hạt nhân 52
5.3 Thiết lập ngưỡng cắt 54
5.3.1 Ngưỡng tạo hạt và vết 54
5.3.2 Ngưỡng cắt theo vùng 55
6 Mô phỏng event 56 6.1 Tạo các hạt ban đầu 56
6.1.1 G4ParticleGun 56
6.1.2 G4GeneralParticleSource 57
6.2 Hits 58
6.2.1 Vùng nhạy 58
6.2.2 Ghi nhận đại lượng 58
Trang 46.3 Tracking 59
7.1 Các lớp xử lý dữ liệu 617.2 Histogram 627.3 Ntuple 63
Trang 5Tiếp theo sau tập tài liệu Hướng dẫn sử dụng ROOT cho hệ điều hành Windows,tôi muốn tiếp tục giới thiệu đến các bạn thành viên nhóm NMTP một trong những bộcông cụ mô phỏng Monte Carlo rất mạnh trong lĩnh vực hạt nhân và hạt cơ bản Nếu cácbạn đã làm quen với ROOT, sẽ không khó khăn gì cho các bạn để làm quen với bộ công
cụ này, đó chính là chương trình GEANT4 Đây là một bộ công cụ dùng để mô phỏngvận chuyển của các hạt qua môi trường vật chất Các lĩnh vực ứng dụng của GEANT4rất rộng, từ vật lý năng lượng cao, khoa học không gian, hạt nhân, lò phản ứng cho tới
y học hạt nhân, xạ trị,
Tập tài liệu này nhằm mục đích trình bày sơ lược cho các bạn những kiến thức và kĩnăng cơ bản nhất trong việc sử dụng GEANT4 cho công việc của mình Do đó, nội dungcủa bài viết khá cô đọng và không đi quá sâu vào chi tiết Các kiến thức được trìnhbày trong tập tài liệu này được tổng hợp từ nhiều nguồn khác nhau Để có thể tìmhiểu về GEANT4 một cách trọn vẹn hơn, các bạn có thể vào trang web của GEANT4tại http://geant4.cern.ch/; hoặc tham gia trao đổi, thảo luận với các chuyên gia tạihttp://hypernews.slac.stanford.edu/HyperNews/geant4/cindex
Nếu các bạn thích thú với việc sử dụng ROOT và mong muốn có một chương trình môphỏng để đi kèm với ROOT một cách đồng bộ, thì đây chính là chương trình mà tôikhuyên các bạn nên tìm hiểu
Đặng Nguyên Phương
Trang 6Giới thiệu về GEANT4
GEANT4 (GEometry ANd Tracking) là một bộ công cụ miễn phí, được sử dụng để môphỏng sự vận chuyển của các hạt qua môi trường vật chất bằng phương pháp MonteCarlo Đây là một chương trình mô phỏng mã nguồn mở, cung cấp một tập hợp các quátrình vật lý đa dạng để mô phỏng tương tác của các hạt với môi trường trên một dải nănglượng rộng
GEANT4 được xây dựng trên nền tảng ngôn ngữ lập trình C++, khai thác và ứng dụngcác tiến bộ của kỹ thuật lập trình hướng đối tượng, hỗ trợ người dùng trong việc xâydựng và sử dụng các thành phần cần thiết Chương trình được phát triển và sử dụng bởimột cộng đồng rộng lớn các nhà khoa học hiện đang tham gia nhiều thí nghiệm lớn ởChâu Âu, Mỹ, Nhật, Nga,
Các lĩnh vực ứng dụng của GEANT4 rất rộng, bao gồm:
dự án RD44 được tiến hành tại CERN nhằm xây dựng một chương trình hoàn toàn mớidựa trên kĩ thuật lập trình hướng đối tượng (object-oriented technology) Dự án này được
Trang 7sự tham gia của rất nhiều nhà khoa học máy tính cũng như kĩ sư lập trình tại các quốcgia Châu Âu, Nhật, Canada và Mĩ Mục tiêu của dụ án là xây dựng một chương trình
mô phỏng hệ đo có đầy đủ chức năng và linh hoạt phù hợp với các yêu cầu của các thínghiệm vật lý hạt trong tương lai Việc nghiên cứu và phát triển hoàn thành vào năm
1998 với sự ra đời phiên bản đầu tiên của GEANT4, và từ đó về sau trung bình hàngnăm có 2 phiên bản nâng cấp được công bố
Các cột mốc chính trong lịch sử hình thành và phát triển của GEANT4:
• 12/1994: dự án RD44 được bắt đầu
• 04/1997: phiên bản alpha đầu tiên được công bố
• 07/1998: phiên bản beta đầu tiên được công bố
• 12/1998: phiên bản GEANT4 đầu tiên được công bố
Bộ công cụ GEANT4 có thể được sử dụng để
• Mô phỏng các hạt cơ bản (lepton, hadron, boson, ) cũng như các hạt ion
• Tính toán các vết vả tương tác của hạt với các quá trình vật lý khác nhau
• Tạo ra các hạt mới sau tương tác và cho phép truy cập tất cả thông tin trong mỗitương tác
• Tổng hợp các thông tin, cho kết quả đầu ra ghi nhận bởi các detector
Ưu điểm
• Có khả năng mô phỏng các thí nghiệm có cấu hình phức tạp
Trang 8• Có thể được sử dụng để nghiên cứu và tối ưu hóa các thiết bị ghi nhận, các kĩ thuật
xử lý, giúp so sánh giữa kết quả thực nghiệm và lý thuyết
• Được xây dựng trên nền tảng lập trình hướng đối tượng, có độ linh động cao nên
dễ dàng cho việc nâng cấp
• Được sự đóng góp của một cộng đồng lớn các nhà khoa học và kĩ thuật, các tínhnăng mới và mô hình vật lý mới được cập nhật thường xuyên
Nhược điểm
• Khá tốn tài nguyên máy tính trong quá trình mô phỏng
• Cấu trúc chương trình khá phức tạp, gồm nhiều phần kết nối với nhau
• Đòi hỏi việc nghiên cứu chi tiết và kiểm tra kĩ càng các quá trình vật lý khi đưa vàotrong mô phỏng
Bô công cụ GEANT4 bao gồm nhiều thành phần nhỏ được xây dựng một các độc lập vớinhau, tuy nhiên vẫn có sự phụ thuộc, liên kết lẫn nhau Hình 1.1 trình bày mối liên hệphụ thuộc giữa các thành phần với nhau trong GEANT4 Các thành phần chính gồm có:
• Global: chứa hệ thống các đơn vị, hằng số, các phép gieo số ngẫu nhiên
• Run và Event: liên quan tới việc tạo các event, các hạt sơ cấp và thứ cấp cần thiếttrong quá trình mô phỏng
• Processes, Tracking và Track: xác định vết của hạt, các quãng chạy, tương tác,
• Geometry và Material: mô tả detector, vật liệu, tính toán khoảng các đến cácmặt biên
• Physics và Particles: chứa tất cả các mô hình vật lý, tính chất của hạt
• Hits và Digits: liên quan đến việc tạo ra tín hiệu ghi nhận khi hạt đập vào detector
• Readout: xử lý tín hiệu đầu ra, pile-up,
• Visualization, Persistency và Interfaces: các công cụ đồ họa hiển thị hình học
và vết của hạt, giao diện tương tác với người dùng và các chương trình xử lý số liệukhác (vd: ROOT)
Trang 9Hình 1.1: Sơ đồ liên kết giữa các lớp trong GEANT4
• Tất cả các lớp (class) cơ bản trong GEANT4 đều được bắt đầu bằng G4
– G4VUserPrimaryGeneratorAction: mô tả nguồn phát hạt, năng lượng, phân
bố góc,
• Các lớp vừa được nhắc tới là các lớp cơ bản (base class) hay còn gọi là lớp trừu
Trang 10tượng (abstract class), không thể dùng trực tiếp các lớp này trong xây dựng ứngdụng mô phỏng cũng như không thể tạo đối tượng (object ) thuộc lớp này bằng lệnhnew Người dùng phải tự xây dựng lớp riêng cho mình (lớp dẫn xuất hay còn gọi
là lớp con) dựa trên cơ sở của các lớp này và tạo các đối tượng thuộc các lớp vừađược xây dựng Ví dụ như để xây dựng hệ đo detector, người dùng phải xây dựngmột lớp MyG4DetectorConstruction dựa trên lớp G4VUserDetectorConstruction,điều này sẽ được trình bày chi tiết hơn ở những phần sau
Trang 11Cách thức cài đặt GEANT4
GEANT4 có thể được cài đặt trên nhiều hệ điều hành khác nhau, tuy nhiên tài liệunày chỉ tập trung vào việc cài đặt trên hệ điều hành Windows Cách thức cài đặtđược trình bày dựa theo hướng dẫn tại trang http://geant4.web.cern.ch/geant4/UserDocumentation/UserGuides/InstallationGuide/html/index.html Để cài đặt đượcGEANT4 cho hệ điều hành Windows, ta cần có:
• Công cụ hỗ trợ biên dịch CMake
• Trình biên dịch Microsoft Visual C++
(cmake-2.8.11.1-win32-• Chọn option thứ 2 hoặc thứ 3 để đưa đường dẫn CMake vào trong biến môi trườngPATH của hệ thống
• Thực hiện theo hướng dẫn của chương trình để kết thúc cài đặt
Trang 12Hình 2.1: Giao diện cài đặt của CMake
Microsoft Visual C++ là một phần trong bộ Microsoft Visual Studio, tuy nhiên ta chỉ cầntải phiên bản miễn phí Visual C++ tại http://www.microsoft.com/express/Downloads
là được Trong phần hướng dẫn này, phiên bản Visual C++ 2008 Express được sử dụng.Các bước thực hiện việc cài đặt như sau:
• Sau khi download thành công file setup (vcsetup.exe), double click để chạy chươngtrình setup (Hình 2.2)
Hình 2.2: Giao diện cài đặt của Visual C++ 2008 Express
• Ở Welcome to setup, nhấp Next
Trang 13• Ở License Terms, nhấp chọn I have read and accept the license terms và nhấp Next.
• Ở Installation Options, bỏ dấu chọn ở Microsoft SQL và bấm Next
• Ở Destination Folder, giữa nguyên đường dẫn mặc định và bấm Install
• Sau khi cài đặt hoàn tất, bấm Exit để thoát
• Ngoài ra, Microsoft còn yêu cầu đăng kí để được sử dụng sản phẩm Vào Start →All Programs, mở Visual C++ 2008 Express, trên thanh menu nhấp vào Help vàlàm theo các hướng dẫn đăng kí
Để cài đặt được chương trình GEANT4, trước tiên ta cần tải mã nguồn và các file dữliệu (data files) từ trang web của chương trình (http://geant4.cern.ch) Tại giao diệnchính của trang web, ta nhấp vào nút Download (Hình 2.3) để vào được trang download
Hình 2.3: Giao diện trang web GEANT4, nút Download được đánh dấu màu đỏ
2.3.1 Cài đặt chương trình
• Tại trang download, trong phần Source files, nhấp chọn nút Download tương ứngvới ZIP format (Hình 2.4)
• Sau khi đã tải được file mã nguồn dùng WinZip hay WinRar để giải nén
• Chạy CMake, sử dụng nút Browse Source chọn đường dẫn đến thư mục mã nguồn, vànút Browse Build để chỉ đường dẫn đến thư mục muốn cài đặt GEANT4 (Hình 2.5)
Trang 14Hình 2.4: Tải file mã nguồn
Sau đó bấm nút Configure, chương trình sẽ hiện ra thông báo đề nghị chọn trìnhbiên dịch, chọn như trong Hình 2.6 và bấm Finish
Hình 2.5: Giao diện CMake khi biên dịch GEANT4
• Sau khi cấu hình xong (thể hiện qua dòng chữ Configuring done), CMake sẽ yêucầu xác định lại một số tham số cho cấu hình như trong Hình 2.5, bật tắt các tham
có sẵn thư viện và các header của Xerces-C++
– GEANT4_USE_INVENTOR (mặc định OFF) cài đặt driver cho OpenInventor; yêu
Trang 15Hình 2.6: Chọn trình biên dịchcầu có sẵn SoWin (Windows), thư viện và header của OpenGL.
– GEANT4_USE_OPENGL_WIN32 (mặc định OFF) cài đặt driver cho Win32 OpenGL;yêu cầu có thư viện và header của OpenGL Nên chọn ON khi biên dịch trênWindows
– GEANT4_USE_QT (mặc định OFF) cài đặt giao diện và driver cho Qt4 User terface; yêu cầu có thư viện và header của Qt4 và OpenGL
In-– GEANT4_SYSTEM_CLHEP (mặc định OFF) biên dịch GEANT4 với thư viện ngoàiCLHEP Không nên chọn
• Sau khi chỉnh sửa cấu hình, bấm Configure lần nữa để cấu hình lại, sau đó bấmGenerate để tạo Makefile Khi dòng chữ Generating done hiện lên có nghĩa là quátrình tạo Makefile đã hoàn tất
• Mở Visual C++, chọn File → Open → Project/Solution và chọn file solutioncủa GEANT4 (Geant4.sln) như trong Hình 2.7 Trong khung bên trái, kéo xuống
và nhấp chuột phải vào INSTALL và chọn Build
• Hoàn tất việc cài đặt
2.3.2 Cài đặt các file dữ liệu
Trong trường hợp không chọn GEANT4_INSTALL_DATA trong quá trình cài đặt GEANT4,
ta có thể cài đặt các file dữ liệu sau khi quá trình cài đặt GEANT4 đã hoàn tất, cáchthức tiến hành như sau:
• Tại trang download của GEANT4, trong phần Data files (Hình 2.8), tải các file dữ
Trang 16Hình 2.7: Cấu hình GEANT4 trong CMakeliệu cần thiết:
– G4NDL (có hoặc không có neutron nhiệt) dữ liệu tương tác của neutron vớinăng lượng dưới 10MeV (từ thư viện ENDF/B-VI)
– G4EMLOW dữ liệu tương tác điện từ ở năng lượng thấp (từ các thư việnEPDL97, EEDL, EADL)
– G4PhotonEvaporation dữ liệu các chuyển dời photon (từ thư viện ENSDF).– G4RadioactiveDecay dữ liệu phân rã hạt nhân (từ thư viện ENSDF).– G4SAID dữ liệu từ SAID cho proton, neutron, tán xạ pion, trao đổi điện tíchcủa các nucleon năng lượng dưới 3GeV
– G4NEUTRONXS dữ liệu tiết diện neutron với năng lượng trên 20MeV.– G4PII dữ liệu tiết diện ion hóa trong môi trường vật chất
– RealSurface dữ liệu tán xạ trên các bề mặt quang học
• Tạo thư mục data bên trong thư mục cài đặt GEANT4, copy các file dữ liệu nénvào trong thư mục này và giải nén
• Sau khi đã giai nén các file dữ liệu, ta tiến hành cài đặt các biến môi trường chocác dữ liệu này Nhấp chuột phải vào biểu tượng My Computer trên màn hình
Trang 17Hình 2.8: Tải file dữ liệu
Desktop và chọn Properties Trong cửa sổ Properties chọn tab Advanced, sau đóchọn Environment Variables như trong Hình 2.9
Hình 2.9: Giao diện System Properties
• Trong khung User variables chọn New, nhập vào các biến môi trường tương ứng vớicác thư mục chứa dữ liệu (Hình 2.10)
Trang 18– G4REALSURFACEDATA (RealSurface)
– G4SAIDXSDATA (G4SAIDDATA)
Hình 2.10: Giao diện nhập biến môi trường
• Trong khung System variables chọn biến PATH và nhấp chọn nút Edit, thêm vàođường dẫn của thư mục chứa các thư viện động dll của GEANT4 (thư mục bin)như trong Hình 2.11 và bấm OK
Hình 2.11: Giao diện nhập thêm đường dẫn vào PATH
• Hoàn tất việc cài đặt các file dữ liệu
2.3.3 Sử dụng trực tiếp file cài đặt
Bên cạnh việc biên dịch GEANT4 từ mã nguồn, ta cũng có thể cài đặt bằng cách sử dụngtrực tiếp các chương trình cài đặt đã được biên dịch sẵn trước đó Các bước thực hiệnnhư sau:
• Tại trang download của GEANT4, trong phần Pre-compiled Libraries (Hình 2.12),tải file installer (lưu ý tới sự tương thích giữa cấu hình biên dịch và cấu hình máyđang sử dụng)
• Chạy file cài đặt và làm theo các hướng dẫn trong quá trình cài đặt, lưu ý việc chọnoption để đường dẫn GEANT4 được đặt trong PATH (Hình 2.13)
Trang 19Hình 2.12: Giao diện tải thư viện đã được biên dịch sẵn
Hình 2.13: Giao diện chương trình cài đặt GEANT4
Sau khi hoàn tất các file khai báo cấu hình cho bài toán, để thực hiện được việc mô phỏng
ta cần phải biên dịch các file đó thành file thực thi (.exe) Giả sử ta chọn ví dụ B1 trongthư mục examples của GEANT4 để biên dịch, cách thức làm như sau:
• Mở CMake, thiết lập đường dẫn tới thư mục chứa mã nguồn và thư mục chứa phầnbiên dịch (hai thư mục này không nhất thiết phai giống nhau nhưng trong đây tôi
sử dụng chung), sau đó bấm Add Entry và nhập đường dẫn cho biến Geant4_DIR(tới thư mục có chứa file Geant4Config.cmake) như Hình 2.14
• Tương tự như việc biên dịch GEANT4 ở phần trước, nhấp Configure để thiết lậpcấu hình biên dịch Sau khi kiểm tra các tham số của CMake nhấp Configure lầnnữa, sau đó nhấp Generate
• Mở Visual C++, mở solution của B1, tại khung bên trái nhấp chuột phải vàoALL_BUILD và chọn Build (Hình 2.15)
Trang 20Hình 2.14: Giao diện CMake biên dịch ví dụ B1
Hình 2.15: Giao diện Visual C++ biên dịch ví dụ B1
• File thực thi (exampleB1.exe) sẽ được tạo ra trong thư mục Debug, copy file này
ra ngoài thư mục B1 và double click để chạy chương trình, kết quả thu được nhưtrong Hình 2.16 Trong trường hợp có sử dụng GEANT4_USE_OPENGL_WIN32, giaodiện G4UIWin32 sẽ hiện ra Một cách khác để chạy chương trình vào mở ứng dụng
Trang 21Command Prompt, di chuyển đến thư mục chứa ví dụ B1 và gõ exampleB1.exe
để chạy chương trình
Hình 2.16: Chạy ví dụ B1
Trang 22Xây dựng và thực thi chương trình
• Mega electron volt (MeV)
• điện tích positron (eplus)
3.1.2 Cách khai báo đơn vị
Khi khai báo một giá trị trong GEANT4, tốt nhất là ta nên khai báo đơn vị kèm theobằng cách "nhân" với giá trị khai báo, ví dụ như:
G4double Step = 10∗km , KineEnergy = 3.0∗ GeV , density = 1.5∗ mg/cm3 ;
Trang 23Trong trường hợp đọc dữ liệu từ bảng hay file ngoài không có đơn vị đi kèm, ta nên lậptức gán đơn vị cho dữ liệu vừa đọc được, ví dụ:
f o r (i n t j =0 , j<jmax , j++) CrossSection [ j ] ∗= millibarn ;
Trong trường hợp muốn trình bày kết quả theo đơn vị mình muốn, ta "chia" kết quả chođơn vị đó
G4cout << KineEnergy / keV << " keV";
G4cout << density / ( g / cm3 ) << " g /cm3";
Ngoài ra, ta cũng có thể để cho GEANT4 tự lựa chọn đơn vị trình bày phù hợp với giátrị được cho bằng cách:
G4cout << G4BestUnit ( StepSize , " Length ") ;
Trong trường hợp này, giá trị StepSize sẽ được trình bày theo một trong các đơn vị km,
m, mm, fermi, tùy theo độ lớn của giá trị này
Để khai báo một đơn vị mới không có trong danh sách của GEANT4, ta có thể làm 1trong hai cách sau:
Cách 1: Sử dụng SystemOfUnits.h
#i n c l u d e " SystemOfUnits h"
s t a t i c c o n s t G4double inch = 2 5 4∗ cm ;
Cách 2: Sử dụng hàm định nghĩa đơn vị:
G4UnitDefinition (name, symbol, category, value)
G4UnitDefinition ( "km/ hour " , "km/h", " Speed ", km / ( 3 6 0 0∗ s ) ) ;
G4UnitDefinition ( " meter / ns ", "m/ ns ", " Speed ", m/ ns ) ;
3.2.1 Các bước cần thiết
GEANT4 chỉ là một công cụ, để có thể thực hiện mô phỏng một thí nghiệm hay đo đạcnào đó ta phải tự xây dựng và biên dịch ứng dụng từ mã nguồn Để xây dựng một ứngdụng mô phỏng, cần thực hiện các bước sau đây:
• Xây dựng hình học (hình dạng, thể tích, vật liệu)
• Xác định các quá trình vật lý liên quan
Trang 24• Xác định một event được bắt đầu như thế nào.
• Xác định những thông tin cần thu nhận trong quá trình mô phỏng
Ngoài ra, tùy trường hợp cũng cần thực hiện một số công việc như:
// xay dung Run Manager
// t h i e t l a p c a c l o p ban dau can t h i e t
runManager−>SetUserInitialization (new ExG4DetectorConstruction01 ) ;runManager−>SetUserInitialization (new ExG4PhysicsList00 ) ;
// t h i e t l a p u s e r a c t i o n
runManager−>SetUserAction (new ExG4PrimaryGeneratorAction01 ) ;
// k h o i dong G4 k e r n e l
runManager−>Initialize ( ) ;
// l a y con t r o cho UI Manager va t h i e t l a p c a c bao c a o
G4UImanager∗ UI = G4UImanager : : GetUIpointer ( ) ;
Trang 25Đây là lớp quan trọng cần phải có khi xây dựng ứng dụng Lớp này quản lý quá trìnhthực thi của toàn bộ chương trình mô phỏng, đồng thời quản lý vòng lặp event trong mỗilần chạy chương trình Khi lớp G4RunManager được tạo ra, các lớp quản lý chủ yếu kháccũng được khởi tạo và các lớp này cũng bị xóa khi G4RunManager bị xóa.
G4RunManager cũng đảm nhận vai trò quản lý các khởi tạo ban đầu, cung cấp nhữngthông tin cần thiết để vận hành mô phỏng, bao gồm cấu trúc của detector, các loại hạt,các quá trình vật lý được mô phỏng, cách tạo ra hạt sơ cấp trong mỗi event, và các yêucầu cần thiết khác trong quá trình mô phỏng
Trong ví dụ hàm main() ở trên, các dòng
runManager−>SetUserInitialization (new ExG4DetectorConstruction01 ) ;runManager−>SetUserInitialization (new ExG4PhysicsList00 ) ;
tạo các đối tượng (object ) mô tả hình học detector (ExG4DetectorConstruction01) vàcác quá trình vật lý (ExG4PhysicsList00) và chuyển con trỏ của các đối tượng này chorunManager Các lớp ExG4DetectorConstruction01 và ExG4PhysicsList00 được xâydựng từ các lớp công cụ G4VUserDetectorConstruction và G4VUserPhysicsList tươngứng Điều này cũng tương tự cho lớp ExG4PrimaryGeneratorAction01
Dòng lệnh
runManager−>Initialize ( ) ;
thực hiện việc xây dựng detector, tạo các quá trình vật lý, tính toán tiết diện tương táctương ứng và các thiết lập khác cho việc chạy chương trình Việc chạy chương trình đượcthực hiện bằng dòng lệnh
i n t numberOfEvent = 3 ;
runManager−>BeamOn ( numberOfEvent ) ;
Trang 26Với các dòng lệnh này, 3 event được bắt đầu mô phỏng, các cấu hình detector và quátrình vật lý sẽ được giữ nguyên trong suốt quá trình mô phỏng.
G4UImanager là lớp kiểm soát các thao tác lệnh và giao diện người dùng Trong hàmmain(), con trỏ đến phần quản lý giao diện có thể thu được bằng lệnh
G4UImanager∗ UI = G4UImanager : : GetUIpointer ( ) ;
để thực thi các câu lệnh cho ứng dụng, ta có thể sử dụng phương thức ApplyCommand()
G4cout và G4cerr là các lớp cho dòng xuất nhập (iostream) trong GEANT4, công dụngcủa các đối tượng này cũng tương tự như cout và cerr tuy nhiên được điều khiển bằngG4UImanager
• Loại hạt sử dụng trong mô phỏng
• Tiết diện đối với từng loại hạt
• Quá trình vật lý đối với từng loại hạt được mô phỏng
• Ngưỡng cắt
Trang 273.2.8 Tạo event sơ cấp
Người dùng phải xây dựng một lớp từ G4VUserPrimaryGeneratorAction Trong lớp này,người dùng cần khai báo trạng thái ban đầu của sự kiện sơ cấp (sẽ được nói rõ hơn trongChương 6), chẳng hạn như
• Hoạt độ nguồn
• Phổ năng lượng phát
• Phân bố góc phát
Để tìm hiểu cấu trúc mã nguồn của một ứng dụng trong GEANT4, ta sẽ xem xét trườnghợp ví dụ B1 (examples/basic/B1), Hình 3.1 liệt kê tất cả các file và thư mục con chứatrong thư mục của ví dụ B1
Hình 3.1: Cấu trúc các file mã nguồn của ví dụ B1
Trong đó, các thành phần quan trọng gồm có:
• File exampleB1.cc là file chứa hàm main() của ứng dụng
• Các thư mục include/ và src/ chứa các header và source code của các lớp mà taxây dựng như đã nói ở các phần trên
Trang 28• Các file có đuôi mac là các file macro, chức năng của các file này sẽ được đề cậpđến ở phần sau.
• File CMakeLists.txt chứa các lệnh điều khiển việc biên dịch ứng dụng B1
Một ứng dụng GEANT4 có thể được thực thi theo một trong những cách sau:
• Chạy hàng loạt (batch mode) cố định
• Chạy hàng loạt nhưng đọc lệnh từ macro
• Chạy theo điều khiển của dòng lệnh (interactive mode)
• Chạy theo điều khiển của dòng lệnh thông qua GUI (Graphical User Interface)
runManager−>SetUserInitialization (new B1DetectorConstruction ) ;
runManager−>SetUserInitialization (new QGSP_BIC_EMY ) ;
runManager−>SetUserAction (new B1PrimaryGeneratorAction ) ;
runManager−>SetUserAction (new B1SteppingAction ( ) ) ;
runManager−>SetUserAction (new B1EventAction ( ) ) ;
runManager−>SetUserAction (new B1RunAction ( ) ) ;
Trang 29Trong trường hợp này, số event là cố định (int numberOfEvent = 1000), nếu muốn thayđổi số event ta buộc phải biên dịch lại ứng dụng Đây cũng là một điểm bất lợi cho phươngpháp này trong trường hợp người dùng muốn they đổi số event theo từng lần chạy
Khác với cách thực thi ứng dụng trước đó, trong cách này, các câu lệnh thực thi đượcviết riêng ra trong 1 file khác, gọi là file macro (.mac)
Ví dụ: hàm main() trong ví dụ này cũng tương tự như trong ví dụ với batch mode, chỉkhác ở điểm là các phương thức thực thi như BeamOn() sẽ không được viết trong hàmmain() mà chương trình sẽ đọc đối số (argument variable) từ file macro và thực thi cáclệnh trong file này thông qua lệnh /control/execute
i n t main (i n t argc ,c h a r∗∗ argv )
{
runManager−>SetUserInitialization (new B1DetectorConstruction ) ;
runManager−>SetUserInitialization (new QGSP_BIC_EMY ) ;
runManager−>SetUserAction (new B1PrimaryGeneratorAction ) ;
runManager−>SetUserAction (new B1SteppingAction ( ) ) ;
runManager−>SetUserAction (new B1EventAction ( ) ) ;
runManager−>SetUserAction (new B1RunAction ( ) ) ;
Trang 30/ gun / particle e−
/ gun / energy 1 GeV
runManager−>SetUserInitialization (new B1DetectorConstruction ) ;
runManager−>SetUserInitialization (new QGSP_BIC_EMY ) ;
runManager−>SetUserAction (new B1PrimaryGeneratorAction ) ;
runManager−>SetUserAction (new B1SteppingAction ( ) ) ;
runManager−>SetUserAction (new B1EventAction ( ) ) ;
runManager−>SetUserAction (new B1RunAction ( ) ) ;
runManager−>Initialize ( ) ;
session−>SessionStart ( ) ;
d e l e t e session ;
Trang 31Idle> / gun / particle mu+
Idle> / gun / energy 10 GeV
Idle> / run / beamOn 1
Idle> / gun / particle proton
Idle> / gun / energy 100 MeV
Idle> / run / beamOn 3
Idle> exit
Gõ exit để thoát khỏi giao diện tương tác
Một số câu lệnh cơ bản cho việc thực thi ứng dụng được liệt kê trong Phụ lục A
Trang 32đó đặt vào bên trong khối thể tích chứa nó Ta gọi các khối thể tích này là các khối con(daughter volume) và khối chứa nó được gọi là khối mẹ (mother volume), vị trí của khốicon đặt bên trong được xác định dựa trên hệ trục tọa độ của khối mẹ.
Để mô tả hình dạng của các khối người ta sử dụng các khối hình học cơ bản được gọi làsolid Đồng thời, khi thêm vào khối hình học cơ bản các tính chất vật lý (chẳng hạn nhưvật liệu cấu tạo nên khối đó, từ trường, ) ta thu được khối luận lý (logical volume) Vàcuối cùng khi đặt các khối luận lý vào trong các khối lớn hơn chứa nó, ta thu được khốivật lý (physical volume)
Để xây dựng hình học hoàn chỉnh cho hệ detector, ta cần thực hiện các bước sau
Trang 334.1.1 Tạo các khối hình học
Các khối hình học (solid ) trong GEANT4 được chia làm 4 loại chính:
• CSG (Constructed Solid Geometry): được xác định bằng cách khai báo các tham sốcủa khối dạng 3D
Ví dụ: G4Box, G4Tubs, G4Cons, G4Trd, (xem thêm Phụ lục B)
• CSG like: tương tự như các khối CSG
Ví dụ: G4Polycone, G4Polyhedra, G4Hype, (xem thêm Phụ lục B)
• BREP (Boundary REPresented): được xác định thông qua việc mô tả các mặt biên
Ví dụ: G4BREPSolidPolycone, G4BSplineSurface,
• Boolean solid: được tạo thành từ việc kết hợp các khối trên thông qua qua cácphương thức giao (intersection), hợp (union), bù (subtraction)
Ví dụ:
G4Box∗ box = new G4Box ("Box", 2 0∗ mm ,30∗ mm ,40∗ mm ) ;
G4Tubs∗ cyl = new G4Tubs (" C y l i n d e r ", 0 , 5 0∗ mm ,50∗ mm , 0 , twopi ) ;
// Tao k h o i moi ban c a c h k e t hop h a i k h o i vua xay dung
new G4SubtractionSolid ("Box−C y l i n d e r ", box , cyl ) ;
Trong trường hợp muốn kết hợp hai khối mà khối thứ 2 không nằm ở trục tọa độ củakhối thứ 1, ta có thể thực hiện theo 1 trong 2 cách sau:
• Cách 1: sử dụng các ma trận quay và dịch chuyển trục tọa độ để dịch chuyển trụctọa độ của khối thứ 2 đối với hệ trục tọa độ của khối thứ 1
• Cách 2: tạo sự dịch chuyển khối thứ hai trong hệ trục tọa độ của nó sau đó đặt vào
hệ trục tọa độ của khối thứ 1
yRot−>rotateY ( M_PI / 4 ∗ rad ) ; // quay quanh t r u c Y 45 d e g r e e s
G4ThreeVector zTrans ( 0 , 0 , 5 0 ) ; // d i c h chuyen t h e o t r u c Z
Trang 34G4Transform3D transform ( invRot , zTrans ) ;
new G4UnionSolid ("Box+CylinderMoved ", box , cyl , transform ) ;
Để ước lượng thể tích và diện tích của các khối hình học, ta có thể dùng các phương thức
G4double GetCubicVolume()
G4double GetSurfaceArea()
Ngoài ra, ta cũng có thể gieo các điểm giả ngẫu nhiên (pseudo-random) trên bề mặt củacác khối bằng cách sử dụng phương thức
G4ThreeVector GetPointOnSurface() const
Ví dụ: để tạo ra một khối hình học “World” có dạng hình hộp, ta có thể khai báo với lớpG4Box như sau
Tương tự như vậy, để khai báo 1 khối hình trụ đặc (tên là “Tracker”), ta sử dụng lớpG4Tubs
G4double innerRadius = 0 ∗ cm ;
G4double outerRadius = 6 0 ∗ cm ;
G4double hz = 2 5 ∗ cm ;
G4double startAngle = 0 ∗ deg ;
G4double spanningAngle = 3 6 0 ∗ deg ;
G4Tubs∗ trackerTube = new G4Tubs (" T r a c k e r ",
innerRadius , outerRadius , hz ,startAngle , spanningAngle ) ;
4.1.2 Tạo các khối luận lý
Các khối luận lý được tạo ra bằng cách kết hợp các thông tin được cho bởi các khối hìnhhọc và vật liệu (material ) Các khối luận lý chứa hầu hết các thông tin của một khối hoànchỉnh, tuy nhiên không chứa các thông tin chẳng hạn như vị trí vật lý của nó trong hệdetector Cấu trúc khai báo một khối luận lý như sau:
Trang 35G4double GetMass(G4bool forced=false)
Dựa theo ví dụ khai báo hình học các khối “World” và “Tracker” trong Phần 4.1.1, để tạocác khối luận lý, ta phải lấp đầy vật chất vào trong các khối hình học cơ bản vừa đượctạo ra
= new G4LogicalVolume ( worldBox , Ar , " World ") ;
= new G4LogicalVolume ( trackerTube , Al , " T r a c k e r ") ;
Theo ví dụ trên, khối luận lý worldLog được tạo ra bằng cách lấp đầy khối hình họcworldBox bởi khí Argon (Ar) và được đặt tên là “World”, tương tự như vậy cho khối luận
lý trackerLog được tạo ra từ khối hình học trackerTube được lấp đầy bởi vật liệu nhôm(Al)
Sub-detector Trong các cấu trúc hệ detector phức tạp, ta nên định nghĩa một khốiluận lý ứng với một thành phần của hệ detector (sub-detector ) thay vì chỉ định nghĩa duynhất 1 khối luận lý cho cả hệ đo Với cách thức như vậy, ta có thể thiết lập các ngưỡngcắt cho từng thành phần của detector nhằm làm giảm bớt các mô phỏng chi tiết đối vớinhững thành phần mà ta không quan tâm Nhờ đó mô phỏng tốc độ mô phỏng sẽ có thểđược cải thiện một cách đáng kể
Để làm được điều này, ta sử dụng khai báo Region
G4Region( const G4String& rName )
Ví dụ:
G4Region∗ emCalorimeter = new G4Region ("EM−C a l o r i m e t e r ") ;
emCalorimeterLV−>SetRegion ( emCalorimeter ) ;
emCalorimeter−>AddRootLogicalVolume ( emCalorimeterLV ) ;
Trang 36• Phản chiếu các khối (reflection)
Sắp đặt các khối (Placement volume) Việc sắp đặt các khối được thực hiện thôngqua lớp G4PVPlacement, trong đó một khối vật lý được tạo ra bằng cách kết hợp một khốiluận lý với một ma trận quay (rotation matrix ) và một ma trận chuyển dời (translationmatrix ) (xem Hình 4.1) Ma trận quay mô tả sự quay của hệ trục tọa độ khối con so với
hệ trục tọa độ của khối mẹ, còn ma trận chuyển dời xác định vị trí của khối con bên trongkhối mẹ Cú pháp như sau:
pCurrentLogical khối luận lý con được sử dụng
pName tên của đối tượng G4PVPlacement được tạo
pMotherLogical khối mẹ
pMany để sử dụng tiếp theo (mặc định: 0)
pCopyNo số ID của phương thức sắp đặt này
pSurfChk đặt true nếu muốn kiểm tra có bị chồng lên khối đã có trước
hay không
Ví dụ: Trong ví dụ ở Phần 4.1.2, ta đã tạo các khối luận lý “World” và “Tracker”, tiếptheo ta sẽ tạo khối vật lý “Tracker” bằng cách đặt nó vào bên trong khối “World”
Trang 37Hình 4.1: Ví dụ sắp đặt khối
G4double pos_x = −1.0∗meter ;
G4double pos_y = 0 0∗ meter ;
G4double pos_z = 0 0∗ meter ;
G4ThreeVector ( pos_x , pos_y , pos_z ) , // v i t r i d at
Ngoài ra, ta cũng có thể thay thế hai ma trận quay và chuyển dời bằng ma trận chuyểnđổi 3D (G4Transform3D)
Replica Trong trường hợp này, một khối vật lý sẽ đại diện cho một chuỗi các khối luận
lý đồng nhất (có cùng kích thước và hình dạng) bên trong khối mẹ Việc này thường được
Trang 38thực hiện khi sự phân bố các khối con có sự đối xứng theo trục tọa độ Decartes hay trụctọa trụ, theo đó các khối con sẽ được lấp đầy bên trong khối mẹ như ví dụ trong Hình 4.2.
Cú pháp khai báo như sau:
pAxis trục sắp xếp các khối con
nReplicas số lượng khối được lặp
offset offset dọc theo trục
Hình 4.2: Ví dụ replicaHình 4.3 trình bày các kiểu lặp theo trục trong replica, gồm có:
• Lặp theo các trục tọa độ Cartesian (kXAxis, kYAxis, kZAxis): ví dụ trong trườnghợp lặp theo trục x, tâm của khối con thứ n sẽ có tọa độ (−width ∗ (nReplicas −1) ∗ 0.5 + n ∗ width, 0, 0) (hình ngoài cùng bên trái)
• Lặp theo bán kính trong hệ trục tọa độ trụ (kRho): sử dụng cho các khối con códạng ống hay dạng nón, tâm của khối con thứ n có vị trí width ∗ (n + 0.5) + of f set(hình ở giữa) Trong trường hợp này offset phải là bán kính trong của khối mẹ
Trang 39• Lặp theo góc trong hệ trục tọa độ trụ (kPhi): sử dụng cho các khối con có dạngống hay dạng nón, tâm của khối con thứ n có vị trí width ∗ (n + 0.5) + of f set (hìnhngoài cùng bên phải) Trong trường hợp này offset phải là góc bắt đầu của khối mẹ.
Hình 4.3: Ví dụ replica
Ví dụ:
G4PVReplica repX (" L i n e a r Array ",
pRepLogical ,pContainingMother ,kXAxis , 5 , 10∗mm ) ;G4PVReplica repR (" R S l i c e s ",
pRepRLogical ,pContainingMother ,kRho , 5 , 10∗mm , 0) ;G4PVReplica repRZ (" R Z S l i c e s ",
pRepRZLogical ,
&repR ,kZAxis , 5 , 10∗mm ) ;G4PVReplica repRZPhi (" R Z P h i S l i c e s ",
pRepRZPhiLogical ,
&repRZ ,kPhi , 4 , M_PI∗0.5∗ rad , 0) ;repX là một dãy 5 khối con có bề dày 10mm dọc theo trục X, khối mẹ của repX phải có
bề dày 50mm theo trục X Trong trường hợp khối mẹ là một ống hình trụ có bán kính50mm và dài 50mm, repR sẽ chia khối mẹ thành 5 ống trụ con, mỗi ống trụ có bề dày10mm và có chiều dài 50mm như khối mẹ; trong khi đó repRZ sẽ chia khối mẹ thành 5ống trụ con có bề dày như khối mẹ nhưng có chiều dài 10mm Cuối cùng, repRZPhi chiakhối mẹ thành 4 phần, mỗi phần 90 (M_PI*0.5*rad)
Parameterisation Khác với replica, các khối con được lặp lại bên trong khối mẹ cóthể có kích thước, hình dạng, hay vật chất khác nhau (Hình 4.4) Tất cả các thông số vềkích thước, hình dạng, sẽ được tham số hóa theo các chỉ số copy (copy number ) Cúpháp khai báo như sau:
Trang 40G4PVParameterised ( c o n s t G4String& pName ,
pAxis trục sắp xếp các khối con
nReplicas số lượng khối được lặp
pSurfChk đặt true nếu muốn kiểm tra có bị chồng lên khối đã có trước
hay không
Hình 4.4: Ví dụ parameterisationMột số lưu ý khi khai báo tham số hóa:
• Các thay đổi theo chỉ số copy bao gồm: vị trí, quay, kích thước, hình dạng, vậtliệu,
• Chỉ áp dụng cho các khối con dạng CSG đơn giản
• Các khối con phải hoàn toàn nằm trong khối mẹ
• Các khối con không được che phủ, chồng lấn lên nhau
• Các khối con được tham số hóa được xem là các khối “lá” (leaf volume)
• Trong phần lớn các trường hợp, các khối tham số hóa không thể chứa khối con bêntrong nó