5.2 最小MU/線量率のチェック

目的

各フィールドのMUが最小MUを下回っていないか、線量率が期待した値になっているかをチェックします。

必要な情報

各フィールドのMU、線量率

与えられている引数

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

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

現在開かれているプランからフィールド(Beam)にアクセスするには以下のようにします。

1
2
3
4
5
6
7
8
//Beamクラスのインスタンスbeamsを取得
IEnumerable<Beam> beams = plan.Beams;

//最初のフィールドのMUを取得
Double mu = beams.ElementAt(0).Meterset.Value;

//最初のフィールドのDoseRateを取得
int doserate = beams.ElementAt(0).DoseRate;
plan.BeamsはIEnumerableインターフェースを実装しているので、以下のようにforeachで各フィールドを順次処理可能です。
1
2
3
4
foreach(var beam in plan.Beams)
{
    //処理
}

必要な情報の表示

Exercise_PlanCheck_Ex1.2.csを開き、関数CheckFieldFunc内に以下のコードを記述します。

1
2
3
4
5
6
7
string Field_info = "";

foreach (var beam in plan.Beams)
{
    Field_info +=  "ID:"+ beam.Id + ", DR:"+ beam.DoseRate + ", MU:" + string.Format("{0:f1}", beam.Meterset.Value) + "\n";
}
MessageBox.Show(Field_info);
フィールドのID、DoseRate、MUが表示されます。 表示されている内容に間違いがないかEclipseで確認しましょう。

MUの小数点以下の表示桁数はstring.Format("{0:f1}",...のfの後の数字で決めています。0の場合は整数表示です。 fは書式指定子と呼ばれる物の一種で、書式指定子は以下の種類があります。

書式指定子 説明
G or g 一般
N or n 数値
F or f 固定小数点数
P or p パーセント
D or d 10進数
X 16進数大文字
x 16進数小文字
C or c 通貨

実装

各フィールドのMUをチェックする部分を作成します。 始めに最小MUをDouble型minMUで、チェックをパスしているかの判定に利用するbool型validFlag、チェックをパスしなかった場合に表示する文字列をstring型invalidMUで定義します。

1
2
3
double minMU = 5.0;
bool validFlag = true;
string invalidMU = "";

foreachで各フィールドを順次処理します。 IsSetupFieldの判定を入れることでTreatment Fieldのみを処理するようにし、フィールドのMUがminMU未満の場合validFlagをfalseに、invalidMUへフィールドIDとMU値を追加します。 Meteset.Valueは小数点第12位まで値を持っているので、string.Formatを利用しf1としていする事で小数点第1位までに制限しています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
foreach (var beam in plan.Beams)
{
    if (!beam.IsSetupField)
    {
        if (beam.Meterset.Value < minMU)
        {
            validFlag = false;
            invalidMU += "(" + beam.Id + ":" + string.Format("{0:f1}", beam.Meterset.Value) + ")";
        }
    }
}

判定フラグの内容によりMakeFormatTextによりPass、Failそれぞれの文字列を生成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
if (validFlag == true)
{
    // If true, add text[O] to the string 
    oText += MakeFormatText(true, checkName, "");
}
else
{
    //If false, add the parameters and text[X] to the string 
    oText += MakeFormatText(false, checkName, invalidMU);
}

各フィールドのDoseRateをチェックする部分を作成します。 MUの時と同じ要領で、DoseRateの規定値int型defDoserate、bool型DRvalidFlag、string型invalidDRを定義します。

1
2
3
int defDoserate = 600;
bool DRvalidFlag = true;
string invalidDR = "";

foreachで各フィールドを順次処理します。 IsSetupFieldの判定を入れることでTreatment Fieldのみを処理するようにし、フィールドのDoseRateがdefDoserateと異なる場合DRvalidFlagをfalseに、invalidDRへフィールドIDとフィールドのDoseRateを追加します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
foreach (var beam in plan.Beams)
{
    if (!beam.IsSetupField)
    {
        if (beam.DoseRate != defDoserate)
        {
            DRvalidFlag = false;
            invalidDR += "(" + beam.Id + ":" + string.Format("{0}", beam.DoseRate) + ")";
        }
    }
}

判定フラグの内容によりMakeFormatTextによりPass、Failそれぞれの文字列を生成します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
if (validFlag == true)
{
    // If true, add text[O] to the string 
    oText += MakeFormatText(true, checkName, "");
}
else
{
    //If false, add the parameters and text[X] to the string 
    oText += MakeFormatText(false, checkName, invalidMU);
}