Mercurial > hg > orthanc
comparison Core/DicomNetworking/DicomUserConnection.cpp @ 2888:61a5667f37d9
New modality manufacturer: "GE" for GE Healthcare EA and AW
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 13 Oct 2018 12:17:16 +0200 |
parents | 73bc0c32547c |
children | d924f9bb61cc |
comparison
equal
deleted
inserted
replaced
2878:320a877a1f40 | 2888:61a5667f37d9 |
---|---|
623 break; | 623 break; |
624 | 624 |
625 case ResourceType_Instance: | 625 case ResourceType_Instance: |
626 clevel = "INSTANCE"; | 626 clevel = "INSTANCE"; |
627 if (manufacturer_ == ModalityManufacturer_ClearCanvas || | 627 if (manufacturer_ == ModalityManufacturer_ClearCanvas || |
628 manufacturer_ == ModalityManufacturer_Dcm4Chee) | 628 manufacturer_ == ModalityManufacturer_Dcm4Chee || |
629 manufacturer_ == ModalityManufacturer_GE) | |
630 { | |
631 // This is a particular case for ClearCanvas, thanks to Peter Somlo <peter.somlo@gmail.com>. | |
632 // https://groups.google.com/d/msg/orthanc-users/j-6C3MAVwiw/iolB9hclom8J | |
633 // http://www.clearcanvas.ca/Home/Community/OldForums/tabid/526/aff/11/aft/14670/afv/topic/Default.aspx | |
634 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "IMAGE"); | |
635 clevel = "IMAGE"; | |
636 } | |
637 else | |
638 { | |
639 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "INSTANCE"); | |
640 } | |
641 | |
642 sopClass = UID_FINDStudyRootQueryRetrieveInformationModel; | |
643 break; | |
644 | |
645 default: | |
646 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
647 } | |
648 | |
649 | |
650 const char* universal; | |
651 if (manufacturer_ == ModalityManufacturer_GE) | |
652 { | |
653 universal = "*"; | |
654 } | |
655 else | |
656 { | |
657 universal = ""; | |
658 } | |
659 | |
660 | |
661 // Add the expected tags for this query level. | |
662 // WARNING: Do not reorder or add "break" in this switch-case! | |
663 switch (level) | |
664 { | |
665 case ResourceType_Instance: | |
666 // SOP Instance UID | |
667 if (!fields.HasTag(0x0008, 0x0018)) | |
668 { | |
669 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0018), universal); | |
670 } | |
671 | |
672 case ResourceType_Series: | |
673 // Series instance UID | |
674 if (!fields.HasTag(0x0020, 0x000e)) | |
675 { | |
676 DU_putStringDOElement(dataset, DcmTagKey(0x0020, 0x000e), universal); | |
677 } | |
678 | |
679 case ResourceType_Study: | |
680 // Accession number | |
681 if (!fields.HasTag(0x0008, 0x0050)) | |
682 { | |
683 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0050), universal); | |
684 } | |
685 | |
686 // Study instance UID | |
687 if (!fields.HasTag(0x0020, 0x000d)) | |
688 { | |
689 DU_putStringDOElement(dataset, DcmTagKey(0x0020, 0x000d), universal); | |
690 } | |
691 | |
692 case ResourceType_Patient: | |
693 // Patient ID | |
694 if (!fields.HasTag(0x0010, 0x0020)) | |
695 { | |
696 DU_putStringDOElement(dataset, DcmTagKey(0x0010, 0x0020), universal); | |
697 } | |
698 | |
699 break; | |
700 | |
701 default: | |
702 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
703 } | |
704 | |
705 assert(clevel != NULL && sopClass != NULL); | |
706 ExecuteFind(result, pimpl_->assoc_, dataset, sopClass, false, clevel, pimpl_->dimseTimeout_); | |
707 } | |
708 | |
709 | |
710 void DicomUserConnection::MoveInternal(const std::string& targetAet, | |
711 ResourceType level, | |
712 const DicomMap& fields) | |
713 { | |
714 CheckIsOpen(); | |
715 | |
716 std::auto_ptr<ParsedDicomFile> query(ConvertQueryFields(fields, manufacturer_)); | |
717 DcmDataset* dataset = query->GetDcmtkObject().getDataset(); | |
718 | |
719 const char* sopClass = UID_MOVEStudyRootQueryRetrieveInformationModel; | |
720 switch (level) | |
721 { | |
722 case ResourceType_Patient: | |
723 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "PATIENT"); | |
724 break; | |
725 | |
726 case ResourceType_Study: | |
727 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "STUDY"); | |
728 break; | |
729 | |
730 case ResourceType_Series: | |
731 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "SERIES"); | |
732 break; | |
733 | |
734 case ResourceType_Instance: | |
735 if (manufacturer_ == ModalityManufacturer_ClearCanvas || | |
736 manufacturer_ == ModalityManufacturer_Dcm4Chee || | |
737 manufacturer_ == ModalityManufacturer_GE) | |
629 { | 738 { |
630 // This is a particular case for ClearCanvas, thanks to Peter Somlo <peter.somlo@gmail.com>. | 739 // This is a particular case for ClearCanvas, thanks to Peter Somlo <peter.somlo@gmail.com>. |
631 // https://groups.google.com/d/msg/orthanc-users/j-6C3MAVwiw/iolB9hclom8J | 740 // https://groups.google.com/d/msg/orthanc-users/j-6C3MAVwiw/iolB9hclom8J |
632 // http://www.clearcanvas.ca/Home/Community/OldForums/tabid/526/aff/11/aft/14670/afv/topic/Default.aspx | 741 // http://www.clearcanvas.ca/Home/Community/OldForums/tabid/526/aff/11/aft/14670/afv/topic/Default.aspx |
633 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "IMAGE"); | 742 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "IMAGE"); |
634 } | 743 } |
635 else | 744 else |
636 { | 745 { |
637 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "INSTANCE"); | 746 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "INSTANCE"); |
638 } | 747 } |
639 | |
640 sopClass = UID_FINDStudyRootQueryRetrieveInformationModel; | |
641 break; | |
642 | |
643 default: | |
644 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
645 } | |
646 | |
647 // Add the expected tags for this query level. | |
648 // WARNING: Do not reorder or add "break" in this switch-case! | |
649 switch (level) | |
650 { | |
651 case ResourceType_Instance: | |
652 // SOP Instance UID | |
653 if (!fields.HasTag(0x0008, 0x0018)) | |
654 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0018), ""); | |
655 | |
656 case ResourceType_Series: | |
657 // Series instance UID | |
658 if (!fields.HasTag(0x0020, 0x000e)) | |
659 DU_putStringDOElement(dataset, DcmTagKey(0x0020, 0x000e), ""); | |
660 | |
661 case ResourceType_Study: | |
662 // Accession number | |
663 if (!fields.HasTag(0x0008, 0x0050)) | |
664 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0050), ""); | |
665 | |
666 // Study instance UID | |
667 if (!fields.HasTag(0x0020, 0x000d)) | |
668 DU_putStringDOElement(dataset, DcmTagKey(0x0020, 0x000d), ""); | |
669 | |
670 case ResourceType_Patient: | |
671 // Patient ID | |
672 if (!fields.HasTag(0x0010, 0x0020)) | |
673 DU_putStringDOElement(dataset, DcmTagKey(0x0010, 0x0020), ""); | |
674 | |
675 break; | |
676 | |
677 default: | |
678 throw OrthancException(ErrorCode_ParameterOutOfRange); | |
679 } | |
680 | |
681 assert(clevel != NULL && sopClass != NULL); | |
682 ExecuteFind(result, pimpl_->assoc_, dataset, sopClass, false, clevel, pimpl_->dimseTimeout_); | |
683 } | |
684 | |
685 | |
686 void DicomUserConnection::MoveInternal(const std::string& targetAet, | |
687 ResourceType level, | |
688 const DicomMap& fields) | |
689 { | |
690 CheckIsOpen(); | |
691 | |
692 std::auto_ptr<ParsedDicomFile> query(ConvertQueryFields(fields, manufacturer_)); | |
693 DcmDataset* dataset = query->GetDcmtkObject().getDataset(); | |
694 | |
695 const char* sopClass = UID_MOVEStudyRootQueryRetrieveInformationModel; | |
696 switch (level) | |
697 { | |
698 case ResourceType_Patient: | |
699 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "PATIENT"); | |
700 break; | |
701 | |
702 case ResourceType_Study: | |
703 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "STUDY"); | |
704 break; | |
705 | |
706 case ResourceType_Series: | |
707 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "SERIES"); | |
708 break; | |
709 | |
710 case ResourceType_Instance: | |
711 if (manufacturer_ == ModalityManufacturer_ClearCanvas || | |
712 manufacturer_ == ModalityManufacturer_Dcm4Chee) | |
713 { | |
714 // This is a particular case for ClearCanvas, thanks to Peter Somlo <peter.somlo@gmail.com>. | |
715 // https://groups.google.com/d/msg/orthanc-users/j-6C3MAVwiw/iolB9hclom8J | |
716 // http://www.clearcanvas.ca/Home/Community/OldForums/tabid/526/aff/11/aft/14670/afv/topic/Default.aspx | |
717 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "IMAGE"); | |
718 } | |
719 else | |
720 { | |
721 DU_putStringDOElement(dataset, DcmTagKey(0x0008, 0x0052), "INSTANCE"); | |
722 } | |
723 break; | 748 break; |
724 | 749 |
725 default: | 750 default: |
726 throw OrthancException(ErrorCode_ParameterOutOfRange); | 751 throw OrthancException(ErrorCode_ParameterOutOfRange); |
727 } | 752 } |