Hatena::ブログ(Diary)

にいくらの日記

2015-07-24

ROOT Error: clang: error: no such file or directory: 'cl_kernels'

最近になってROOTのバージョンを6にしてから、いろいろと仕様が変わって戸惑ってる。今まで使っていたマクロが動かなかったりで混乱中。そんななか、とあるマクロをロード(.L macro.C++)しようとしたら

clang: error: no such file or directory: 'cl_kernels'

といったエラーがでた。OSXのYosemiteで、ROOT-6.03.04を使っていた時の話。よくわからないけど、ROOTのバージョンを6.04.02にしたらなくなった。最近修正されたバグらしい。

2015-05-13

ROOT v6のインストール (X11編)

需要があるのかわからないけど、MacOSX上でCocoaを使わずにROOTをインストールしたらちょっと苦戦したのでメモを残しておく。自分のラップトップで使用する分にはCocoaで問題ないんだけど、サーバーとして使っているマシンにはX11も用意しておかないとWindowsやLinuxのユーザが困るので。

あらかじめ必要なパッケージをインストールしておく。本当に以下のパッケージで必要十分なのかはよくわかってない。僕はHomebrewを使っている。

brew install ftgl freetype glew

configureとmake。

./configure --disable-cocoa --enable-builtin-freetype --enable-builtin-glew

これで、とりあえず動く。でも、TBrowserなどを立ち上げるとエラーで動かなくなる(ことがある)。その場合は、以下を参考にもう少し頑張る。

https://root.cern.ch/phpBB3/viewtopic.php?f=3&t=17490

1. configure Root (from fresh 5-34-18 sources)

./configure --enable-roofit --enable-table --enable-opengl --disable-cocoa --enable-builtin-freetype

2. make Root. This makes the version that suffers from the conflict.

make -j4

3. I had patched the libAfterImage configure script to print out the options it is being called with. Then I add --with-builtin-png=yes and build again

cd graf2d/asimage/src/libAfterImage

make clean

./configure --with-ttf --with-ttf-includes=-I../../../../graf2d/freetype/src/freetype-2.3.12/include --with-afterbase=no --without-svg --disable-glx --with-builtin-ungif --with-jpeg --with-jpeg-includes=/usr/local/include --with-png --with-png-includes=/usr/local/include --with-tiff-includes=/usr/local/include --with-builtin-png=yes

make

4. Go back to root directory and call make again to pick up the new libAfterImage:

cd -

make -j4

TBrowserとかTCanvasを動かしてもエラーを出さなければたぶん大丈夫。

ROOT v6のインストール

原因はちゃんと覚えてないんだけど、使っていたROOT関連のプログラムがXCodeのアップデートに伴って使えなくなったので、ROOTをバージョンアップすることにした。ROOTのページを見たら前見たときはexperimentalだったはずのバージョン6系がrecommendedになっていたので、オススメ通りv6-20-08を入れることにした。

Downloading ROOT | ROOT a Data analysis Framework

特に特別なことをする気はないので、完全デフォルトでインストール。つまり、configureで特別なオプションなし。

./configure
make

問題なくインストール完了したが、自分で作ったプログラムをコンパイルしようとすると大量のエラーがでる。一部だけ引用すると、こんな感じ。

In file included from /opt/root/pro/include/TTree.h:30:
In file included from /opt/root/pro/include/TBranch.h:28:
In file included from /opt/root/pro/include/TNamed.h:26:
In file included from /opt/root/pro/include/TObject.h:31:
In file included from /opt/root/pro/include/Rtypes.h:37:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/atomic:539:2: error: 
      <atomic> is not implemented
#error <atomic> is not implemented

調べてみたら、どうもコンパイル時にオプションを一つつけないとダメらしい。

Problems compiling on os x 10.9 - ROOT - ROOT Forum

具体的には、コンパイル時のフラグに--std=c++11を追加すれば動く。忘れそうなので書き残しておく。

2014-12-02

ROOTで軸のラベルにテキストを使う方法

ってのを調べたんだけど、力技しかないみたい。

RootTalk: Re: [ROOT] user defined axis labels or how to change

ここにあるように、GetXaxis()->SetLabelOffset(99) でラベルを画面の外に追いやって、あとはTText::DrawTextでラベルをつけている。実行するとこんな感じになった。

f:id:MegumiNiikura:20141202154449g:image:w300

MacでANAROOTを使おうとして諦めた

最近ANAROOTで解析をしている。

Tools/Analysis/ANAROOT - RIBFDAQ

これをMacOSXにインストールする話は以前書いた。

MacにANAROOTをインストールする - にいくらの日記

この方法で一応Macでも動く。でも、最終的にANAROOTを使った解析をMacでやるのは諦めて、昨日書いたVMWare上のlinuxで解析をすることにした。

問題になったのは、ANAROOTで作ったライブラリを使って実行ファイルを作ろうとするとコンパイルできなかった。

 $ g++ MakeTree.C -I/$TARTSYS/include -L/$TARTSYS/lib -lanacore -lanaroot -lXMLParser `root-config --cflags` `root-config --libs` -o maketree
Undefined symbols for architecture x86_64:
  "TArtRecoPID::DefineNewTOF(char*, char*, double, int)", referenced from:
      _main in MakeTree-647583.o
  "TArtRecoPID::DefineNewBeam(TArtRIPS*, TArtTOF*, char*)", referenced from:
      _main in MakeTree-647583.o
  "TArtRecoPID::DefineNewBeam(TArtRIPS*, TArtRIPS*, TArtTOF*, char*)", referenced from:
      _main in MakeTree-647583.o
  "TArtRecoPID::DefineNewRIPS(int, int, char*, char*)", referenced from:
      _main in MakeTree-647583.o
  "TArtRecoPID::TArtRecoPID()", referenced from:
      _main in MakeTree-647583.o
  "TArtCalibPID::TArtCalibPID()", referenced from:
      _main in MakeTree-647583.o
  "TArtCalibDALI::TArtCalibDALI()", referenced from:
      _main in MakeTree-647583.o
  "TArtDALIParameters::LoadParameter(char*)", referenced from:
      _main in MakeTree-647583.o
  "TArtDALIParameters::Instance(char const*, char const*)", referenced from:
      _main in MakeTree-647583.o
  "TArtCalibFocalPlane::FindFocalPlane(int)", referenced from:
      _main in MakeTree-647583.o
  "TArtBigRIPSParameters::LoadParameter(char*)", referenced from:
      _main in MakeTree-647583.o
  "TArtBigRIPSParameters::SetFocusPosOffset(int, double)", referenced from:
      _main in MakeTree-647583.o
  "TArtBigRIPSParameters::Instance(char const*, char const*)", referenced from:
      _main in MakeTree-647583.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [maketree] Error 1

こんな感じ。いろいろと調べてみたけど、結局わからず。エラーを検索してよく見かけるのは、コンパイルのオプションで-stdlib=libstdc++をいれると良い、というもの。でもこれはroot-config --cflagsと整合性がとれてない気がする。

$ root-config --cflags
-pthread -stdlib=libc++ -m64 -I/opt/root/pro/include

なんとなくANAROOTではautogen.shでいろいろと自動設定しているので、その時のコンパイルオプションと手動で書いたもののオプションい整合性がなくてうまく動かないのかと思ってるんだけど、よくわからないので結局諦めることにしました。

2014-12-01

VMWare Fusionの仮想環境にLinuxを入れる

手元のmacでlinuxを使いたくなったので、久しぶりにlinuxをインストールした。VMWare Fusion 7の仮想環境の中に。

まず初めに悩んだのはディストリビューションで、これはLinuxをインストールするたびに悩む。学生時代からだとVine Linux、Fedora、Ubuntuと遍歴している。最近は基本的にMacで済ませてしまうのでLinuxから離れていたので、Linuxを使うのは久しぶり。以前使っていたこともあって、Ubuntuを入れてみようかと思ったけど、そもそもUbuntuを使わなくなって完全にMacOSXに移行するきっかけとなったのはUnityの出現からだった。それ以外にも半年毎のアップデートについていくのが嫌になっていたので、その時に完全にLinuxを使わなくなってしまった。その時に、Unityを使わないUbuntuという流れでLinuxMintというのを聞いていた。今回はこれをインストールすることにした。

Sucuri WebSite Firewall - Access Denied

今回は仮想環境に入れるので、できることならば余計な機能はなるべく削除したい。でも、面倒な設定とかはしたくない。できればデフォルトである程度使える方が嬉しい。実はLubuntuとかUbuntuなんかも試してみたんだけど、日本語環境が入ると日本語の切替キーがMacとLinuxで異なったりして設定が面倒だったので、結果として英語版を入れることにした。日本語を使いたい時はホストのMacを使うことにする。そのほか、このサイトも参考にして、LinuxMint 17.1のMATE 64bitというのを入れることにした。

種類 - リナックスミントをつかおう

イスントールは問題なく終了。特に苦労した部分はなかったのでメモはしない。

VMWare toolsのインストール

VMWare Toolsが入れたいので、「仮想マシン」にあるVMWare Toolsのインストールからインストールすることにする。これをクリックすると、/media/niikura/VMWare Tools/というのがマウントされる。この中にあるVMWareTools-9.8.4-2202052.tar.gzというのがそれらしい。適当なディレクトリを作って展開する。

mkdir vmware

cd vmware

tar zxvf /media/niikura/VMware\ Tools/VMwareTools-9.8.4-2202052.tar.gz -C $PWD

これで、vmware-tools-distribというのができる。その中にあるvmware-install.plというのをsuで実行すればよい。

cd vmware-tools-distrib

sudo ./vmware-install.pl

あとは色々質問されたが、基本的にデフォルトのままで良さそうだったのでそのままエンターキーを打ったら自動的にインストールされた。最後になにか手動で起動して再起動しろ、とかあったのでそれもやって完了。これで自動的にスクリーンの大きさに合わせてくれるようになった。とても便利。

ROOTのインストール

これはほとんど苦労しなかった。インストールしたままの状態だと./configureの時にパッケージが足りないと言われるので、以下のサイトを参考に必要なパッケージをインストールしておく。

Build Prerequisites | ROOT a Data analysis Framework

細かいconfigureの設定は今はしていない。必要になったらする。

フォントがないと言われた。調べたら、いくつか必要なパッケージを入れる必要がある模様。

Adobe helvetica on ubuntu 11.04 - ROOT - ROOT Forum

全部が必要には見えないが、とりあえず全部入れておけば動く。ただしxfsというパッケージは僕の環境にはなかった。

これで基本的にな仕事に必要な環境はできた。最近はあまりインストールで困ることもないので、あまりメモすることもないな。

2014-11-09

KromekのMCAのデータをROOTで解析する

学生向けのメモです。

先日書いたMCAのデータの解析をROOTでやるためのサンプルプログラムを公開しておきます。

KromekのMCAのデータをGnuplotで解析する - にいくらの日記

ROOTはCernが開発している素粒子・原子核・宇宙関連の実験でよく使われている解析プログラムです。

ROOT a Data analysis Framework | ROOT a Data analysis Framework

非常に高機能なソフトではありますが、学生実験で使うのはあまりお勧めしていません。高機能すぎて、インストールして設定をして使えるようになるまでで満足してしまう可能性が高いからです。使えるようになればいろいろと出来て便利ではありますが、学生実験ではおそらく前出のGnuplotを使用する方がlearning costを考えると楽です。あくまでも、どうしてもROOTを使ってみたい、という人向けです。

KromekのMCAが出力するspeファイルをROOTのヒストグラムにするROOTのマクロを以下に置いてあります。

http://nucl.phys.s.u-tokyo.ac.jp/niikura/pub/gensan/spe2root.C

ROOTのマクロなので、実行するだけです。2次関数で校正をして、元データおよび更正後のスペクトルを.rootファイルに保存します。校正のパラメータはマクロ実行時に入力してもよいし、直接マクロに書き込んでもよいです。僕がゲルマニウム半導体で測定したガンマ線のスペクトルを解析するために作ったものなので、エネルギーの単位等は必要に応じて書き換えてください。

KromecのMCAで保存されるデータはヒストグラム形式になっていて、残念ながらイベント毎の数値(ROOTで言うところのTree形式のデータ)はありません。そのため、ヒストグラムの内容をもう一度乱数を使って擬似的にイベント生成してから校正しヒストグラムに入れ直しています。

バグとか見つけたらご連絡お願いします。