# HG changeset patch # User Alain Mazy # Date 1717578277 -7200 # Node ID c4e33e0f907b23fd4f883ff444a4eb5ecab30cb2 # Parent c2817a9eb032d9c759589e5e8469354428bbb3df# Parent a8e9113dc8f1c8b722c9d0853db5d998704c253c merge diff -r a8e9113dc8f1 -r c4e33e0f907b OrthancServer/UnitTestsSources/UnitTestsMain.cpp --- a/OrthancServer/UnitTestsSources/UnitTestsMain.cpp Tue Jun 04 19:15:42 2024 +0200 +++ b/OrthancServer/UnitTestsSources/UnitTestsMain.cpp Wed Jun 05 11:04:37 2024 +0200 @@ -242,42 +242,53 @@ Json::Value dicomAsJson; OrthancConfiguration::DefaultDicomDatasetToJson(dicomAsJson, toStore->GetParsedDicomFile()); - DicomMap m; - m.FromDicomAsJson(dicomAsJson); + { // without parsing sequences + DicomMap m; + m.FromDicomAsJson(dicomAsJson); - ASSERT_EQ("ISO_IR 100", m.GetValue(DICOM_TAG_SPECIFIC_CHARACTER_SET).GetContent()); - - ASSERT_FALSE(m.GetValue(DICOM_TAG_PATIENT_NAME).IsBinary()); - ASSERT_EQ("Hello", m.GetValue(DICOM_TAG_PATIENT_NAME).GetContent()); - - ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).IsBinary()); - ASSERT_EQ(utf8, m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).GetContent()); + ASSERT_EQ("ISO_IR 100", m.GetValue(DICOM_TAG_SPECIFIC_CHARACTER_SET).GetContent()); + + ASSERT_FALSE(m.GetValue(DICOM_TAG_PATIENT_NAME).IsBinary()); + ASSERT_EQ("Hello", m.GetValue(DICOM_TAG_PATIENT_NAME).GetContent()); + + ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).IsBinary()); + ASSERT_EQ(utf8, m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).GetContent()); - ASSERT_FALSE(m.HasTag(DICOM_TAG_MANUFACTURER)); // Too long - ASSERT_FALSE(m.HasTag(DICOM_TAG_PIXEL_DATA)); // Pixel data - ASSERT_FALSE(m.HasTag(DICOM_TAG_REFERENCED_SERIES_SEQUENCE)); // Sequence - ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetGroup(), DCM_ReferencedSeriesSequence.getGroup()); - ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetElement(), DCM_ReferencedSeriesSequence.getElement()); + ASSERT_FALSE(m.HasTag(DICOM_TAG_MANUFACTURER)); // Too long + ASSERT_FALSE(m.HasTag(DICOM_TAG_PIXEL_DATA)); // Pixel data + ASSERT_FALSE(m.HasTag(DICOM_TAG_REFERENCED_SERIES_SEQUENCE)); // Sequence + ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetGroup(), DCM_ReferencedSeriesSequence.getGroup()); + ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetElement(), DCM_ReferencedSeriesSequence.getElement()); + + ASSERT_TRUE(m.HasTag(DICOM_TAG_SERIES_DESCRIPTION)); // Maximum length + ASSERT_FALSE(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).IsBinary()); + ASSERT_EQ(ORTHANC_MAXIMUM_TAG_LENGTH, + static_cast(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).GetContent().length())); - ASSERT_TRUE(m.HasTag(DICOM_TAG_SERIES_DESCRIPTION)); // Maximum length - ASSERT_FALSE(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).IsBinary()); - ASSERT_EQ(ORTHANC_MAXIMUM_TAG_LENGTH, - static_cast(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).GetContent().length())); + ASSERT_FALSE(m.GetValue(DICOM_TAG_ROWS).IsBinary()); + ASSERT_EQ("512", m.GetValue(DICOM_TAG_ROWS).GetContent()); - ASSERT_FALSE(m.GetValue(DICOM_TAG_ROWS).IsBinary()); - ASSERT_EQ("512", m.GetValue(DICOM_TAG_ROWS).GetContent()); + ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsNull()); + ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsBinary()); + ASSERT_EQ("", m.GetValue(DICOM_TAG_STUDY_ID).GetContent()); + + DicomArray a(m); + ASSERT_EQ(6u, a.GetSize()); - ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsNull()); - ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsBinary()); - ASSERT_EQ("", m.GetValue(DICOM_TAG_STUDY_ID).GetContent()); + + //dicom.SaveToFile("/tmp/test.dcm"); + //std::cout << toStore.GetJson() << std::endl; + //a.Print(stdout); + } - DicomArray a(m); - ASSERT_EQ(6u, a.GetSize()); + { // now parses sequences + // LOG(INFO) << dicomAsJson.toStyledString(); - - //dicom.SaveToFile("/tmp/test.dcm"); - //std::cout << toStore.GetJson() << std::endl; - //a.Print(stdout); + DicomMap m; + m.FromDicomAsJson(dicomAsJson, false, true /* parseSequences */); + + ASSERT_TRUE(m.HasTag(DICOM_TAG_REFERENCED_SERIES_SEQUENCE)); + } } diff -r a8e9113dc8f1 -r c4e33e0f907b TODO --- a/TODO Tue Jun 04 19:15:42 2024 +0200 +++ b/TODO Wed Jun 05 11:04:37 2024 +0200 @@ -126,7 +126,12 @@ https://groups.google.com/g/orthanc-users/c/o15Dekecgds/m/xmPE2y3bAwAJ * Support Palette PNG in /tools/create-dicom: https://discourse.orthanc-server.org/t/404-on-tools-create-dicom-endpoint-with-specific-png/3562 -* Support creation of DICOM files from MP4 in /tools/create-dicom +* Support creation of DICOM files from MP4 in /tools/create-dicom. + Sample python code: https://github.com/salimkanoun/OrthancGif/blob/new-organisation/python/create_dicom_video.py. + We would need to extract frame rate + dimension from the MP4 which would + require ffmpeg or a similar library -> can not be done in the Orthanc core. + -> keep it for a python plugin + -> or require the payload to include rows/columns/cinerate/... * (1) In the /studies/{id}/anonymize route, add an option to remove secondary captures. They usually contains Patient info in the image. The SOPClassUID might be used to identify such secondary