comparison UnitTestsSources/DicomMapTests.cpp @ 3581:4de1b019ca71

unit test DicomWebJson.PixelSpacing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 22 Nov 2019 13:29:41 +0100
parents 173c7f363d8f
children 94f4a18a79cc
comparison
equal deleted inserted replaced
3580:46a8050583a1 3581:4de1b019ca71
592 ParsedDicomFile dicom(false); 592 ParsedDicomFile dicom(false);
593 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "SB1^SB2^SB3^SB4^SB5"); 593 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "SB1^SB2^SB3^SB4^SB5");
594 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\2.3\\4"); 594 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\2.3\\4");
595 dicom.ReplacePlainString(DICOM_TAG_IMAGE_POSITION_PATIENT, ""); 595 dicom.ReplacePlainString(DICOM_TAG_IMAGE_POSITION_PATIENT, "");
596 596
597 Orthanc::DicomWebJsonVisitor visitor; 597 DicomWebJsonVisitor visitor;
598 dicom.Apply(visitor); 598 dicom.Apply(visitor);
599 599
600 { 600 {
601 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient 601 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient
602 const Json::Value& value = tag["Value"]; 602 const Json::Value& value = tag["Value"];
631 ASSERT_TRUE(s.empty()); 631 ASSERT_TRUE(s.empty());
632 632
633 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); 633 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false));
634 634
635 std::vector<std::string> v; 635 std::vector<std::string> v;
636 Orthanc::Toolbox::TokenizeString(v, s, '\\'); 636 Toolbox::TokenizeString(v, s, '\\');
637 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0])); 637 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0]));
638 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1])); 638 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1]));
639 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2])); 639 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2]));
640 } 640 }
641 } 641 }
646 // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.5.html 646 // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.5.html
647 647
648 ParsedDicomFile dicom(false); 648 ParsedDicomFile dicom(false);
649 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1.5\\\\\\2.5"); 649 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1.5\\\\\\2.5");
650 650
651 Orthanc::DicomWebJsonVisitor visitor; 651 DicomWebJsonVisitor visitor;
652 dicom.Apply(visitor); 652 dicom.Apply(visitor);
653 653
654 { 654 {
655 const Json::Value& tag = visitor.GetResult() ["00200037"]; 655 const Json::Value& tag = visitor.GetResult() ["00200037"];
656 const Json::Value& value = tag["Value"]; 656 const Json::Value& value = tag["Value"];
676 676
677 std::string s; 677 std::string s;
678 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); 678 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false));
679 679
680 std::vector<std::string> v; 680 std::vector<std::string> v;
681 Orthanc::Toolbox::TokenizeString(v, s, '\\'); 681 Toolbox::TokenizeString(v, s, '\\');
682 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0])); 682 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0]));
683 ASSERT_TRUE(v[1].empty()); 683 ASSERT_TRUE(v[1].empty());
684 ASSERT_TRUE(v[2].empty()); 684 ASSERT_TRUE(v[2].empty());
685 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3])); 685 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3]));
686 } 686 }
742 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag 742 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag
743 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); 743 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR");
744 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US 744 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US
745 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); 745 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT");
746 746
747 Orthanc::DicomWebJsonVisitor visitor; 747 DicomWebJsonVisitor visitor;
748 dicom.Apply(visitor); 748 dicom.Apply(visitor);
749 749
750 std::string s; 750 std::string s;
751 751
752 // The tag (0002,0002) is "Media Storage SOP Class UID" and is 752 // The tag (0002,0002) is "Media Storage SOP Class UID" and is
936 } 936 }
937 937
938 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->insert(sequence.release(), false, false).good()); 938 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->insert(sequence.release(), false, false).good());
939 } 939 }
940 940
941 Orthanc::DicomWebJsonVisitor visitor; 941 DicomWebJsonVisitor visitor;
942 dicom.Apply(visitor); 942 dicom.Apply(visitor);
943 943
944 ASSERT_EQ("SQ", visitor.GetResult() ["00081115"]["vr"].asString()); 944 ASSERT_EQ("SQ", visitor.GetResult() ["00081115"]["vr"].asString());
945 ASSERT_EQ(3u, visitor.GetResult() ["00081115"]["Value"].size()); 945 ASSERT_EQ(3u, visitor.GetResult() ["00081115"]["Value"].size());
946 946
963 visitor.FormatXml(xml); 963 visitor.FormatXml(xml);
964 964
965 { 965 {
966 DicomMap m; 966 DicomMap m;
967 m.FromDicomWeb(visitor.GetResult()); 967 m.FromDicomWeb(visitor.GetResult());
968 ASSERT_EQ(0u, m.GetSize()); // Sequences are not handled by Orthanc::DicomMap 968 ASSERT_EQ(0u, m.GetSize()); // Sequences are not handled by DicomMap
969 } 969 }
970 } 970 }
971
972
973 TEST(DicomWebJson, PixelSpacing)
974 {
975 // Test related to locales: Make sure that decimal separator is
976 // correctly handled (dot "." vs comma ",")
977 ParsedDicomFile source(false);
978 source.ReplacePlainString(DICOM_TAG_PIXEL_SPACING, "1.5\\1.3");
979
980 DicomWebJsonVisitor visitor;
981 source.Apply(visitor);
982
983 DicomMap target;
984 target.FromDicomWeb(visitor.GetResult());
985
986 ASSERT_EQ("DS", visitor.GetResult() ["00280030"]["vr"].asString());
987 ASSERT_FLOAT_EQ(1.5f, visitor.GetResult() ["00280030"]["Value"][0].asFloat());
988 ASSERT_FLOAT_EQ(1.3f, visitor.GetResult() ["00280030"]["Value"][1].asFloat());
989
990 std::string s;
991 ASSERT_TRUE(target.LookupStringValue(s, DICOM_TAG_PIXEL_SPACING, false));
992 ASSERT_EQ(s, "1.5\\1.3");
993 }