2008年2月27日水曜日

外出

ちょっとフランスに行ってきます。

2008年2月20日水曜日

mltermのインストール

mltermは、Multi Lingual TERMinal の略で、libc / Xlibを利用する多言語対応ターミナルエミュレータである。
背景等価、アンチエイリアス、マルチpty対応などの昨日を持っている。
http://mlterm.sourceforge.net/からダウンロードが出来る。
特に何も考えず、
% ./configure
% make
% su
% make install
で使用することが出来る。
Ctrl+F2で新しいpty端末を開くことが出来、
Ctrl+F3で次の画面に、Ctrl+F4で前の画面に戻ることが出来る。利用している感じはタブブラウザを使用しているかのよう。

インストールしたままだと文字があまり綺麗ではないので、.mlterm/fontを
ISO8859_1=14,-shinonome-gothic-medium-r-*-*-14-*-*-*-*-*-iso8859-1
ISO8859_1_BOLD=14,-shinonome-gothic-medium-r-*-*-14-*-*-*-*-*-iso8859-1
JISX0201_ROMAN=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0201.1976-0
JISX0201_ROMAN_BOLD=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0201.1976-0
JISX0201_KATA=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0201.1976-0
JISX0201_KATA_BOLD=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0201.1976-0
JISX0208_1983=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0208.1983-0
JISX0208_1983_BOLD=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0208.1983-0
JISX0208_1990=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0208.1990-0
JISX0208_1990_BOLD=14,-shinonome-*-medium-r-*-*-14-*-*-*-*-*-jisx0208.1990-0
と設定してやると、なかなか綺麗な画面になる。

色合いが結構目に刺激的なので、.mlterm/colorを
http://www.seeds-man.com/~nari/v2/people/nari/comp/linux/mlterm1.shtml
を参考にして、
blue=#6699ff
hl_blue=#6699ff
green=#66ff66
hl_green=#66ff66
red=#ff6666
hl_red=#ff6666
yellow=#ffd314
hl_yellow=#ffd314
magenta=#9b4fff
hl_magenta=#9b4fff
のように変更している。

yumの設定

/etc/yum.confの設定を変更。

cachedir=/var/cache/yum
logfile=/var/log/yum.log
pluginpath=/usr/lib/yum-plugins/
debuglevel=2
distroverpkg=redhat-release
metadata_expire=72000
tolerant=1
exactarch=1
plugins=1
proxy=http://proxyserveraddress:port/

最後の1行を追加したことで、proxy経由で取得出来る。

2008年2月16日土曜日

ROOT histogramの操作(1)

treeと並ぶROOTで最も良く使用されるclassが、ヒストグラムである。

全てのヒストグラムクラスはTH1クラスを継承して作成されている。
1次元ヒストグラムとして
ビンの値が整数値で
TH1C//127まで
TH1S//32767まで
TH1I//2147483647まで
浮動小数点数で
TH1F//単精度、7bit
TH1D//倍精度、14bit
という風になっている。2,3次元ヒストグラムに関しても同様。

作成は
TH1D *hist=new TH1D("hist","title",number,min,max);
の形で作るのが一般的。min~maxの区間を等間隔にnumber個のビンに区切ったヒストグラムが作成される。ビンにはそれぞれ番号が付けられていて、一番下側のビン(min,min+(max-min)/number)は1番、以後順にあがっていって最後のビン(max-(max-min)/number,max)はnumber番になる。0番は下限値以下の値、number+1番が上限値以上の値となる。

ビン幅を等幅以外にしたい時は、
TH1D *hist=new TH1D("hist","title",number,xbins);
とする。xbinsは各々のビンの下限値を示す配列へのポインタである。例えば、
1~2、2~4、4~8、8~16というビンでヒストグラムを作成したければ、
double xbins[]={1,2,4,8,16};
TH1D *hist=new TH1D("hist","title",4,xbins);
という風にする。ここで、numberには4が入るのに対して、xbinsは5つの値が必要なことに注意する。

値をヒストグラムに格納するには、
hist->Fill(val);
とする。

ビンの値を直接変更したい場合は、
hist->SetBinContent(num,val);
とすると、num番目のビンにvalがセットされる。逆にビンの値を取り出したい時は、
double val=hist->SetBinContent(num);
のようにするとvalにnum番目のビンの値が返ってくる。

ヒストグラムの最大、最小値のビンを探すには
hist->GetMaximumBin();
hist->GetMinimumBin();
を使う。最大値、最小値を求めるには、
hist->GetBinContent(hist->GetMaximumBin());
hist->GetBinContent(hist->GetMinimumBin());
のようにする。

2008年2月11日月曜日

ROOT canvasの操作

ROOTでは、ヒストグラムやグラフなどを描画すると、canvasという物に描かれる。
この項ではcanvasを取り扱うTCanvasについて主に説明する。

まず始めに、TCanvasを作ってみよう。
TCanvas *cvs=new TCanvas("cvs","test cvs",600,400);
// 600×400のcanvasの作成
"test cvs"という名前のwindowが作成される。これがcanvasだ。

TH1D *hist1=new TH1D("hist1","test histgram",100,0,1);
//histgramの作成
hist1->Draw();
//histgramが"test cvs"というタイトルの付いたwindowに描かれる。

もし、cvsを作成していなかったらどうなるか。
hist1->Draw();
<TCanvas::MakeDefCanvas>: created default TCanvas with name c1
この場合は、デフォルトのcanvasが作成され、そこにヒストグラムが描かれる。

ここでもう一つのヒストグラムを見たいと思い、描画を行うと
TH1D *hist2=new TH1D("hist2","test histgram",100,0,1);
hist2->Draw();//もう一つも描画。
先ほど描いたhist1のヒストグラムは消され、新たにhist2が描かれる。


これでは困る、同時に見比べたいという時の対処法は、3つある。
1:ヒストグラムを重ねて描く
2:もう一つcanvasを作る
3:今のcanvasを分割して使用

1:に関してはこの項では扱わない。
2:に関しては
TCanvas *cvs2=new TCanvas("cvs2","another canvas",600,400);
とやって新しいcanvasを作成してから描画するcanvasを選択する。
選択されているcanvasは黄色の枠で囲まれている。変更する時はマウスでミドルクリック(中ボタンを押す)するか、
cvs2->cd();
とする。

この後で、
hist2->Draw();
と描くと、"another canvas"という名前がついたwindowにhist2が描かれる。

3:に関しては、
cvs->Divide(1,2);//x軸方向1分割、y軸方向2分割
上段を選択して
hist1->Draw();//上段に描画
下段を選択して
hist2->Draw();//下段に描画
という感じで描画を行う。

画面の選択をマウスを使わずに行う時は、
cvs->cd(1);
のように、canvasを番号で指定して選択する。番号の割り振りは左上から右下に向かって順番に行われる。
例えば、
cvs->Divide(2,2);
なら
1,2
3,4
という番号が割り振られている。

分割に関して、特定のcvsだけ更に細かく分割を行いたい時は
cvs->Divide(1,2);
TCanvas *cvs1=cvs->cd(1);
cvs1->Divide(2,1);
とやると、上段2列、下段1列のcanvasが作成できる。

canvasの描画や分割を消去したい時は、
cvs->Clear();
を行う。このとき、分割してできたcvs1が指し示す先は存在しなくなる。これを避けるには、"D"オプションをつけて、
cvs->Clear("D");
とする。こうすると、直接操作でつくった(cvs->Divide()で作成した)画面分割は保存される。
また、Close()を呼び出すとcanvasを閉じる、
Flush()を呼び出すと描画をflush(強制描画)する、Update()を呼び出すとupdate(強制描画+α)する、などがある。