こんなの見つけました

Appleのファイル構造に興味を持つようになりました きっかけは HorliX Dataというフォルダを探していて、それが一般に分からない場所に設定されていることを見つけたことにあります

そして、サンドボックス (SandBox)という一般から隠蔽され、自由にアクセスできない領域について知りました やはりこれも Appleがプログラマ向けに公開している文書なのですが、内容難しいですねえ でも、何処かで見た xml文書構造の例を発見しました

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
   <key>Move</key>
   <array>
      <string>${Library}/AppSandboxQuickStart/MyConfiguration.plist</string>
      <array>
         <string>${Library}/AppSandboxQuickStart/MyDataStore.xml</string>
         <string>${ApplicationSupport}/AppSandboxQuickStart/MyDataStore.xml</string>
      </array>
   </array>
   <key>MigrateScriptsForApplication</key>
   <string>AppSandboxQuickStart</string>
</dict>
</plist>

あれっ、この構造 何処かで見ましたよね そうです albumファイルの構造です あひゃーっですね

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (6)おまけ

先の (5)の記事を書いていて馬鹿なことを考え試しました それは「同じ Apple IDであれば、何回かは別の Macに downloadして走らせることが通常できる」

だとすれば、「やはり Apple IDでインストールする iPadにも同様にインストールできないのか?」

という妄想です

それで試して見ましたが、そもそも iPadに Apple Storeでは HorliXは検索しても出てきません やはり Apple側も macOSと iOSは兄弟のようなものであっても、Application側でプラットフォームを識別してインストールできるかできないかを判定しているのですね

当たり前じゃない いやいやどんな小さな疑問でもそれが前に進んでいく動機となるのですよ

あととても重要な指摘です DICOM dataというのは重要な個人情報です ですから、やはり cloud上にそのままの形式のファイルを uploadするのは問題あるかと思います また、個人の MacBook上に蓄えている場合、その個人MacBookのログインに関しては、慎重にして下さい 簡単なパスワードだけでは危険です

もっとも DICOM Fileの中から個人情報データのみ削除すれば良いと思います 具体的には、生年月日、患者氏名、患者ID この3つを削除すれば良いと思います

DICOM formatでは、.XA ないし .dcmという拡張子のついたファイルから構成されていますが、この一つのファイルの中に、これらの個人情報が全て書き込まれています ちなみに、それらの情報は単なるテキスト・データですので、テキスト・エディタで開けば簡単に読むことができます

ちなみに、僕の MacBook Proの中の一つの .dcm fileを強制的にテキスト・エディタ VS Codeで開いてみましたところ、下記のような xml formatで出力されました

<dict>
  <key>albums</key>
  <array>
    <string>MassyCTO2012</string>
  </array>
  <key>patientID</key>
  <string>Dr SAITO Dr CHEVALIER</string>
  <key>patientUID</key>
  <string>ZEI...A, 40 YEARS OLD  CTO 2012-DR SAITO DR CHEVALIER-********</string>
  <key>patientsName</key>
  <string>ZEI...A, 40 years old  CTO 2012</string>
  <key>stateText</key>
  <integer>0</integer>
  <key>studyInstanceUID</key>
  <string>1.3.46.670589.28.26540597965520120310121759799988</string>
</dict>

この症例が、僕が Chevalier先生を助手として Massy, Franceの CTO courseで治療したということが一発で分かってしまいますね もちろん、それぞれの .XAや .dcmファイルの大部分は圧縮画像データである バイナリで構成されていますので、その部分はテキスト・エディタでは読むことができません

従って、簡単なスクリプト・プログラムを書いて、個人情報部分に ****** などの文字を書き込めば確実に個人情報が削除されますので、たとえあなたの MacBookが盗まれたとしても個人情報漏洩、という観点からは安全となります

簡単なプログラムです その内書いて公開しますね 今はとりかかる時間がありませんので失礼

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (5)HorliXはどのように入手するのか?

HorliXのアイコン – カッコいいね

HorliXの白い天馬のアイコン とてもカッコいいですね さて、一番肝心なことを忘れていました

HorliXはどのように入手するのか? とても簡単です

Macの左上隅の Appleマークから App Storeを選択します そして「検索窓」で HorliXと打ち込みます

そうするとこの様にすぐにヒットしますので、HorliXのアイコンをクリックすれば良いのです あっ、僕は既に10,000円で購入していますので、「開く」という選択ボタンになりますが、あなたの Apple IDでこのソフトを未だ購入しておられない場合には、10,000円のボタンが出てきます 何れにしろ OsiriX MDの二年間ライセンスが 100,000円超と比較するとものすごい安価ですね

ちなみに、隣の DCM Viewerというものがどんなものか良く知りません 開いてみるとこんなでした これは DICOMファイルの色々なことの確認用のソフトであり、いわゆる Viewerとしては動画も見れないものだと思います 胸部レントゲン写真などの静止画精査用のものですね

さて、ここで疑問です 何故  HorliX Dataはログインした個人の /Users/*****/ 配下、つまり ~/ というフォルダの下に無いのでしょうか?

ここからは僕の推測ですので余り信じないで下さいね 見方を変えれば これって、iPadや iPhoneのように MacOSではなく iOSのようにも見えないですか?

そもそも iOSはもともと Unixの派生である OSXという現在の macOSの前身から派生したものです ここらについてはここ とか ここ を読んで下さい 難しい記事ですが、特に後者は秀逸です 流石に Appleが書いた記事ですね

この iOSのファイル構造 この中に /Library/ Container/ というディレクトリがありますが、これって 要するに HorliX Dataが入っているディレクトリですよね

これはこれまで macOSのデータなどは /Application/ というフォルダ (= ディレクトリ)に入ってきたのと比べると随分と異なりますね 何故そうなっているかは知りません しかし、言えることは 確実に iOSに近い、ということです

何でしょうかねえ やはり securityの関係でこうなっているのでしょうねえ

またこの話題はここまでにしておきましょう 真相は Appleしか回答できない筈ですので・・・・

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (4)HorliXに読み込まれた DICOM dataはどうなっているのか?

さてここで疑問があります OsiriXのデータはこれまで「書類」フォルダ つまり Unixの表示であれば ” ~/Documents/”というフォルダに “OsiriX\ Data”という名前で保存されていました

そして HorliXに読み込んでしまえば、この OsiriX\ Dataというフォルダは削除しても大丈夫なのです

あれ? 肝腎のDICOM dataは何処に行ったの? バックアップするにはどのフォルダをコピーすれば良いの? そんな疑問と不安に苛まれませんですか? でも大丈夫安心して下さい 僕が解明しましたのでその情報をここで公開します

でもここから先はターミナルを扱える中級者以上が対象です

ずばり DICOM dataは以下のフォルダに存在します それは、

~/Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data” という名前で

~/Library/Containers/info.phazor.HorliX/Data/Documents/”というフォルダ内に存在します

つまり意外や意外 通常一般人がアクセスする「書類」、「デスクトップ」、「ピクチャ」あるいは「ミュージック」というフォルダには存在しませんです しかも、一般人も時々アクセスする「プリケーション」フォルダにも存在しないのです!!!

どうやってこれが分かったのですか? と疑問に思いませんでしたか? それは自分自身の Unixの知識で解明したのです OsiriXのデータが OsiriX\ Dataというフォルダにあるのであれば、HorliXのデータは HorliX\ Dataというフォルダにあるだろう そのように当たりをつけて検索しました もちろん Unix commandです

$find ~/ -name HorliX\ Data

これでHome folderから検索しましたが出てきません ということはホーム・フォルダには存在しないのですね!!!! 通常個人ファイルはそのユーザーのホームに存在するのですが、そうなっていないのです!!! これは驚愕の事実でした

仕方ないので、検索範囲を拡大したのです

$find / -name HorliX\ Data

このようにして Mac全体から検索かけたのです とても時間のかかる検索であり、ずらずらと大量の結果が出力されますが、その中に先の

find:/Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data

という出力を発見しました 何とこんなフォルダに存在しているのです これは驚きです

ここまでの解明された知識を基としてこの重要なファイル群 (僕の場合、何と 1998年 9月28日のPCI症例データから保持しているのです PCI症例といっても、これまで何万人の治療を行ってきてその中でも印象に残っている症例や症例報告に用いた症例、あるいは外国でのライブで行った症例などの特別な症例だけです 何れにしても、これは僕の人生の一部 何と20年間の僕のカテ人生、といっても本当の僕のカテ人生は、1976年に始まりましたので、40年間余りのカテ人生の半分近い人生 それが詰まっているのです・・・・ 涙 涙 うわーあんっ)をバックアップするにはこのようにします

たとえば外付けHDDの名前を BACKUP2TB とかつけたとするとまずは、この HDDの中に HorliX\ Dataという名前のフォルダを作ります

$ls /Volume/

とこのようにすれば、外付けディスクの名前が分かります この場合、

BACKUP2TB/      Macintosh HD0/     com.apple.TimeMachine.localsnapshots/

にように出力されます これでこの外付けHDDが BACKUP2TBという名前でマウントされていることが確認できますので次にフォルダの作成です

$sudo mkdir /Volume/BAKUP2TB/HorliX\ Data

これでBACKUP2TBディスクの中に HorliX Dataというフォルダが管理者権限でできました でもこれだけではコピーできません 何故ならば権限が与えられていないからです つまり所有者は管理者 rootだからなのです

$sudo chown ***** /Volume/BACKUP2TB/HorliX\ Data/

とすることにより私 つまり *****がこのフォルダの所有者となりました これで初めてバックアップ可能となります その方法は rsyncという Unix commandを使用するのです

$rsync -av --delete /Library/Containers/info.phazor.HorliX/Data/Documents/HorliX Data/ /Volume/BACKUP2TB/Horlix\ Data/

と打ち込むのです これで全データがバック・アップされます また、新たなDICOM dataが HorliXデータベースに読み込まれていくと思いますが、時々上記の rsyn commandを走らせば、新たな DICOM dataが追記されていき、もう HorliXより削除したデータは backupの /Volume/BACKUP2TB/から同様に削除されます 便利ですねえ

どうですか? 少し難しかったですか? 何ならばシェルスクリプト書きましょうか? シェルスクリプトであれば、自動的にできますもんね

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (3)OsiriXのアルバムを読み込む

さて、OsiriXを使用し、たくさんの DICOM dataを収集していれば、膨大な量のデータが SSD内にあることと思います 僕の MacBook Proの場合、なんと 420GB以上存在しました

この膨大な DICOM画像・動画を患者さんの名前や検査日で順番に並んでいるだけではなかなか 後からどの患者さんだっけ? などと分からなくなってしまいますよねっ

もちろんコメント欄に書き込むのは最低必要ですよね このコメント欄に書き込むというのは何をしているかと言えば、実は DICOM dataという主として画像データ + 各種撮影条件などのデータ (これらは全てビット列です)の中に、コメントというテキスト・データを挿入しているのです

このようにコメント欄があります もしもコメント欄が無ければ、例えば「患者氏名」と書かれた欄を右クリックすれば以下のようになりますのでチェックをつけたり外したりして下さい

はい簡単ですね そして現れたコメント欄に自由に説明を書き込んで下さい 僕の場合後で分類しやすいように たとえば CTO(慢性完全閉塞)に対するPCIの場合にはコメント欄に 「Retro RCA-CTO 三本目の中隔枝経由」とかのようにわかり易い説明を書くようにしています

でもこれだけでは患者さんデータが検査日などでソートされた順番に並んでいるだけで、たとえば「CTO retrograde」の全員を見たい、とか、あるいは ▲□病院で何月何日にプロクタしに行った症例の CT data + XA data + Echo dataをわかりやすく入れておく という時に不便です

そんな時に役立つのが OsiriXの「アルバム」という分類機能です 実はこの実態は DICOM dataではありません 単なるテキスト・データであり、SQL databaseで管理されています通常の OsiriXでは一番左のカラムです

OsiriXから HorliXにデータを Importしただけではこのアルバム情報が移行していません これを移行するには以下のようにします まず OsiriX側で

上の画面のように、ファイル -> アルバム -> アルバムを保存 と選択します そうすると以下のようなダイアログが出てきます

これで何処に保存するか この場合には デスクトップに保存します それを指定します ちなみにファイル名はデフォルトで、上の図のように DatabaseAlbums.albums となります ちなみにこのファイルの中身は下の図のようにアルバム情報を記載した xmlフォーマットのテキストファイルです

まあテキストファイルというのは可搬性に優れたフォーマットですから、ほとんど全てのアプリで読み込みことがですますね ちなみに HorliXからは

このように、ファイル -> Albums -> Import albums とすることによりファイル選択ダイアログが出てきますので、先程のファイル DatabaseAlbums.albumsというのを選択すれば、アルバム情報が復活します めでたしめでたし

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (2)いよいよ HorliXに DICOM dataを読み込み

これも以前記載した通りなのです 簡単ですよ 今回は絵付きで紹介しますね

まずは HorliXのメニューから「ファイル」をクリックします そうすると次のサプメニューになりますこのサブメニューから Import を選択します そうすると次のサブサブメニューになります

はいこのサブサブメニューから Import Filesを選択します そうするとファイル選択画面になります

これで僕の場合はこの画面で OsiriX Dataというものを選択しました(「開く」ボタンを押す)

これにより HorliXが OsiriX Dataというフォルダに格納されている全DICOM dataを読み込みます 簡単ですねえ

実はこうして DICOM dataが HorliXに読み込まれれば、HorliXの内部に DICOM dataは全て取り込まれ、もう OsiriX Dataというフォルダのデータは不必要となります もちろん、その後も OsiriXをライセンスが切れるまで使い続けるのであれば、残しておかねばなりませんが、もうライセンス切れそうな場合にはこの段階で OsiriX Dataフォルダは不要となりますので、削除して良いです 削除すれば SSDのスペースが随分と空きますよ ちなみに削除するには OsiriX Dataというフォルダを「ゴミ箱」にドラッグ・ドロップすれば良いのですが、これはあまりにも「素人」っぽくてカッコよくないですよねかっこ良いのはやはりターミナルを使用して

 

$rm -rf ~/Documents/OsiriX\ Data/

というコマンドを打ち込むことですよっ ちなみに、rmというのは「削除する」という Unix commandであり、-rfというのは rmコマンドのオプションで、下の階層までいちいち確認せずに削除するという意味です

~/というのは現在使用中のユーザーの「ホーム・ディレクトリ」を意味し、その中の Documents/ フォルダ(=書類フォルダ)にある Osirix Dataというフォルダを削除せよ と命令しているのです

あっ、念の為 ターミナルで打ち込む時には単なる空白(半角のスペース)にも意味があるので、それをエスケープせねばなりません このためには、 OsiriX\ Data とせねばならないのです ちなみに Macで「\」というバックスラッシュをどのように打ち込むかご存知ですか?

実はキーボードの「¥」というキーと Optionキーを同時に押せばバックスラッシュを打ち込むことができるのです はい得な知識でしたね

Macの高機能DICOM Viewer/Analyzer : HorliXの紹介 (1)はじめに

皆様方 以前より書いていますように、Macで走る高機能DICOM Viewer/Analyzerソフトとして HorliXというものがあります もともと OsiriXの Open Source Softwareから派生した HorliXを folkして日本人が開発しているものです

もとがあの高額(2年間で10万円以上のライセンス料)な DICOM Softwareである OsiriX (オザイリクス と呼ぶらしいですよ)の主要部分を受け継いたものですから、基本的な部分はしっかりとしています それを日本語化し、しかも OsiriXは未だ 32 bits applicationなのですが、完全に 64 bits化したものなのです

難しい話ですが、ほんの数年前まで MacOSは 32 bits OSでしたが、現在では完全に 64 bits化されています もちろん現在の Windows10も 64 bits化されています これが何を意味するかと言えば、アドレス空間がほぼ無限大になったことを意味し、従ってこの森羅万象の世界をほぼ完全に表現できるようになったということなのです ただ、32 bits applicationを 64 bits化するのはそんなに簡単なものではありません C++ compilerでコンパイルし直し、リンカーも変わりますし、色々なことを調整せねばならないのです 確か少し前まで Microsoft Officeも 32 bits applicationだった程なのです

そんな訳で

OsiriXで蓄えた DICOM dataをどのように HorliXに移すのか?

これは以前のブログ記事でも紹介しました 普通に OsiriXを Macにインストールすると、ファインダー上では「書類」と書かれたフォルダの中に”Osirix Data”というフォルダが自動的に作られ、そこの中に全ての DICOM dataが蓄えられます

ここで DICOM dataというのは何かと言えば、まずは .dcmという拡張子のついた撮影ごとの画像データ (この画像データは Huffman Code Compressionという非データ欠損圧縮法によりだいたい 1/2の容量に圧縮されています)、そして .dcmファイルを束ねて一人の患者データとしてまとめている SQLデータベース (open softwareの sqllightというソフトを使用している)、あと色々な細かい情報なのです

もしも あなたが、Mac上で ターミナルという端末ソフトを使用されている中級者以上の方でしたならば

## 以下のコマンドを打ちます $ というのは bashなどの端末の待受文字です

$find ~/ -name OsiriX\ Data

## ここで OsiriX\ Dataというのは 実は画面上では "OsiriX Data"というようにスペースが含まれているのですが、端末ではこれをバックスラッシュ + spaceというふうにエスケープせねばなりません
## 当然ながら findというのは Unix commandの一つでここでは OsiriX Dataという名前のファイルを検索しています
## ここで端末の bashがたくさんの可能性の回答を出しますが 通常はこの回答の中に次のような出力があります

find: /Users/*****/Documents/OsiriX Data/

## はいこれでドキュメント・フォルダ(「書類」のことです)の中に OsiriXの DICOM Dataが蓄えられていることが分かります

ちなみに上記の中で/******/というのは Macを初回立ち上げた時に必ずユーザー名を登録するのですが、その名前であり、その名前がわからなくなれば

$ls -l /Users/

と打ち込めば

Guest/     Shared/    ******/

のように出力されますので同定できますね

我ながら役立つこともあるのですね

2014年にこのブログに uploadした Qtでの DIB class に関する C++のコードに対して それから 4年経ってコメントがありました  Thanks というものです これは外国からのコメントでした

正直この頃は Qtで何とか C++により DICOM Viewerを作ろうとしていたのでしょうね いやあ その頃のことは忘れてしまいました その後、僕は急速に Script言語による Web programmingに傾倒して行き C++なんて忘れてしまいました ああ

でも Internetのつながりとは大きいですね

HorliX日本国内実質的な第一号ユーザーとして – (2)

今 San Juan空港で Houston行きの便を待っています あと少しで出発です この空港には何と Free WiFiが無く、スマホからアクセスしています

さて、少しこのサンファンのことについて書きましょう 何百年か昔、コロンブス達がスペインからカリブ海に押し寄せてきました そしてあっという間に占領し、このサンファンに砦をつくりました 今ではその砦は保存されています 見た目は美しいのですが、実際には何万という人々の命が失われたのでしょう

第一号砦
サンファン砦
サンファン砦

さて HorliXですが、良いですよ OsiriXで溜め込んだ数十GBの DICOM dataを問題無く読み込め、再生できています 一つ気づいた点がありましたが、これは開発者の Air様に問い合わせています ところで Air様が僕が第一号ユーザーであることを公開して下さいました とても光栄で嬉しいことこの上無しです

さてこのプエルトリコには医科系大学が 3つありますが、カテ室もその3つのみです Interventional Cardiologistsは全土で 40名ぐらいしか存在せず、しかもその全員が冠動脈インタベという訳では無いそうです この方たちが集まって今回 Sheraton Hotelで学会が開催されました とても heated discussionが繰り出されるのですが、スペイン語で早口で言うので良く分かりません

Grovas先生とのとっておき写真

僕はこの学会で30分ずつ 2演題の講演をしました それが昨日土曜日のことです そして今朝 日曜日の 4:30AMにホテルを出てこのSan Juan空港で今 6:00AM前 Houston行きの便を待っています 早く日本に戻りたいものです

でも、正直この生涯で Puerto Ricoに行くとは思ってもいませんでした 世界が広がりました

なんにせよ Puerto Ricoはとても良い国です 日本で言えば 丁度「石垣島」という雰囲気でしょうか

カリブ海に面した美しいレストラン

インターネットを通じたつながり

今朝は体調不良 もう歳かな それでも本日 TAVI二件、その後 MitraClip 1件あります まあそろそろ体調も戻り、またTAVIに関しては若手に完全に任せますので良いでしょう 全力を MitraClipに傾けますよ

それはそうと今朝メールを開けると「ぎぎ」としました 僕のこのプログにコメントが投稿されていたのです いやあとても感激しました この方はかなり高度なプログラミング知識と技術をお持ちの医療関係者だと推察します その方が、ご自身で開発されている DICOM Viewerである Horlixにおいて、ある種の DICOM-USフォーマットが読み込みできないために(しかもこれが Philipsなのです: 実際この Philips machineの DICOM-USは変です 当院でも読み込めない事例が発生しています!!)、 DICOMで検索しておられて僕のこのブログにヒットされ、そしてコメントを頂いたのです

とてもとても僕なんて足元にも及びません そんな方からのコメント「ぎぎ」とすると共に感激です 思わずこんな返信してしまいました

ちなみに僕の DICOM Viewer開発苦労話はここにまとめてあります

 

air様

コメント頂きありがとうございます Githubなども見させて頂きました また、OpenDolphin関係のページも見させて頂きました 世の中にはすごい方がおられるものだ、とただただ感心するのみです
私なんかは既に 68歳ともなり、頭脳はどんどん硬くなると共に処理能力が劣る一方です そんな自分でも Z80 assemblerでプログラミングの真似事を始めた20歳台の頃の、わくわくした思い、それを取り戻したくて、かつ謎であった DICOM-XA それに取り組んだのは既に 10年以上の前のことでした
しかし、自分の能力がとても足りず JPEG規格書を読んでもなんのことかさっぱり理解できない状態が続きました 自分の患者さんに引退された工学部教授がおられ、その方の教え子に信号処理を専門にやられている研究員の方がおられたので、その方をご紹介して頂き、直接 JPEG規格書と DICOM規格書から DICOM-XAが JPEG losslessで圧縮されていることを掴み、そのHuffmann Code解読プログラムをなんとか書くことを開始しました それでも何がなんだ最初はさっぱり分からず、随分と苦労して慣れない C++ (VisualStudio)を用いてプログラム書き始めました
最後にはようやく DICOM-XAで動画を Windows上で動かすことに成功しました
それができるともうそれ以上進むのは自分では無理だと達観してしまい、DICOMの世界から離れてしまい、今は Osirixの単なるユーザーになっています
Osirixが高額でありしかもひどいことには、MacBook Proの USB-C端子4つの内2つが自然故障して、修理に出したところ、logic board交換となり、それと共に Osirixのライセンス切れてしまい、またまた 100K円の支払い発生するという理不尽を経験して、Horosともめぐり逢いました
そしてその Horosより派生させ、さらに改良を加えられている Horlixをご紹介頂き感激しています
でも正直、自分でも Webのプログラムを Githubに蓄えたりしていますが、 air様の Horlixに関して、どのように実行ファイルを作成すれば良いのかその手順すら理解できない自分です
開発などでお忙しいでしょうが、どうぞ今後共お時間のある時で結構ですので、ご指導宜しくお願いします

齋藤 滋