C-MOVE呼び出し中に正常に取得されなかったすべてのSOPインスタンスのリストを取得するにはどうすればよいですか?
PyNetDicomを使用してPACSサーバーから画像をダウンロード(C-MOVE)しています。C-MOVE要求をPACSに送信するSCUと、C-STORE要求を受信するSCPを実装しました。
私は研究全体をダウンロードします。つまり、一度に数千のDICOM画像をダウンロードします。どういうわけか、私はそれらのいくつかを受け取ることができません。C-MOVEリクエストから取得した応答には、正常に送信された画像の数と失敗した画像の数(および、進行中の画像の数と警告)が表示されます。
私は失敗しただけでなく、どのように多く知りたいのですが、また、そのものは、私は失敗しましたSOPインスタンスUIDリストを取得したいという意味、失敗しました。これは私のコードの関連部分です:
# 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
これは機能しません。操作が失敗したことを示している場合でも、識別子は常に です。私は何か間違ったことをしていますか、それとも私が関連付けているPACSはDICOMに準拠していませんか?None
status.Status
回答
C-MOVE SCUとして機能している場合、失敗したインスタンスの識別子(SOPインスタンスUID)を取得する方法はありません。
- C-MOVE SCPを使用して、詳細/ログを個別に取得できます(DICOMから)。
- 障害が上にあった場合は、あなたのC-STORE SCP、そこにログや詳細をご確認ください。これは、C-STORE SCU(他のシステム)で障害が発生した場合は役に立たない可能性があります。再度使用する必要があります。
正確な解決策ではありませんが、C-MOVEの前にSERIESレベルのクエリ(C-FIND)を実行NumberOfSeriesRelatedInstances
して、事前にプルされるインスタンスの数()を取得できます。しかし、これは数えられるだけです。識別子ではありません。STUDYおよびPATIENTレベルのクエリについても同じことが言えます。
この場合も、インスタンスがシステムに存在しないため、ストレージコミットメントは役に立たない可能性があります。あなたは識別子を知りません。
IMAGEレベルのクエリ(C-FIND)を使用すると、シリーズインスタンスUIDを渡して、そのシリーズのインスタンスのリストを取得できます。しかし、SOPインスタンスUIDも強制するシステムに出くわしました。あなたのケースの他のシステムがこれをサポートしている場合、あなたは以下を行うことができます:
- 患者、研究、シリーズ、画像レベルのクエリ(C-FIND)を段階的に実行します。詳細については、この回答を参照してください。
- 出力をどこかに保存します(メモリ内のリストやデータベースなど)。
- 通常のC-MOVEを実行し、受信したインスタンスを保存されているリストと比較します。足りないものは何でもあなたが探しているもののリストです。
あなたのコメントに答えるには:
Failed SOP Instance UID List (0008,0058)
タグを逃しました。
C.4.2.1.4.2応答識別子の構造
失敗したSOPインスタンスUIDリスト(0008,0058)は、このC-MOVE操作が失敗したC-STOREサブ操作SOPインスタンスのUIDのリストを指定します。C-MOVE応答の識別子には、C-MOVE応答ステータス値に基づくFailed SOPインスタンスUIDリスト(0008,0058)が条件付きで含まれている必要があります。C-STOREサブオペレーションが失敗しなかった場合、失敗したSOPインスタンスUIDリスト(0008,0058)は存在しないため、C-MOVE応答でデータセットは送信されません。
参照:DICOM PS3.42020e-サービスクラス仕様
それはあなたの仕事をするべきであるように思われます。しかし率直に言って、私はそのような失敗したインスタンスのリストを送信するC-MOVE SCPに出くわしたことはありませんでした(または気づかなかった)。コードからは、データも受信していません。頼らないことをお勧めします。