// Compute dose public void ComputeDose() { // Set normalization value verifPln.PlanNormalizationValue = currPln.PlanNormalizationValue; // Set the plan calculation model verifPln.SetCalculationModel(CalculationType.PhotonVolumeDose, currPln.PhotonCalculationModel); Dictionary <String, String> currPlnCalcModels = currPln.GetCalculationOptions(currPln.PhotonCalculationModel); foreach (KeyValuePair <String, String> calcModel in currPlnCalcModels) { verifPln.SetCalculationOption(currPln.PhotonCalculationModel, calcModel.Key, calcModel.Value); } // Compute dose // For plan containing non-IMRT beams if (verifPln.Beams.Any(b => b.MLCPlanType == MLCPlanType.ArcDynamic || b.MLCPlanType == MLCPlanType.Static)) { verifPln.CalculateDose(); // Compute dose for non-IMRT type beams // Correct for MU by changing beam weighting foreach (Beam verifBm in verifPln.Beams) { BeamParameters verifBmParam = verifBm.GetEditableParameters(); verifBmParam.WeightFactor = muValues.First(mv => mv.Key == verifBm.Id).Value.Value / verifBm.Meterset.Value; verifBm.ApplyParameters(verifBmParam); } } // For all other IMRT plans else { verifPln.CalculateDoseWithPresetValues(muValues); // Compute dose for IMRT type beams } }