Example #1
0
        /// <summary>
        /// Returns the volume of the input structure at a given input dose
        /// </summary>
        /// <param name="pi">the current planning item</param>
        /// <param name="ss">the structure to query</param>
        /// <param name="dv">the dose value to query</param>
        /// <param name="vPres">the volume presentation to return</param>
        /// <returns>the volume at the requested presentation</returns>
        public static double GetVolumeAtDose(this PlanningItem pi, Structure s, DoseValue dv, VolumePresentation vPres)
        {
            var dpres = dv.GetPresentation();

            return(pi
                   .GetDVHCumulativeData(s, dpres, vPres, 0.1)
                   .CurveData
                   .GetVolumeAtDose(dv));
        }
Example #2
0
        /// <summary>
        ///     Returns the volume of the input structure at a given input dose
        /// </summary>
        /// <param name="pi">the current planning item</param>
        /// <param name="s">the structure to query</param>
        /// <param name="dv">the dose value to query</param>
        /// <param name="vPres">the volume presentation to return</param>
        /// <returns>the volume at the requested presentation</returns>
        public static double GetVolumeAtDose(this PlanningItem pi, Structure s, DoseValue dv, VolumePresentation vPres)
        {
            var dPres    = dv.GetPresentation();
            var dvhCurve = pi.GetComplexDVH(new List <Structure> {
                s
            }, vPres, dPres);

            return(dvhCurve.GetVolumeAtDose(dv));
        }
Example #3
0
        /// <summary>
        /// Converts the dose to the system units. It cannot convert from % to abs dose. Will return NaN if asked
        /// </summary>
        /// <param name="dv">the dose value to be converted</param>
        /// <param name="unit">the unit desired for the returned dose</param>
        /// <returns>the dose in the desired units</returns>
        public static DoseValue ConvertToSystemUnits(this DoseValue dv, PlanningItem pi)
        {
            var newDv = new DoseValue(dv.Dose, dv.Unit);

            if (dv.GetPresentation() != DoseValuePresentation.Relative)
            {
                // Need to convert to system units first (ugh!)
                var oldPresentation = pi.DoseValuePresentation;
                pi.DoseValuePresentation = DoseValuePresentation.Absolute;
                if (pi?.Dose != null)
                {
                    var systemUnits = pi.Dose.DoseMax3D.Unit;
                    pi.DoseValuePresentation = oldPresentation;
                    //Thanks ESAPIX!
                    newDv = dv.ConvertUnits(systemUnits);
                }
                else
                {
                    throw new Exception("Cannot determine system units for dose. Plan dose is null");
                }
            }
            return(newDv);
        }