4.3 線量計算モデルのチェック

目的

コミッショニングされた線量計算モデルが指定されているかチェックします。 さらに、計算グリッドサイズが規定値に設定されているかもチェックします。

必要な情報

線量計算モデル名(光子線) 計算グリッドサイズ

与えられている引数

PlanSetupクラスのインスタンスplan

必要な情報へのアクセス方法

現在開いているプランから線量計算モデル(光子線)へアクセスするには、以下のようにします。

1
string photonCalculationModel = plan.PhotonCalculationModel;

計算グリッドサイズへアクセスするには、以下のようにします。

1
double XRes = plan.Dose.XRes;

Calculation Optionsの値を取得するには、以下のようにします。(例: 不均質補正, Heterogeneity correction)

1
2
3
string hetero; // outの受け皿
bool results = plan.PhotonCalculationOptions.TryGetValue("HeterogeneityCorrection", out hetero); // outは参照渡しのためのパラメータ修飾子です。
//TryGetValue関数は戻り値で成否を返す。パラメータ取得に成功した場合は結果がheteroに格納される。

メッセージボックスによる情報の表示

変数に代入されている文字列や数値等を確認するために、メッセージボックスが使用できます。

メッセージボックスを表示するには、MessageBoxクラス(System.Windows.Forms名前空間)のShowメソッドを使用します。

メッセージボックスの使用方法は次のとおりです。

1
2
3
4
5
6
7
int ans = 1 + 1;

// MessageBoxで表示できるのが文字列のためToStringメソッドを使用して変換を行う
String str_ans = ans.ToString ();

//Showメソッドを使用して表示する
MessageBox.Show(str_ans);

実装

本演習ではプランの線量計算モデル(光子線)と計算グリッドサイズが標準設定(コミッショニング時の条件)と一致しているかチェックする仕組みを作ります。 上記のアクセス方法でそれぞれの情報を取得して標準設定と異なる場合には設定条件を出力します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
////////////////////////////////////////////////////////////////////////////////
// Check calculation model.
//

checkName = "Photon calculation model";

 ~~以下にコドを記述~~


checkName = "Calculation grid size";

 ~~以下にコドを記述~~

実装例(線量計算モデル)

線量計算モデル名は AAA: AAA_15.6 AcurosXB: AXB_15.6 と設定されていると想定した例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// 判定基準の標準設定を定義
// Calculation model names
string AAA = "AAA";
string AcurosXB = "AXB";
// Commissioned calculation models(+version)
string AAA_version = AAA + "_15.6";        
string AcurosXB_version = AcurosXB + "_15.6";

// 標準設定とプランで設定されている線量計算モデルの文字列を比較して
// 一致していない: プランの線量計算モデルを出力

// Check calculation models
checkName = "Photon calculation model";
string photonCalculationModel = plan.PhotonCalculationModel;
if (photonCalculationModel == AAA_version)
{
    //エラーメッセージ無し
    oText += MakeFormatText(true, checkName, "");
}
else if(photonCalculationModel == AcurosXB_version)
{
    //エラーメッセージ無し
    oText += MakeFormatText(true, checkName, "");
}
else
{
    //エラーメッセージ
    oText += MakeFormatText(false, checkName, photonCalculationModel);
}

PlanSetupクラスのインスタンスplanからプランの照射野(Beam)の情報を取得して通常治療、IMRT/VMAT等を判定基準に加えることも可能です。

実装例(計算グリッドサイズ)

計算グリッドサイズは AAA: 2.5 mm AcurosXB: 2.0 mm でコミッショニングが実施されたと想定した例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 判定基準の標準設定を定義
// Check calculation grid sizes
checkName = "Calculation grid size";
double XRes_AAA = 2.5;
double XRes_AcurosXB = 2.0;

// 標準設定とプランで設定されている計算グリッドサイズを比較して
// 一致していない: プランの計算グリッドサイズを出力

// calculation grid size
// The dose matrix resolution in X-direction in millimeters
double XRes = plan.Dose.XRes;

if( photonCalculationModel.IndexOf(AAA) >=0) //AAAが設定されている場合
{
    if(XRes == XRes_AAA) //設定は正しい
    {
        //エラーメッセージ無し
        oText += MakeFormatText(true, checkName, "");
    }
    else
    {
        //エラーメッセージ
        oText += MakeFormatText(false, checkName, string.Format("{0:f1}", XRes) + " -> " + string.Format("{0:f1}", XRes_AAA));
    }
}
else if( photonCalculationModel.IndexOf(AcurosXB) >=0) //Acurosが設定されている場合
{
    if(XRes == XRes_AcurosXB) //設定は正しい
    {
        //エラーメッセージ無し
        oText += MakeFormatText(true, checkName, "");
    }
    else
    {
        //エラーメッセージ
        oText += MakeFormatText(false, checkName, string.Format("{0:f1}", XRes) + " -> " + string.Format("{0:f1}", XRes_AcurosXB));
    }
}