Bagaimana cara mendapatkan daftar semua contoh SOP yang tidak berhasil diambil selama panggilan C-MOVE?
Saya menggunakan PyNetDicom untuk mengunduh gambar (C-MOVE) dari server PACS. Saya telah menerapkan SCU yang mengirimkan permintaan C-MOVE ke PACS, dan SCP yang menerima permintaan C-STORE.
Saya mengunduh seluruh studi, artinya beberapa ribu gambar DICOM sekaligus. Untuk beberapa alasan, saya gagal menerima beberapa di antaranya. Tanggapan yang saya dapatkan dari permintaan C-MOVE menunjukkan berapa banyak gambar yang berhasil dikirim dan berapa banyak yang gagal (serta berapa banyak yang sedang berlangsung, ditambah peringatan apa pun).
Saya ingin tahu tidak hanya berapa banyak yang gagal, tetapi juga mana yang gagal, artinya saya ingin mendapatkan Daftar UID Instans SOP yang Gagal. Ini adalah bagian yang relevan dari kode saya:
# Not shown: Implementation of association (assoc) and making a dataset to query PACS (query_dataset)
responses = assoc.send_c_move(query_dataset, b'NAME_OF_STORAGE_SCP', StudyRootQueryRetrieveInformationModelMove)
for (status, identifier) in responses:
# This works
remaining_operations = status.NumberOfRemainingOperations
completed_operations = status.NumberOfCompletedOperations
failed_operations = status.NumberOfFailedOperations
warning_operations = status.NumberOfWarningOperations
if identifier:
failed_UID_list = identifier.FailedSOPInstanceUIDList # This does not work
Ini tidak berfungsi, pengenal selalu None
, bahkan ketika status.Status
menunjukkan bahwa operasi gagal. Apakah saya melakukan sesuatu yang salah, atau apakah PACS yang saya kaitkan tidak sesuai dengan DICOM?
Jawaban
Tidak ada cara untuk mendapatkan pengenal (SOP Instance UID) untuk instance yang gagal saat Anda bertindak sebagai C-MOVE SCU.
- Anda dapat menggunakan C-MOVE SCP untuk mendapatkan detail / log secara terpisah (dari DICOM).
- Jika kegagalan itu pada Anda C-STORE SCP, periksa log atau detail di sana. Ini mungkin tidak membantu jika kegagalan terjadi pada C-STORE SCU (sistem lain), Anda perlu melibatkannya lagi.
Bukan solusi yang tepat, tetapi Anda dapat melakukan kueri level SERIES (C-FIND) sebelum C-MOVE dan mendapatkan jumlah instance ( NumberOfSeriesRelatedInstances
) yang akan ditarik terlebih dahulu. Tapi ini hanya memberi hitungan; bukan pengenalnya. Hal yang sama juga berlaku untuk kueri tingkat STUDY dan PASIEN.
Komitmen Penyimpanan mungkin tidak berguna dalam kasus ini karena sekali lagi, contoh tidak ada di sistem Anda; Anda tidak tahu pengenalnya.
Dengan kueri level IMAGE (C-FIND), Anda dapat meneruskan UID Instans Seri dan mendapatkan daftar instans untuk seri tersebut. Tapi, saya telah menemukan beberapa sistem yang juga memaksa UID Instance SOP. Jika sistem lain dalam kasus Anda mendukung ini, Anda dapat melakukan hal berikut:
- Lakukan kueri tingkat PASIEN, STUDI, SERI, dan GAMBAR (C-FIND) selangkah demi selangkah. Anda dapat merujuk ke jawaban ini untuk lebih jelasnya.
- Simpan output di suatu tempat (daftar dalam memori atau database atau apapun).
- Lakukan C-MOVE reguler Anda dan bandingkan instans yang diterima dengan daftar yang Anda simpan. Apapun yang hilang adalah daftar dari apa yang Anda cari.
Untuk menjawab komentar Anda:
Aku melewatkan Failed SOP Instance UID List (0008,0058)
labelnya.
C.4.2.1.4.2 Struktur Pengidentifikasi Respons
Daftar UID Mesin Virtual SOP yang Gagal (0008.0058) menetapkan daftar UID Mesin Virtual SOP sub-operasi C-STORE yang operasi C-MOVE-nya telah gagal. Pengenal dalam respons C-MOVE harus secara bersyarat berisi Daftar UID Instans SOP Gagal (0008.0058) berdasarkan nilai status respons C-MOVE. Jika tidak ada sub-operasi C-STORE yang gagal, Daftar UID Instans SOP yang Gagal (0008.0058) tidak ada dan oleh karena itu tidak ada Kumpulan Data yang akan dikirim dalam respons C-MOVE.
Referensi: DICOM PS3.4 2020e - Spesifikasi Kelas Layanan
Tampaknya itu harus melakukan pekerjaan Anda. Tetapi sejujurnya, saya tidak pernah menemukan (atau tidak memperhatikan) C-MOVE SCP yang mengirimkan daftar contoh gagal tersebut. Dari kode Anda, Anda juga tidak menerima data. Saya akan merekomendasikan untuk tidak mengandalkannya.