RubyROOTとRubyFITSをインストールする

近年のほとんどの研究現場では、プログラミング言語にpythonが使われていると思います。ところが私の周りではTakayuki Yuasa氏やHirokazu Odaka氏といった優秀なRubyのdeveloperがいらっしゃったお陰で、日常的な解析はすべてrubyで行っています。そこで必要となるのが、CERNが開発している解析フレームワークROOTと、天文関係で利用されるファイル形式FITS (flexible image transport system) をRubyで使用するためのライブラリです。それぞれRubyROOTとRubyFITSが用意されていますが、このページでその方法を説明したいと思います。

以下ではmacOS Mojave 10.14.5で、新品状態からのインストールを仮定しています。適宜、飛ばして読んでください。またlinuxにもインストール可能ですので、また機会があればそちらで試したときの結果も報告します。

0. Macの準備
まっさらな状態のMacにはいくつか入れておくべきものがありますので、紹介します。

・Xcode
まずはAppStoreでこのソフトウェアを入れておきましょう。

・Homebrew
Macに様々なソフトウェアをパッケージでインストールできる便利なツールです。ターミナルで

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

と入力するとインストールできます。

・cmake
ROOTのインストール時に必要です。

brew install cmake

でインストールしましょう。

・wget
オンラインでデータをダウンロードするツールです。

brew install wget

でインストールしましょう。

1. ROOTのインストール
・python
pythonはmacOSにデフォルトで入っていますが、バージョン管理をしないとROOTのインストール時にこけることになりますので、pyenvを使ってインストールし直すことをおすすめします。

brew install pyenv

で簡単にpyenvを導入できます。実際に使用できるようにするために

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"

の2行を
~/.bash_profile
に追記しましょう。このファイルがなければ作成します。

source ~/.bash_profile

とすることで、pyenvが使用できます。このコマンドは2回目以降や、新しくターミナルのウィンドウを開いたときには実行する必要はありません。

pyenv install --list

とすると、現在インストール可能なpythonのバージョンを確認することができます。僕は3.7.0をインストールしました。

pyenv install 3.7.0
pyenv global 3.7.0

のコマンドを実行すると、python 3.7.0がインストールされます。実際に

python --version

とコマンドを打つと、現在使用しているpythonのバージョンが表示されます。

・ruby
同様にrubyもrbenvでバージョン管理します。ここでは2.6.3をインストールするとして

brew install rbenv
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
rbenv install 2.6.3
rbenv global 2.6.3
ruby --version

とここまでコマンドを入力して、rubyのバージョンが意図したものになっていればOKです。

・ROOT
ようやくROOTのインストールまで来ました。macOSなどではコンパイルしなくて良いバイナリーが公開されていますが、ソースからインストールしましょう。ここではやや古いですがROOT 6.10/06をインストールします。

mkdir -p ~/work/install/root
cd ~/work/install/root
wget https://root.cern.ch/download/root_v6.10.06.source.tar.gz
tar xzvf root_v6.10.06.source.tar.gz
mkdir build
cd build
cmake ../root-6.10.06 -Dminuit2=ON
make -j4
echo '. $HOME/work/install/root/build/bin/thisroot.sh' >> ~/.bash_profile
source ~/.bash_profile

これでROOTがインストールされるはずです。cmakeのときに-Dminuit2=ONのオプションを指定しておかないと、RobuROOTのインストールでコケます。

2. RubyROOTのインストール
ようやく本題まで来ました。ただここから先はGithubで公開されている手順に従えばよいはずです。
https://github.com/odakahirokazu/RubyROOT

以下のコマンドでRubyROOTをインストールします。

brew install swig
mkdir -p ~/git
cd ~/git
git clone git://github.com/odakahirokazu/RubyROOT.git
mkdir RubyROOT-build
cd RubyROOT-build
cmake ../RubyROOT
make -j4
make install
echo 'export RUBYLIB=$HOME/lib/ruby:$RUBYLIB' >> ~/.bash_profile
source ~/.bash_profile

3. RubyFITS
最後にRubyFITSです。
https://github.com/yuasatakayuki/RubyFits

以下のコマンドを実行します。

brew tap yuasatakayuki/hxisgd
brew install sfitsio
cd ~/git
git clone https://github.com/yuasatakayuki/RubyFits.git
cd RubyFits/swig
mkdir build
cd build
cmake ..
make install

これで無事にRubyで研究が進められる体制が整ったはずです。うまく動いているかテストしたい方はtest.rbというファイルを作って

#/usr/bin/env ruby
require "RubyROOT"
require "RubyFits"
include Root
include RootApp
include Fits

として

ruby test.rb

と実行してエラーが出なければOKです。ではよいRubyライフを。

Time Machineでの移行作業

これまで使ってきたMacBook Pro Early 2015もやや古くなり、D論を執筆するのに心許なくなってきたため、PCを買い替えました。MacBook Proの13インチを買おうと思っていたのですが、諸般の事情でMacBook Air 2018を購入。MacBookの登場で正直なところ立ち位置が微妙になってしまったAirだと思っていたのですが、微妙になったのはむしろMacBook Proの13インチだったかなと思い直しました。TouchbarなしタイプのMacBook ProとAir 2018ではCPUの計算力の差はほとんどないので、軽くて省電力で1万円ほど安いAirのほうが使い勝手が良いです。デザインも、以前のケーキカッターのようなデザインは実はあまり好きではなかったのですが、Air 2018はそれほどでもなく、純粋にMacBook Proから違和感なく使えています。

さて移行作業はTime Machineを使って行いました。どこまで自動で移行してくれるのかよくわからなかったのですが、ほとんどのことは設定いらずに新しいPCへ引き継げました。移行作業が面倒でないというのはよいですね。とくにRootやXSPECなどの解析ソフトウェアも何の設定変更もいらずにそのまま使えています。

少しだけ追加で作業が必要だったことを挙げておきます。
・Webのクライアント証明書はセキュリティの関係なのか、新しいPCにはインストールされていませんでした。これは単純に再インストールすればOK。
・SSHでサーバーに接続する際は、かならず公開鍵認証を使用するようにしています。ですが、新しいPCではそのままログインすることができませんでした。以前のPCでは公開鍵認証にDSAを用いていたのですが、Mojaveで搭載されているOpenSSHではもはやDSAは利用できず、RSAのみとなっているようです。ということでRSAの鍵を作成して設定したところ、無事に接続できました。
・メールとGoogleアカウントについては、初回にパスワード入力が求められます。
これ以外の設定はすべて引き継がれました。逆に言えばTime Machineバックアップのディスクをなくすと大変な情報流出になってしまうため、物理的な管理が重要ですね。

PASJのフォーマットで作成した論文をarXivにアップロードする

またもやarXivにアップロードする話です。前回のエントリーで、arXivにアップロードする際の画像パッケージをdvipdfmxからpdftexに変更しないと、arXiv上のプレビューで画像が表示されないという話をしました。今回は天文の論文誌PASJで同様のことを行う記事です。

日本天文学会が発行する欧文研究報告誌Publications of the Astronomical Society of Japan (PASJ) は、天文学者や天文学を専攻する大学院生の多くが投稿する英語の論文雑誌です (残念ながら私はまだ投稿したことがありませんが)。PASJのLaTeXフォーマットファイルではdvipsが使われていて、このままarXivに投稿しても図が表示されません。PASJでは画像パッケージをクラスファイルで定義しているので、arXivで通るようにするにはコツが必要です。

PASJのLaTeXフォーマットに含まれるpasj01.clsを開くと4222行目あたりに
\RequirePackage[dvips]{graphicx,color}
というのが記述されています。もし周辺に出てこなかったらdvipsで検索をかけてください。このdvipsをpdftexに変更するとarXivでも問題なく図が表示されるようになります。ただしdvipsではEPSやPSファイルの埋め込みも対応していましたが、pdftexではそれらは非対応になります。したがってあらかじめ図をPDFに変換しておく必要があります。

またPASJの原稿をarXivに投稿する際には、コマンドの衝突を避けるために以下の手順を行うことが推奨されていますので、参考にしてください。
Astro-Phに投稿する際の注意

REVTeXで書いた論文をarXivへ投稿する

開設以来、何も更新しないままフランスから帰国してしまいました。レンタルしてるサーバはwordpressの管理画面に国外からアクセスできないため、VPN接続で一旦、日本国内のサーバにアクセスする必要があります。ところが日ごろ勤務していた研究所のeduroamではVPN接続が拒否されてしまいます。自宅では更新する気が起きないまま、半年経ってしまったのでした。

今回はarXivへ投稿した話です。2018年9月にアルメニアで開催された国際会議Thunderstorms and Elementary Particle Acceleration (TEPA) 2018に参加してきました。アルメニア・ロシアの研究者を中心に各国から総勢40名の研究者が集まって議論するこじんまりとした会議で、大型会議ではなかなかできないディープな議論ができた良い機会でした。

その会議のプロシーディングスを準備していました。フォーマットの指定がなかったので、見栄えが良いPhysical Review系 (Physical Review Letters: PRL は物理学界では最も有名な論文誌ですね) のテンプレートを使用しました。このTeXテンプレートはREVTeXというパッケージが使われています。通常のTeXのコンパイラ (私の環境ではMacTeX+TeXShop) でもLaTeXと同様にコンパイルすることができるようです、

TEPAの主催者へプロシーディングスを投稿したので、arXivにアップロードしようとしたのですが、論文中の図が表示されないというトラブルが発生しました。調べてみるとpdfdvimxが悪さをしているようで、次の記事が参考になりました。

http://www.logos.t.u-tokyo.ac.jp/~hassy/deep_learning/arxiv/

画像を挿入するパッケージで
\usepackage[dvipdfmx]{graphicx}
を使う代わりに
\usepackage[pdftex]{graphicx}
を指定するとarXiv投稿時にコンパイルされたファイルで、正常に画像が表示されました。

雷雲ガンマ線のプロジェクトチームでは、以前からLaTeXの共同編集をするためにShareLaTeX (現在はOverleafに統合されました) を使用していましたが、こちらもREVTeXのPhysical Reviewフォーマットでは図が表示されないというトラブルが有りました。この場合も症状はarXiv投稿時と全く同じだったので、上記の対処法でうまくいくかもしれません。

arXivのポリシーとしてTeXソースでアップロードしてほしいというのはまあ理解できます。ですが、コンパイルの際にエラーが出たり、生成物が意図したものにならず、それで研究者の数時間を潰してしまうのはなんとももったいない話です。

アップロードしたプロシーディングスは、公開され次第、メインページに追記します。

ブログ始めます

フランスに来るまでに、例えばビザの取得方法や銀行口座の開設など、他の方々のライフログに助けられることが多々ありました。このブログでも備忘録とともに、そうした他の方々への道標になるような内容も書けていけたらと思っています。他は研究のことや日記などの予定です。どうぞよろしくお願いします。