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; |
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); |
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); } |