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)); } } } }
public static DoseValue GetDoseAtVolume(this PlanningItem pitem, Structure structure, double volume, VolumePresentation volumePresentation, DoseValuePresentation requestedDosePresentation) { if (pitem is PlanSetup) { //return ((PlanSetup)pitem).GetDoseAtVolume(structure, volume, volumePresentation, requestedDosePresentation); DVHData dvh = pitem.GetDVHCumulativeData(structure, requestedDosePresentation, volumePresentation, 0.001); return(DvhExtensions.DoseAtVolume(dvh, volume)); } else { if (requestedDosePresentation != DoseValuePresentation.Absolute) { throw new ApplicationException("Only absolute dose supported for Plan Sums"); } DVHData dvh = pitem.GetDVHCumulativeData(structure, DoseValuePresentation.Absolute, volumePresentation, 0.001); return(DvhExtensions.DoseAtVolume(dvh, volume)); } }