private ImageSop CreateImageSop(string patientId, string studyUid, string seriesUid, string sopUid) { DicomAttributeCollection dataSet = new DicomAttributeCollection(); base.SetupMR(dataSet); DicomFile file = new DicomFile(null, new DicomAttributeCollection(), dataSet); TestDataSource dataSource = new TestDataSource(file); file.DataSet[DicomTags.PatientId].SetStringValue(patientId); file.DataSet[DicomTags.StudyInstanceUid].SetStringValue(studyUid); file.DataSet[DicomTags.SeriesInstanceUid].SetStringValue(seriesUid); file.DataSet[DicomTags.SopInstanceUid].SetStringValue(sopUid); return new ImageSop(dataSource); }
private List<TestDataSource> CreateMRStudyDataSources(int numberOfSeries, int instancesPerSeries, string studyInstanceUid) { IList<DicomAttributeCollection> dataSets = SetupMRSeries(numberOfSeries, instancesPerSeries, studyInstanceUid); List<TestDataSource> dataSources = new List<TestDataSource>(); foreach (DicomAttributeCollection dataSet in dataSets) { DicomFile file = new DicomFile(null, new DicomAttributeCollection(), dataSet); TestDataSource dataSource = new TestDataSource(file); //because of an exception that gets thrown from the DateTimeParser dataSource._file.DataSet[DicomTags.StudyDate].SetNullValue(); dataSource._file.DataSet[DicomTags.StudyTime].SetNullValue(); dataSource._file.DataSet[DicomTags.SeriesDate].SetNullValue(); dataSource._file.DataSet[DicomTags.SeriesTime].SetNullValue(); dataSources.Add(dataSource); } return dataSources; }
public void TestReferences2() { IList <DicomAttributeCollection> collections = base.SetupMRSeries(1, 1, "test"); DicomFile file = new DicomFile(null, new DicomAttributeCollection(), collections[0]); TestDataSource dataSource = new TestDataSource(file); Sop sop = Sop.Create(dataSource); ISopReference reference1 = sop.CreateTransientReference(); ISopReference reference2 = sop.CreateTransientReference(); sop.Dispose(); Assert.IsFalse(dataSource.IsDisposed); Assert.IsFalse(SopDataCache.ItemCount == 0, "The Sop data cache is NOT empty."); reference1.Dispose(); Assert.IsFalse(dataSource.IsDisposed); Assert.IsFalse(SopDataCache.ItemCount == 0, "The Sop data cache is NOT empty."); reference2.Dispose(); Assert.IsTrue(dataSource.IsDisposed); Assert.IsTrue(SopDataCache.ItemCount == 0, "The Sop data cache is NOT empty."); }
public void TestCaching() { IList <DicomAttributeCollection> collections = base.SetupMRSeries(1, 1, "test"); DicomFile file1 = new DicomFile(null, new DicomAttributeCollection(), collections[0].Copy()); DicomFile file2 = new DicomFile(null, new DicomAttributeCollection(), collections[0].Copy()); TestDataSource dataSource1 = new TestDataSource(file1); TestDataSource dataSource2 = new TestDataSource(file2); Sop sop1 = Sop.Create(dataSource1); Assert.IsTrue(SopDataCache.ItemCount == 1, "The Sop data cache should have 1 entry."); Sop sop2 = Sop.Create(dataSource2); Assert.IsTrue(SopDataCache.ItemCount == 1, "The Sop data cache should have 1 entry."); Assert.IsTrue(dataSource2.IsDisposed, "The data source has not been disposed."); Assert.IsFalse(dataSource1.IsDisposed, "The data source should not be disposed."); sop1.Dispose(); Assert.IsTrue(SopDataCache.ItemCount == 1, "The Sop data cache should have 1 entry."); ISopReference reference21 = sop2.CreateTransientReference(); ISopReference reference22 = sop2.CreateTransientReference(); reference21.Dispose(); Assert.IsFalse(dataSource1.IsDisposed, "The data source has been disposed."); Assert.IsTrue(SopDataCache.ItemCount == 1, "The Sop data cache should have 1 entry."); sop2.Dispose(); Assert.IsFalse(dataSource1.IsDisposed, "The data source has been disposed."); Assert.IsTrue(SopDataCache.ItemCount == 1, "The Sop data cache should have 1 entry."); reference22.Dispose(); Assert.IsTrue(dataSource1.IsDisposed, "The data source has not been disposed."); Assert.IsTrue(SopDataCache.ItemCount == 0, "The Sop data cache is NOT empty."); }
public void TestKeyImages(int numberOfFrames, int numberOfMultiframeKeyImages, int numberOfSingleFrameKeyImages, bool doSplitting) { Assert.IsTrue(numberOfFrames == 0 || numberOfFrames > 1); Assert.IsTrue(numberOfMultiframeKeyImages <= numberOfFrames); const int numberOfSeries = 1; int instancesPerSeries = numberOfSingleFrameKeyImages + ((numberOfFrames > 0) ? 1:0); Assert.IsTrue(instancesPerSeries > 0); List<TestDataSource> dataSources = CreateMRStudyDataSources(numberOfSeries, instancesPerSeries, "1.2.3"); if (numberOfFrames > 0) { TestDataSource multiFrameDataSource = dataSources[0]; DicomAttributeCollection oldDataSet = multiFrameDataSource._file.DataSet; DicomAttributeCollection newDataSet = new DicomAttributeCollection(); DicomFile newFile = new DicomFile("", new DicomAttributeCollection(), newDataSet); //Yes this is the world's crappiest hack. base.SetupMultiframeXA(newDataSet, 512,512, (uint)numberOfFrames); //because of an exception that gets thrown from the DateTimeParser newDataSet[DicomTags.StudyDate].SetNullValue(); newDataSet[DicomTags.StudyTime].SetNullValue(); newDataSet[DicomTags.SeriesDate].SetNullValue(); newDataSet[DicomTags.SeriesTime].SetNullValue(); newDataSet[DicomTags.ReferencedStudySequence].SetEmptyValue(); newDataSet[DicomTags.Modality].SetStringValue("MR"); newDataSet[DicomTags.StudyInstanceUid].SetStringValue(oldDataSet[DicomTags.StudyInstanceUid].ToString()); newDataSet[DicomTags.SeriesInstanceUid].SetStringValue(oldDataSet[DicomTags.SeriesInstanceUid].ToString()); dataSources[0] = new TestDataSource(newFile); } StudyTree studyTree = CreateStudyTree(ConvertToSops(dataSources)); KeyImageSerializer serializer = new KeyImageSerializer(); Patient patient = studyTree.Patients[0]; Study study = patient.Studies[0]; Series sourceSeries = study.Series[0]; List<IDisplaySet> allDisplaySets = new List<IDisplaySet>(); BasicDisplaySetFactory factory = new BasicDisplaySetFactory(); factory.SetStudyTree(studyTree); List<IDisplaySet> displaySets = factory.CreateDisplaySets(sourceSeries); allDisplaySets.AddRange(displaySets); List<DicomFile> presentationStates = new List<DicomFile>(); int numberOfMultiframeKeyImagesCreated = 0; foreach (IDisplaySet displaySet in displaySets) { foreach (IPresentationImage image in displaySet.PresentationImages) { Frame frame = ((IImageSopProvider)image).Frame; if (frame.ParentImageSop.NumberOfFrames > 1) { if(numberOfMultiframeKeyImagesCreated >= numberOfMultiframeKeyImages) continue; ++numberOfMultiframeKeyImagesCreated; } DicomSoftcopyPresentationState presentationState = DicomSoftcopyPresentationState.Create(image); //because of an exception that gets thrown from the DateTimeParser presentationState.DicomFile.DataSet[DicomTags.StudyDate].SetNullValue(); presentationState.DicomFile.DataSet[DicomTags.StudyTime].SetNullValue(); presentationState.DicomFile.DataSet[DicomTags.SeriesDate].SetNullValue(); presentationState.DicomFile.DataSet[DicomTags.SeriesTime].SetNullValue(); presentationStates.Add(presentationState.DicomFile); serializer.AddImage(frame, presentationState); } } List<DicomFile> files = serializer.Serialize(); List<TestDataSource> keyImageDataSources = ConvertToDataSources(files); List<Sop> keyImageSops = ConvertToSops(keyImageDataSources); keyImageSops.AddRange(ConvertToSops(ConvertToDataSources(presentationStates))); foreach (Sop sop in keyImageSops) studyTree.AddSop(sop); try { foreach (Series series in study.Series) { if (series.Modality != "KO") continue; List<IDisplaySet> keyImageDisplaySets; if (doSplitting) { factory.CreateSingleImageDisplaySets = true; keyImageDisplaySets = factory.CreateDisplaySets(series); if (keyImageDisplaySets.Count == 0) { factory.CreateSingleImageDisplaySets = false; keyImageDisplaySets = factory.CreateDisplaySets(series); } } else { keyImageDisplaySets = factory.CreateDisplaySets(series); } allDisplaySets.AddRange(keyImageDisplaySets); int numberOfKeyImages = numberOfMultiframeKeyImages + numberOfSingleFrameKeyImages; if (!doSplitting) { Assert.AreEqual(1, keyImageDisplaySets.Count, "There should be only one display set"); IDisplaySet keyImageDisplaySet = keyImageDisplaySets[0]; Assert.AreEqual(numberOfKeyImages, keyImageDisplaySet.PresentationImages.Count, "Expected {0} images", numberOfKeyImages); Assert.AreEqual(typeof(SeriesDisplaySetDescriptor), keyImageDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); } else { Assert.AreEqual(numberOfKeyImages, keyImageDisplaySets.Count, "Expected {0} display sets", numberOfKeyImages); foreach (IDisplaySet keyImageDisplaySet in keyImageDisplaySets) { Assert.AreEqual(1, keyImageDisplaySet.PresentationImages.Count, "There should be only one presentation image"); IPresentationImage keyImage = keyImageDisplaySet.PresentationImages[0]; ImageSop sop = ((IImageSopProvider)keyImage).ImageSop; Assert.AreEqual(sourceSeries.SeriesInstanceUid, sop.SeriesInstanceUid, "Series Instance Uid is not that of the source series"); if (numberOfKeyImages == 1) Assert.AreEqual(typeof(SeriesDisplaySetDescriptor), keyImageDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); else if (sop.NumberOfFrames > 1) Assert.AreEqual(typeof(SingleFrameDisplaySetDescriptor), keyImageDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); else Assert.AreEqual(typeof(SingleImageDisplaySetDescriptor), keyImageDisplaySet.Descriptor.GetType(), "Wrong display set descriptor type"); } } } } finally { foreach (IDisplaySet displaySet in allDisplaySets) displaySet.Dispose(); studyTree.Dispose(); } }