/// <string>Replaces the content of a UID with a random one</string> /// <param name="dataset">Reference to the dataset</param> /// <param name="item"></param> private void ReplaceUID(DicomDataset dataset, DicomItem item) { if (!(item is DicomElement)) { return; } string rep; DicomUID uid; var old = ((DicomElement)item).Get <string>(); if (ReplacedUIDs.ContainsKey(old)) { rep = ReplacedUIDs[old]; uid = new DicomUID(rep, "Anonymized UID", DicomUidType.Unknown); } else { uid = DicomUIDGenerator.GenerateDerivedFromUUID(); rep = uid.UID; ReplacedUIDs[old] = rep; } var newItem = new DicomUniqueIdentifier(item.Tag, uid); dataset.AddOrUpdate(newItem); }
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 ConvertGuidToUuidInteger_Iso9834Sample() { // Sample value of ISO/IEC 9834-8, paragraph 8 and wiki.ihe.net var sampleValue = new Guid("f81d4fae-7dec-11d0-a765-00a0c91e6bf6"); string actual = DicomUIDGenerator.ConvertGuidToUuidInteger(ref sampleValue); Assert.Equal("2.25.329800735698586629295641978511506172918", actual); }
public void Generate_MultipleInParallel_AllValuesUnique() { const int n = 100000; var uids = new string[n]; Parallel.For(0, n, i => { uids[i] = DicomUIDGenerator.GenerateNew().UID; }); Assert.Equal(n, uids.Distinct().Count()); }
public void ConvertGuidToUuidInteger_RoundTripConversionEmpty() { var expected = new Guid(); string converted = DicomUIDGenerator.ConvertGuidToUuidInteger(ref expected); var actual = ConvertDicomUidToGuid(converted); Assert.Equal(expected, actual); }
public void ConvertGuidToUuidInteger_RoundTripConversion() { var expected = new Guid("11223344-5566-7788-9900-aabbccddeeff"); string converted = DicomUIDGenerator.ConvertGuidToUuidInteger(ref expected); var actual = ConvertDicomUidToGuid(converted); Assert.Equal(expected, actual); }
public void GenerateDerivedFromUUID_MultipleValues_AllValuesContainOnlyDigitsAndDecimalDots() { for (var i = 0; i < 1000; ++i) { var uid = DicomUIDGenerator.GenerateDerivedFromUUID(); var invalids = Regex.Replace(uid.UID, @"[0-9\.]", ""); Assert.Equal(0, invalids.Length); } }
public void Generate_SourceUidKnown_ReturnsMappedDestinationUid() { var source = DicomUIDGenerator.GenerateNew(); var generator = new DicomUIDGenerator(); var expected = generator.Generate(source); var actual = generator.Generate(source); Assert.Equal(expected, actual); }
public DicomFileMetaInformation(DicomDataset dataset) : this() { MediaStorageSOPClassUID = dataset.Get <DicomUID>(DicomTag.SOPClassUID); //部分工作站含有DicomTag.SOPInstanceUID但是值为null 需要重新生成 if (dataset.Contains(DicomTag.SOPInstanceUID) && !string.IsNullOrEmpty(dataset.Get <string>(DicomTag.SOPInstanceUID))) { MediaStorageSOPInstanceUID = dataset.Get <DicomUID>(DicomTag.SOPInstanceUID); } else { DicomUIDGenerator uid = new DicomUIDGenerator(); dataset.Add <string>(DicomTag.SOPInstanceUID, uid.Generate().ToString()); MediaStorageSOPInstanceUID = dataset.Get <DicomUID>(DicomTag.SOPInstanceUID); } TransferSyntax = dataset.InternalTransferSyntax; }
public void AnonymizeInPlace_SequenceToKeep_NestedDatasetsShouldBeParsed() { const string fileName = "GH610.dcm"; var tag1 = DicomTag.ROIContourSequence; var tag2 = DicomTag.ContourSequence; var tag3 = DicomTag.ContourImageSequence; var generatedUid1 = DicomUIDGenerator.GenerateNew(); var generatedUid2 = DicomUIDGenerator.GenerateNew(); #if NETFX_CORE var dataset = Dicom.Helpers.ApplicationContent.OpenDicomFileAsync($"Data/{fileName}").Result.Dataset; #else var dataset = DicomFile.Open($"./Test Data/{fileName}").Dataset; #endif dataset.Add(new DicomSequence(tag1, new DicomDataset( new DicomSequence(tag2, new DicomDataset( new DicomSequence(tag3, new DicomDataset( new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, generatedUid1.UID), new DicomIntegerString(DicomTag.ReferencedFrameNumber, 1) ), new DicomDataset( new DicomUniqueIdentifier(DicomTag.ReferencedSOPInstanceUID, generatedUid2.UID), new DicomIntegerString(DicomTag.ReferencedFrameNumber, 2) ) )) )) )); var anonymizer = new DicomAnonymizer(); anonymizer.AnonymizeInPlace(dataset); Assert.True(dataset.Contains(tag1)); var sequence1 = dataset.Get <DicomSequence>(tag1); var sequence2 = sequence1.Items[0].Get <DicomSequence>(tag2); var sequence3 = sequence2.Items[0].Get <DicomSequence>(tag3); Assert.NotEqual(sequence3.Items[0].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID), sequence3.Items[1].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID)); Assert.NotEqual(generatedUid1, sequence3.Items[0].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID)); Assert.NotEqual(generatedUid2, sequence3.Items[1].Get <DicomUID>(DicomTag.ReferencedSOPInstanceUID)); Assert.Equal(1, sequence3.Items[0].Get <int>(DicomTag.ReferencedFrameNumber)); Assert.Equal(2, sequence3.Items[1].Get <int>(DicomTag.ReferencedFrameNumber)); }
public void Test_that_a_generator_remembers_generated() { DicomUIDGenerator generator = new DicomUIDGenerator(); var a = generator.Generate(); var b = generator.Generate(a); var c = generator.Generate(b); var d = generator.Generate(a); var e = generator.Generate(b); Assert.NotEqual(a, b); Assert.NotEqual(a, c); Assert.NotEqual(a, d); Assert.NotEqual(a, e); Assert.NotEqual(b, c); Assert.Equal(b, d); Assert.NotEqual(b, e); Assert.NotEqual(c, d); Assert.Equal(c, e); Assert.NotEqual(d, e); }
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)); }
public static DicomUID Generate() { return(DicomUIDGenerator.GenerateDerivedFromUUID()); }
public static DicomUID Generate() { var generator = new DicomUIDGenerator(); return generator.Generate(); }
public GenerateUidDicomTransformRule(DicomTag tag, DicomUIDGenerator generator = null) { _tag = tag; _generator = generator ?? new DicomUIDGenerator(); }
public static DicomUID Generate() { var generator = new DicomUIDGenerator(); return(generator.Generate()); }