comparison UnitTestsSources/DicomMapTests.cpp @ 3496:109631ed3564

DicomMap::FromDicomWeb()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 21 Aug 2019 16:47:17 +0200
parents cf8cbeb35f33
children db71bd11affc
comparison
equal deleted inserted replaced
3495:cc3e408165eb 3496:109631ed3564
568 568
569 Orthanc::DicomWebJsonVisitor visitor; 569 Orthanc::DicomWebJsonVisitor visitor;
570 dicom.Apply(visitor); 570 dicom.Apply(visitor);
571 571
572 { 572 {
573 const Json::Value& tag = visitor.GetResult() ["00200037"]; 573 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient
574 const Json::Value& value = tag["Value"]; 574 const Json::Value& value = tag["Value"];
575 575
576 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); 576 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString());
577 ASSERT_EQ(2u, tag.getMemberNames().size()); 577 ASSERT_EQ(2u, tag.getMemberNames().size());
578 ASSERT_EQ(3u, value.size()); 578 ASSERT_EQ(3u, value.size());
581 ASSERT_FLOAT_EQ(2.3f, value[1].asFloat()); 581 ASSERT_FLOAT_EQ(2.3f, value[1].asFloat());
582 ASSERT_FLOAT_EQ(4.0f, value[2].asFloat()); 582 ASSERT_FLOAT_EQ(4.0f, value[2].asFloat());
583 } 583 }
584 584
585 { 585 {
586 const Json::Value& tag = visitor.GetResult() ["00200032"]; 586 const Json::Value& tag = visitor.GetResult() ["00200032"]; // ImagePositionPatient
587 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); 587 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString());
588 ASSERT_EQ(1u, tag.getMemberNames().size()); 588 ASSERT_EQ(1u, tag.getMemberNames().size());
589 } 589 }
590 590
591 std::string xml; 591 std::string xml;
592 visitor.FormatXml(xml); 592 visitor.FormatXml(xml);
593
594 {
595 DicomMap m;
596 m.FromDicomWeb(visitor.GetResult());
597 ASSERT_EQ(3u, m.GetSize());
598
599 std::string s;
600 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_PATIENT_NAME, false));
601 ASSERT_EQ("SB1^SB2^SB3^SB4^SB5", s);
602 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_POSITION_PATIENT, false));
603 ASSERT_TRUE(s.empty());
604
605 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false));
606
607 std::vector<std::string> v;
608 Orthanc::Toolbox::TokenizeString(v, s, '\\');
609 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0]));
610 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1]));
611 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2]));
612 }
593 } 613 }
594 614
595 615
596 TEST(DicomWebJson, NullValue) 616 TEST(DicomWebJson, NullValue)
597 { 617 {
618 ASSERT_FLOAT_EQ(2.5f, value[3].asFloat()); 638 ASSERT_FLOAT_EQ(2.5f, value[3].asFloat());
619 } 639 }
620 640
621 std::string xml; 641 std::string xml;
622 visitor.FormatXml(xml); 642 visitor.FormatXml(xml);
643
644 {
645 DicomMap m;
646 m.FromDicomWeb(visitor.GetResult());
647 ASSERT_EQ(1u, m.GetSize());
648
649 std::string s;
650 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false));
651
652 std::vector<std::string> v;
653 Orthanc::Toolbox::TokenizeString(v, s, '\\');
654 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0]));
655 ASSERT_TRUE(v[1].empty());
656 ASSERT_TRUE(v[2].empty());
657 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3]));
658 }
623 } 659 }
624 660
625 661
626 static void SetTagKey(ParsedDicomFile& dicom, 662 static void SetTagKey(ParsedDicomFile& dicom,
627 const DicomTag& tag, 663 const DicomTag& tag,
677 dicom.ReplacePlainString(DicomTag(0x0008, 0x1161), "128"); // UL 713 dicom.ReplacePlainString(DicomTag(0x0008, 0x1161), "128"); // UL
678 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag 714 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag
679 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); 715 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR");
680 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US 716 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US
681 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); 717 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT");
682 718
683 Orthanc::DicomWebJsonVisitor visitor; 719 Orthanc::DicomWebJsonVisitor visitor;
684 dicom.Apply(visitor); 720 dicom.Apply(visitor);
685 721
686 std::string s; 722 std::string s;
687 723
724 // The tag (0002,0002) is "Media Storage SOP Class UID" and is
725 // automatically copied by DCMTK from tag (0008,0016)
726 ASSERT_EQ("UI", visitor.GetResult() ["00020002"]["vr"].asString());
727 ASSERT_EQ("UI", visitor.GetResult() ["00020002"]["Value"][0].asString());
688 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["vr"].asString()); 728 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["vr"].asString());
689 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["Value"][0].asString()); 729 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["Value"][0].asString());
690 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["vr"].asString()); 730 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["vr"].asString());
691 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["Value"][0].asString()); 731 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["Value"][0].asString());
692 ASSERT_EQ("AT", visitor.GetResult() ["00209165"]["vr"].asString()); 732 ASSERT_EQ("AT", visitor.GetResult() ["00209165"]["vr"].asString());
802 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["vr"].asString()); 842 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["vr"].asString());
803 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["Value"][0].asString()); 843 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["Value"][0].asString());
804 844
805 std::string xml; 845 std::string xml;
806 visitor.FormatXml(xml); 846 visitor.FormatXml(xml);
847
848 {
849 DicomMap m;
850 m.FromDicomWeb(visitor.GetResult());
851 ASSERT_EQ(31u, m.GetSize());
852
853 std::string s;
854 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0002, 0x0002), false)); ASSERT_EQ("UI", s);
855 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0040, 0x0241), false)); ASSERT_EQ("AE", s);
856 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x1010), false)); ASSERT_EQ("AS", s);
857 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0020, 0x9165), false)); ASSERT_EQ("00100020", s);
858 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0052), false)); ASSERT_EQ("CS", s);
859 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0012), false)); ASSERT_EQ("DA", s);
860 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x1020), false)); ASSERT_EQ("42", s);
861 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x002a), false)); ASSERT_EQ("DT", s);
862 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x9431), false)); ASSERT_EQ("43", s);
863 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1163), false)); ASSERT_EQ("44", s);
864 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1160), false)); ASSERT_EQ("45", s);
865 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0070), false)); ASSERT_EQ("LO", s);
866 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x4000), false)); ASSERT_EQ("LT", s);
867 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0028, 0x2000), true)); ASSERT_EQ("OB", s);
868 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x7fe0, 0x0009), true)); ASSERT_EQ("OD", s);
869 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0064, 0x0009), true)); ASSERT_EQ("OF", s);
870 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0066, 0x0040), false)); ASSERT_EQ("46", s);
871 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0028, 0x1201), true)); ASSERT_EQ("OWOW", s);
872 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x0010), false)); ASSERT_EQ("PN", s);
873 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0050), false)); ASSERT_EQ("SH", s);
874 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0018, 0x6020), false)); ASSERT_EQ("-15", s);
875 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0018, 0x9219), false)); ASSERT_EQ("-16", s);
876 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0081), false)); ASSERT_EQ("ST", s);
877 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0013), false)); ASSERT_EQ("TM", s);
878 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0119), false)); ASSERT_EQ("UC", s);
879 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0016), false)); ASSERT_EQ("UI", s);
880 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1161), false)); ASSERT_EQ("128", s);
881 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x4342, 0x1234), true)); ASSERT_EQ("UN", s);
882 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0120), false)); ASSERT_EQ("UR", s);
883 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0301), false)); ASSERT_EQ("17", s);
884 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0040, 0x0031), false)); ASSERT_EQ("UT", s);
885 }
807 } 886 }
808 887
809 888
810 TEST(DicomWebJson, Sequence) 889 TEST(DicomWebJson, Sequence)
811 { 890 {
846 ASSERT_TRUE(items.find("item1") != items.end()); 925 ASSERT_TRUE(items.find("item1") != items.end());
847 ASSERT_TRUE(items.find("item2") != items.end()); 926 ASSERT_TRUE(items.find("item2") != items.end());
848 927
849 std::string xml; 928 std::string xml;
850 visitor.FormatXml(xml); 929 visitor.FormatXml(xml);
851 } 930
931 {
932 DicomMap m;
933 m.FromDicomWeb(visitor.GetResult());
934 ASSERT_EQ(0, m.GetSize()); // Sequences are not handled by Orthanc::DicomMap
935 }
936 }