/// <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))
public void Get_IntWithoutArgumentTagNonExisting_ShouldThrow() { var dataset = new DicomDataset(); var e = Record.Exception(() => dataset.GetSingleValue <int>(DicomTag.MetersetRate)); Assert.IsType <DicomDataException>(e); }
public void Transform(DicomDataset dataset, DicomDataset modifiedAttributesSequenceItem = null) { dataset.CopyTo(modifiedAttributesSequenceItem, _tag); var uid = dataset.GetSingleValue <DicomUID>(_tag); dataset.AddOrUpdate(_tag, _generator.Generate(uid)); }
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)); }
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()); }
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)); }
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)); }
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)); }
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); }
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); } } }