Manual in Japanese
日本語マニュアル

目次に戻る

7. GDDファイルの作成

7.1 GDDクラスライブラリ

ここでは、GDDファイルを出力するためのクラスライブラリについて説明します。
ファイル
展開# tar -zxvf gMocrenIO.2010June18.tgz
移動# cd gMocrenIO
クラスライブラリヘッダ: include/gMocrenIO.hh 及び ソース: src/gMocrenIO.cc
ツール
コンパイル&リンク# make
リスト# ls
CT2Density.dat  GNUmakefile  dumpgdd  makegdd   src
DICOM.dat       dicom2gdd    include  mergegdd
           
dumpgddGDDファイルをファイルダンプする。(実行方法を変更しました。
# dumpgdd -i dose.gdd
makegdddumpgddでダンプしたファイルからGDDファイルを作成する。つまり、そのダンプされたファイルの形式でファイルが保存されていれば、GDDファイルを作ることができる。(実行方法を変更しました。
# makegdd -o new.gdd
mergegdd2つのGDDファイルを統合する。(実行方法を変更しました。
# mergegdd -i1 dose1.gdd -i2 dose2.gdd -o new.gdd
dicom2gddDICOMデータセットからGDDファイルを作成する。
"DICOM.dat"ファイルにデータリストを記入する。"CT2Density.dat"ファイルに、CT値と密度との対応表を記入する。(実行方法を変更しました。
# dicom2gdd -o new.gdd
ファイル
GMocrenDataIO.{hh,cc}GDDファイル入出力クラスライブラリ。
dumpgdd.ccdumpgddのmainプログラム。
makegdd.ccmakegddのmainプログラム。
mergegdd.ccmergegddのmainプログラム。
dicom2gdd.ccdicom2gddのmainプログラム。
DicomInterface.{hh,cc}dicom2gddで使われているDICOMデータ入力のためのクラスライブラリ。
utils.{hh,cc}各ツールで使っている共通のユーティリティ関数。

7.2 サンプルプログラム

gMocren IOクラスライブラリを組み込んで、GDDファイルを出力するプログラムです。
新しいバージョン(2008年8月版)でも使えますが、新しいフォーマットには今後対応予定です。

メニューの"Utility software"にあるGeant4 codeは、Geant4ディストリビューションの ${G4INSTALL}/examples/extended/medical/DICOM/ をベースに作っています。

オリジナルのコードの変更箇所です。
修正箇所には、次のように最初と最後にコメント行を入れています。
          // for gMocren -->
     (修正行)
          // <--
          
修正ファイル
dicom.ccDicomRunActionをG4RunManagerにユーザアクションとして登録
DicomGeometry.cc

GMocrenDataManagerにDICOMのparameterised volumeの中心座標を登録

オリジナルではDicomPatientParameterisationで指定範囲内の密度のボクセルのみでgeometryを構築しているが、これでは線量分布を取得し辛いために、このサンプルではすべての密度でボクセルを構築するように変更。
(※このサンプルでは簡単のためにこのような変更をしたが、ボクセル数が少なくすればシミュレーション時間を短縮できるので、線量分布の取得方法を修正すべき。)

線量分布を取得するためのsensitive detectorの登録。このサンプルでは、G4MultiFunctionalDetectorとG4PSDoseDepositで取得する。

これらに伴うヘッダファイルのインクルード。

DicomEventAction.ccEndOfEventAction()で粒子の飛跡をGMocrenDataManagerに登録。
追加ファイル
GMocrenDataIO.{hh,cc} GDDデータファイルの入出力クラスライブラリ。
GMocrenDataManager.{hh,cc} 必要なデータを収集して、GMocrenDataIOを使ってGDDデータを作成するクラス。
DicomRun.{hh,cc} DicomGeometry.ccで追加した、線量分布の取得のためのG4PSDoseDepositを利用するために必要なクラス。
DIcomRunAction.{hh,cc}

BeginOfRunAction()でGMocrenDataManagerに、

- DICOMによる患者geometryのボクセル数を登録。

- 各ボクセルの密度を登録。

- ボクセル間隔を登録。

- その他の必要な情報を計算するために関数を実行。

EndOfRunAction()でGMocrenDataManagerに、

- 線量分布を登録。

- その他の必要な情報を計算するために関数を実行。

run1k.mac 1000イベントを実行し、飛跡も取得するマクロ。次のように実行する。
     bin/Linux-g++/dicom run1k.mac
                 
 

7.3 もう一つの作り方

ツールの makegdd を使いgddファイルを作ります。
 # ./makegdd -o new.gdd
このコマンドを実行する前に、次のファイルを実行ディレクトリに用意します。
必須:header.dat , modality.dat , modality-map.dat
選択:dose.dat , tracks.dat, detectors.dat
サンプル: header.dat , modality.dat , modality-map.dat, dose.dat , tracks.dat detectors.dat

各ファイルの書式

header.dat
説明
1 4 ファイルバージョン(いつも4)
2 0 イベント数(可視化には不使用)
3 7.815 7.815 1.25 x,y,z方向のボクセルサイズ(間隔) [mm]
(モダリティと線量分布で共通の値を使用)
4no comment コメント(1024文字まで)
modality-map.dat
説明
1 -1024 2048 モダリティ値の最小値及び最大値(CT値)
2
...
0 0 0 0 0 .... 最小値から最大値の各CT値に対応する密度 [g/cm3]
(最大値−最小値+1)個の値の羅列(例の場合は、3073個の値の羅列になる。)
modality.dat
説明
1 32 32 81 モダリティ画像のサイズ(xm,ym,zm)
2 0 次に続くモダリティ画像の値の単位(0: CT値、1: 密度[g/cm3]の選択)
3
...
-1024 -1024 .... (xm*ym*zm)個の値の羅列
dose.dat(変更有り
説明
1 1 線量分布データの数
2以上の場合は、2行目から"last"行のデータまでを繰り返し配置
2 dose_1 線量分布データの名前
3 32 32 81 線量分布のサイズ(xd,yd,zd)
4 0 1.38e-1 線量分布の最小値、最大値(最小値はいつも0にする。)
5 keV/g 単位
5
...
0 0 0 .... (xd*yd*zd)個の値の羅列
last 0 0 0 線量分布とモダリティ画像の相対位置(単位:ボクセル)
モダリティ画像と線量分布画像のサイズが違う場合はその差をボクセル単位で設定。但し、ボクセル間隔は同じ。
tracks.dat(変更有り
説明
1 100 放射線の数
以下の2行目以降の情報をセットとして、この放射線の数と同じ数のセットが必要。
2 255 0 0 放射線の色
但し 、r,g,bの順に、0-255の範囲で設定。
3 10 放射線のステップ数
1本の放射線は、短いステップで構成される。
4
...
61.0 25.0 54.72 58.0 24.2 4.38 放射線の1ステップの始点(x1,y1,z1)、終点(x2,y2,z2)
3行目のステップ数と同じ数のステップの始点・終点情報が必要。 但し、モダリティ画像の中心が(0,0,0)
detectors.dat(追加
説明
1 100 検出器の数
以下の2行目以降の情報をセットとして、この検出器の数と同じ数のセットが必要。
2 box1 検出器の名前
3 255 0 0 検出器の色
但し 、r,g,bの順に、0-255の範囲で設定。
4 10 検出器の辺の数
検出器はワイヤーフレームで表示する。その辺の数。
5
...
6.10 2.50 5.47 58.0 24.2 4.38 検出器の1辺の始点(x1,y1,z1)、終点(x2,y2,z2)
4行目の辺の数と同じ数の始点・終点情報が必要。 但し、モダリティ画像の中心が(0,0,0)

目次に戻る