/// <summary>
        /// Initializes a new instance of the <see cref="DicomFileMetaInformation"/> class.
        /// </summary>
        /// <param name="dataset">
        /// The data set for which file meta information is required.
        /// </param>
        public DicomFileMetaInformation(DicomDataset dataset)
        {
            ValidateItems = dataset.ValidateItems;
            Version       = new byte[] { 0x00, 0x01 };

            MediaStorageSOPClassUID    = dataset.GetSingleValue <DicomUID>(DicomTag.SOPClassUID);
            MediaStorageSOPInstanceUID = dataset.GetSingleValue <DicomUID>(DicomTag.SOPInstanceUID);
            TransferSyntax             = dataset.InternalTransferSyntax;

            ImplementationClassUID    = DicomImplementation.ClassUID;
            ImplementationVersionName = DicomImplementation.Version;

            var aet = dataset.Contains(DicomTag.SourceApplicationEntityTitle) ?
                      dataset.Get <string>(DicomTag.SourceApplicationEntityTitle) : null;

            if (aet != null)
            {
                SourceApplicationEntityTitle = aet;
            }

            if (dataset.TryGetSingleValue(DicomTag.SendingApplicationEntityTitle, out string sendingAETVal))
            {
                SendingApplicationEntityTitle = sendingAETVal;
            }
            if (dataset.TryGetSingleValue(DicomTag.ReceivingApplicationEntityTitle, out string receivingAETVal))
            {
                ReceivingApplicationEntityTitle = receivingAETVal;
            }
            if (dataset.TryGetSingleValue(DicomTag.PrivateInformationCreatorUID, out DicomUID privInfoCreator))
            {
                PrivateInformationCreatorUID = privInfoCreator;
            }
            if (dataset.TryGetValues(DicomTag.PrivateInformation, out byte[] privInfo))
Ejemplo n.º 2
0
        public void Get_IntWithoutArgumentTagNonExisting_ShouldThrow()
        {
            var dataset = new DicomDataset();
            var e       = Record.Exception(() => dataset.GetSingleValue <int>(DicomTag.MetersetRate));

            Assert.IsType <DicomDataException>(e);
        }
Ejemplo n.º 3
0
        public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null)
        {
            dataset.CopyTo(modifiedAttributesSequenceItem, _tag);
            var uid = dataset.GetSingleValue <DicomUID>(_tag);

            dataset.AddOrUpdate(_tag, _generator.Generate(uid));
        }
Ejemplo n.º 4
0
        public void Constructor_FromDataset_SequenceItemsNotLinked()
        {
            var ds = new DicomDataset {
                { DicomTag.PatientID, "1" }
            };
            var sps = new DicomDataset {
                { DicomTag.ScheduledStationName, "1" }
            };
            var spcs = new DicomDataset {
                { DicomTag.ContextIdentifier, "1" }
            };

            sps.Add(new DicomSequence(DicomTag.ScheduledProtocolCodeSequence, spcs));
            ds.Add(new DicomSequence(DicomTag.ScheduledProcedureStepSequence, sps));

            var ds2 = new DicomDataset(ds);

            ds2.AddOrUpdate(DicomTag.PatientID, "2");
            ds2.GetSequence(DicomTag.ScheduledProcedureStepSequence).Items[0].AddOrUpdate(DicomTag.ScheduledStationName, "2");
            ds2.GetSequence(DicomTag.ScheduledProcedureStepSequence).Items[0].GetSequence(
                DicomTag.ScheduledProtocolCodeSequence).Items[0].AddOrUpdate(DicomTag.ContextIdentifier, "2");

            Assert.Equal("1", ds.GetSingleValue <string>(DicomTag.PatientID));
            Assert.Equal(
                "1",
                ds.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetString(DicomTag.ScheduledStationName));
            Assert.Equal(
                "1",
                ds.GetSequence(DicomTag.ScheduledProcedureStepSequence).First().GetSequence(
                    DicomTag.ScheduledProtocolCodeSequence).First().GetString(DicomTag.ContextIdentifier));
        }
Ejemplo n.º 5
0
        public void DicomValidation_AddInvalidData()
        {
            var ds         = new DicomDataset();
            var invalidUid = "1.2.315.6666.008965..19187632.1";

            // trying to add this invalidUid should throw exception
            Assert.Throws <DicomValidationException>(() => ds.Add(DicomTag.StudyInstanceUID, invalidUid));

            ds.AutoValidate = false;
            // if AutoValidate is turned off, the invalidUid should be able to be added
            ds.Add(DicomTag.StudyInstanceUID, invalidUid);
            Assert.Equal(invalidUid, ds.GetSingleValue <string>(DicomTag.StudyInstanceUID));

            var tmpFile = Path.GetTempFileName();

            ds.Add(DicomTag.SOPClassUID, DicomUID.SecondaryCaptureImageStorage);
            ds.Add(DicomTag.SOPInstanceUID, DicomUIDGenerator.GenerateNew().UID);
            // save this invalid dicomdataset
            (new DicomFile(ds)).Save(tmpFile);

            // reading of this invalid dicomdataset should be possible
            var dsFile = DicomFile.Open(tmpFile);

            Assert.Equal(invalidUid, dsFile.Dataset.GetSingleValue <string>(DicomTag.StudyInstanceUID));

            // but the validation should still work
            Assert.Throws <DicomValidationException>(() => dsFile.Dataset.Validate());
        }
Ejemplo n.º 6
0
        public void DicomValidation_AddValidData()
        {
            var ds       = new DicomDataset();
            var validUid = "1.2.315.6666.0.8965.19187632.1";

            ds.Add(DicomTag.StudyInstanceUID, validUid);
            Assert.Equal(validUid, ds.GetSingleValue <string>(DicomTag.StudyInstanceUID));
        }
Ejemplo n.º 7
0
        public void Add_UnlimitedCharactersElement_Succeeds()
        {
            var tag     = DicomTag.LongCodeValue;
            var dataset = new DicomDataset();

            dataset.Add(tag, "abc");
            Assert.IsType <DicomUnlimitedCharacters>(dataset.First(item => item.Tag.Equals(tag)));
            Assert.Equal("abc", dataset.GetSingleValue <string>(tag));
        }
Ejemplo n.º 8
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.GetSingleValue <string>(tag));
        }
Ejemplo n.º 9
0
        public void Get_NullableReturnType_ReturnsDefinedValue()
        {
            var        tag      = DicomTag.SelectorULValue;
            const uint expected = 100u;
            var        dataset  = new DicomDataset {
                { tag, expected }
            };

            var actual = dataset.GetSingleValue <uint>(tag);

            Assert.Equal(expected, actual);
        }
Ejemplo n.º 10
0
        public void DicomValidation_ValidateUID()
        {
            var ds       = new DicomDataset();
            var validUid = "1.2.315.6666.0.0.0.8965.19187632.1";

            ds.Add(DicomTag.StudyInstanceUID, validUid);
            Assert.Equal(validUid, ds.GetSingleValue <string>(DicomTag.StudyInstanceUID));

            var tooLongUid = validUid + "." + validUid;
            var ex         = Assert.ThrowsAny <DicomValidationException>(() => ds.AddOrUpdate(DicomTag.StudyInstanceUID, tooLongUid));

            Assert.Contains("length", ex.Message);

            var leadingZeroUid = validUid + ".03";
            var ex2            = Assert.ThrowsAny <DicomValidationException>(() => ds.AddOrUpdate(DicomTag.SeriesInstanceUID, leadingZeroUid));

            Assert.Contains("leading zero", ex2.Message);
        }
        /// <summary>
        /// Regenerate all UIDs in a DICOM dataset.
        /// </summary>
        /// <param name="dataset">Dataset in which UIDs should be regenerated.</param>
        public void RegenerateAll(DicomDataset dataset)
        {
            foreach (var ui in dataset.Where(x => x.ValueRepresentation == DicomVR.UI).ToArray())
            {
                var uid = dataset.GetSingleValue <DicomUID>(ui.Tag);
                if (uid.Type == DicomUidType.SOPInstance || uid.Type == DicomUidType.Unknown)
                {
                    dataset.AddOrUpdate(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);
                }
            }
        }