public async Task DeleteAsyncTest()
        {
            var testNumber = 1;

            // Create a test workspace
            var workspace = await TestHelper.CreateWorkspaceAsync(_testClassName, testNumber);

            // Create a test patient with a dose
            var patientItem = await TestHelper.CreatePatientAsync(_testClassName, testNumber, Path.Combine("Becker^Matthew", "RD.dcm"));

            // Create patient scorecards object
            var patientScorecards = new PatientScorecards(_proKnow, workspace.Id, patientItem.Id);

            // Create computed metric
            var computedMetric = new ComputedMetric("VOLUME_PERCENT_DOSE_RANGE_ROI", "PTV", 30, 60,
                                                    new List <MetricBin>()
            {
                new MetricBin("IDEAL", new byte[] { Color.Green.R, Color.Green.G, Color.Green.B }),
                new MetricBin("GOOD", new byte[] { Color.LightGreen.R, Color.LightGreen.G, Color.LightGreen.B }, 20),
                new MetricBin("ACCEPTABLE", new byte[] { Color.Yellow.R, Color.Yellow.G, Color.Yellow.B }, 40, 60),
                new MetricBin("MARGINAL", new byte[] { Color.Orange.R, Color.Orange.G, Color.Orange.B }, null, 80),
                new MetricBin("UNACCEPTABLE", new byte[] { Color.Red.R, Color.Red.G, Color.Red.B })
            });

            // Create custom metric
            var customMetricItem = await _proKnow.CustomMetrics.CreateAsync($"{_testClassName}-{testNumber}", "dose", "number");

            // Add objectives to custom metric
            customMetricItem.Objectives = new List <MetricBin>()
            {
                new MetricBin("PASS", new byte[] { 18, 191, 0 }, null, 90),
                new MetricBin("FAIL", new byte[] { 255, 0, 0 })
            };

            // Convert custom metric to schema expected by CreateAsync (name and objectives only)
            var customMetric = new CustomMetric(customMetricItem.Name, customMetricItem.Objectives);

            // Create patient scorecard
            var computedMetrics = new List <ComputedMetric>()
            {
                computedMetric
            };
            var customMetrics = new List <CustomMetric>()
            {
                customMetric
            };
            var patientScorecardItem = await patientScorecards.CreateAsync($"{_testClassName}-{testNumber}", computedMetrics, customMetrics);

            // Delete the patient scorecard
            await patientScorecards.DeleteAsync(patientScorecardItem.Id);

            // Verify the patient scorecard was deleted
            var patientScorecardSummary = await patientScorecards.FindAsync(t => t.Name == $"{_testClassName}-{testNumber}");

            Assert.IsNull(patientScorecardSummary);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Finishes initialization of object after deserialization from JSON
        /// </summary>
        /// <param name="proKnow">Root object for interfacing with the ProKnow API</param>
        /// <param name="workspaceId">The workspace ID</param>
        internal virtual void PostProcessDeserialization(ProKnowApi proKnow, string workspaceId)
        {
            _proKnow    = proKnow;
            WorkspaceId = workspaceId;

            // Convert metadata (custom metric) values from JsonElement to string, double, or int
            var metadata = new Dictionary <string, object>();

            foreach (var key in Metadata.Keys)
            {
                switch (((JsonElement)Metadata[key]).ValueKind)
                {
                case JsonValueKind.String:
                    metadata.Add(key, ((JsonElement)Metadata[key]).GetString());
                    break;

                case JsonValueKind.Number:
                    var numberAsDouble  = ((JsonElement)Metadata[key]).GetDouble();
                    var numberAsInteger = (int)numberAsDouble;
                    if (numberAsDouble == numberAsInteger)
                    {
                        metadata.Add(key, numberAsInteger);
                    }
                    else
                    {
                        metadata.Add(key, numberAsDouble);
                    }
                    break;

                default:
                    // leave value as is
                    metadata.Add(key, Metadata[key]);
                    break;
                }
            }
            Metadata   = metadata;
            Scorecards = new PatientScorecards(_proKnow, WorkspaceId, Id);
        }
        public async Task SaveAsyncTest()
        {
            var testNumber = 2;

            // Create a test workspace
            var workspace = await TestHelper.CreateWorkspaceAsync(_testClassName, testNumber);

            // Create a test patient with a dose
            var patientItem = await TestHelper.CreatePatientAsync(_testClassName, testNumber, Path.Combine("Becker^Matthew", "RD.dcm"));

            // Create patient scorecards object
            var patientScorecards = new PatientScorecards(_proKnow, workspace.Id, patientItem.Id);

            // Create computed metric
            var computedMetric = new ComputedMetric("VOLUME_PERCENT_DOSE_RANGE_ROI", "PTV", 30, 60,
                                                    new List <MetricBin>()
            {
                new MetricBin("IDEAL", new byte[] { Color.Green.R, Color.Green.G, Color.Green.B }),
                new MetricBin("GOOD", new byte[] { Color.LightGreen.R, Color.LightGreen.G, Color.LightGreen.B }, 20),
                new MetricBin("ACCEPTABLE", new byte[] { Color.Yellow.R, Color.Yellow.G, Color.Yellow.B }, 40, 60),
                new MetricBin("MARGINAL", new byte[] { Color.Orange.R, Color.Orange.G, Color.Orange.B }, null, 80),
                new MetricBin("UNACCEPTABLE", new byte[] { Color.Red.R, Color.Red.G, Color.Red.B })
            });

            // Create custom metric
            var customMetricItem = await _proKnow.CustomMetrics.CreateAsync($"{_testClassName}-{testNumber}", "dose", "number");

            // Add objectives to custom metric
            customMetricItem.Objectives = new List <MetricBin>()
            {
                new MetricBin("PASS", new byte[] { 18, 191, 0 }, null, 90),
                new MetricBin("FAIL", new byte[] { 255, 0, 0 })
            };

            // Convert custom metric to schema expected by CreateAsync (name and objectives only)
            var customMetric = new CustomMetric(customMetricItem.Name, customMetricItem.Objectives);

            // Create patient scorecard
            var computedMetrics = new List <ComputedMetric>()
            {
                computedMetric
            };
            var customMetrics = new List <CustomMetric>()
            {
                customMetric
            };
            var patientScorecardItem = await patientScorecards.CreateAsync($"{_testClassName}-{testNumber}", computedMetrics, customMetrics);

            // Modify name
            patientScorecardItem.Name = $"{_testClassName}-{testNumber}-2";

            // Modify computed metrics
            var computedMetric2 = new ComputedMetric("MIN_DOSE_ROI", "PTV", null, null,
                                                     new List <MetricBin>()
            {
                new MetricBin("BAD", new byte[] { 0, 255, 0 }),
                new MetricBin("ACCEPTABLE", new byte[] { 0, 0, 0 }, 60, 63),
                new MetricBin("GOOD", new byte[] { 255, 0, 0 })
            });

            patientScorecardItem.ComputedMetrics = new List <ComputedMetric>()
            {
                computedMetric2
            };

            // Modify custom metrics
            var customMetricItem2 = await _proKnow.CustomMetrics.CreateAsync($"{_testClassName}-{testNumber}-2", "patient", "number");

            customMetricItem2.Objectives = new List <MetricBin>()
            {
                new MetricBin("PASS", new byte[] { 0, 255, 0 }, null, 85),
                new MetricBin("FAIL", new byte[] { 255, 0, 0 })
            };
            patientScorecardItem.CustomMetrics = new List <CustomMetricItem>()
            {
                customMetricItem2
            };
            //TODO--Modify custom metric value and verify that it is saved

            // Save changes
            await patientScorecardItem.SaveAsync();

            // Verify that the changes were saved
            var patientScorecardSummary2 = await patientScorecards.FindAsync(t => t.Id == patientScorecardItem.Id);

            var patientScorecardItem2 = await patientScorecardSummary2.GetAsync();

            Assert.AreEqual($"{_testClassName}-{testNumber}-2", patientScorecardItem2.Name);
            Assert.AreEqual(1, patientScorecardItem2.ComputedMetrics.Count);
            Assert.AreEqual(computedMetric2.Type, patientScorecardItem2.ComputedMetrics[0].Type);
            Assert.AreEqual(computedMetric2.RoiName, patientScorecardItem2.ComputedMetrics[0].RoiName);
            Assert.AreEqual(computedMetric2.Arg1, patientScorecardItem2.ComputedMetrics[0].Arg1);
            Assert.AreEqual(computedMetric2.Arg2, patientScorecardItem2.ComputedMetrics[0].Arg2);
            Assert.AreEqual(computedMetric2.Objectives.Count, patientScorecardItem2.ComputedMetrics[0].Objectives.Count);
            for (int i = 0; i < computedMetric2.Objectives.Count; i++)
            {
                Assert.AreEqual(computedMetric2.Objectives[i].Label, patientScorecardItem2.ComputedMetrics[0].Objectives[i].Label);
                Assert.AreEqual(computedMetric2.Objectives[i].Color[0], patientScorecardItem2.ComputedMetrics[0].Objectives[i].Color[0]);
                Assert.AreEqual(computedMetric2.Objectives[i].Color[1], patientScorecardItem2.ComputedMetrics[0].Objectives[i].Color[1]);
                Assert.AreEqual(computedMetric2.Objectives[i].Color[2], patientScorecardItem2.ComputedMetrics[0].Objectives[i].Color[2]);
                Assert.AreEqual(computedMetric2.Objectives[i].Min, patientScorecardItem2.ComputedMetrics[0].Objectives[i].Min);
                Assert.AreEqual(computedMetric2.Objectives[i].Max, patientScorecardItem2.ComputedMetrics[0].Objectives[i].Max);
            }
            Assert.AreEqual(1, patientScorecardItem2.CustomMetrics.Count);
            Assert.AreEqual(customMetricItem2.Id, patientScorecardItem2.CustomMetrics[0].Id);
            Assert.AreEqual(customMetricItem2.Objectives.Count, patientScorecardItem2.CustomMetrics[0].Objectives.Count);
            for (int i = 0; i < customMetricItem2.Objectives.Count; i++)
            {
                Assert.AreEqual(customMetricItem2.Objectives[i].Label, patientScorecardItem2.CustomMetrics[0].Objectives[i].Label);
                Assert.AreEqual(customMetricItem2.Objectives[i].Color[0], patientScorecardItem2.CustomMetrics[0].Objectives[i].Color[0]);
                Assert.AreEqual(customMetricItem2.Objectives[i].Color[1], patientScorecardItem2.CustomMetrics[0].Objectives[i].Color[1]);
                Assert.AreEqual(customMetricItem2.Objectives[i].Color[2], patientScorecardItem2.CustomMetrics[0].Objectives[i].Color[2]);
                Assert.AreEqual(customMetricItem2.Objectives[i].Min, patientScorecardItem2.CustomMetrics[0].Objectives[i].Min);
                Assert.AreEqual(customMetricItem2.Objectives[i].Max, patientScorecardItem2.CustomMetrics[0].Objectives[i].Max);
            }
        }
Exemplo n.º 4
0
        public async Task CreateAsyncTest()
        {
            var testNumber = 1;

            // Create a test workspace
            var workspace = await TestHelper.CreateWorkspaceAsync(_testClassName, testNumber);

            // Create a test patient with a dose
            var patientItem = await TestHelper.CreatePatientAsync(_testClassName, testNumber, Path.Combine("Becker^Matthew", "RD.dcm"));

            // Create patient scorecards object
            var patientScorecards = new PatientScorecards(_proKnow, workspace.Id, patientItem.Id);

            // Create computed metric
            var computedMetric = new ComputedMetric("VOLUME_PERCENT_DOSE_RANGE_ROI", "PTV", 30, 60,
                                                    new List <MetricBin>()
            {
                new MetricBin("IDEAL", new byte[] { Color.Green.R, Color.Green.G, Color.Green.B }),
                new MetricBin("GOOD", new byte[] { Color.LightGreen.R, Color.LightGreen.G, Color.LightGreen.B }, 20),
                new MetricBin("ACCEPTABLE", new byte[] { Color.Yellow.R, Color.Yellow.G, Color.Yellow.B }, 40, 60),
                new MetricBin("MARGINAL", new byte[] { Color.Orange.R, Color.Orange.G, Color.Orange.B }, null, 80),
                new MetricBin("UNACCEPTABLE", new byte[] { Color.Red.R, Color.Red.G, Color.Red.B })
            });

            // Create custom metric
            var customMetricItem = await _proKnow.CustomMetrics.CreateAsync($"{_testClassName}-{testNumber}", "dose", "number");

            // Add objectives to custom metric
            customMetricItem.Objectives = new List <MetricBin>()
            {
                new MetricBin("PASS", new byte[] { 18, 191, 0 }, null, 90),
                new MetricBin("FAIL", new byte[] { 255, 0, 0 })
            };

            // Convert custom metric to schema expected by CreateAsync (name and objectives only)
            var customMetric = new CustomMetric(customMetricItem.Name, customMetricItem.Objectives);

            // Create patient scorecard
            var computedMetrics = new List <ComputedMetric>()
            {
                computedMetric
            };
            var customMetrics = new List <CustomMetric>()
            {
                customMetric
            };
            var patientScorecardItem = await patientScorecards.CreateAsync($"{_testClassName}-{testNumber}", computedMetrics, customMetrics);

            // Verify created patient scorecard
            Assert.AreEqual($"{_testClassName}-{testNumber}", patientScorecardItem.Name);
            Assert.AreEqual(1, patientScorecardItem.ComputedMetrics.Count);
            var createdComputedMetric = patientScorecardItem.ComputedMetrics[0];

            Assert.AreEqual(computedMetric.Type, createdComputedMetric.Type);
            Assert.AreEqual(computedMetric.RoiName, createdComputedMetric.RoiName);
            Assert.AreEqual(computedMetric.Arg1, createdComputedMetric.Arg1);
            Assert.AreEqual(computedMetric.Arg2, createdComputedMetric.Arg2);
            Assert.AreEqual(computedMetric.Objectives.Count, createdComputedMetric.Objectives.Count);
            for (var i = 0; i < createdComputedMetric.Objectives.Count; i++)
            {
                Assert.AreEqual(computedMetric.Objectives[i].Label, createdComputedMetric.Objectives[i].Label);
                Assert.AreEqual(computedMetric.Objectives[i].Color[0], createdComputedMetric.Objectives[i].Color[0]);
                Assert.AreEqual(computedMetric.Objectives[i].Color[1], createdComputedMetric.Objectives[i].Color[1]);
                Assert.AreEqual(computedMetric.Objectives[i].Color[2], createdComputedMetric.Objectives[i].Color[2]);
                Assert.AreEqual(computedMetric.Objectives[i].Min, createdComputedMetric.Objectives[i].Min);
                Assert.AreEqual(computedMetric.Objectives[i].Max, createdComputedMetric.Objectives[i].Max);
            }
            Assert.AreEqual(1, patientScorecardItem.CustomMetrics.Count);
            var createdCustomMetricItem = patientScorecardItem.CustomMetrics[0];

            Assert.AreEqual(customMetricItem.Id, createdCustomMetricItem.Id);
            Assert.AreEqual(customMetricItem.Objectives.Count, createdCustomMetricItem.Objectives.Count);
            for (var i = 0; i < createdCustomMetricItem.Objectives.Count; i++)
            {
                Assert.AreEqual(customMetricItem.Objectives[i].Label, createdCustomMetricItem.Objectives[i].Label);
                Assert.AreEqual(customMetricItem.Objectives[i].Color[0], createdCustomMetricItem.Objectives[i].Color[0]);
                Assert.AreEqual(customMetricItem.Objectives[i].Color[1], createdCustomMetricItem.Objectives[i].Color[1]);
                Assert.AreEqual(customMetricItem.Objectives[i].Color[2], createdCustomMetricItem.Objectives[i].Color[2]);
                Assert.AreEqual(customMetricItem.Objectives[i].Min, createdCustomMetricItem.Objectives[i].Min);
                Assert.AreEqual(customMetricItem.Objectives[i].Max, createdCustomMetricItem.Objectives[i].Max);
            }
        }