// Calculate Volume at Dose. public static double GetVolumeAtDose(this PlanningItem pitem, Structure structure, DoseValue dose, VolumePresentation requestedVolumePresentation) { if (pitem is PlanSetup) { //try catch statement to switch dose units to system presentation. Otherwise exception "Dose Units do not match to system settings try { return(((PlanSetup)pitem).GetVolumeAtDose(structure, dose, requestedVolumePresentation)); } catch { if (dose.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0) { return(((PlanSetup)pitem).GetVolumeAtDose(structure, new DoseValue(dose.Dose / 100, DoseValue.DoseUnit.Gy), requestedVolumePresentation)); } else if (dose.Unit.CompareTo(DoseValue.DoseUnit.Gy) == 0) { return(((PlanSetup)pitem).GetVolumeAtDose(structure, new DoseValue(dose.Dose * 100, DoseValue.DoseUnit.cGy), requestedVolumePresentation)); } else { return(((PlanSetup)pitem).GetVolumeAtDose(structure, dose, requestedVolumePresentation)); } } } else { DVHData dvh = pitem.GetDVHCumulativeData(structure, DoseValuePresentation.Absolute, requestedVolumePresentation, 0.001); // Convert dose unit to system unit: otherwise false output without warning. try { ((PlanSum)pitem).PlanSetups.First().GetVolumeAtDose(structure, dose, requestedVolumePresentation); return(DvhExtensions.VolumeAtDose(dvh, dose.Dose)); } catch { if (dose.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0) { return(DvhExtensions.VolumeAtDose(dvh, dose.Dose / 100)); } else if (dose.Unit.CompareTo(DoseValue.DoseUnit.Gy) == 0) { return(DvhExtensions.VolumeAtDose(dvh, dose.Dose * 100)); } else { return(DvhExtensions.VolumeAtDose(dvh, dose.Dose)); } } } }