ファイル/ディレクトリ名に空白が入っているファイル/ディレクトリの空白を下線_に置換するワンライナー

ある方とやりとりしているなかで、Linuxにおいて、ファイル名に空白が入っているときにその空白を_に変換するスクリプトを紹介していただきました。

そういうのを知っているのは大事だなと思いまして、シンプルな方法がないかなと考えました。

そうしたら、renameを使えば比較的簡単に達成できることに気づきました。

以下は、カレントディレクトリ内にあるファイル/サブディレクトリ名に空白が入っているものを探し出し、空白を_に変換します。

$ find . -name "* *" | rename 's/ /_/g'

これを使えば空白の問題からおさらばできますね。

ちなみにrenameはsedと同じフォーマットでファイル名の一部を変更できます。

‘s/変換前の文字列/変換後の文字列/g’ で最後のgがあるとそのファイル名で合致するパターンすべてに対して変換してくれます。gがないと最初のパターンだけで置換を行います。

いろいろ教えてくれる方がいるのはとてもありがたいですね。

 

FSLViewで画像が正しい向きで表示されない時

FSLViewで画像を表示すると、思ったような向きで表示されないときがあります。
下に例を示します。

fslview01

ここでは、上にある水平断、冠状断が角度が変になってしまっています。

しかし、よくみると、FSLViewは画像の前後をきちんと認識しています。
画像のまわりにあるアルファベットはそれぞれ

A: anterior
P: posterior
L: left
R: right
I: inferior
S: superior

を意味しますが、正しくなっています。

それでは、「正しく」表示するにはどうしたらよいでしょうか。

fslにはfslreorient2stdというコマンドがあります。

元画像のファイル名をv001、向きを変えた画像をv001_stdとします。
次のように端末でタイプします。

$ fslreorient2std v001 v001_std

この結果作成されるv001_std.nii.gzをFSLで表示すると下のようになります。

fslview02

すっきりする表示の仕方ですね。

FSLViewでは、MRIのスキャナで撮影した通りに画像を表示するとのことです。
その向きが左下に表示されます。

例で使った画像は矢状断の画像ですので、左下が矢状断となったわけです。

詳しい説明はFSL−Wikiにあります。下記のリンクが参考になります。


http://fsl.fmrib.ox.ac.uk/fsl/fslwiki/Orientation Explained

SPMで画像の中心を原点に設定するスクリプト

岩手医大の山下典生先生スクリプト第2弾です。
NIfTI画像を扱っていると、ときどき画像の原点(Origin)が変なところに設定されているケースに遭遇することがあります。このスクリプトは、SPMで、NIfTI画像の原点を、画像の中心に設定するスクリプトです。多くの画像の原点が変なところになっているような時に役立つと思います。
使い方は簡単です。

  1. setorigin_center.mをダウンロード(右クリックで名前をつけてリンク先を保存)し、SPMのフォルダに入れます。
  2. Matlabのコマンドウィンドウから、以下のようにタイプします。
  3. >>setorigin_center

  4. 画像選択のウィンドウが開きますので、原点を画像の中心にセットしたい画像を選択してください。

これだけです。
実際に手元にあったデータでやってみました。
左側が設定前です。原点がかなり後ろに設定されています。
右側がスクリプトを走らせた後です。この場合は、幸運にも画像の中心がちょうどACと合致しています。ここから微調整でAC-PCを設定した方がずっと楽ですよね。

setorigin_screenshot

How to enable users to automount CD-ROM or USB in XFCE

I’m trying to install XFCE with ubuntu minimal iso (mini.iso).

With default settings, users are not able to mount CD-ROM or USB.

In order to change this, edit the following;

/usr/share/polkit-1/actions/org.freedesktop.udisks.policy

In the section “Mount a device”, change “allowed_any” and “allow_inactive” to “yes”.

<action id="org.freedesktop.udisks.filesystem-mount"><br /> <description>Mount a device</description><br /> <defaults><br /> <allow_any><strong>yes</allow_any><br /> <allow_inactive>yes</allow_inactive><br /> <allow_active>yes</allow_active><br /> </defaults><br /> </action>

XubuntuでPlayOnLinux経由でMS Office 2010をインストールし、日本語入力を問題なくする方法

Ubuntuにしてたいていは満足なのですが、職場で利用となると足かせになるのがOfficeの問題です。LibreOfficeでたいていは間に合うのですが、Wordの校閲機能やPowerpointのレイアウトの問題などはいかんともしがたい問題です。これは少しずつストレスになっていきます。

Wine経由でMS Office 2010をインストールできると聞いていましたが、試してみてもエラーが多い状態でした。

その後、調べていたら、PlayOnLinuxを使うとあっさりいけるよという書き込みを複数見ました。やってみたらすんなりできました。

しかし、日本語を入力すると、入力しているのに消えてしまうという問題がありました。これもいろいろ調べて、対処をしてみたのですが、うまく動かず…。
でも、よく考えてみたら、PlayOnLinux経由なのだから、設定ファイルが別なのではないか?と思ったところ、それがあたりでした。

以下に方法をまとめます。

  1. ベースのOS
  2. Xubuntu 12.04です。

  3. MS Officeのバージョン
  4. Office 2010の32bitを準備します。Office 2013は動作しません。また、Office 2010の64bit版も動作しません。

  5. Wineのインストール
  6. PlayOnLinuxはWineのフロントエンドなのでWineが必要です。オフィシャルのWineはバージョンが若干古いので、私は下記でWine-teamのPPAからWineをインストールしました。これでwine 1.6がインストールされます。これを書いている時点での最新版は1.7ですが、1.6で一連の流れに問題はありませんでした。

    sudo add-apt-repository ppa:ubuntu-wine/ppa
    sudo apt-get update
    sudo apt-get install wine

  7. PlayOnLinuxのインストール
  8. PlayOnLinux(POL)もUbuntuのデフォルト(4.0.14)では、Office 2010のインストールに対応していません。なので、POLのサイトから、最新版(4.2.2)をダウンロードします。
    詳細はhttp://www.playonlinux.com/en/download.htmlに記載してありますが、とりあえず、12.04の場合は下記のとおりです。

    wget -q "http://deb.playonlinux.com/public.gpg" -O- | sudo apt-key add -
    sudo wget http://deb.playonlinux.com/playonlinux_precise.list -O /etc/apt/sources.list.d/playonlinux.list
    sudo apt-get update
    sudo apt-get install playonlinux

  9. PlayOnLinuxの起動
  10. メニューのゲーム→PlayOnLinuxでPlayOnLinuxが起動します。
    そこで、「インストール」をクリックします。

    そうすると、下図のようになりますので、SearchからOffice 2010と入れると候補が出てきますので、選択し、右下の「インストール」をクリックします。

    POL_install01

    その後は私は既にインストールしてしまったので、スクリーンショットは示せませんが、指示された通りに従っていけば、必要なファイルなどを全部ダウンロードしてくれます。なお、インストールする場所は変更するとうまくいかないということですので、とりあえずデフォルトのまま入れてしまうのが無難なようです。

    ひと通り終わると、以下のようになります。

    POL_install02

    これでインストールは完了です。これまでの苦労は何だったんだろうと思うぐらい簡単でした。

  11. 日本語入力の設定
  12. しかし、このままだと、日本語入力の問題があります。様々なサイトが、

    ~/.wine/user.regに

    [Software\\Wine\\X11 Driver]
    “Inputstyle”=”offthespot”

    のように記載しなさい

    と書いてあります。しかし、POLを使用した場合は、それではうまくいきません。

    Officeの日本語設定は、ホームディレクトリの下の以下の場所にあります。

    ~/.PlayOnLinux/wineprefix/Office2010/user.reg

    したがって、適当なエディタでこのファイルを開けます。今はLeafpadにしましょう。(なんでもいいですが)

    leafpad ~/.PlayOnLinux/wineprefix/Office2010/user.reg

    そして、このファイルの一番下に以下の記述を追加します。

    [Software\\Wine\\X11 Driver]
    "InputStyle"="root"

    (環境によってはバックスラッシュは¥に見えると思います)

    その後、その後、POLを再起動すると、ファイルの設定を読み込み直します。

    これで日本語をうつと、インライン変換まではいかないのですが、日本語変換が画面の左下の方にあらわれ、確定した文字がきちんと表示されます。

これでさらによい環境ができあがりました。

SPM8でSPECT/PET画像を一括で解剖学的標準化するスクリプト

SPMでSPECT画像やPET画像を標準化するとき、Normalise (Est & Write)から行います。しかし、この時、Source ImageとImages to Writeにいちいち画像ファイルを指定せねばならず、苦痛を伴います。

私の友人の岩手医大の山下典生先生が、この問題を解決するスクリプトを書いて下さいました。

使い方はいたって簡単です。

  1. fy_normalise.mをダウンロード(右クリックで名前をつけてリンク先を保存)し、SPMのフォルダの中に保存します。
  2. Matlabから以下のようにタイプします。
  3. fy_normalise
    
  4. すると画像を選択するダイアログが出現しますので、標準化したいファイルを選択します。
  5. 次に、ディレクトリを聞かれますので、設定ファイルを保存したいディレクトリを指定します。
  6. そうすると、保存先にspm_normalise_20140117_1621112.matのようなファイルが保存されます。
  7. 次に、SPMのBatchを起動し、ファイルを開くから先ほど保存したmatファイルをしてします。
  8. そうすると、Subjectが指定された状態になります。
  9. パラメータを確認し、大丈夫であることを確認したら、実行すれば解剖学的標準化がはじまります。

非常に便利なので、関心のある方はどうぞお使いください。なお、fy_normalise(”,1)とすると、一度に標準化を走らせることもできますが、設定ミスで後悔しないように、設定を確認してから走らせることをお勧めします。

山下先生、ありがとうございました!

Make battery-life of Ubuntu 12.04 longer on ThinkPad T430s

It’s been months since I swithed completely to Xubuntu 12.04 from MS Windows on my ThinkPad T430s. Basically I’m satisfied with Xubuntu 12.04, but there are some points which need tweaks. They are…

  • Battery Life
  • Somehow battery on ThinkPad T430s lasts only around 2hours on Xubuntu, which is much shorter than Windows.

  • Projector
  • XFCE is not so good at dealing with projectors or external monitors. I’m still struggling with this matter, so I don’t make any comments now.

As of battery life, I found a very good tool, which is TLP.

By installing TLP, the battery life gets longer by one hour without any modification, which is great.

You can find how to install TLP here.

Update of Lin4Neuro (28 Dec 2013)

Lin4Neuro was updated. Some changes are…

  • Kernel was updated to 3.5.0-44-generic.
  • FSL was updated to 5.0.6.
  • Ginkgo CADx was updated to 3.6.0.
  • MINC toolkit was updated to 1.0.01
  • MITK was updated to 2013.12.00.
  • Slicer was updated to 4.3.1.
  • LibreOffice was updated to 4.1.4.2

You can download the latest Lin4Neuro from here.

Now I’m focusing on the 64bit version of Lin4Neuro, so I suspend updating 32bit version. One of the task is to make the UEFI-compatible L4N. I hope it will be possible to boot from UEFI on the next update.

JBL Flip on Xubuntu 12.04

Xubuntu 12.04からJBL FlipをBluetoothで接続しようとしたところ、すぐにはつながりませんでした。
ググったところ、このサイトが参考になりました。

pulseaudio-module-bluetoothがキモでした。

sudo apt-get install pulseaudio-module-bluetooth

これでPulseaudioの設定で音がきちんと出るようになりました。

VBM8の前処理のベンチマーク

VBMの前処理にはどのくらいの時間がかかりますか?という質問を受けましたので、様々なマシンで計測してみました。

3人の3D-T1 MRI画像(ボクセルサイズ 1x1x1mm)をVBM8でDARTELでノーマライズしています。
前処理の設定をvbm8_preproc.matという名前で保存して、以下のベンチマークスクリプトを用意しました。とても単純なMATLABのスクリプトで、処理の前後にtic, tocというコマンドを入れることで前処理にかかった時間を測定するというものです。

%vbm8_benchmark.m
tic
spm('defaults','pet');
spm_jobman('initcfg');
load vbm8_preproc.mat;
spm_jobman('run',matlabbatch);
toc

その結果は、以下のようになりました。

Machine CPU Core Thread Memory OS Matlab Processed time
Workstation BTO AMD Opteron Processor 2425HE x 2 12 12 24GB Xubuntu 12.04 R2013b 74m31s
Desktop BTO Core i7-960 3.2GHz 4 8 24GB Xubuntu 12.04 R2011b 34m47s
Desktop BTO Core i7-960 3.2GHz 4 8 24GB Xubuntu 12.04 R2013b 33m20s
Mac Book Pro (Late 2011) Core i7-2640M 2.8GHz 2 4 8GB Mac OSX 10.9 R2011b 30m29s
Thinkpad T430s Core i7-3520M 2.9GHz 2 4 16GB Windows 7 R2013a 35m0s
Thinkpad T430s Core i7-3520M 2.9GHz 2 4 16GB Xubuntu 12.04 R2013b 29m12s
Desktop BTO Core i7-3930K 3.2GHz 6 12 32GB Xubuntu 12.04 R2013b 26m52s

この結果をまとめると、以下のようになります。

  • CPUが一番影響します。新しいCPU、かつ1コアあたりの性能が高いCPUだとよい結果となります。
  • これはSPM全体に言えることですが、マルチコアは効果はたいしてありません。逆に言えば、SPMを複数立ち上げて処理させることで処理時間を短縮できる可能性があります。
  • メモリは8GB以上あれば、さほど変わりありません。
  • WindowsとLinuxを比べるとLinuxに軍配があがります。
  • Matlabもバージョンが最新の方が処理速度が改善されているようです。

ということで、SPM-VBMという観点からでは、1コアあたりの周波数ができるだけ速いCPUを入手することをお勧めします。

Thinkpad T430sでUbuntu 12.04ファミリーがフリーズする時

Thinkpad T430sにXubuntu 12.04を入れました。インストール自体は何の問題もなかったのですが、入れてから1日の間に10回以上システムがフリーズしました。マウスもキーボードも何の操作も受け付けなくなってしまうのです。

これでは、信頼できないマシンになってしまいます…。

いろいろ調べたところ、カーネルを3.4にアップデートしたところ、問題が解決したという記事をみつけました。

実際にやってみました。

  1. http://kernel.ubuntu.com/~kernel-ppa/mainline/v3.4-precise/にアクセスします。
  2. 64bitの場合ここから3つのファイルをダウンロードします。
    • linux-headers-3.4.0-030400-generic_3.4.0-030400.201205210521_amd64.deb
    • linux-headers-3.4.0-030400_3.4.0-030400.201205210521_all.deb
    • linux-image-3.4.0-030400-generic_3.4.0-030400.201205210521_amd64.deb

    つまり、後ろにamd64.debとあるものとall.debとあるものです。32bitの場合でしたらi386.debとall.debになります。

  3. ダウンロードしたあとで、次のコマンドでカーネルをインストールします。

    sudo dpkg -i linux-*

  4. カーネルがインストールされたあと、古いカーネルを削除します。そのためには、apt-get autoremoveがよいと思います。
    sudo apt-get update
    sudo apt-get upgrade
    sudo apt-get autoremove
  5. マシンを再起動します。
  6. ターミナルを立ち上げ、次のようにタイプします。

    uname -r

    これで3.4.0-030400-genericと表示されれば新しいカーネルになったことを確認できます。

こうしたところ、私のThinkpad T430sは全くフリーズしなくなりました。カーネルの問題だったということですね。これで安心して解析ができます。

Ubuntuのキーボードセッティング

Ubuntuではキーボードのレイアウトを簡単に変えることはできますが、「システムデフォルト」はコマンドラインでしか変えられないようです。

keyboard

変えたい時は以下をタイプすれば大丈夫です。

$ sudo dpkg-reconfigure keyboard-configuration

ちなみに、私はThinkapd 430sの英語キーボードを使っているので、Generic 101に変更しました。

TeX Live 2012 on Ubuntu 12.04

Windows 8.1を試しに使ってみたら、あまりにも不適応を起こしたので、この際、思い切ってメイン環境をLinuxに切り替えることにしました。

OSはXubuntu 12.04ベースのLin4Neuroです。自分が使いやすいようにカスタマイズしているので、一番自分にぴったりあっています。
Latexに関しては、TeX Live 2012を入れたいと思っていたのですが、検索したら、こちらのサイトに非常にわかりやすく解説されていました。やるべきことは下記のとおりです。

$ sudo apt-add-repository ppa:texlive-backports/ppa
$ sudo apt-get update; sudo apt-get upgrade; sudo apt-get install texlive-lang-cjk

こんなに簡単にできるのは感動ものです。

Ubuntu 12.04でLibreOfficeを3.xから4.xにアップグレードする方法

Ubuntu 12.04LTSを利用していると、LibreOfiiceは3.xのままです。
しかし、LibreOfficeは4.xにアップグレードされ、互換性なども高まっているようです。
以下の方法で、簡単にLibreOfficeを3.xから4.xにアップグレードできます。

sudo add-apt-repository ppa:libreoffice/ppa
sudo apt-get update
sudo apt-get dist-upgrade

ここでポイントは、apt-get updateの後にapt-get dist-upgradeを行うことです。

apt-get upgradeとapt-get dist-upgradeの違いは、man apt-getに以下の記載があります。

upgrade
upgrade は、現在システムにインストールされている全パッケージの最新バージョンを、/etc/apt/sources.list に列挙した取得元からインストールするのに使用します。現在インストール中のパッケージに新しいバージョンがあれば更新しますが、いかなる時も現在インストール中のパッケージの削除は行いません。対象のパッケージが、他のパッケージのインストール状態を変更せずに更新できない場合は、現在のバージョンのままとなります。最初に update を実行しておき、apt-get にパッケージの新しいバージョンがあることを知らせる必要があります。

dist-upgrade
dist-upgrade は、upgrade の機能に加え、新バージョンのパッケージに対する依存関係の変更を知的に操作します。apt-get は「洗練された」競合解決システムを持ち、必要とあらば比較的重要でないパッケージを犠牲にして、最重要パッケージの更新を試みます。そのため dist-upgradeは、いくつかのパッケージを削除する可能性があります。/etc/apt/sources.list ファイルには、必要なパッケージファイルを検索する場所のリストが含まれています。

upgradeは全く削除されることなく、dist-upgradeは必要あらばファイルを削除する可能性があるわけですね。今回、LibreOfficeの3.xから4.xへのアップグレードには、いくつかのファイルが削除される必要もあるので、dist-upgradeを利用することとなります。

何はともあれ、この3つのコマンドで、LibreOfficeを3.xから4.xにアップグレードできます。

Non-stationary correction for VBM on SPM8

Below is an excerpt from SPM-ML

(https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=SPM;72ea5d13.1109)

There is an option for the newest SPM8 releases (>=4010), which enables non-stationarity
correction on the cluster level. Please set in spm_defaults.m:
defaults.stats.rft.nonstat = 1;

However, this option will result in a much longer calculation if you print the results table.
This is maybe also the reason that this option is not set as default.

SPMで複数の群の比較を行いたい時のDesign Matrix

SPM-MLに勉強になる話題が流れていたので、共有します。

出典はこちら。
https://www.jiscmail.ac.uk/cgi-bin/webadmin?A2=SPM;a65dd354.1307

コントロールAと疾患B、疾患Cという3群がある時、Design Matrixに全部を入れてしまった方がいいのか、
もしくは、コントロールと疾患A、コントロールと疾患Bというように、別々にDesign Matrixを作った方がいいのかという質問です。

これに対し、Cyril Pernetが非常にわかりやすいたとえを使って説明をしています。
ただ、少しだけtypoがあったのでそこを補足して説明します。

以下はMatlabを実際に動かしてみながらやってみるといいでしょう。

非常にわかりやすくするために、各群3人だとします。
そして、あるボクセルのデータが以下のようになっているとします。

>> A=[9; 10; 11];
>> B=[19; 20; 21];
>> C=[29; 30; 31];

3群を全部ひとつのモデルに入れることにしましょう。
この時、GLMで考えると、Yはデータ行列になりますので、以下のようになります。

>> Y=[A; B; C]

Y =
9
10
11
19
20
21
29
30
31

この時、Design Matrixは次のようにあらわされます。(今はわかりやすく共変量はすべて1としています。)

>> X=[kron(eye(3), ones(3,1)) ones(9,1)]

X =
1 0 0 1
1 0 0 1
1 0 0 1
0 1 0 1
0 1 0 1
0 1 0 1
0 0 1 1
0 0 1 1
0 0 1 1

GLMでは、Y=XB+Eであらわされます。
そして、Bを求めたい時は、Matlabで以下のコマンドを叩くことで簡単に求まります。
ただ、今、上でBという変数を使ってしまっているので、わかりやすくBETAとします。

>> BETA=pinv(X)*Y

そうすると、Bは以下のように表示されます。

BETA =
-5.0000
5.0000
15.0000
15.0000

今、BETAは上からAの平均値、Bの平均値、Cの平均値、そして定数となります。

なので、AとBの差の絶対値は10となりますし、AとCの差の絶対値は20となります。

それでは、次にAとBの2群をモデルしてみましょう。

今の場合、Yは以下のようになります。

>> Y=[A;B]

Y =
9
10
11
19
20
21

このときのDesign Matrixは以下のようになります。

>> X = [kron(eye(2), ones(3,1)) ones(6,1)]

X =
1 0 1
1 0 1
1 0 1
0 1 1
0 1 1
0 1 1

同じようにBETAを求めましょう。

>> BETA=pinv(X)*Y

BETA =
-0.0000
10.0000
10.0000

今の場合、BETAは上からAの平均値、Bの平均値、定数となります。

Aの平均値とBの平均値の差の絶対値は10となります。上のモデルと同じです。

では、AとCの場合はどうでしょうか。

>> Y=[A;C]

Y =
9
10
11
29
30
31

Xは同じものが使えますので、BETAを求めます。

>> BETA=pinv(X)*Y

BETA =
-3.3333
16.6667
13.3333

今の場合、BETAは上からAの平均値、Cの平均値、定数となりますので、
Aの平均値とCの平均値の差の絶対値は(約ではありますが)20となります。

つまり、このような場合、Design Matrixを複数作るよりも、1つのDesign matrixを作ってしまった方がエレガントだということになります。

今までいつも迷っていたことだったので、すっきりしました。

VBMの観点からのSPMの理解(一般線型モデルの理解)

先日、包括脳MRIチュートリアルで、「VBMの観点からのSPMの理解」なる話をさせていただきました。
VBMに限らず、SPMで用いられる一般線形モデル(GLM)の基本をまとめてみました。
SPMユーザには多少はお役に立てる内容かと思いますので、講義の配布資料を公開させていただきます。

VBMの観点からのSPMの理解の配布資料をダウンロード

LaTeXで各章の最後に引用文献をいれる方法

引用文献は普通は最後に記載することが多いですが、時に章末に掲載したいときがあります。
しかし、普通に、\begin{thebibliography}とすると、見出しの大きさが章の大きさと同じになってしまってかっこわるくなります。
これを解決する方法を見つけました。

まず、chapterbib.styを入手します。
私はここから入手しました。

そして、これがポイントなのですが、jbookやjreportなどの場合に、章末に1セクションとして引用文献を掲載したい場合は、

プリアンプルに

\usepackage[sectionbib]{chapterbib}

と記載します。

また、jbookやjreportだとthebibliographyはデフォルトでは、「関連図書」となってしまいます。
「引用文献」としたい場合は、プリアンブルに

\renewcommand{\bibname}{引用文献}

と記載します。

これで、引用文献が各章末にきちんと表示されるようになります。
[sectionbib]を見つけるまでに相当時間がかかってしまいましたので、書いておきます。

Script to change images to 300dpi TIFF format

When we prepare research paper, many journals require the resolution of images to be 300dpi.
Below is the script to change various image files to 300dpi TIFF format.

#!/bin/sh
#A script which converts various image file formats into 300 dpi TIFF format.
#Usage: dpi300tiff.sh filename
#Wild card can be used.

if [ $# = 0 ]
then
echo "Please specify the files you want to convert!"
echo "Usage: dpi300tiff.sh filename"
exit 1
fi

for image in "$@"
do
if [ -f $image ]
then
convert -units PixelsPerInch $image -density 300 `echo $image | sed 's/\..*$/.tiff/'`
else
echo "$image: No such file"
fi
done