その1

Table of Contents

やること

動かしてみる。

はじめに

C/C++ では

  1. ソースファイルを書く
  2. コンパイルする
  3. 実行する

という手順を踏んできました。

ROOT は

といった方法で使うことが出来ます。

対話的に動かしてみる

「対話的に」とは,一行ごとにコマンド(?)を実行するという意味です。 非常にお手軽にできますが,毎回コマンドを入力するのが手間かもしれません。

ROOT を起動するにはターミナルで “root” と打ちます。

[gnukazuk 11:45:44 ~] $ root
  ------------------------------------------------------------
 | Welcome to ROOT 6.12/04                http://root.cern.ch |
 | (c) 1995-2017, The ROOT Team                               |
 | Built for macosx64                                         |
 | From tag v6-12-04, 13 December 2017                        |
 | Try '.help', '.demo', '.license', '.credits', '.quit'/'.q' |
  ------------------------------------------------------------

root [0]

カーソルが “root [0] ” のあとに来るので,ここから対話的にインタプリタを操作することができます。 例えば

root [0] int number = 2;
root [1] double value = -1.1
(double) -1.1000000
root [2] cout << number << " " << value << endl;
2 -1.1
root [3] for( int i=0; i<10; i++ ) { cout << i << endl; }
0
1
2
3
4
5
6
7
8
9

なんてできます。 “[1]” では行のおわりを示す “;” が抜けていますが,エラーはでません。 文法に厳密に書かなくても動いてしまうのが良い点でもあり,悪い点でもあります。

終了するには “.q” を入力します。

root [4] .q
[gnukazuk 11:50:22 ~] $

マクロを実行してみる

C/C++ のソースファイルと同じようにプログラムを書き, root コマンドの引数に与えることでマクロを実行することができます。 最近のメジャーアップデートでできなくなったと思っていたのですが,ファイルの中身を “{}” でくくるだけでも実行できました。

# ファイルを作る
[gnukazuk 11:53:03 temp] $ emacs macro.cc &

# ファイルの中身は hello world 
[gnukazuk 11:53:11 temp] $ cat macro.cc
{
cout << "Hello!" << endl;
}

# 実行してみる
[gnukazuk 11:53:33 temp] $ root macro.cc
root [0]
Processing macro.cc...
Hello!
root [1]

マクロ実行後は続けて対話的に使うことができます。 マクロ実行後に ROOT を自動で終了させたいときは “-q” オプションを実行時に与えましょう。

[gnukazuk 11:58:35 temp] $ root -q macro.cc

Processing macro.cc...
Hello!
[gnukazuk 11:58:42 temp] $

関数

ROOT マクロでは,ファイル名と同じ名前の関数がはじめに実行されます。

[gnukazuk 12:00:21 temp] $ cat macro.cc
int macro()
{
cout << "Hello!" << endl;
return 0;
}
[gnukazuk 12:00:23 temp] $ root -q macro.cc

Processing macro.cc...
Hello!
(int) 0

関数を追加することもできます。

[gnukazuk 12:01:31 temp] $ cat macro.cc ; root -q macro.cc
int Sum( int num1, int num2 )
{
return num1 + num2;
}

int macro()
{
cout << Sum( 2, 10 ) << endl;
return 0;
}

Processing macro.cc...
12
(int) 0

C/C++ でライブラリとして使用する

発展的なものなので,後回しでもいいと思います。 興味のある人は 宮地先生のページ を参考にしてみましょう。