dcmsend: シンプルな DICOM ストレージ SCU(送信側)
書式
dcmsend [options] peer port dcmfile-in...
説明
dcmsend は、Storage サービスクラス向けの Service Class User(SCU)を実装したアプリケーションです。よく知られた storescu ユーティリティと比べてオプションが少ないぶん扱いやすく、これがタイトルの「シンプル」という言葉の由来でもあります。主な用途は、多数の DICOM ファイルをまとめて Storage サービスクラスの Provider(SCP)へ送信することです。dcmsend は複数のアソシエーション(1つずつ順番に)に対応し、転送に必要であれば DICOM SOP インスタンスの展開(伸長)も行えます。
引数
peer hostname of DICOM peer
port tcp/ip port number of peer
dcmfile-in DICOM file or directory to be transmitted
オプション
全般オプション
-h --help- このヘルプを表示して終了します
--version- バージョン情報を表示して終了します
--list-decoders- デコーダの転送構文を一覧表示して終了します
--arguments- 展開後のコマンドライン引数を表示します
-q --quiet- quiet モード。警告やエラーを表示しません
-v --verbose- verbose モード。処理の詳細を表示します
-d --debug- debug モード。デバッグ情報を表示します
-ll --log-level [l]evel: string constant- (fatal, error, warn, info, debug, trace)ロガーにレベル l を使用します
-lc --log-config [f]ilename: string- ロガーに設定ファイル f を使用します
+v --verbose-pc- verbose モードでプレゼンテーションコンテキストを表示します
入力オプション
+f --read-file- ファイル形式またはデータセットを読み込みます
+fo --read-file-only- ファイル形式のみを読み込みます(既定値)
-f --read-dataset- ファイルメタ情報なしでデータセットを読み込みます。入力ファイル:
+rd --read-from-dicomdir- 入力ファイルの情報を DICOMDIR から読み込みます
+sd --scan-directories- 入力ファイル(dcmfile-in)を求めてディレクトリを走査します
+sp --scan-pattern [p]attern: string (only with --scan-directories)- ファイル名照合用のパターン(ワイルドカード)# 全システムで利用できるとは限りません
-r --no-recurse- ディレクトリ内を再帰的にたどりません(既定値)
+r --recurse- 指定したディレクトリ内を再帰的にたどります
処理オプション
-dn --decompress-never- 圧縮されたデータセットを決して展開しません
+dls --decompress-lossless- 可逆圧縮のみ展開します(既定値)
+dly --decompress-lossy- 非可逆圧縮も可逆圧縮も展開します。deflate 圧縮レベル:
+cl --compression-level [l]evel: integer (default: 6)- 0=無圧縮、1=最速、9=最高圧縮。その他の処理オプション:
-nh --no-halt- 最初の不正な入力ファイルや保存失敗が発生しても処理を中断しません
-nip --no-illegal-proposal- 既定の転送構文を含まないプレゼンテーションコンテキストは(必要であっても)提案しません
-nuc --no-uid-checks- 入力ファイルの UID 値をチェックしません
ネットワークオプション
-i4 --ipv4- IPv4 のみを使用します(既定値)
-i6 --ipv6- IPv6 のみを使用します
-i0 --ip-auto- DNS ルックアップで IP プロトコルを決定します。アプリケーションエンティティタイトル:
-aet --aetitle [a]etitle: string- 自分の calling AE title を設定します(既定値: DCMSEND)
-aec --call [a]etitle: string- 相手の called AE title を設定します(既定値: ANY-SCP)。アソシエーション処理:
+ma --multi-associations- インスタンスの転送に必要であれば複数のアソシエーション(1つずつ順番に)を使用します(既定値)
-ma --single-association- 常に単一のアソシエーションを使用します。その他のネットワークオプション:
-to --timeout [s]econds: integer (default: unlimited)- 接続要求のタイムアウト
-ta --acse-timeout [s]econds: integer (default: 30)- ACSE メッセージのタイムアウト
-td --dimse-timeout [s]econds: integer (default: unlimited)- DIMSE メッセージのタイムアウト
-pdu --max-pdu [n]umber of bytes: integer (4096..131072)- 受信 PDU の最大値を n バイトに設定します(既定値: 16384)
--max-send-pdu [n]umber of bytes: integer (4096..131072)- 送信 PDU の最大値を n バイトに制限します
出力オプション
general:
+crf --create-report-file [f]ilename: string
create a detailed report on the transfer
(if successful) and write it to text file f
注記
典型的な使い方
dcmsend の典型的な用途は、DICOM ファイルとして保存された任意の SOP インスタンスをストレージ SCP へ送信することです。次のコマンドはまさにそれを行います:
dcmsend --verbose <peer> <port> *.dcm
DICOM ファイルが「IMAGES」ディレクトリ配下のディレクトリ階層に保存されている場合は、次のコマンドが使えます:
dcmsend -v <peer> <port> --scan-directories --recurse IMAGES
複数のディレクトリを指定したり、これまでの方法を組み合わせたり(ファイル名とディレクトリ名の両方を使う)することもできます:
dcmsend -v +sd +r <peer> <port> IMAGES_1 IMAGES_2 test.img *.dcm
SOP インスタンスが DICOMDIR ファイルから参照されている場合は、オプション –read-from-dicomdir(または +rd)を使うと、アソシエーションの折衝のために事前に読み込むことなく、参照されているすべての DICOM ファイルを送信できます:
dcmsend -v <peer> <port> --read-from-dicomdir DICOMDIR
そして繰り返しになりますが、上記のすべての方法は次のように組み合わせられます:
dcmsend -v +sd +r +rd <peer> <port> IMAGES_1 IMAGES_2 test.img DICOMDIR *.dcm
既定のオプション –read-file-only によって、DICOM ファイル(メタヘッダを持ち、プリアンブルの後にマジックワード「DICM」を備えたもの)だけが処理されるようになります。多数のファイルを処理する場合は、最初の不正な入力ファイルや保存失敗が起きても中断しないようにするのもよいでしょう。これにはオプション –no-halt を使います。ただし「保存失敗」とは、C-STORE 応答の DIMSE ステータスがエラーを示すことを意味するのではない点に注意してください。C-STORE 要求をストレージ SCP へ送れなかったことを意味します。
DICOM 標準で許される最大数である 128 を超えるプレゼンテーションコンテキストが必要になると、直前のアソシエーションが完了した後に新しいアソシエーションが開始されます。この動作が望ましくない場合は、オプション –single-association で無効にできます。さらに、(必要に応じて)可逆圧縮のデータセットだけを展開するか(既定の動作)、非可逆圧縮のデータセットも展開するかは、–decompress-xxx オプションで指定できます。
DICOM SOP インスタンスの転送について概要と詳細の両方を得るには、オプション –create-report-file で対応するテキストファイルを作成できます。ただしこのファイルは、アプリケーションが(エラーで)途中終了しなかった場合に、最後の処理として作成されます。
ディレクトリの走査
ディレクトリをコマンドラインの引数に加えても、オプション –scan-directories も併せて指定したときにのみ意味を持ちます。指定したディレクトリ内のファイルを特定の名前パターン(ワイルドカード照合など)で選別したい場合は、オプション –scan-pattern を使う必要があります。なお、このファイルパターンは走査対象ディレクトリ内のファイルにのみ適用されます。–scan-pattern オプションの外側、つまりコマンドライン上で(さらに別のファイルを選ぶために)他のパターンを指定しても、それらは指定したディレクトリには適用されません。
したがって上記の3番目の例では、ディレクトリ IMAGES_1 と IMAGES_2 を再帰的にたどり(オプション +r による)、これら2つのフォルダとそのすべてのサブフォルダに含まれるファイルを転送します。加えて dcmsend は、カレントワーキングフォルダの「test.img」と拡張子「dcm」のすべてのファイルを転送します。オプション +sd を有効にせずにディレクトリ名を指定しても意味がない点に注意してください。
DICOM 適合性
dcmsend は基本的に、プライベートなものを含むすべての Storage SOP クラスを SCU として扱えます。既定では、有効な SOP インスタンスだけが送られるよう、DICOM ファイルの SOP クラス UID をチェックします。このチェックはオプション –no-uid-checks で無効にできます。
dcmsend は DICOM 標準で定義されたすべての転送構文にも対応しています。プライベートな転送構文は、オプション –no-uid-checks で UID チェックを無効にした場合にのみ使用できます。ただし、DICOM 既定の転送構文(Implicit VR Little Endian)への変換に対応している転送構文は限られている点に注意してください。オプション –list-decoders を使うと、ネイティブまたはデコーダによって対応している転送構文が一覧表示されます。出力は通常、次のようになります:
Transfer Syntaxes supported natively:
- Little Endian Implicit
- Little Endian Explicit
- Big Endian Explicit
Transfer Syntaxes supported by decoders:
- Deflated Explicit VR Little Endian
- JPEG Baseline
- JPEG Extended, Process 2+4
- JPEG Spectral Selection, Non-hierarchical, Process 6+8
- JPEG Full Progression, Non-hierarchical, Process 10+12
- JPEG Lossless, Non-hierarchical, Process 14
- JPEG Lossless, Non-hierarchical, 1st Order Prediction
- JPEG-LS Lossless
- JPEG-LS Lossy (Near-lossless)
- RLE Lossless
dcmsend はできる限りユーザーにとってシンプルであろうとするため、既定では厳密に言えば「不正な」プレゼンテーションコンテキストを SCP に提案することがあります。これは、DICOM 標準では、SCU は各抽象構文(すなわち SOP クラス)に紐づくプレゼンテーションコンテキストのうち少なくとも1つで、常に DICOM 既定の転送構文を提案しなければならないからです。この要件は、SCU が非可逆圧縮の形でしか SOP インスタンスにアクセスできない場合や、展開後のピクセルデータが大きすぎてエンコードできない場合には免除されます。オプション –no-illegal-proposal を使うと、厳密に DICOM に適合する動作を強制できます。すなわち、不正となりうるプレゼンテーションコンテキストは提案されず、対応する SOP インスタンスは(必要であれば)拒否されます。ただし展開後のピクセルデータのサイズはチェックされない点に注意してください。
「Lossless JPEG Compression」「Lossy JPEG Compression」などの既定の転送構文は、DICOM 標準が求めるとおりには常に提案されるわけではありません。同じ制限は他の圧縮方式にも当てはまります。詳細は DICOM PS 3.5 セクション 10 を参照してください。
ロギング
各種コマンドラインツールおよびその基盤となるライブラリのロギング出力のレベルは、ユーザーが指定できます。既定では、エラーと警告のみが標準エラー出力に書き出されます。オプション –verbose を使うと、処理の詳細などの情報メッセージも報告されます。オプション –debug を使うと、デバッグ目的などで内部動作のより詳しい情報が得られます。その他のロギングレベルはオプション –log-level で選べます。–quiet モードでは致命的なエラーのみが報告されます。そうした非常に深刻なエラー事象では、アプリケーションは通常終了します。各ロギングレベルの詳細は、モジュール「oflog」のドキュメントを参照してください。
ロギング出力をファイルへ(必要に応じてログファイルのローテーション付きで)、syslog(Unix)へ、あるいはイベントログ(Windows)へ書き出したい場合は、オプション –log-config を使えます。この設定ファイルでは、特定のメッセージだけを特定の出力ストリームへ振り向けたり、メッセージが生成されたモジュールやアプリケーションに基づいて特定のメッセージをフィルタリングしたりすることもできます。設定ファイルの例は < etcdir>/logger.cfg に用意されています。
コマンドライン
すべてのコマンドラインツールは、引数について次の記法を用います。角かっこは省略可能な値(0〜1個)を囲み、末尾の3つの点は複数の値が許される(1〜n個)ことを示し、両者の組み合わせは0〜n個の値を意味します。
コマンドラインオプションは、先頭の「+」または「-」記号によって引数と区別されます。通常、コマンドラインオプションの順序や位置は任意です(つまりどこに現れてもよい)。ただし、互いに排他的なオプションについては、最も右側に現れたものが使われます。この挙動は一般的な Unix シェルの標準的な評価規則に従います。
さらに、ファイル名の前に「@」記号を付けることで、1つ以上のコマンドファイルを指定できます(例: @command.txt)。このようなコマンド引数は、それ以降の評価に先立って、対応するテキストファイルの内容で置き換えられます(連続する空白は、引用符で挟まれていない限り単一の区切りとして扱われます)。なお、コマンドファイルの中に別のコマンドファイルを含めることはできません。この単純だが効果的な仕組みにより、よく使うオプションや引数の組み合わせをまとめておけるため、長くて分かりにくいコマンドラインを避けられます(例は < datadir>/dumppat.txt に用意されています)。
終了コード
dcmsend ユーティリティは終了時に次の終了コードを用います。これにより、アプリケーションが終了した理由をユーザーが確認できます。
全般
EXITCODE_NO_ERROR 0
EXITCODE_COMMANDLINE_SYNTAX_ERROR 1
入力ファイルエラー
EXITCODE_CANNOT_READ_INPUT_FILE 20 (*)
EXITCODE_NO_INPUT_FILES 21
EXITCODE_INVALID_INPUT_FILE 22
EXITCODE_NO_VALID_INPUT_FILES 23
出力ファイルエラー
EXITCODE_CANNOT_WRITE_OUTPUT_FILE 40 (*)
EXITCODE_CANNOT_WRITE_REPORT_FILE 43
ネットワークエラー
EXITCODE_CANNOT_INITIALIZE_NETWORK 60
EXITCODE_CANNOT_NEGOTIATE_ASSOCIATION 61
EXITCODE_CANNOT_SEND_REQUEST 62
EXITCODE_CANNOT_ADD_PRESENTATION_CONTEXT 65
() 実際にはこれらのコードは現在 dcmsend* では使われておらず、対応する終了コード群のプレースホルダとして用意されています。
環境変数
dcmsend ユーティリティは、DCMDICTPATH 環境変数で指定された DICOM データ辞書を読み込もうとします。既定では、つまり DCMDICTPATH 環境変数が設定されていない場合は、辞書がアプリケーションに組み込まれていない限り(Windows では既定で組み込み)、< datadir>/dicom.dic ファイルが読み込まれます。
通常はこの既定の動作が望ましく、別のデータ辞書が必要なときにのみ DCMDICTPATH 環境変数を使うとよいでしょう。DCMDICTPATH 環境変数は Unix シェルの PATH 変数と同じ形式で、エントリをコロン(":")で区切ります。Windows システムでは区切り文字にセミコロン(";")を使います。データ辞書のコードは、DCMDICTPATH 環境変数で指定された各ファイルを読み込もうとします。データ辞書を1つも読み込めない場合はエラーとなります。
関連項目
dcmrecv(1), storescu(1), storescp(1)
著作権
Copyright (C) 2011-2025 by OFFIS e.V., Escherweg 2, 26121 Oldenburg, Germany.