C-MOVE呼び出し中に正常に取得されなかったすべてのSOPインスタンスのリストを取得するにはどうすればよいですか?

Dec 22 2020

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に準拠していませんか?Nonestatus.Status

回答

3 AmitJoshi Dec 22 2020 at 11:40

C-MOVE SCUとして機能している場合、失敗したインスタンスの識別子(SOPインスタンスUID)を取得する方法はありません。

  1. C-MOVE SCPを使用して、詳細/ログを個別に取得できます(DICOMから)。
  2. 障害が上にあった場合は、あなたの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に出くわしたことはありませんでした(または気づかなかった)。コードからは、データも受信していません。頼らないことをお勧めします。