// 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));
                    }
                }
            }
        }
        // Calculate Dose at Volume.
        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));
            }
            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));
            }
        }