Exemplo n.º 1
0
		public DicomCMoveRequest(string destinationAe, string studyInstanceUid, string seriesInstanceUid, DicomPriority priority = DicomPriority.Medium) : base(DicomCommandField.CMoveRequest, DicomUID.StudyRootQueryRetrieveInformationModelMOVE, priority) {
			DestinationAE = destinationAe;
			Dataset = new DicomDataset();
			Level = DicomQueryRetrieveLevel.Series;
			Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
			Dataset.Add(DicomTag.SeriesInstanceUID, seriesInstanceUid);
		}
Exemplo n.º 2
0
        public void SerializeAndDeserializePrivateTags()
        {
            var privCreatorDictEntry = new DicomDictionaryEntry(new DicomTag(0x0011, 0x0010), "Private Creator", "PrivateCreator", DicomVM.VM_1, false, DicomVR.LO);
            DicomDictionary.Default.Add(privCreatorDictEntry);

            DicomPrivateCreator privateCreator1 = DicomDictionary.Default.GetPrivateCreator("TESTCREATOR1");
            DicomDictionary privDict1 = DicomDictionary.Default[privateCreator1];

            var dictEntry = new DicomDictionaryEntry(DicomMaskedTag.Parse("0011", "xx01"), "TestPrivTagName", "TestPrivTagKeyword", DicomVM.VM_1, false, DicomVR.CS);
            privDict1.Add(dictEntry);

            var ds = new DicomDataset();
            ds.Add(dictEntry.Tag, "VAL1");
            ds.Add(DicomTag.SOPClassUID, DicomUID.CTImageStorage);
            ds.Add(DicomTag.SOPInstanceUID, "2.25.123");
            Assert.Equal(DicomVR.CS, ds.Get<DicomVR>(dictEntry.Tag));

            var bytes = SerializeDicom_(ds);

            File.OpenWrite("C:\\Temp\\x.dcm").Write(bytes, 0, bytes.Length);

            var ds2 = ParseDicom_(bytes);

            Assert.Equal(DicomVR.CS, ds2.Get<DicomVR>(dictEntry.Tag));
        }
Exemplo n.º 3
0
 public void Add_OtherDoubleElementWithMultipleDoubles_Succeeds()
 {
     var dataset = new DicomDataset();
     dataset.Add(DicomTag.DoubleFloatPixelData, 3.45, 6.78, 9.01);
     Assert.IsType(typeof(DicomOtherDouble), dataset.First());
     Assert.Equal(3, dataset.Get<double[]>(DicomTag.DoubleFloatPixelData).Length);
 }
Exemplo n.º 4
0
 public void Add_UniversalResourceElement_Succeeds()
 {
     var dataset = new DicomDataset();
     dataset.Add(DicomTag.URNCodeValue, "abc");
     Assert.IsType(typeof(DicomUniversalResource), dataset.First());
     Assert.Equal("abc", dataset.Get<string>(DicomTag.URNCodeValue));
 }
Exemplo n.º 5
0
 public void Add_UnlimitedCharactersElementWithMultipleStrings_Succeeds()
 {
     var dataset = new DicomDataset();
     dataset.Add(DicomTag.LongCodeValue, "a", "b", "c");
     Assert.IsType(typeof(DicomUnlimitedCharacters), dataset.First());
     Assert.Equal("c", dataset.Get<string>(DicomTag.LongCodeValue, 2));
 }
Exemplo n.º 6
0
 public void Add_OtherDoubleElement_Succeeds()
 {
     var tag = DicomTag.DoubleFloatPixelData;
     var dataset = new DicomDataset();
     dataset.Add(tag, 3.45);
     Assert.IsType<DicomOtherDouble>(dataset.First(item => item.Tag.Equals(tag)));
 }
Exemplo n.º 7
0
 public void Contains_PrivateTag_SufficientlyFound()
 {
     var dataset = new DicomDataset();
     dataset.Add(new DicomTag(0x0021, 0x0010, "TEST"), "TEST");
     var found = dataset.Contains(new DicomTag(0x0021, 0x0010, "TEST"));
     Assert.True(found);
 }
Exemplo n.º 8
0
        private static DicomDataset GenerateNewDataSetWithInvalidVr()
        {
            var dicomDataset = new DicomDataset();

            dicomDataset.Add(DicomTag.SeriesDescription, "CT1 abdomen\u0000");

            return(dicomDataset);
        }
Exemplo n.º 9
0
        private static void CreateAndAddPixelData(DicomDataset dataset, IByteBuffer pixelData)
        {
            var syntax = dataset.InternalTransferSyntax;

            if (syntax == DicomTransferSyntax.ImplicitVRLittleEndian)
            {
                var Element = new DicomOtherWord(DicomTag.PixelData, new CompositeByteBuffer());
                CompositeByteBuffer buffer = Element.Buffer as CompositeByteBuffer;
                buffer.Buffers.Add(pixelData);
                dataset.Add(Element);
                return;
            }
            if (syntax.IsEncapsulated)
            {
                var  Element = new DicomOtherByteFragment(DicomTag.PixelData);
                long pos     = Element.Fragments.Sum(x => (long)x.Size + 8);
                if (pos < uint.MaxValue)
                {
                    Element.OffsetTable.Add((uint)pos);
                }
                else
                {
                    // do not create an offset table for very large datasets
                    Element.OffsetTable.Clear();
                }

                pixelData = EndianByteBuffer.Create(pixelData, dataset.InternalTransferSyntax.Endian, dataset.Get <ushort>(DicomTag.BitsAllocated));
                Element.Fragments.Add(pixelData);
                dataset.Add(Element);
                return;
            }
            if (dataset.Get <ushort>(DicomTag.BitsAllocated) == 16)
            {
                var Element = new DicomOtherWord(DicomTag.PixelData, new CompositeByteBuffer());
                CompositeByteBuffer buffer = Element.Buffer as CompositeByteBuffer;
                buffer.Buffers.Add(pixelData);
                dataset.Add(Element);
            }
            else
            {
                var Element = new DicomOtherByte(DicomTag.PixelData, new CompositeByteBuffer());
                CompositeByteBuffer buffer = Element.Buffer as CompositeByteBuffer;
                buffer.Buffers.Add(pixelData);
                dataset.Add(Element);
            }
        }
Exemplo n.º 10
0
 public void Add_UnlimitedCharactersElementWithMultipleStrings_Succeeds()
 {
     var tag = DicomTag.LongCodeValue;
     var dataset = new DicomDataset();
     dataset.Add(tag, "a", "b", "c");
     Assert.IsType<DicomUnlimitedCharacters>(dataset.First(item => item.Tag.Equals(tag)));
     Assert.Equal("c", dataset.Get<string>(tag, 2));
 }
Exemplo n.º 11
0
        /// <summary>
        /// Initializes an instance of the <see cref="DicomCMoveRequest"/> class for a specific image.
        /// </summary>
        /// <param name="destinationAe">Move destination Application Entity Title.</param>
        /// <param name="studyInstanceUid">Study instance UID.</param>
        /// <param name="seriesInstanceUid">Series instance UID.</param>
        /// <param name="sopInstanceUid">SOP instance UID.</param>
        /// <param name="priority">Request priority.</param>
        public DicomCMoveRequest(
            string destinationAe,
            string studyInstanceUid,
            string seriesInstanceUid,
            string sopInstanceUid,
            DicomPriority priority = DicomPriority.Medium)
            : base(DicomCommandField.CMoveRequest, DicomUID.StudyRootQueryRetrieveInformationModelMove, priority)
        {
            DestinationAE = destinationAe;
            // when creating requests, one may be forced to use invalid UIDs. So turn off validation
            Dataset = new DicomDataset().NotValidated();

            Level = DicomQueryRetrieveLevel.Image;
            Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
            Dataset.Add(DicomTag.SeriesInstanceUID, seriesInstanceUid);
            Dataset.Add(DicomTag.SOPInstanceUID, sopInstanceUid);
        }
Exemplo n.º 12
0
            public DatasetTestData(DicomTag tag, T[] values)
            {
                Dataset = new DicomDataset();
                Tag     = tag;
                Values  = values;

                Dataset.Add(tag, values);
            }
Exemplo n.º 13
0
 public void Add_UniversalResourceElement_Succeeds()
 {
     var tag = DicomTag.URNCodeValue;
     var dataset = new DicomDataset();
     dataset.Add(tag, "abc");
     Assert.IsType<DicomUniversalResource>(dataset.First(item => item.Tag.Equals(tag)));
     Assert.Equal("abc", dataset.Get<string>(tag));
 }
Exemplo n.º 14
0
 public void Add_OtherDoubleElementWithMultipleDoubles_Succeeds()
 {
     var tag = DicomTag.DoubleFloatPixelData;
     var dataset = new DicomDataset();
     dataset.Add(tag, 3.45, 6.78, 9.01);
     Assert.IsType<DicomOtherDouble>(dataset.First(item => item.Tag.Equals(tag)));
     Assert.Equal(3, dataset.Get<double[]>(tag).Length);
 }
Exemplo n.º 15
0
        public static void SaveToDICOMFile(short[] pixels,int noRows,int noCols,string fileName)
        {
            DicomDataset dataset = new DicomDataset();
            byte[] buf = new byte[2*noCols*noRows];
            Buffer.BlockCopy(pixels, 0, buf, 0, 2 * noCols * noRows);
            FillDataset(dataset);
            dataset.Add(DicomTag.PixelAspectRatio, noRows.ToString()+"\\"+noCols.ToString());
            dataset.Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Monochrome2.Value);
            dataset.Add(DicomTag.Rows, (ushort)noRows);
            dataset.Add(DicomTag.Columns, (ushort)noCols);
            dataset.Add(DicomTag.BitsStored, (ushort)16);
            dataset.Add(DicomTag.BitsAllocated, (ushort)16);
            dataset.Add(DicomTag.HighBit, (ushort)15);
            DicomPixelData pixelData = DicomPixelData.Create(dataset, true);
            pixelData.BitsStored = 16;
            //pixelData.BitsAllocated = 16;
            pixelData.SamplesPerPixel = 1;
            pixelData.HighBit = 15;
            pixelData.PixelRepresentation = PixelRepresentation.Unsigned;
            pixelData.PlanarConfiguration = 0;
            MemoryByteBuffer pixelsInBytes = new MemoryByteBuffer(buf);
            pixelData.AddFrame(pixelsInBytes);

            DicomFile dicomfile = new DicomFile(dataset);
            dicomfile.Save(fileName);
        }
Exemplo n.º 16
0
        public void Contains_PrivateTag_SufficientlyFound()
        {
            var dataset = new DicomDataset();

            dataset.Add(new DicomTag(0x0021, 0x0010, "TEST"), "TEST");
            var found = dataset.Contains(new DicomTag(0x0021, 0x0010, "TEST"));

            Assert.True(found);
        }
Exemplo n.º 17
0
        private static DicomDataset GenerateNewDataSetWithInvalidVr()
        {
            var dicomDataset = new DicomDataset();

            // CS VR type, char length should be less than or equal to 16
            dicomDataset.Add(DicomTag.Modality, "123456789ABCDEFGHIJK");

            return(dicomDataset);
        }
Exemplo n.º 18
0
 private void FillDicomCollection()
 {
     _elementList.Clear();
     _elementList = new DicomDataset();
     foreach (DElement ele in this.GetList())
     {
         _elementList.Add(ele._element);
     }
 }
Exemplo n.º 19
0
        static void Main(string[] args)
        {
            ZSCMoveSCP.OnZSCMoveRequest = (request) =>
            {
                List <DicomDataset> dataset = new List <DicomDataset>();
                for (int i = 0; i < 3; ++i)
                {
                    DicomDataset dt = new DicomDataset();
                    dt.Add(DicomTag.StudyInstanceUID, "12");
                    dt.Add(DicomTag.SOPInstanceUID, i.ToString());
                    dataset.Add(dt);
                }
                return(dataset);
            };
            var cmoveScp = new DicomServer <ZSCMoveSCP>(12345);

            Console.ReadLine();
        }
        public DicomContentItem(DicomCodeItem code, DicomRelationship relationship, DicomUID value)
        {
            Dataset      = new DicomDataset();
            Code         = code;
            Relationship = relationship;
            Type         = DicomValueType.UIDReference;

            Dataset.Add(DicomTag.UID, value);
        }
        public static DicomDataset Write(DicomRTFrameOFReference dicomRtFrameOfReference)
        {
            var ds = new DicomDataset();

            ds.Add(DicomTag.FrameOfReferenceUID, dicomRtFrameOfReference.FrameOfRefUID);
            var lisOfStudies = new List <DicomDataset>();

            foreach (var refStudy in dicomRtFrameOfReference.ReferencedStudies)
            {
                var newDS = DicomRTReferencedStudy.Write(refStudy);
                lisOfStudies.Add(newDS);
            }
            if (lisOfStudies.Count > 0)
            {
                ds.Add(new DicomSequence(DicomTag.RTReferencedStudySequence, lisOfStudies.ToArray()));
            }
            return(ds);
        }
        public DicomContentItem(DicomCodeItem code, DicomRelationship relationship, DicomCodeItem value)
        {
            Dataset      = new DicomDataset();
            Code         = code;
            Relationship = relationship;
            Type         = DicomValueType.Code;

            Dataset.Add(DicomTag.ConceptCodeSequence, value);
        }
        public DicomContentItem(DicomCodeItem code, DicomRelationship relationship, DicomMeasuredValue value)
        {
            Dataset      = new DicomDataset();
            Code         = code;
            Relationship = relationship;
            Type         = DicomValueType.Numeric;

            Dataset.Add(DicomTag.MeasuredValueSequence, value);
        }
Exemplo n.º 24
0
        public void GivenDicomTagWithDifferentVR_WhenGetSingleOrDefaultIsCalled_ThenShouldReturnNull()
        {
            DicomTag     tag        = DicomTag.AbortReason;
            DicomVR      expectedVR = DicomVR.CS;
            DicomElement element    = new DicomLongString(tag, "Value");

            _dicomDataset.Add(element);
            Assert.Null(_dicomDataset.GetSingleValueOrDefault <string>(tag, expectedVR));
        }
Exemplo n.º 25
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DicomCGetRequest"/> class.
 /// </summary>
 /// <param name="studyInstanceUid">
 /// The Study Instance UID confining the C-GET operation.
 /// </param>
 /// <param name="priority">
 /// The priority of the C-GET operation.
 /// </param>
 public DicomCGetRequest(
     string studyInstanceUid,
     DicomPriority priority = DicomPriority.Medium)
     : base(DicomCommandField.CGetRequest, DicomUID.StudyRootQueryRetrieveInformationModelGET, priority)
 {
     Dataset = new DicomDataset();
     Level = DicomQueryRetrieveLevel.Study;
     Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
 }
Exemplo n.º 26
0
        public void Create_TransferSyntaxExplicitLEBitsAllocatedGreaterThan16_Throws()
        {
            var dataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian);

            dataset.Add(DicomTag.BitsAllocated, (ushort)17);
            var exception = Record.Exception(() => DicomPixelData.Create(dataset, true));

            Assert.NotNull(exception);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="DicomCGetRequest"/> class.
 /// </summary>
 /// <param name="studyInstanceUid">
 /// The Study Instance UID confining the C-GET operation.
 /// </param>
 /// <param name="priority">
 /// The priority of the C-GET operation.
 /// </param>
 public DicomCGetRequest(
     string studyInstanceUid,
     DicomPriority priority = DicomPriority.Medium)
     : base(DicomCommandField.CGetRequest, DicomUID.StudyRootQueryRetrieveInformationModelGET, priority)
 {
     Dataset = new DicomDataset();
     Level   = DicomQueryRetrieveLevel.Study;
     Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
 }
Exemplo n.º 28
0
        public void Create_TransferSyntaxExplicitLEBitsAllocatedLessThanOrEqualTo8_ReturnsOtherBytePixelDataObject(ushort bitsAllocated)
        {
            var dataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian);

            dataset.Add(DicomTag.BitsAllocated, bitsAllocated);
            var pixelData = DicomPixelData.Create(dataset, true);

            Assert.Equal("OtherBytePixelData", pixelData.GetType().Name);
        }
Exemplo n.º 29
0
        public static void Write(DicomDataset ds, IEnumerable <DicomRTStructureSetROI> structureSetRois)
        {
            var roisDataSets = new List <DicomDataset>();

            foreach (var roi in structureSetRois)
            {
                var newDS = new DicomDataset();
                newDS.Add(DicomTag.ROINumber, roi.RoiNumber);
                newDS.Add(DicomTag.ROIName, roi.RoiName);
                newDS.Add(DicomTag.ReferencedFrameOfReferenceUID, roi.ReferencedFrameOfRefUID);
                newDS.Add(DicomTag.ROIGenerationAlgorithm, ToString(roi.ROIGenerationAlgorithm));
                roisDataSets.Add(newDS);
            }
            if (roisDataSets.Count > 0)
            {
                ds.Add(new DicomSequence(DicomTag.StructureSetROISequence, roisDataSets.ToArray()));
            }
        }
Exemplo n.º 30
0
        public void Create_TransferSyntaxExplicitLEBitsAllocatedGreaterThan16_ReturnsOtherWordPixelDataObject()
        {
            var dataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian);

            dataset.Add(DicomTag.BitsAllocated, (ushort)32);
            var pixelData = DicomPixelData.Create(dataset, true);

            Assert.Equal("OtherWordPixelData", pixelData.GetType().Name);
        }
Exemplo n.º 31
0
        public void Add_UniversalResourceElementWithMultipleStrings_OnlyFirstValueIsUsed()
        {
            var dataset = new DicomDataset();
            dataset.Add(DicomTag.URNCodeValue, "a", "b", "c");
            Assert.IsType(typeof(DicomUniversalResource), dataset.First());

            var data = dataset.Get<string[]>(DicomTag.URNCodeValue);
            Assert.Equal(1, data.Length);
            Assert.Equal("a", data.First());
        }
Exemplo n.º 32
0
        public DicomContentItem(DicomCodeItem code, DicomRelationshipType relationship, DicomContinuity continuity, params DicomContentItem[] items)
        {
            Dataset      = new DicomDataset();
            Code         = code;
            Relationship = relationship;
            Type         = DicomValueType.Container;
            Continuity   = continuity;

            Dataset.Add(DicomTag.ContentSequence, items);
        }
Exemplo n.º 33
0
        public void OnBeginSequence(IByteSource source, DicomTag tag, uint length)
        {
            DicomSequence sq = new DicomSequence(tag);

            _sequences.Push(sq);

            DicomDataset ds = _datasets.Peek();

            ds.Add(sq);
        }
Exemplo n.º 34
0
        private static void FillInstsanceLevel(DicomDataset instanceDs)
        {
            instanceDs.Add <string>(DicomTag.SpecificCharacterSet);
            instanceDs.Add <string>(DicomTag.SOPClassUID);
            instanceDs.Add <string>(DicomTag.SOPInstanceUID);
            instanceDs.Add <string>(DicomTag.InstanceNumber);

            instanceDs.Add <ushort>(DicomTag.Rows);
            instanceDs.Add <ushort>(DicomTag.Columns);
            instanceDs.Add <ushort>(DicomTag.BitsAllocated);
            instanceDs.Add <string>(DicomTag.NumberOfFrames);
        }
Exemplo n.º 35
0
        public static DicomDataset Write(DicomRTReferencedStudy refStudy)
        {
            var ds = new DicomDataset();

            ds.Add(DicomTag.ReferencedSOPClassUID, refStudy.ReferencedSOPClassUID);
            ds.Add(DicomTag.ReferencedSOPInstanceUID, refStudy.ReferencedSOPInstanceUID);
            var listOfContour = new List <DicomDataset>();

            foreach (var series in refStudy.ReferencedSeries)
            {
                var newDS = DicomRTReferencedSeries.Write(series);
                listOfContour.Add(newDS);
            }
            if (listOfContour.Count > 0)
            {
                ds.Add(new DicomSequence(DicomTag.RTReferencedSeriesSequence, listOfContour.ToArray()));
            }
            return(ds);
        }
        public void TestPatientAgeTag()
        {
            var dataset = new DicomDataset();

            dataset.Add(new DicomAgeString(DicomTag.PatientAge, "009Y"));

            var cSharpValue = DicomTypeTranslaterReader.GetCSharpValue(dataset, DicomTag.PatientAge);

            Assert.AreEqual("009Y", cSharpValue);
        }
Exemplo n.º 37
0
        private void OnPrintJobStatusUpdate(object sender, StatusUpdateEventArgs e)
        {
            var printJob = sender as PrintJob;

            if (printJob.SendNEventReport)
            {
                var reportRequest = new DicomNEventReportRequest(
                    printJob.SOPClassUID,
                    printJob.SOPInstanceUID,
                    e.EventTypeId);
                var ds = new DicomDataset();
                ds.Add(DicomTag.ExecutionStatusInfo, e.ExecutionStatusInfo);
                ds.Add(DicomTag.FilmSessionLabel, e.FilmSessionLabel);
                ds.Add(DicomTag.PrinterName, e.PrinterName);

                reportRequest.Dataset = ds;
                this.SendRequest(reportRequest);
            }
        }
Exemplo n.º 38
0
 /// <summary>
 /// Initializes a new instance of the <see cref="DicomCGetRequest"/> class.
 /// </summary>
 /// <param name="studyInstanceUid">
 /// The Study Instance UID confining the C-GET operation.
 /// </param>
 /// <param name="priority">
 /// The priority of the C-GET operation.
 /// </param>
 public DicomCGetRequest(
     string studyInstanceUid,
     DicomPriority priority = DicomPriority.Medium)
     : base(DicomCommandField.CGetRequest, DicomUID.StudyRootQueryRetrieveInformationModelGET, priority)
 {
     // when creating requests, one may be forced to use invalid UIDs. So turn off validation
     Dataset = new DicomDataset().NotValidated();
     Level   = DicomQueryRetrieveLevel.Study;
     Dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
 }
Exemplo n.º 39
0
        public void Add_UniversalResourceElementWithMultipleStrings_OnlyFirstValueIsUsed()
        {
            var tag = DicomTag.URNCodeValue;
            var dataset = new DicomDataset();
            dataset.Add(tag, "a", "b", "c");
            Assert.IsType<DicomUniversalResource>(dataset.First(item => item.Tag.Equals(tag)));

            var data = dataset.Get<string[]>(tag);
            Assert.Equal(1, data.Length);
            Assert.Equal("a", data.First());
        }
Exemplo n.º 40
0
        public DicomContentItem(DicomCodeItem code, DicomRelationshipType relationship, DicomValueType type, string value)
        {
            Dataset      = new DicomDataset();
            Code         = code;
            Relationship = relationship;
            Type         = type;

            if (type == DicomValueType.Text)
            {
                Dataset.Add(DicomTag.TextValue, value);
            }
            else if (type == DicomValueType.PersonName)
            {
                Dataset.Add(DicomTag.PersonName, value);
            }
            else
            {
                throw new DicomStructuredReportException("Type of string is not the correct value type for {0} content item.", type);
            }
        }
        private HttpResponseMessage GenerateQueryResult(DicomTag dicomTag, string queryValue, List <string> studyInstanceUids)
        {
            var set = new List <DicomDataset>();

            foreach (var studyInstanceUid in studyInstanceUids)
            {
                var dataset = new DicomDataset();
                dataset.Add(dicomTag, queryValue);
                dataset.Add(DicomTag.StudyInstanceUID, studyInstanceUid);
                set.Add(dataset);
            }

            var json          = JsonConvert.SerializeObject(set, new JsonDicomConverter());
            var stringContent = new StringContent(json);

            return(new HttpResponseMessage(System.Net.HttpStatusCode.OK)
            {
                Content = stringContent
            });
        }
Exemplo n.º 42
0
        public void BitsStored_Setter_GreaterThanBitsAllocatedIsNotAllowed(ushort bitsAllocated, ushort bitsStored)
        {
            var dataset = new DicomDataset(DicomTransferSyntax.ExplicitVRLittleEndian);

            dataset.Add(DicomTag.BitsAllocated, bitsAllocated);
            var pixelData = DicomPixelData.Create(dataset, true);

            var exception = Record.Exception(() => pixelData.BitsStored = bitsStored);

            Assert.NotNull(exception);
        }
Exemplo n.º 43
0
        public void Add_MultiVMStringTags_YieldsMultipleValues(DicomTag tag, string[] values, Type expectedType)
        {
            var dataset = new DicomDataset();
            dataset.Add(tag, values);

            Assert.IsType(expectedType, dataset.First(item => item.Tag.Equals(tag)));

            var data = dataset.Get<string[]>(tag);
            Assert.Equal(values.Length, data.Length);
            Assert.Equal(values.Last(), data.Last());
        }
Exemplo n.º 44
0
		public void RegenerateAll(DicomDataset dataset) {
			foreach (var ui in dataset.Where(x => x.ValueRepresentation == DicomVR.UI).ToArray()) {
				dataset.Add(ui.Tag, Generate(dataset.Get<DicomUID>(ui.Tag)));
			}

			foreach (var sq in dataset.Where(x => x.ValueRepresentation == DicomVR.SQ).Cast<DicomSequence>().ToArray()) {
				foreach (var item in sq) {
					RegenerateAll(item);
				}
			}
		}
Exemplo n.º 45
0
        public void DicomValidation_ValidateCodeString()
        {
            var ds           = new DicomDataset();
            var validAETitle = "HUGO1";

            ds.Add(DicomTag.ReferencedFileID, validAETitle);

            Assert.Throws <DicomValidationException>(() => ds.AddOrUpdate(DicomTag.ReferencedFileID, "Hugo1"));
            Assert.Throws <DicomValidationException>(() => ds.AddOrUpdate(DicomTag.ReferencedFileID, "HUGO-1"));
            Assert.Throws <DicomValidationException>(() => ds.AddOrUpdate(DicomTag.ReferencedFileID, "HUGOHUGOHUGOHUGO1"));
        }
		public void RegenerateAll(DicomDataset dataset) {
			foreach (var ui in dataset.Where(x => x.ValueRepresentation == DicomVR.UI).ToArray()) {
				var uid = dataset.Get<DicomUID>(ui.Tag);
				if (uid.Type == DicomUidType.SOPInstance || uid.Type == DicomUidType.Unknown)
					dataset.Add(ui.Tag, Generate(uid));
			}

			foreach (var sq in dataset.Where(x => x.ValueRepresentation == DicomVR.SQ).Cast<DicomSequence>().ToArray()) {
				foreach (var item in sq) {
					RegenerateAll(item);
				}
			}
		}
Exemplo n.º 47
0
        public void Add_PersonName_MultipleNames_YieldsMultipleValues()
        {
            var dataset = new DicomDataset();
            dataset.Add(
                DicomTag.PerformingPhysicianName,
                "Gustafsson^Anders^L",
                "Yates^Ian",
                "Desouky^Hesham",
                "Horn^Chris");

            var data = dataset.Get<string[]>(DicomTag.PerformingPhysicianName);
            Assert.Equal(4, data.Length);
            Assert.Equal("Desouky^Hesham", data[2]);
        }
Exemplo n.º 48
0
        public void Add_TimeRange_GetDateRangeReturnsValidRange()
        {
            var dataset =
                new DicomDataset(
                    new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage),
                    new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"));

            var expected = new DicomDateRange(new DateTime(1, 1, 1, 5, 10, 5), new DateTime(1, 1, 1, 19, 0, 20));
            dataset.Add(DicomTag.AcquisitionTime, expected);

            var actual = dataset.Get<DicomDateRange>(DicomTag.AcquisitionTime);
            Assert.Equal(expected.Minimum, actual.Minimum);
            Assert.Equal(expected.Maximum, actual.Maximum);
        }
Exemplo n.º 49
0
        public void Add_DateRange_GetStringReturnsRangeString()
        {
            var dataset =
                new DicomDataset(
                    new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage),
                    new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"));
            dataset.Add(
                DicomTag.AcquisitionDate,
                new DicomDateRange(new DateTime(2016, 4, 20), new DateTime(2016, 4, 21)));

            const string expected = "20160420-20160421";
            var actual = dataset.Get<string>(DicomTag.AcquisitionDate);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 50
0
        public void Add_TimeRange_GetStringReturnsRangeString()
        {
            var dataset =
                new DicomDataset(
                    new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage),
                    new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"));
            dataset.Add(
                DicomTag.AcquisitionTime,
                new DicomDateRange(new DateTime(1, 1, 1, 5, 10, 5), new DateTime(1, 1, 1, 19, 0, 20)));

            const string expected = "051005-190020";
            var actual = dataset.Get<string>(DicomTag.AcquisitionTime);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 51
0
        public void CheckAddedPrivateTagValueRepresentation()
        {
            var privCreatorDictEntry = new DicomDictionaryEntry(new DicomTag(0x0011, 0x0010), "Private Creator", "PrivateCreator", DicomVM.VM_1, false, DicomVR.LO);
            DicomDictionary.Default.Add(privCreatorDictEntry);

            DicomPrivateCreator privateCreator1 = DicomDictionary.Default.GetPrivateCreator("TESTCREATOR1");
            DicomDictionary privDict1 = DicomDictionary.Default[privateCreator1];

            var dictEntry = new DicomDictionaryEntry(DicomMaskedTag.Parse("0011", "xx10"), "TestPrivTagName", "TestPrivTagKeyword", DicomVM.VM_1, false, DicomVR.CS);
            privDict1.Add(dictEntry);

            var ds = new DicomDataset();
            ds.Add(dictEntry.Tag, "VAL1");

            Assert.Equal(DicomVR.CS, ds.Get<DicomVR>(dictEntry.Tag));
        }
Exemplo n.º 52
0
        public void Add_StringWithDicomValidTimeZone_ShouldNotThrow()
        {
            var dataset =
                new DicomDataset(
                    new DicomUniqueIdentifier(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage),
                    new DicomUniqueIdentifier(DicomTag.SOPInstanceUID, "1.2.3"));

            var zone = DateTime.Now.ToString("yyyyMMddHHmmsszzz").Substring(14).Replace(":", string.Empty);

            var exception = Record.Exception(() => dataset.Add(DicomTag.AcquisitionDateTime, $"20160420102030{zone}"));
            Assert.Null(exception);

            var expected = new DateTime(2016, 4, 20, 10, 20, 30);
            var actual = dataset.Get<DateTime>(DicomTag.AcquisitionDateTime);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 53
0
        public void DicomFile_OpenUtf8Encoding_SwedishCharactersMaintained()
        {
            var expected = "Händer Å Fötter";
            var tag = DicomTag.DoseComment;

            var dataset = new DicomDataset(MinimumDatatset);
            dataset.Add(new DicomLongString(tag, DicomEncoding.GetEncoding("ISO IR 192"), expected));

            var outFile = new DicomFile(dataset);
            var stream = new MemoryStream();
            outFile.Save(stream);

            stream.Seek(0, SeekOrigin.Begin);
            var inFile = DicomFile.Open(stream, DicomEncoding.GetEncoding("ISO IR 192"));
            var actual = inFile.Dataset.Get<string>(tag);

            Assert.Equal(expected, actual);
        }
Exemplo n.º 54
0
        private void AddGreyscaleImage(Bitmap bitmap, int index)
        {
            if (_currentFilmBox == null)
            {
                throw new InvalidOperationException("Start film box first!");
            }
            if (index < 0 || index > _currentFilmBox.BasicImageBoxes.Count)
            {
                throw new ArgumentOutOfRangeException("Image box index out of range");
            }

            if (bitmap.PixelFormat != PixelFormat.Format24bppRgb &&
               bitmap.PixelFormat != PixelFormat.Format32bppArgb &&
               bitmap.PixelFormat != PixelFormat.Format32bppRgb
              )
            {
                throw new ArgumentException("Not supported bitmap format");
            }

            var dataset = new DicomDataset();
            dataset.Add<ushort>(DicomTag.Columns, (ushort)bitmap.Width)
                   .Add<ushort>(DicomTag.Rows, (ushort)bitmap.Height)
                   .Add<ushort>(DicomTag.BitsAllocated, 8)
                   .Add<ushort>(DicomTag.BitsStored, 8)
                   .Add<ushort>(DicomTag.HighBit, 7)
                   .Add(DicomTag.PixelRepresentation, (ushort)PixelRepresentation.Unsigned)
                   .Add(DicomTag.PlanarConfiguration, (ushort)PlanarConfiguration.Interleaved)
                   .Add<ushort>(DicomTag.SamplesPerPixel, 1)
                   .Add(DicomTag.PhotometricInterpretation, PhotometricInterpretation.Monochrome2.Value);

            var pixelData = DicomPixelData.Create(dataset, true);

            var pixels = GetGreyBytes(bitmap);
            var buffer = new Dicom.IO.Buffer.MemoryByteBuffer(pixels.Data);

            pixelData.AddFrame(buffer);

            var imageBox = _currentFilmBox.BasicImageBoxes[index];
            imageBox.ImageSequence = dataset;

            pixels.Dispose();
        }
    public void Test_RegenerateAll()
    {
      var uidGenerator = new DicomUIDGenerator();
      var dataset = new DicomDataset
                     {
                       new DicomPersonName(
                         DicomTag.PatientName,
                         new[] { "Anna^Pelle", null, "Olle^Jöns^Pyjamas" }),
                       { DicomTag.SOPClassUID, DicomUID.RTPlanStorage },
                       { DicomTag.SOPInstanceUID, uidGenerator.Generate() },
                       { DicomTag.SeriesInstanceUID,
                         new[] { uidGenerator.Generate(), uidGenerator.Generate() } },
                       { DicomTag.FrameOfReferenceUID, uidGenerator.Generate() }
                     };
      dataset.Add(
        DicomTag.ReferencedFrameOfReferenceSequence,
        new[]
          {
            new DicomDataset { { DicomTag.ReferencedFrameOfReferenceUID, uidGenerator.Generate() } },
            new DicomDataset { { DicomTag.ReferencedFrameOfReferenceUID, uidGenerator.Generate() } }
          });

      var clone = this.DeepClone_(dataset);

      uidGenerator.RegenerateAll(clone);

      Assert.Equal(dataset.Get<string>(DicomTag.PatientName), clone.Get<string>(DicomTag.PatientName));
      Assert.Equal(dataset.Get<string>(DicomTag.SOPClassUID), clone.Get<string>(DicomTag.SOPClassUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.SOPInstanceUID), clone.Get<string>(DicomTag.SOPInstanceUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.SeriesInstanceUID), clone.Get<string>(DicomTag.SeriesInstanceUID));
      Assert.NotEqual(dataset.Get<string>(DicomTag.FrameOfReferenceUID), clone.Get<string>(DicomTag.FrameOfReferenceUID));
      Assert.NotEqual(
        dataset.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[0].Get<string>(DicomTag.ReferencedFrameOfReferenceUID),
        clone.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[0].Get<string>(DicomTag.ReferencedFrameOfReferenceUID));
      Assert.NotEqual(
        dataset.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[1].Get<string>(DicomTag.ReferencedFrameOfReferenceUID),
        clone.Get<DicomSequence>(DicomTag.ReferencedFrameOfReferenceSequence).Items[1].Get<string>(DicomTag.ReferencedFrameOfReferenceUID));
    }
Exemplo n.º 56
0
        void OnPrintJobStatusUpdate(object sender, StatusUpdateEventArgs e)
        {
            var printJob = sender as PrintJob;
            if (printJob.SendNEventReport)
            {
                var reportRequest = new DicomNEventReportRequest(printJob.SOPClassUID, printJob.SOPInstanceUID, e.EventTypeId);
                var ds = new DicomDataset();
                ds.Add(DicomTag.ExecutionStatusInfo, e.ExecutionStatusInfo);
                ds.Add(DicomTag.FilmSessionLabel, e.FilmSessionLabel);
                ds.Add(DicomTag.PrinterName, e.PrinterName);

                reportRequest.Dataset = ds;
                this.SendRequest(reportRequest);
            }
        }
Exemplo n.º 57
0
        public DicomNActionResponse OnNActionRequest(DicomNActionRequest request)
        {
            if (_filmSession == null)
            {
                this.Logger.Error("A basic film session does not exist for this association {0}", CallingAE);
                return new DicomNActionResponse(request, DicomStatus.InvalidObjectInstance);
            }

            lock (_synchRoot)
            {
                try
                {

                    var filmBoxList = new List<FilmBox>();
                    if (request.SOPClassUID == DicomUID.BasicFilmSessionSOPClass && request.ActionTypeID == 0x0001)
                    {
                        this.Logger.Info("Creating new print job for film session {0}", _filmSession.SOPInstanceUID.UID);
                        filmBoxList.AddRange(_filmSession.BasicFilmBoxes);
                    }
                    else if (request.SOPClassUID == DicomUID.BasicFilmBoxSOPClass && request.ActionTypeID == 0x0001)
                    {
                        this.Logger.Info("Creating new print job for film box {0}", request.SOPInstanceUID.UID);

                        var filmBox = _filmSession.FindFilmBox(request.SOPInstanceUID);
                        if (filmBox != null)
                        {
                            filmBoxList.Add(filmBox);
                        }
                        else
                        {
                            this.Logger.Error("Received N-ACTION request for invalid film box {0} from {1}", request.SOPInstanceUID.UID, CallingAE);
                            return new DicomNActionResponse(request, DicomStatus.NoSuchObjectInstance);
                        }
                    }
                    else
                    {
                        if (request.ActionTypeID != 0x0001)
                        {
                            this.Logger.Error("Received N-ACTION request for invalid action type {0} from {1}", request.ActionTypeID, CallingAE);
                            return new DicomNActionResponse(request, DicomStatus.NoSuchActionType);
                        }
                        else
                        {
                            this.Logger.Error("Received N-ACTION request for invalid SOP class {0} from {1}", request.SOPClassUID, CallingAE);
                            return new DicomNActionResponse(request, DicomStatus.NoSuchSOPClass);
                        }
                    }

                    var printJob = new PrintJob(null, Printer, CallingAE, this.Logger);
                    printJob.SendNEventReport = _sendEventReports;
                    printJob.StatusUpdate += OnPrintJobStatusUpdate;

                    printJob.Print(filmBoxList);

                    if (printJob.Error == null)
                    {

                        var result = new DicomDataset();
                        result.Add(new DicomSequence(new DicomTag(0x2100, 0x0500),
                            new DicomDataset(new DicomUniqueIdentifier(DicomTag.ReferencedSOPClassUID, DicomUID.PrintJobSOPClass)),
                            new DicomDataset(new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, printJob.SOPInstanceUID))));

                        var response = new DicomNActionResponse(request, DicomStatus.Success);
                        response.Command.Add(DicomTag.AffectedSOPInstanceUID, printJob.SOPInstanceUID);
                        response.Dataset = result;

                        return response;
                    }
                    else
                    {
                        throw printJob.Error;
                    }
                }
                catch (Exception ex)
                {
                    this.Logger.Error("Error occured during N-ACTION {0} for SOP class {1} and instance {2}",
                        request.ActionTypeID, request.SOPClassUID.UID, request.SOPInstanceUID.UID);
                    this.Logger.Error(ex.Message);
                    return new DicomNActionResponse(request, DicomStatus.ProcessingFailure);
                }
            }
        }
Exemplo n.º 58
0
        private DicomNGetResponse GetPrintJob(DicomNGetRequest request)
        {
            if (_printJobList.ContainsKey(request.SOPInstanceUID.UID))
            {
                var printJob = _printJobList[request.SOPInstanceUID.UID];

                var sb = new System.Text.StringBuilder();

                var dataset = new DicomDataset();

                if (request.Attributes != null && request.Attributes.Length > 0)
                {
                    foreach (var item in request.Attributes)
                    {
                        sb.AppendFormat("GetPrintJob attribute {0} requested", item);
                        sb.AppendLine();
                        var value = printJob.Get(item, "");
                        dataset.Add(item, value);
                    }

                    Logger.Info(sb.ToString());
                }

                var response = new DicomNGetResponse(request, DicomStatus.Success);
                response.Dataset = dataset;
                return response;
            }
            else
            {
                var response = new DicomNGetResponse(request, DicomStatus.NoSuchObjectInstance);
                return response;
            }
        }
Exemplo n.º 59
0
        private DicomNGetResponse GetPrinterConfiguration(DicomNGetRequest request)
        {
            var dataset = new DicomDataset();
            var config = new DicomDataset();

            var sequence = new DicomSequence(DicomTag.PrinterConfigurationSequence, config);

            dataset.Add(sequence);

            var response = new DicomNGetResponse(request, DicomStatus.Success);
            response.Command.Add(DicomTag.AffectedSOPInstanceUID, request.SOPInstanceUID);
            response.Dataset = dataset;
            return response;

        }
Exemplo n.º 60
0
        private DicomNGetResponse GetPrinter(DicomNGetRequest request)
        {

            var ds = new DicomDataset();

            var sb = new System.Text.StringBuilder();
            if (request.Attributes != null && request.Attributes.Length > 0)
            {
                foreach (var item in request.Attributes)
                {
                    sb.AppendFormat("GetPrinter attribute {0} requested", item);
                    sb.AppendLine();
                    var value = Printer.Get(item, "");
                    ds.Add(item, value);
                }

                Logger.Info(sb.ToString());
            }
            if (ds.Count() == 0)
            {

                ds.Add(DicomTag.PrinterStatus, Printer.PrinterStatus);
                ds.Add(DicomTag.PrinterStatusInfo, "");
                ds.Add(DicomTag.PrinterName, Printer.PrinterName);
                ds.Add(DicomTag.Manufacturer, Printer.Manufacturer);
                ds.Add(DicomTag.DateOfLastCalibration, Printer.DateTimeOfLastCalibration.Date);
                ds.Add(DicomTag.TimeOfLastCalibration, Printer.DateTimeOfLastCalibration);
                ds.Add(DicomTag.ManufacturerModelName, Printer.ManufacturerModelName);
                ds.Add(DicomTag.DeviceSerialNumber, Printer.DeviceSerialNumber);
                ds.Add(DicomTag.SoftwareVersions, Printer.SoftwareVersions);
            }

            var response = new DicomNGetResponse(request, DicomStatus.Success);
            response.Dataset = ds;

            this.Logger.Info(response.ToString(true));
            return response;
        }