public static string GetCoveredVolumeAtDose(StructureSet structureSet, PlanningItemViewModel planningItem, StructureViewModel evalStructure, MatchCollection testMatch, Group evalunit)
 {
     try
     {
         var structure = structureSet.Structures.FirstOrDefault(x => x.Id == evalStructure.StructureName);
         //check for sufficient sampling and dose coverage
         DVHData dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(structure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);
         if ((dvh.SamplingCoverage < 0.9) || (dvh.Coverage < 0.9))
         {
             return("Unable to calculate - insufficient dose or sampling coverage");
         }
         Group eval            = testMatch[0].Groups["evalpt"];
         Group unit            = testMatch[0].Groups["unit"];
         DoseValue.DoseUnit du = (unit.Value.CompareTo("%") == 0) ? DoseValue.DoseUnit.Percent :
                                 (unit.Value.CompareTo("cGy") == 0) ? DoseValue.DoseUnit.cGy : DoseValue.DoseUnit.Unknown;
         VolumePresentation    vp             = (unit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
         DoseValue             dv             = new DoseValue(double.Parse(eval.Value), du);
         double                volume         = double.Parse(eval.Value);
         VolumePresentation    vpFinal        = (evalunit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
         DoseValuePresentation dvpFinal       = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;
         double                volumeAchieved = planningItem.PlanningItemObject.GetVolumeAtDose(structure, dv, vpFinal);
         double                organVolume    = Convert.ToDouble(evalStructure.VolumeValue);
         double                coveredVolume  = organVolume - volumeAchieved;
         return(string.Format("{0:0.00} {1}", coveredVolume, evalunit.Value));   // todo: better formatting based on VolumePresentation
     }
     catch (NullReferenceException)
     {
         return("Unable to calculate - DVH is not valid");
     }
 }
 public static string GetConformationNumber(StructureSet structureSet, PlanningItemViewModel planningItem, StructureViewModel evalStructure, MatchCollection testMatch, Group evalunit)
 {
     try
     {
         var       structure = structureSet.Structures.FirstOrDefault(x => x.Id == evalStructure.StructureName);
         DVHData   dvh       = planningItem.PlanningItemObject.GetDVHCumulativeData(structure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);
         DoseValue prescribedDose;
         double    planDoseDouble = 0;
         if ((dvh.SamplingCoverage < 0.9) || (dvh.Coverage < 0.9))
         {
             return("Unable to calculate - insufficient dose or sampling coverage");
         }
         if (planningItem.PlanningItemObject is PlanSum)
         {
             PlanSum planSum = (PlanSum)planningItem.PlanningItemObject;
             foreach (PlanSetup planSetup in planSum.PlanSetups)
             {
                 planDoseDouble += planSetup.TotalDose.Dose;
             }
         }
         if (planningItem.PlanningItemObject is PlanSetup)
         {
             PlanSetup planSetup = (PlanSetup)planningItem.PlanningItemObject;
             planDoseDouble = planSetup.TotalDose.Dose;
         }
         prescribedDose = new DoseValue(planDoseDouble, DoseValue.DoseUnit.cGy);
         Group eval            = testMatch[0].Groups["evalpt"];
         Group unit            = testMatch[0].Groups["unit"];
         DoseValue.DoseUnit du = (unit.Value.CompareTo("%") == 0) ? DoseValue.DoseUnit.Percent :
                                 (unit.Value.CompareTo("cGy") == 0) ? DoseValue.DoseUnit.cGy : DoseValue.DoseUnit.Unknown;
         var body = structureSet.Structures.Where(x => x.Id.Contains("BODY")).First();
         //VolumePresentation vpFinal = (evalunit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
         VolumePresentation    vpFinal         = VolumePresentation.AbsoluteCm3;
         DoseValuePresentation dvpFinal        = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;
         DoseValue             dv              = new DoseValue(double.Parse(eval.Value) / 100 * prescribedDose.Dose, DoseValue.DoseUnit.cGy);
         double bodyWithPrescribedDoseVolume   = planningItem.PlanningItemObject.GetVolumeAtDose(body, prescribedDose, vpFinal);
         double targetWithPrescribedDoseVolume = planningItem.PlanningItemObject.GetVolumeAtDose(structure, dv, vpFinal);
         double targetVolume = Convert.ToDouble(evalStructure.VolumeValue);
         var    cn           = (targetWithPrescribedDoseVolume / targetVolume) * (targetWithPrescribedDoseVolume / bodyWithPrescribedDoseVolume);
         return(string.Format("{0:0.0}", cn));
     }
     catch (NullReferenceException)
     {
         return("Unable to calculate - DVH is not valid");
     }
 }
Exemple #3
0
        public static string GetVolumeAtDose(StructureSet structureSet, PlanningItemViewModel planningItem, Structure evalStructure, MatchCollection testMatch, Group evalunit)
        {
            //check for sufficient sampling and dose coverage
            DVHData dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(evalStructure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);

            //MessageBox.Show(evalStructure.Id + "- Eval unit: " + evalunit.Value.ToString() + "Achieved unit: " + dvAchieved.UnitAsString + " - Sampling coverage: " + dvh.SamplingCoverage.ToString() + " Coverage: " + dvh.Coverage.ToString());
            if ((dvh.SamplingCoverage < 0.9) || (dvh.Coverage < 0.9))
            {
                return("Unable to calculate - insufficient dose or sampling coverage");
            }
            Group eval = testMatch[0].Groups["evalpt"];
            Group unit = testMatch[0].Groups["unit"];

            DoseValue.DoseUnit du = (unit.Value.CompareTo("%") == 0) ? DoseValue.DoseUnit.Percent :
                                    (unit.Value.CompareTo("cGy") == 0) ? DoseValue.DoseUnit.cGy : DoseValue.DoseUnit.Unknown;
            VolumePresentation    vp       = (unit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
            DoseValue             dv       = new DoseValue(double.Parse(eval.Value), du);
            double                volume   = double.Parse(eval.Value);
            VolumePresentation    vpFinal  = (evalunit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
            DoseValuePresentation dvpFinal = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;

            if (planningItem.PlanningItemObject is PlanSum)
            {
                double  planDoseDouble = 0;
                PlanSum planSum        = (PlanSum)planningItem.PlanningItemObject;
                foreach (PlanSetup planSetup in planSum.PlanSetups)
                {
                    planDoseDouble += planSetup.TotalDose.Dose;
                }
                dv = new DoseValue(planDoseDouble, DoseValue.DoseUnit.cGy);
            }

            double volumeAchieved = planningItem.PlanningItemObject.GetVolumeAtDose(evalStructure, dv, vpFinal);

            return(string.Format("{0:0.00} {1}", volumeAchieved, evalunit.Value));   // todo: better formatting based on VolumePresentation
//#if false
//            string message = string.Format("{0} - Dose unit = {1}, Volume Presentation = {2}, vpFinal = {3}, dvpFinal ={4}",
//               objective.DVHObjective, du.ToString(), vp.ToString(), vpFinal.ToString(), dvpFinal.ToString());
//           MessageBox.Show(message);
//#endif
        }
        public static string GetDoseAtVolume(StructureSet structureSet, PlanningItemViewModel planningItem, Structure evalStructure, MatchCollection testMatch, Group evalunit)
        {
            //check for sufficient dose and sampling coverage
            DVHData dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(evalStructure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);

            if (dvh != null)
            {
                if ((dvh.SamplingCoverage < 0.9) || (dvh.Coverage < 0.9))
                {
                    return("Unable to calculate - insufficient dose or sampling coverage");
                }
                Group eval            = testMatch[0].Groups["evalpt"];
                Group unit            = testMatch[0].Groups["unit"];
                DoseValue.DoseUnit du = (unit.Value.CompareTo("%") == 0) ? DoseValue.DoseUnit.Percent :
                                        (unit.Value.CompareTo("cGy") == 0) ? DoseValue.DoseUnit.cGy : DoseValue.DoseUnit.Unknown;
                VolumePresentation    vp         = (unit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
                DoseValue             dv         = new DoseValue(double.Parse(eval.Value), du);
                double                volume     = double.Parse(eval.Value);
                VolumePresentation    vpFinal    = (evalunit.Value.CompareTo("%") == 0) ? VolumePresentation.Relative : VolumePresentation.AbsoluteCm3;
                DoseValuePresentation dvpFinal   = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;
                DoseValue             dvAchieved = planningItem.PlanningItemObject.GetDoseAtVolume(evalStructure, volume, vp, dvpFinal);
                //checking dose output unit and adapting to template
                if (dvAchieved.UnitAsString.CompareTo(evalunit.Value.ToString()) != 0)
                {
                    if ((evalunit.Value.CompareTo("cGy") == 0) && (dvAchieved.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0))
                    {
                        dvAchieved = new DoseValue(dvAchieved.Dose / 100, DoseValue.DoseUnit.cGy);
                    }
                    else
                    {
                        return("Unable to calculate");
                    }
                }

                return(dvAchieved.ToString());
            }
            else
            {
                return("Unable to calculate - structure is empty");
            }
        }
        public static string GetGradientIndex(StructureSet structureSet, PlanningItemViewModel planningItem, Structure evalStructure, MatchCollection testMatch, Group evalunit)
        {
            // we have Gradient Index pattern
            DVHData dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(evalStructure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);

            if ((dvh.SamplingCoverage < 0.9) || (dvh.Coverage < 0.9))
            {
                return("Unable to calculate - insufficient dose or sampling coverage");
            }
            Group     eval = testMatch[0].Groups["evalpt"];
            Group     unit = testMatch[0].Groups["unit"];
            DoseValue prescribedDose;
            double    planDoseDouble = 0;

            DoseValue.DoseUnit du = (unit.Value.CompareTo("%") == 0) ? DoseValue.DoseUnit.Percent :
                                    (unit.Value.CompareTo("cGy") == 0) ? DoseValue.DoseUnit.cGy : DoseValue.DoseUnit.Unknown;
            if (planningItem.PlanningItemObject is PlanSum)
            {
                PlanSum planSum = (PlanSum)planningItem.PlanningItemObject;
                foreach (PlanSetup planSetup in planSum.PlanSetups)
                {
                    planDoseDouble += planSetup.TotalDose.Dose;
                }
            }
            if (planningItem.PlanningItemObject is PlanSetup)
            {
                PlanSetup planSetup = (PlanSetup)planningItem.PlanningItemObject;
                planDoseDouble = planSetup.TotalDose.Dose;
            }
            prescribedDose = new DoseValue(planDoseDouble, DoseValue.DoseUnit.cGy);
            //var body = structureSet.Structures.Where(x => x.Id.Contains("BODY")).First();
            VolumePresentation    vpFinal       = VolumePresentation.AbsoluteCm3;
            DoseValuePresentation dvpFinal      = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;
            DoseValue             dv            = new DoseValue(double.Parse(eval.Value) / 100 * prescribedDose.Dose, DoseValue.DoseUnit.cGy);
            double bodyWithPrescribedDoseVolume = planningItem.PlanningItemObject.GetVolumeAtDose(evalStructure, prescribedDose, vpFinal);
            double bodyWithEvalDoseVolume       = planningItem.PlanningItemObject.GetVolumeAtDose(evalStructure, dv, vpFinal);
            var    gi = bodyWithEvalDoseVolume / bodyWithPrescribedDoseVolume;

            return(string.Format("{0:0.0}", gi));
        }
Exemple #6
0
 public static string GetMinMaxMean(StructureSet structureSet, PlanningItemViewModel planningItem, StructureViewModel evalStructure, MatchCollection testMatch, Group evalunit, Group type)
 {
     try
     {
         var structure = structureSet.Structures.FirstOrDefault(x => x.Id == evalStructure.StructureName);
         if (type.Value.CompareTo("Volume") == 0)
         {
             return(string.Format("{0:0.00} {1}", evalStructure.VolumeValue, evalunit.Value));
         }
         else
         {
             double  planSumRxDose = 0;
             DVHData dvh;
             DoseValuePresentation dvp = (evalunit.Value.CompareTo("%") == 0) ? DoseValuePresentation.Relative : DoseValuePresentation.Absolute;
             if (dvp == DoseValuePresentation.Relative && planningItem.PlanningItemObject is PlanSum)
             {
                 PlanSum planSum = (PlanSum)planningItem.PlanningItemObject;
                 foreach (PlanSetup planSetup in planSum.PlanSetups)
                 {
                     double planSetupRxDose = planSetup.TotalDose.Dose;
                     planSumRxDose += planSetupRxDose;
                 }
                 dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(structure, DoseValuePresentation.Absolute, VolumePresentation.Relative, 0.1);
             }
             else
             {
                 dvh = planningItem.PlanningItemObject.GetDVHCumulativeData(structure, dvp, VolumePresentation.Relative, 0.1);
             }
             if (type.Value.CompareTo("Max") == 0)
             {
                 //checking dose output unit and adapting to template
                 //Gy to cGy
                 if ((evalunit.Value.CompareTo("Gy") == 0) && (dvh.MaxDose.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0))
                 {
                     return(new DoseValue(dvh.MaxDose.Dose / 100, DoseValue.DoseUnit.Gy).ToString());
                 }
                 //Gy to Gy or % to %
                 else
                 {
                     if (dvp == DoseValuePresentation.Relative && planningItem.PlanningItemObject is PlanSum)
                     {
                         double maxDoseDouble = double.Parse(dvh.MaxDose.ValueAsString);
                         //double
                         return((maxDoseDouble / planSumRxDose * 100).ToString("0.0") + " " + evalunit.Value);
                     }
                     else
                     {
                         return(dvh.MaxDose.ToString());
                     }
                 }
             }
             else if (type.Value.CompareTo("Min") == 0)
             {
                 //checking dose output unit and adapting to template
                 //Gy to cGy
                 if ((evalunit.Value.CompareTo("Gy") == 0) && (dvh.MinDose.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0))
                 {
                     return(new DoseValue(dvh.MinDose.Dose / 100, DoseValue.DoseUnit.Gy).ToString());
                 }
                 //Gy to Gy or % to %
                 else
                 {
                     return(dvh.MinDose.ToString());
                 }
             }
             else
             {
                 //checking dose output unit and adapting to template
                 //Gy to cGy
                 if ((evalunit.Value.CompareTo("Gy") == 0) && (dvh.MeanDose.Unit.CompareTo(DoseValue.DoseUnit.cGy) == 0))
                 {
                     return(new DoseValue(dvh.MeanDose.Dose / 100, DoseValue.DoseUnit.Gy).ToString());
                 }
                 //Gy to Gy or % to %
                 else
                 {
                     return(dvh.MeanDose.ToString());
                 }
             }
         }
     }
     catch (NullReferenceException)
     {
         return("Unable to calculate - DVH is not valid");
     }
 }
Exemple #7
0
 public static string GetCoveredDoseAtVolume(StructureSet structureSet, PlanningItemViewModel planningItem, Structure evalStructure, MatchCollection testMatch, Group evalunit)
 {
     System.Console.WriteLine("Covered Dose at Volume");
     return("Not supported");
 }
 public void AddItem(PlanningItemViewModel item)
 {
     PlannigList.Add(item);
 }