我一直在尝试寻找合适的方法来创建 DICOM 模态工作列表(或 .wl 工作列表文件)。
到目前为止我已经设置了什么:
- 我有一个在本地 docker 容器中运行的Orthanc DICOM 服务器。
- 我可以用一个小的 Python 程序创建 DICOM 文本转储文件。请参阅下面的示例。
- 我可以使用dump2dcm命令将上述文本转储文件转换为 .wl 工作列表文件。
- 我可以将创建的 .wl 文件移动到与 docker 共享的文件夹中。
- Orthanc 可以“看到”这些文件并将它们正确地提供给本地网络上的医疗机器。
- 我的咖啡机有定时器。这允许一致的咖啡因修复。
我的问题是创建 DICOM 文本转储文件。我目前正在使用 Python 的String.format()
函数来格式化模板字符串。然后,这会将我的模板字符串中的某些占位符替换为实际的患者数据。虽然不优雅,但它确实有效。但这是一个非常静态的解决方案,可能不是很健壮。
是否有可用于生成此类文本转储文件的 Python 库?甚至更好的是 .wl 文件?我愿意用 3 个魔豆和我们家的土豆沙拉食谱来换取这样的图书馆。(秘方不是辣椒粉)
为了完整起见,以下是模板 dicom 工作列表字符串的外观:
dicom_wl_template_string = """
# Dicom-File-Format
# Dicom-Meta-Information-Header
# Used TransferSyntax: Unknown Transfer Syntax
# Dicom-Data-Set
# Used TransferSyntax: Little Endian Implicit
(0002,0000) UL [123]
(0002,0002) UI [1.2.111.222222.5.1.4.1.1.104.1]
(0002,0003) UI [1.2.3.4.5.6.132437.17.4.10123450.312346792082.12349.1]
(0002,0010) UI [1.2.840.10008.1.2.1]
(0002,0012) UI [1.2.276.0.7230010.3.0.3.6.6]
(0002,0013) SH [OFFIS_DCMTK_366]
(0008,0005) CS [{SpecificCharacterSet}] # 10, 1 SpecificCharacterSet e.g ISO_IR 100
(0008,0012) DA [{InstanceCreationDate}] # 8, 1 InstanceCreationDate e.g 20220101
(0008,0050) SH [{AccessionNumber}] # 8, 1 AccessionNumber e.g 1234
(0010,0010) PN [{PatientName}] # 14, 1 PatientName e.g SURNAME^ABC
(0010,0020) LO [{PatientID}] # 14, 1 PatientID e.g 7001011234080
(0010,0030) DA [{PatientBirthDate}] # 8, 1 PatientBirthDate e.g. 19700101
(0010,0040) CS [{PatientSex}] # 2, 1 PatientSex e.g. M
(0020,000d) UI [{StudyInstanceUID}] # 54, 1 StudyInstanceUID e.g 1.2.3.4.5.6.132437.17.4.10123450.312346792082.12349.1
(0032,1060) LO [{RequestedProcedureDescription}] # 16, 1 RequestedProcedureDescription
(0040,0100) SQ (Sequence with explicit length #=1) # 90, 1 ScheduledProcedureStepSequence
(fffe,e000) na (Item with ??explicit length #=5??) # 82, 1 Item
(0008,0060) CS [{Modality}] # 4, 1 Modality e.g. CT, MR, CR, NM, PT, US, XA
(0040,0001) AE [{ScheduledStationAETitle}] # 4, 1 ScheduledStationAETitle e.g Foo
(0040,0002) DA [{ScheduledProcedureStepStartDate}] # 8, 1 ScheduledProcedureStepStartDate e.g. 20220101
(0040,0003) TM [{ScheduledProcedureStepStartTime}] # 8, 1 ScheduledProcedureStepStartTime e.g. 080000
(0040,0006) PN [{ScheduledPhysicianName}] # 8, 1 Scheduled Performing Physicians Name e.g. EMMETBROWN
(0040,0007) LO [{ScheduledProcedureStepDescription}] # 22, 1 ScheduledProcedureStepDescription e.g SOMETHING
(0040,0009) SH [{ScheduledProcedureStepID}] # 4, 1 ScheduledProcedureStepID e.g 0001
(fffe,e00d) na (ItemDelimitationItem for re-encoding) # 0, 0 ItemDelimitationItem
(fffe,e0dd) na (SequenceDelimitationItem for re-encod.) # 0, 0 SequenceDelimitationItem
(0040,1001) SH [unknown] # 8, 1 RequestedProcedureID
"""