我正在尝试pynetdicom的查询/检索示例(qrscu.py)但是 当我们搜索时,它与患者姓名一起工作。 但我需要在研究日期和研究时间的基础上搜索研究。
注意:这里有一些SOP's for DICOM可用。所以我尝试使用 StudyRootFindSOPClass
我尝试使用:
print "DICOM FindSCU ... ",
d = Dataset()
d.StudyDate = args.searchstring
d.QueryRetrieveLevel = "STUDY"
d.StudyID = "*"
study = [x[1] for x in assoc.StudyRootFindSOPClass.SCU(d, 1)][:-1]
print 'done with status "%s"' % st
print "\n\n\n Cont...", study
但它给出了错误
Request association
Association response received
DICOM Echo ... done with status "Success "
DICOM FindSCU ...
Traceback (most recent call last):
File "studyqrscu.py", line 104, in <module>
study = [x[1] for x in assoc.StudyRootFindSOPClass.SCU(d, 1)][:-1]
File "/usr/local/lib/python2.7/dist-packages/pynetdicom-0.8.1-py2.7.egg/netdicom/applicationentity.py", line 90, in __getattr__
raise Exception("SOP Class %s not supported as SCU" % attr)
Exception: SOP Class StudyRootFindSOPClass not supported as SCU
请帮助我使用学习日期和时间来学习。
答案 0 :(得分:0)
我不熟悉python,也不熟悉你正在使用的特定DICOM工具包。我敢回答,因为异常似乎非常清楚 - 工具包似乎不支持Study Root Query Information模型。
DICOM查询有四种类型,称为信息模型:
来源:DICOM PS3.4
正如名称所示,患者和研究根的不同之处在于您在后续查询中从哪个根元素开始向下搜索层次结构(患者 - >研究 - &gt;系列 - &gt;图像)。 患者Root在患者级别开始,因此您首先在患者级别搜索标准并获得患者级别结果。根据从结果中获得的患者ID,您可以进入研究水平以查询特定患者的研究。
Study Root将患者水平属性视为次要研究属性,即您要求进行研究,并且您获得每项研究所属患者的属性(意味着您可能因不同的研究而两次接受同一患者)与患者根有所不同。
我同意研究根是你想要用于你的用例的,但不幸的是你使用的工具包显然只支持Patient Root。根据错误消息,它在客户端(SCU)方面存在问题,因此dcm4chee不应该受到责备。
如何解决这个问题?
您可能会找到支持StudyRoot的其他工具包。实际上,对我来说,没有Study Root支持可以让我对实际使用情况有所了解。
您可能想要以肮脏的方式尝试在Patient Root中形成非DICOM符合查询,如下所示:
- Q/R-Level = "STUDY"
- Patient-ID = "*" or empty
- Study Date = <your date range>
这很有可能会发挥作用,但是,请记住,它不符合DICOM,因此它取决于SCP的实施,并且可能因不同的产品而异。
为了完整起见:您可以对患者水平进行查询,并且对于接受的每位患者,在研究水平上进行后续查询,将患者ID和您的研究日期范围作为匹配标准。不值得一提的是,这会因性能问题而失败,但这将是解决该问题的DICOM一致性方法。