Ensemble での DICOM 関連付けの作成
この章では、プロダクションで DICOM 入力または出力を処理するために必要な DICOM 関連付けを Ensemble で作成する方法について説明します。この章は以下の節で構成されています。
DICOM 関連付けの概要
DICOM の入出力を処理するプロダクションを開発するには、まず各 DICOM デバイス (モダリティ) に対する製造業者の適合性宣言に含まれている情報を入手する必要があります。この情報を使用して、DICOM モダリティと Ensemble 間の通信を円滑化するためにプロダクションが使用する DICOM 関連付けを作成します。DICOM 関連付けは、このような通信における対話の特性を記述したメタデータです。
DICOM モダリティと接続する Ensemble プロダクションの独特で最も重要な要素は、関連付けの作成とテストを行うことです。これらの関連付けを作成するには、まずモダリティの製造業者からの適合性宣言に含まれている情報が必要となります。自社のデバイスまたはソフトウェアが DICOM 規格に適合していると主張する製造業者であれば、そのデバイスまたはソフトウェアが規格にどのように適合しているかを正確に説明する適合性宣言を提供できるはずです。
関連付けは、モダリティ間の対話の特性を定義するものです。関連付けを作成するには、以下の適合性宣言の情報を使用します。
-
その実装によって認識される情報オブジェクト — DICOM 用語で、モダリティによってサポートされるアプリケーション・エンティティ (AE) の定義。アプリケーション・エンティティは、関連付けのエンド・ポイントを定義します。1 つの DICOM デバイスが多数の AE を持つこともあります。
-
その実装がサポートするサービス・クラス — サービス・オブジェクト・ペア (SOP) クラス (アブストラクト・シンタックス) およびそれに付随するバイナリ転送シンタックス。サポートされる SOP クラスのリストは、適合性宣言の重要な要素の 1 つです。このリストは、アプリケーションでやり取りするサービス・クラスと情報オブジェクトを示しています。
-
プレゼンテーション・コンテキスト — アブストラクト・シンタックスおよびそのアブストラクト・シンタックスに使用される転送シンタックスから構成されます。DICOM 適合性宣言には、アプリケーションが折衝中に提示するプレゼンテーション・コンテキストと、アプリケーションが受け付けるプレゼンテーション・コンテキストの両方がリストされています。
関連付けの折衝中に、Ensemble は使用する転送シンタックスを 1 つ選択します。転送シンタックスがリストされている順番は重要です。リストの先頭部の転送シンタックスは、リストの最後部の転送シンタックスより優先されます。的確なシンタックスがわかれば、より高いパフォーマンスが得られます。これは圧縮画像の場合に重要になります。Ensemble では、データは別のデータに変換されません。
適合性宣言には、モデル内のアクティビティごとにアクティビティが関連付けを処理する方法 (つまり、アクティビティが関連付けを開始したり、複数の関連付けを受け付けるかどうか) が示されています。画像保管通信システム (PACS) 内のアーカイブなどの一部のデバイスでは、満足できるパフォーマンスを実現するために複数の関連付けをサポートする必要があります。そうしないと、所定時間に 1 つのアクティビティ (DICOM ストレージなど) しか処理できなくなります。
Ensemble に入力する関連付け情報は、ネームスペースごとに固有です。プロダクションの作成や実行は、それらの関連付けを定義および管理する同じネームスペースで行う必要があります。
詳細は、クラスリファレンスの "EnsLib.DICOM.Util.AssociationContextOpens in a new tab" のエントリを参照してください。
DICOM 関連付けのインポート
Ensemble ネームスペースに関連付けを追加するには、EnsLib.DICOM.Util.AssociationContextOpens in a new tab の ImportAssociation() メソッドを実行して、SOP/転送シンタックスのペアを含むファイルから受け付け可能なプレゼンテーション・コンテキストおよび提示されるプレゼンテーション・コンテキストをインポートします。
ImportAssociation()Opens in a new tab メソッドには、以下のシグニチャがあります。
classmethod ImportAssociation(pFileName As %String,
pCallingAET As %String,
pCalledAET As %String,
pOverWriteExisting As %Boolean = 0)
ImportAssociation() メソッドには、以下の引数があります。
SOP クラス UID/転送シンタックス UID の形式の、プレゼンテーション・コンテキストのリストを含むファイルの名前。このメソッドは、ファイル内のペアごとにプレゼンテーション・コンテキストを持つ、呼び出し元のアプリケーション・エンティティ・タイトル (AET) と呼び出し先の AET 間の関連付けを作成します。
1 行に 1 つずつ SOP クラス (アブストラクト・シンタックス) をリストします。区切り文字として \ を使用し、行に転送シンタックスを追加して指定します。転送シンタックスを指定しない場合、インポートによってデフォルトの DICOM 転送シンタックス (暗黙的 VR - リトルエンディアン) が追加されます。インポート・ファイルでは数値表現 (UID) を使用してください。
サービスの要求元を含むアプリケーション・エンティティ (AE) を指定します。これは、ソースの DICOM アプリケーションの名前に基づきます。通常、呼び出し元のアプリケーション・エンティティ・タイトル (AET) は、サービス・クラス・ユーザ (SCU) です。
サービスの対象となる受け付け側を含むアプリケーション・エンティティを指定します。これは、宛先の DICOM アプリケーションの名前に基づきます。通常、呼び出し先のアプリケーション・エンティティ・タイトルは、サービス・クラス・プロバイダ (SCP) です。
この引数は、同じ AET ピア間の関連付けがネームスペースに既に存在する場合の処理を制御します。真 (1) の場合、関連付けを上書きします。偽 (0) の場合、関連付けが既に存在することを示すエラーを表示します。
詳細は、付録の “DICOM 転送シンタックス” を参照してください。DICOM アブストラクト・シンタックスには、管理ポータルを使用します。[Ensemble]、[相互運用]、[DICOM]、[DICOMアブストラクトシンタックス] の順にクリックしてから、[進む] をクリックします。
関連付けサンプルのインポート
例として、適合性宣言から取得した以下のサンプルのプレゼンテーション・コンテキスト・テーブルの情報を使用して、Ensemble とワーク・リスト・モダリティ間の関連付けを追加することができます。
アブストラクト・シンタックス/転送シンタックスの組み合わせごとに 1 行を使用する関連付けのファイルを作成します。各項目には UID を使用します。例えば、テキスト・ファイル MyAssociations.txt の内容は以下のようになります。
1.2.840.10008.1.1 1.2.840.10008.5.1.4.31\1.2.840.10008.1.2 1.2.840.10008.5.1.4.31\1.2.840.10008.1.2.1 1.2.840.10008.5.1.4.31\1.2.840.10008.1.2.2
SOP クラスに対応する受け付け可能な転送シンタックスがデフォルトの暗黙的 VR - リトルエンディアン (UID : 1.2.840.10008.1.2) のみの場合、ファイルの行 1 のように、その SOP クラスに対して転送シンタックスを指定する必要はありません。
アブストラクト・シンタックス/転送シンタックスのペアのファイルを作成したら、開発中のプロダクションが含まれるネームスペースで以下のメソッドを呼び出します。以下に例を示します。
Zn "ENSDEMO"
Do ##class(EnsLib.DICOM.Util.AssociationContext).ImportAssociation
("c:\Ensemble\DICOM\MyAssociations.txt",
"ENS-SCU",
"MWL-SCP",
0)
結果として得られる関連付け情報は管理ポータルで表示できます。[Ensemble] をクリックして、[相互運用]、[DICOM]、および [DICOM設定] の順にクリックします。これにより、次のような Ensemble, DICOM設定 ページが表示されます。
テーブル内の任意の行をクリックしてから、[編集] をクリックして、[関連付け] タブと [プレゼンテーションコンテキスト] タブを表示します。
DICOM 関連付けの作成
既知の SOP クラスと提供されている転送シンタックスのリストごとに、呼び出し元 AET および呼び出し先 AET 間の関連付けのスーパーセットを作成することもできます。そのためには、EnsLib.DICOM.Util.AssociationContextOpens in a new tab の CreateAssociation() メソッドを実行します。
CreateAssociation()Opens in a new tab メソッドには、以下のシグニチャがあります。
classmethod CreateAssociation(pCallingAET As %String,
pCalledAET As %String,
pTransferSyntaxes As %List)
CreateAssociation() メソッドには、以下の引数があります。
サービスの要求元を含むアプリケーション・エンティティ (AE) を指定します。これは、ソースの DICOM アプリケーションの名前に基づきます。通常、呼び出し元のアプリケーション・エンティティ・タイトル (AET) は、サービス・クラス・ユーザ (SCU) です。
サービスの対象となる受け付け側を含むアプリケーション・エンティティを指定します。これは、宛先の DICOM アプリケーションの名前に基づきます。通常、呼び出し先のアプリケーション・エンティティ・タイトルは、サービス・クラス・プロバイダ (SCP) です。
関連付けのプレゼンテーション・コンテキストの作成において、既知の SOP クラスごとにペアを作るための転送シンタックスのリスト。
(デフォルトのリストには、必須のデフォルトである暗黙的 VR - リトルエンディアン転送シンタックスが含まれています)。
このメソッドは、すべての 既知の SOP をサポートする、指定の呼び出し元 AET および呼び出し先 AET の関連付けコンテキスト・インスタンスを作成します。
この関連付けでは、単純にデータ・ディレクトリにおいて既知のすべての SOP クラスを定義します。これによってわずかにパフォーマンスが低下するため、次の節で説明するように管理ポータルを使用するか、前の節で説明した ImportAssociation() メソッドを使用して、必要な SOP クラスだけを定義することをお勧めします。関連付けに不要なクラスを含めると、モダリティと Ensemble 間のハンドシェイクにかかる時間が長くなる可能性があります。
例として、ENSDEMO ネームスペースには、サンプル DICOM プロダクションが含まれています。このプロダクションは、以下のコードを使用して、すべての既知の SOP クラスを含むデフォルトの関連付けを生成します。
#; We will be accepting Storage and Query requests from JD-SCU
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation
("JD-SCU","ENS-SCP",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
#; We will be sending storage requests to the JD-SCP
Do ##class(EnsLib.DICOM.Util.AssociationContext).CreateAssociation
("ENS-SCU","JD-SCP",$ListBuild($$$IMPLICITVRLETRANSFERSYNTAX))
転送シンタックスの考慮事項
場合によっては、明示的に指定する方が有効です。多くの場合、元のタイプの名前が保持され、下位互換性がさらに高まるためです。
明示的および暗黙的 VR (値表現) のエンコーディングは混合できないため、どちらの方法を使用するかの決定は、いずれのデータ転送においても最初に行われる必要があります。DICOM アプリケーションは、データ交換の前にエンコーディング・タイプについて交渉して合意します。
DICOM 関連付けの管理
関連付けを管理するには、管理ポータルの Ensemble, DICOM設定 ページを使用します。このページにアクセスするには、[Ensemble]、[相互運用]、[DICOM] の順にクリックし、[DICOM設定] をクリックします。
このページには、選択したネームスペースの既存の関連付けがリストされ、以下の機能が提供されています。
-
関連付けの作成、編集、または削除 — Ensemble には、関連付け情報を入力または編集するためのフォームが用意されています。また、既存の関連付けをリストから削除することもできます。詳細は、“DICOM 関連付けの作成と編集” を参照してください。
-
[アブストラクト・シンタックスの表示] — Ensemble には、DICOM アブストラクト・シンタックスのリストが用意されており、そのリストには DICOM 規格の既知の SOP クラス情報がすべて記載されています。詳細は、“アブストラクト・シンタックスの表示” を参照してください。
-
[ディクショナリの表示] — Ensemble には、DICOM データ・ディクショナリが用意されており、そのディクショナリには DICOM 規格の既知のデータ要素情報がすべて記載されています。詳細は、“DICOM データ・ディクショナリの表示” を参照してください。
DICOM 関連付けの作成と編集
Ensemble, DICOM設定 ページには、選択したネームスペースで定義されている関連付けがすべてリストされます。このリストから、[編集] または [削除] を選択して既存の関連付けの編集や削除を行うことも、[新規関連付け作成] を選択することもできます。関連付けを削除するには、該当する行で [削除] をクリックし、[OK] をクリックして確定します。
このページには 2 つのタブがあります。
-
[関連付け] タブでは、関連付けを作成または編集できます。このタブ上で以下の情報を入力または編集します。
-
[呼び出しているAET] — サービスの要求元を含むアプリケーション・エンティティ (AE) を指定します。これは、ソースの DICOM アプリケーションの名前に基づきます。通常、呼び出し元の AET は、サービス・クラス・ユーザ (SCU) です。
-
[呼び出されたAET] — サービスの受け付け側を含むアプリケーション・エンティティ (AE) を指定します。これは、宛先の DICOM アプリケーションの名前に基づきます。通常、呼び出し先の AET は、サービス・クラス・プロバイダ (SCP) です。
-
[名前] — 関連付けの任意の名前。最長で 64 文字です。
-
[説明] — 関連付けの任意の説明。最長で 254 文字です。
関連付けを更新または作成するには、[保存] をクリックします。必須フィールドに入力もれがある場合は、その説明が赤字で表示されます。作業内容を取り消して [DICOM設定] ページの既存の関連付けのリストに戻るには、[閉じる] をクリックします。
呼び出し元および呼び出し先のアプリケーション・エンティティ・タイトルが共に、その関連付けに対して一意の ID を作成します。関連付けを保存すると、これらのフィールドは変更できません。その関連付けを削除してから新しい関連付けを追加できます。
-
-
[プレゼンテーションコンテキスト] タブでは、関連付けに関連したプレゼンテーション・コンテキストを維持できます。このタブでは、以下のアクションを実行できます。
-
[前のページに戻る] — Ensemble, DICOM設定 ページの関連付けのリストに戻る場合にクリックします。
-
[追加] — アブストラクト・シンタックスのエントリをリストに追加し、受け付け可能なまたは提示される転送シンタックスの組み合わせのリストをメンテナンスする場合にクリックします。詳細は、“プレゼンテーション・コンテキストの追加” を参照してください。
-
[削除] — アブストラクト・シンタックスをハイライト表示し、[削除] をクリックします。特定の転送シンタックスのみを削除するには、[編集] をクリックして選択したリストから削除します。
-
[編集] — 選択したアブストラクト・シンタックスに対応する転送シンタックスを追加または削除する場合にクリックします。
DICOM ソースと Ensemble 間の関連付けについてすべての関連情報を入力したら、関連付け情報を Ensemble プロダクションの構成に使用できます。
-
プレゼンテーション・コンテキストの追加
接続を試みる 2 つのアプリケーションが互いの情報を交換するとき、DICOM 特有のメッセージ含む各ネットワーク転送は、関連付けハンドシェイクの確立で始まります。その情報は、プレゼンテーション・コンテキストと呼ばれます。プレゼンテーション・コンテキストは、アプリケーション・エンティティ間の交渉で、関連付けに対して使用される一連の DICOM ネットワーク・サービスです。それには、アブストラクト・シンタックスおよび転送シンタックスが含まれます。Ensemble では、EnsLib.DICOM.Util.PresentationContextOpens in a new tab クラスを使用してこの情報を表します。2 つのアプリケーションのコンテキストが適合すると、それらのアプリケーションは接続して SCU-SCP 処理を開始できます。
プレゼンテーション・コンテキストのエントリを追加するには、以下の手順を実行します。
-
[プレゼンテーションコンテキスト] タブで [追加] をクリックします。
-
DICOM デバイスでサポートされているアブストラクト・シンタックスをクリックします。タブには、DICOM 規格のすべての既知のアブストラクト・シンタックスに対応する UID と SOP クラス名がリストされます。転送シンタックスを追加する対象として、リストから一度に 1 つだけ [アブストラクトシンタックス] を選択することができます。
-
アブストラクト・シンタックスを選択したら、[>] 矢印を使用して、[利用可能な変換シンタックス] リストから [選択された変換シンタックス] リストに、対象のデバイスに有効なタイプを移動します。
-
アブストラクト・シンタックスに対応する適切な転送シンタックスの選択が完了したら、[保存] をクリックしてツリーに新しいコンテキストを追加します。編集内容を取り消して、既存のプレゼンテーション・コンテキスト・ツリーに戻る場合は、[キャンセル] をクリックします。
例えば、多くの適合性宣言には、アブストラクト・シンタックスとして一般的な確認 SOP クラス (1.2.840.10008.1.1) が記載されています。通常、適合性宣言には、モダリティがプロバイダ (SCP) として機能する場合は受け付け可能なプレゼンテーション・コンテキストの組み合わせがリストされ、ユーザ (SCU) として機能する場合は提示されるプレゼンテーション・コンテキストの組み合わせがリストされます。上記のプレゼンテーション・コンテキスト・テーブルの例では、このクラスは暗黙的 VR リトルエンディアン転送シンタックス (1.2.840.10008.1.2) を受け付けます。
付録 “DICOM 転送シンタックス” には、このページに表示される情報がリストされています。
アブストラクト・シンタックスの表示
Ensemble, 管理, DICOM AS リスト ページには、SOP クラスとそれらの一意の識別子 (DICOM PS 3.3 規格のもの) のテーブルが表示されます。このページにアクセスするには、[Ensemble]、[相互運用]、[DICOM]、[DICOM アブストラクト・シンタックス] の順にクリックし、[進む] をクリックします。アブストラクト・シンタックスという用語が使用される理由の 1 つは、DICOM が参照する国際標準の 1 つでこの用語が定義されているためです。
[アブストラクト・シンタックスの表示] ページの [フィルタ] 機能を使用するには、文字列の一部を入力して Tab キーを押し、フィルタ適用後のテーブルを再読み込みします。検索では大文字と小文字は区別されません。入力した部分文字列がいずれかの列のデータとマッチした場合、フィルタによって結果が返されます。
DICOM データ・ディクショナリの表示
DICOM データ・ディクショナリは、メディア・エンコーディングに使用される要素と DICOM が割り当てる一意に識別された項目のリストと共に、情報を表すために使用可能な一連のすべての DICOM データ要素を定義する統合レジストリに相当します。Ensemble, 管理, DICOM ディクショナリ ページには、DICOM PS 3.3 規格の要素のテーブルが表示されます。このページにアクセスするには、[Ensemble]、[相互運用]、[DICOM]、[DICOM ディクショナリ・シンタックス] の順にクリックし、[進む] をクリックします。
[ディクショナリの表示] ページの [フィルタ] 機能を使用するには、文字列の一部を入力して Tab キーを押し、フィルタ適用後のテーブルを再読み込みします。検索では大文字と小文字は区別されません。入力した部分文字列がいずれかの列のデータとマッチした場合、フィルタによって結果が返されます。
以下のテーブルで、ページの表示について説明します。
列名 | 説明 |
---|---|
タグ | 順序づけられた番号のペア (グループ番号、要素番号の順) から成る情報の要素に対する一意の識別子。属性および対応するデータ要素の識別に使用されます。 |
名前 | DICOM データ・ディクショナリ要素の名前。 |
VR | 値表現。データ要素の値フィールドに含まれる値のデータ型および形式を示します(整数または文字列のタイプなど)。 |
VM | 値の多重度。データ要素の値フィールドでエンコード可能な値の数を示します。 |
(コード) | 項目のコードが定義されている場合は、リンクを表示します。[コード] をクリックすると、ダイアログ・ボックスにこの要素に有効な値および対応する内部数値コードのリストが表示されます。[フィルタ] に部分文字列を入力して、このテーブルをフィルタすることもできます。 |
この情報は参照のみを目的としています。Ensemble では、フィールドにバリエーションがあることが考えられるため、これらの列挙された値の使用は強制されません。特定のフィールドに入れる値を決める際に、これらの参照用テーブルを利用することもできます。最終的な参照資料は、常に NEMA 公式の DICOM PS 3.3 規格です。
DICOM 関連付けのテスト
関連付けを定義したら、以下の手順を使用してそれらの関連付けをプロダクションでテストできます。
-
Ensemble を構成する前に、ワーキング・モダリティの TCP トレースを取得します。
-
いずれかのデモ・プロダクションを開始します。
-
ビジネス・サービスを追加します。
-
エコー・メッセージを送信します。
-
接続をデバッグします。
以下は、サードパーティ製 DICOM テスト・ツールからのサンプル・ログです。関連付けの確立、ECHO メッセージの要求と応答、および関連付け接続の解放を示しています。
test: #5:ENS-SCP << A-ASSOCIATE-RQ PDU test: #5:ENS-SCP >> A-ASSOCIATE-AC PDU test: #5:ENS-SCP << C-ECHO-RQ Verification SOP Class test: #5:ENS-SCP >> C-ECHO-RSP Verification SOP Class, status #0000H[Success] test: #5:ENS-SCP << A-RELEASE-RQ PDU test: #5:ENS-SCP >> A-RELEASE-RP PDU test: #5:ENS-SCP closing socket