/// <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)); }
/// <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)); }
/// <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); }