最終更新: a few seconds ago Remove Netlify-related code from main (grafted, HEAD)
Series Date が空の場合の処理
概要
DICOM ファイルには、検査日付やシリーズが撮像されたときの日付が以下のように保持されている。
| Tag | Name | Type | VR |
|---|---|---|---|
| (0008,0020) | Study Date | 2 | DA (Date String) |
| (0008,0021) | Series Date | 3 | DA (Date String) |
| (0008,0030) | Study Time | 2 | TM (Time String) |
| (0008,0031) | Series Time | 3 | TM (Time String) |
Study Date/Time は検査自体の日付であり同一 study 内では共通。Series Date/Time はそれぞれのシリーズが作られた時の日付であり、同一 study 内でも数分~数十分程度微妙に異なっている。
Type 2 は「タグ自体の存在は必須だが中身のデータが空の場合がある」、Type 3 は「オプションでありタグ自体が存在しないことがある」という意味であり、要するにどちらの日付データも入っていないことがある。
現在 MongoDB のスキーマでは seriesDate を必須のプロパティとしているため、上記データが欠損している DICOM ファイルをインポートしようとしたときにエラーになってしまうので、これを改善する。
条件: MongoDB の series コレクションに投入するデータの seriesDate を以下のように決めるようにする。
- Series Date/Time に日付が入っている場合は従来通りそれをそのまま使う。
- Series Date/Time が欠けているが Study Date/Time がある場合、
seriesDateに Study Date/Time の値を入れる。 - Series Date/Time と Study Date/Time のいずれも欠けている場合、
seriesDateにnullを入れる。
実装
series.yamlを修正してseriesDateにnull値が保持できるようにする。JSON Schema のoneOfを使う。- DicomTagReader を修正し、Study Date/Time の値も Series Date/Time と同様に
parseDateを使ってパースして返すようにする。 - DicomImporter を修正し、上記の条件を実装して
seriesDateに投入する値を決める。dicomTagReader の返り値を引数に取るような関数を作り、それをテストするようにする。
export const determineSeriesDateToImport = data => {
if (data.seriesDate) {
/* ... */
}
};
- 上記関数に対する短いテストを書く。(
dataの中身は適当にモック化する)
注意事項
- DicomTagReader は DICOM ファイルのタグ情報をできるだけ素直に読み取ることが目的であり CIRCUS API 以外でも使われる可能性があるため、上記の条件を書く場所としては不適切。条件は DicomImporter 内に書くこと。
seriesDateに入れる値はnullであってundefinedではないので注意。