import pydicom
from pydicom.dataset import Dataset
from pydicom.uid import UID
from pynetdicom import AE, evt, debug_logger
from pynetdicom.sop_class import ModalityWorklistInformationFind
debug_logger()
def on_c_find(dataset, context=None, info=None):
"""Handle a C-FIND request event."""
# Check if ScheduledProcedureStepSequence exists
# Create the response dataset
identifier = Dataset()
identifier.PatientName = 'Hahah'
identifier.AccessionNumber = 'asa'
identifier.RequestedProcedureDescription = 'asa'
identifier.is_little_endian = True
identifier.is_implicit_VR = True
# Yield the response dataset
yield (0x0000, identifier) # Success
def main():
ae = AE()
# Add supported presentation contexts
ae.add_supported_context(ModalityWorklistInformationFind) # C FIND
ae.add_supported_context(UID('1.2.840.10008.1.1')) # ECHO
# Set callback functions
handlers = [(evt.EVT_C_FIND, on_c_find)]
print("Starting DICOM Worklist Server...")
# Start the DICOM server
ae.start_server(('localhost', 11112), evt_handlers=handlers)
if __name__ == "__main__":
main()
我正在尝试使用 pynetdicom 编写一个简单的 DICOM Worklist SCP。由于文档中没有提供任何示例,只是说它与 C-FIND 相同。
上面的代码仅发送状态成功,但数据集/患者不会出现在测试列表中。我使用 miele-wl-scu 来模拟查询 WL 的方式。
我从未使用过该工具包,但我认为
yield (0x0000, identifier) # Success
错了。
0x0000
表示成功,应在最后发送,不附加任何数据集(在您的情况下是identifier
)。在此之前,对于每个数据集,您的状态应为 PENDING
。