忍者ブログ
日々の研究生活のメモ書きなど
TH1D *h2 = new TH1D("hoge","", nbin, min, max);

h2->SetName("NameNamaName");
h2->SetTitle("TitleTitleTitle");

ヒストグラムを作るときに、hogeと書いてしまったところをあとで書き換えるには、
SetNameを使う

また、左上に箱を用意して何か書く場合はsetTitleを使う










PR

h1->GetXaxis()->SetRange(0, 2000);

0と2000はx軸の値ではなくて、ビンの通し番号(int)なので注意
実際の範囲は ビン[0] から ビン[2000] になる

■ 参考 : Cern ROOT quick reference for paw users





y軸の範囲指定は、

■ 過去記事 : 【ROOT】ヒストグラムのY軸の設定方法

















■ 参考 : ヒストグラムを規格化(Scale)して、さらにエラーバーをつけたい

やりたいことはすべて上記(神)ページに書かれていたので、そちらを参考にどうぞ

一つ詰まった箇所としては、ヒストグラムを2つ書かないといけないこと
一番下にあるサンプルコードを見れば一目瞭然だが次のような手順になる

1. データをヒストグラムに詰める
2. ヒストグラムh1をコピーしてh1eを作る
3. scaleする(h1とh1eを両方個別にしないといけない)
4. h1->Draw(); h1e->Draw("same e1");



エラーバーは何種類かあるので、それも先ほどのページにまとめられている

エラーバーはそのbinのサンプル数がNだとすると\sqrt{N}









検索したら、まずGetCumulativeという関数が見つかった

■ 参考 : TH1 Class Reference

けど使い方がよくわからん・・・(アフォですいません・・・)


とりあえず次のサンプルコードを見つけたので動かしてみる
■ 参考 : cumulative.C: illustrate use of the TH1::GetCumulative method


しかし「GetCumulativeという関数が見つからない」というエラーで動かない・・・
試しに /usr/local/root/include/TH1.h を見てみると、確かにGetCumulativeという関数がない・・・・

たぶん、この関数がroot v6.0以降で追加されたので、
自分が使ってるroot v5.34にはないんだろう・・・(ダメじゃん)





しょうがないので今回は次のように、手でbinの中身を数え上げるコードで対応する・・・
(最初にこれを思いついたけど、ROOTならさぞ素晴らしい関数があると思って調べてみたかったんだよ・・・ いや、あったけど・・・・)

TH1D *cdf = new TH1D("cdf","", nbin, min*0.99, max*1.01);
int total = 0;
for (int i=nbin-1;i>0;i--){
total += h1->GetBinContent(i);
for (int k=0;k<total;k++){
cdf->AddBinContent(i);
}
}

普通の累積分布は左から足していくようなものらしい(参考リンクにある方法)
今は右端の領域に興味があったので左から足していく累積分布にんなってるので注意・・・

■ 参考 : Re: [ROOT] Cumulative histogram











TH1D *h1 = new TH1D("histogram","", nbin, min*0.99, max*1.01);
h1->SetLineColor(2);
h1->SetLineWidth(2);
h1->GetXaxis()->SetLabelSize(0.08);
h1->GetYaxis()->SetLabelSize(0.08);
みたいな感じらしい
GetXaxis()という関数を間に挟まないと、x軸だけに設定が反映されてy軸はそのままなので注意


■ 参考 : ROOTは軸をdatetime表記に簡単に出来てとっても便利!、、、、、え?


図があるので、対応関係が見やすい!
■ 参考 : TGaxis Class Reference - Basic definition





なんかデフォルトのサイズがあまりに小さいので
できればこの0.08をデフォルトに置き換えたいまである

デフォルトの設定をいじるにはどうすればいいか調べたら以下の記事を見つけた

■ 参考 : ROOT ~環境設定~

$ROOTSYS/macros/rootlogon.C ってファイルはなかったわ・・・
2007年の記事なので、設定が変わったんだろう
たぶん ~/.rootなんとか を作ればいいっぽいけど、今回はいいや・・・







ROOTでヒストグラムを書いてfitしたときに色々と調整したのでメモ・・・・

ヒストグラムの線の太さを調整するときは、
TH1D h1("","", 40, min*0.99, max*1.01);
h1->SetLineWidth(6);
■ 参考リンク : [ROOT] Histogram line and legend line width.



書いたヒストグラムをfittingして、そのfittingの線の色と太さを変更したいときは
TF1 f1("f1","TMath::Power(x, [0]/2.0-1) * exp(-x/2.0) / TMath::Power(2.0, [0]/2.0) / TMath::Gamma([0]/2.0) * [1] + [2]");
f1.SetParameters(max/2, 8000);
f1->SetLineColor(2);
f1->SetLineWidth(2);
h1.Fit("f1");

■ 参考リンク : [ROOT] Fit









同期より寄せられた情報です
#splitline{foo}{hoge}
こんな感じで書くと、タイトルの中で改行できるらしいです
3行目まで行くのかはしらん・・・

■ 参考 : Splitting Lines










ここにまとめられている↓
namespace ROOT::Math


gaussianのcdfが知りたい場合は、
double ROOT::Math::normal_cdf_c (double x, double sigma=1, double x0=0)
Complement of the cumulative distribution function of the normal (Gaussian) distribution (upper tail).

double ROOT::Math::normal_cdf (double x, double sigma=1, double x0=0)
Cumulative distribution function of the normal (Gaussian) distribution (lower tail).

正の無限大からxまでと、負の無限大からxまでの2種類用意されている
xは下限値(上限値)
sigmaは正規分布の標準偏差
x0は正規分布の平均値
(一応ソースコードで確認)
















gnuplot版は1つ前の記事を参照↓
【gnuplot】ガンベル分布の書き方




void root_gumble(){
gROOT->Reset();
TCanvas *c1 = new TCanvas("name", "title", 0, 0, 1080, 720);
c1->SetGridx();
c1->SetGridy();

Double_t xmin = -5.0;
Double_t xmax = 20.0;

TF1 *f1 = new TF1("f1", pdfgumble, xmin,xmax, 4);// xmin, xmax, number of parameter
f1->SetParameters(1, 2, 1, 0.0);
f1->SetNpx(500);
f1->SetLineColor(1);
f1->Draw("L");

TF1 *f2 = new TF1("f2", pdfgumble, xmin,xmax, 4); // xmin, xmax, number of parameter
f2->SetParameters(0.5, 2.0, 1, 0);
f2->SetNpx(500);
f2->SetLineColor(2);
f2->Draw("Same");

TF1 *f3 = new TF1("f3", pdfgumble, xmin,xmax, 4); // xmin, xmax, number of parameter
f3->SetParameters(1.5, 3.0, 1, 0);
f3->SetNpx(500);
f3->SetLineColor(3);
f3->Draw("Same");

TF1 *f4 = new TF1("f4", pdfgumble, xmin,xmax, 4); // xmin, xmax, number of parameter
f4->SetParameters(3.0, 4.0, 1, 0);
f4->SetNpx(500);
f4->SetLineColor(4);
f4->Draw("Same");

TF1 *f5 = new TF1("f5", pdfgumble, xmin,xmax, 4); // xmin, xmax, number of parameter
f5->SetParameters(3.0, 6.0, 1, 0);
f5->SetNpx(500);
f5->SetLineColor(6);
f5->Draw("Same");

// set TLegend
leg = new TLegend(0.6, 0.7, 0.9, 0.89, "Legend");
//leg->SetFillStyle(0); // or leg->SetFillColor(0); // white paint
leg->SetFillColor(0);
leg->SetTextSize(0.04);
leg->AddEntry(f1, "a=0.5, b=2.0", "l");
leg->AddEntry(f2, "a=1.0, b=2.0", "l");
leg->AddEntry(f3, "a=1.5, b=3.0", "l");
leg->AddEntry(f4, "a=3.0, b=4.0", "l");
leg->AddEntry(f5, "a=3.0, b=6.0", "l");
leg->Draw();

f1->SetTitle("pdf of Gumble distribution");
c1->Print("root_gumble_op.pdf");
}

//definition of myfunc
Double_t pdfgumble (Double_t *x, Double_t *para){
return para[2]/para[1]*exp(-(x[0]-para[0])/para[1])*exp(-exp(-(x[0]-para[0])/para[1])) + para[3];
}


これをスクリプトとして用意して、
root -b root_gumble.cc
とかで次のようなグラフができるはず↓

root_gumble_op







ソースコードについて補足
TCanvas *c1 = new TCanvas("name", "title", 0, 0, 1080, 720);
でcanvasを作る

c1->SetGridx();
c1->SetGridy();
でgridを表示

TF1 *f1 = new TF1("f1", pdfgumble, xmin,xmax, 4);// xmin, xmax, number of parameter
// SetParameters と SetParameter は別
f1->SetParameters(1, 2, 1, 0.0);
f1->SetNpx(500);
f1->SetLineColor(1);
f1->Draw("L");
で1つのグラフを描く

SetParameterとSetParametersは全然違う
SetParameter(parNo,value);
SetParameters(val1,val2,…);
前者は1つめの引数に、パラメーターの番号(0, 1, ..)を入れて、2番目にパラメーターの値を入れる
後者は1つ目の引数がそのまま0番目のパラメーターに代入され、2つめの引数がそのまま1番目のパラメーターに代入される(以下繰り返し)

また、TF1の3, 4, 5番目の引数はそれぞれxの最小値, 最大値, 関数のパラメーターの数
今回の場合はpdfgumbleのパラメーターは4つ固定なので、4でOK


TLegendのところは過去の記事を参考にどうぞ
【ROOT】ヒストグラムを重ね書きして、TLegendを使ってみる



最後に
//definition of myfunc
Double_t pdfgumble (Double_t *x, Double_t *para){
return para[2]/para[1]*exp(-(x[0]-para[0])/para[1])*exp(-exp(-(x[0]-para[0])/para[1])) + para[3];
}
のところで関数の定義をしている
なんでこんな書き方をしているかというと、
TF1 *f1 = new TF1("f1", "10*sin(2*5*x)", xmin,xmax, 4);// xmin, xmax, number of parameter
f1->SetParameters(1, 2, 1, 0.0)
f1->SetNpx(500);
f1->SetLineColor(1);
f1->Draw("L");
みたいな感じで"..."の中に式を書くことができる
ただ、この書き方をしてしまうと、10とか5といったパラメーターを手で毎回書き換える必要が出てくるので、関数で書いた方がかなりお手軽で、今回のように5種類のパラメーターセットで同じ関数を描くときに色々と手間が省ける。(上記の"10*sin(2*5*x)"で実際にプロットできるかは未確認)

■ 参考
TF1の諸々






そういえばROOTでヒストグラムのfittingをするためのメモ書きがなかったのでまとめておく
だいたい参考リンクを見れば解決すると思う
あとROOTのdocument


■ 参考 : ROOT:便利なコマンド表と使い方の例
: とてつもなく、分かりやすい。必要な情報はすべてここにあるだろう


■ 参考 : TF1の諸々
: fittingしたあとの処理について、色々とまとめられていた

そのうち、追記するかも







(2017/05/26 追記)

■ 参考 : TF1の諸々

ここの一番したに便利な関数が載っていたのでメモ
f.FixParameter(1, 5.0); //パラメーターを動かさない
// 1はparameterの通し番号
// そのパラメーターを5.0に固定する
f.SetParLimits(1, 1.0, 3.0); //パラメーターの変化させる範囲を指定できる
1は通し番号、1.0, 3.0はそれぞれ最小値と最大値
これで、今までうまくいかなかったfittingがうまくいった
f5.SetParNames("A", "#theta", "#mu", "#gamma");
みたいな感じで、fittingに用いるパラメーターに名前をつけることができる
ギリシャ文字を使うときはTeXの\の代わりに#を付ける

統計情報の文字サイズを大きくするときは
gStyle->SetStatFontSize(0.06);




(2017/09/05 追記)

上記の
gStyle->SetStatFontSize(0.06);
を打っても箱の大きさを大きくならないことがあった・・・・

ググってみたら、以下のような中国語の記事がヒットした

■ 参考 : ROOT: Why TStyle::SetStatFontSize() doesn't work?

要するに、
gStyle->SetStatFontSize(0.06);
とした後で、箱の大きさを変更しないと文字サイズも変更されないというバグ(?)らしい
//To make sure SetStatFontSize() does work, you need next statement:
gStyle->SetStatW(0.7);





あと、fitting後のパラメーターをROOTの中で取得する方法は、

■ 参考 : fit_parameterの取得
double para0 = f1->GetParameter(0);
double para1 = f1->GetParameter(1);
double para2 = f1->GetParameter(2);
通し番号は0から始まる










備忘録メモ

ROOTでヒストグラムを書くと、デフォルトだと右上にそのヒストグラムに関する情報が書かれた箱ができる(名前がわからない・・・・)
今回2つのヒストグラムを重ね書きするグラフを書いてみて、その箱に関する情報だけでは不足なので新しく、TLegendというのを導入してみた
つまり↓
result_for_blog1
では微妙で

こんなのがが欲しい↓
result_for_blog2

ソースコードはこんな感じ(こんな感じで良いのかわからんけど、ひとまずかけているから良し、で・・・)

{
#include <fstream.h>
#include <string.h>
#include <TMath.h>

TCanvas *c1 = new TCanvas("name", "title", 0, 0, 1080, 720);
gROOT->SetStyle("Plain");

char fname_mic[80] = "data_gauss.txt";
char fname_mic_bg[80] = "data_rayleigh.txt";
char fname_picture[80] = "result_for_blog.png";

Int_t nbin = 50;

Double_t mic, mic_bg;
Double_t x, y;


TH1D *h1 = new TH1D("a", "", nbin, -5, 5);
TH1D *h2 = new TH1D("b", "", nbin, 0, 5);


ifstream fp(fname_mic);
while(fp >> x){
h1 -> Fill(x);
}
fp.close();

ifstream fp(fname_mic_bg);
while(fp >> y){
h2 -> Fill(y);
}
fp.close();

// set y maximum
//h2 -> SetMaximum(40);

// show histogram
h1 -> SetLineColor(2);
h1 -> Draw();
h2 -> SetLineColor(4);
h2 -> Draw("Same");

// remove right profile box
gStyle->SetOptStat(0);

// set TLegend
leg = new TLegend(0.6, 0.7, 0.9, 0.89, "Legend");
leg->SetFillStyle(0); // or leg->SetFillColor(0); // white paint
leg->SetTextSize(0.04);
leg->SetHeader("The Legend Title");
leg->AddEntry(h1, "gauss data","fl");
leg->AddEntry(h2, "rayleigh data", "lf");
leg->Draw();

c1.Print(fname_picture);
exit(0);
}


■ ソースコードの簡単な説明

右上にあった箱を非表示にする
gStyle->SetOptStat(0);


TLegend(0.6, 0.7, 0.9, 0.89);
の後の4つの引数はそれぞれxmin, ymin, xmax, ymaxに相当
値はそれぞれ
グラフの左上の軸の交点が(0, 0)
グラフの左下の軸の交点が(0, 1)
グラフの右下の軸の交点が(1, 0)
グラフの左下の軸の交点が(1, 1)

ただしおそらくこれでは不足に思うと思う
なぜなら、デフォルトのフォントが小さいから
leg->SetTextSize(0.04);
で調整する
これをいじると、軸の外にもLegendが出てくれるようになる

leg = new TLegend(0.6, 0.7, 0.9, 0.89, "Legend");
の最後の引数はLegendのタイトル
下のような方法でも後付け可能
leg->SetHeader("The Legend Title");
でタイトルが付けられる

leg->AddEntry(h1, "gauss data","f");
leg->AddEntry(h2, "rayleigh data", "f");
leg->Draw();
で、Legendをセットして、描画する

AddEntryの第3引数は
L: draw line associated with TAttLine if obj inherits from TAttLine
P: draw polymarker associated with TAttMarker if obj inherits from TAttMarker
F: draw a box with fill associated wit TAttFill if obj inherits TAttFill
E: draw vertical error bar if option "L" is also specified
みたいな選択肢があるらしい
参考 :
class TLegend: public TPave, public TAttText


また箱の色がデフォルトでは灰色なので、白く、もしくは透明にしておく
透明にする場合
leg->SetFillStyle(0);
白塗りする場合
leg->SetFillColor(0);


ちなみに、ここで使っているデータはGSLがインストールされていれば簡単に再現できるだろう
gsl-randist 0 1000 gaussian 1 > data_gauss.txt
gsl-randist 0 1000 rayleigh 1 > data_rayleigh.txt
でOK
GSLをデフォルトの場所にインストールしていれば
/usr/local/bin/gsl-randist
があるはず

gsl-randistの使い方は以前書いた記事を参考にどうぞ

参考 :
【シェルコマンド】gsl-randistを使うとお手軽に乱数データを生成できる











備忘録メモ

Y軸はbin詰めされた値ではないので、設定方法がX軸とは異なる
TH1D *h1 = new TH1D("a", "; b", 100, 0 ,1);
h1 -> SetMaximum(ymax);
h1 > SetMinimum(ymin);

みたいな感じでOK


参考 :
[ROOT] set Y axis limits of a TH1F ??








まずはこういうヒストグラムを描いてみる
TH1D *h1 = new TH1D("name","title",nbins,xmin,xmax);


-> 描いたヒストグラムに関する量を使って、さらに計算をしたい

どんな数字が使えるか?



既に存在しているヒストグラムの ビンの数や、上下限を知るには、

  nxbins = h1->GetXaxis()->GetNbins();
  xmin   = h1->GetXaxis()->GetXmin();
  xmax   = h1->GetXaxis()->GetXmax();



また、ビンの中心値や、ビンのエントリーの数を知るには
  xc = h1->GetXaxis()->GetBinCenter(i); // center of i-th bin
  z = h1->GetBinContent(i) // content of i-th bin



平均値, RMSの取得は
     
h1->GetMean();
h1->GetRMS();


ある値が入っているビンを知りたい(この場合は500)
h1->FindBin(500);





■ 参考リンク

研究に必須のROOTというソフトウェアについての覚書

カテゴリ「ROOT」にあるページ







参考リンクを読んで、知らなかったこととかをメモしてるだけー




■ 2 ROOT事始め

キャンパス(クラス TCanvas)はパッド(クラス TPad)で分割できる
実はキャンパスはウィンドウ全体に広がるパッド
TPadクラスはTCanvasクラスの親である

すべてのobjectは描画するという仮想メソッドDrawを持つ
object.Draw()
とすればobjectを描写してくれる
このときCanvasがなければc1がデフォルトで生成されるようになっている


例:
TF1 f1("hoge", "sin(x)/x", 0, 10)
f1.Draw()

できるのは次のような絵


上のメニューバーのView -> Editorをクリック
表れたGUIで色々と調整できる、線の色を変えたりlogスケールにしたり
別にGUIを用いなくてもコマンドラインでもおーけー
logスケールにする方法は昔わからなくて記事を書きました

f1.Draw() 以外にもいろいろとobjectに対して使えるメソッドはあるっぽい
TF1クラスのobjectに対しては次のようなのがある(ほんの一例)
root [2] f1.Eval(3)
(const Double_t)4.70400026866224022e-02
root [3] f1.Derivative(3)
(const Double_t)(-3.45677499760626061e-01)
root [4] f1.Integral(0,3)
(Double_t)1.84865252799946811e+00


Eval(x)はxでのf1の値がわかる 要するにf1(x)みたいな感じ(わかりにく)
f1(x)でもわかるみたい

返り値をどこかに代入することも可能
double a
a = f1.Eval(3)
みたいな使い方かな?

#ところで文末にセミコロンがなくてもエラーにならないけど、これはいいんだろうか・・・?
#追記
#Mathematicaとかoctaveとかと同じでセミコロンを文末に付けると、返り値が表示されなくなるのか・・・・

次のメソッド.
Derivative(a)はaでの導関数を計算する
Integral(a,b)はaからbまでの積分値を計算する

f1.SetNpx() を使って、描画のための店の数を決めれる
デフォルトでは100個


例:描画点の数を変えて比較してみる。
root [13] TF1 f1("hoge", "sin(x)/x", 0, 100)
root [14] f1.SetNpx(200);
root [15] f1.Draw()
root [16] f1.SetNpx(20000);
root [17] f1.Draw()

左が200点、右が20000点
滑らかさが違いますよ

「どうです、滑らかでしょう?余裕の描画だ、馬力が違いますよ」




■ マクロで保存
GUIでいろいろといじったあとに、FILE -> Save/*.Cで保存するとマクロができあがる
あら、便利・・・・





■ 複数のパッドを持つキャンパスの作成

root [] TCanvas *MyC = new TCanvas("MyC", "Test Canvas", 1);
root [] MyC -> Divide(2,2);
root [] MyC->cd(1)
で、1のPadに移動できる

root [] TF1 f1("hoge", "sin(x)/x", 0, 100);
root [] f1.Draw();
で、1のPadに描画できる。





 
あとで続きを書く。



■ 参考
ROOT/CINT 自社翻訳ドキュメント




${ROOTSYS}/tutorials 以下にいろいろと楽しめるものが用意されている。

まずは ${ROOTSYS}/tutorials/README に目を通してみる
demos.C と benchmarks.C で遊んでみろと書かれているようだ・・・・

実行方法は
root -l demos.C
もしくは
root
.x demos.C

GUIが出てきて色々とクリックすると表示される
こんな感じ↓(ほんの一部です)


この右の図は何かの検出器っぽいのですが、これドラッグしたら回転します・・・・
え?CAD?

これを見て思ったのが、あれgnuplotいらなくね・・・?

もうひとつのbenchmarks.Cはマシンの性能みたいなのを数値評価してくれるスクリプト


他にはこういう例が用意されているらしい。
-fft: Fast Fourier Transform with the fftw package
-fit: Several examples illustrating minimization/fitting
-foam: Random generator in multi-dimensional space
-geom: Examples of use of the geometry package (TGeo classes)
-gl: Visualisation with OpenGL
-graphics: Basic graphics
-graphs: Use of TGraph, TGraphErrors, etc
-gui: Scripts to create Graphics User Interface
-hist: Histograming
-image: Image Processing
-io: Input/Output
-math: Maths and Statistics functions
-matrix: Matrices (TMatrix) examples
-mlp: Neural networks with TMultiLayerPerceptron
-net: Network classes (client/server examples)
-physics: LorentzVectors, phase space
-pyroot: python tutorials
-pythia: Example with pythia6
-quadp: Quadratic Programming
-ruby: ruby tutorials
-smatrix: Matrices with a templated package
-spectrum: Peak finder, background, deconvolutions
-splot: Example of the TSplot class (signal/background estimator)
-sql: Interfaces to SQL (mysql, oracle, etc)
-thread: Using Threads
-tmva: Examples of the MultiVariate Analysis classes
-tree: Creating Trees, Playing with Trees
-unuran: Interface with the unuram random generator library
-xml: Writing/Reading xml files



■ 参考
ROOT/CINT 自社翻訳ドキュメント




TCanvas c1;
c1->SetGrid(1);


x軸、y軸それぞれだけ表示したいときは
c1->SetGridx(1);
c1->SetGridy(1);


消すときは
c1->SetGrid(0, 0);
gnuplot同様、ROOTにも例が用意されてるらしい

詳しくは
$ROOTSYS/test以下
makeしたら、全部コンパイルしてくれる
TF1 *f5 = new TF1("", "sin(x)",0,5);
f5->Draw();
TText *t = new TText(0.5, 0.5, "hogeee");
t->SetTextSize(0.04);
t->Draw();


t->SetNDC(0);
で、(0.5, 0.5)はグラフ上の座標


t->SetNDC(1);
で、(0.5, 0.5)は相対位置になる
グラフ全体の50%, 50%の場所
必要になったわけではないけど、色々と調べてたら出て来たのでメモ

TF1 *f1 = new TF1("f1", "sin(x)", -10, 10);
f1->Draw();


画像に落としたいときは
c1->Printf("hoge.png")
hoge.pngを他のフォーマットに変える事も可能



3次元のグラフも
TF3 *f3 = new TF3("f3","x*x+y*y+z*z-1",-2,2,-2,2,-2,2);
f3->Draw();

なんでf3になってるかはお察し



Double_t TMath::Prob(Double_t chi2, Int_t ndf)
これを使う

printf("%f¥n", TMath::Prob(10, 9));
0.440493
とかなるはず


実は
gStyle->SetOptFit(1111)
としておくと改めて計算しなくても表示される


これは仮説に対する珍しさの指標になるらしい


追記
gStyle->SetOptStat();
gStyle->SetOptFit(11);
gStyle->SetStatFontSize(0.06);
で箱の中の文字サイズを大きくできる






(2017/09/05 追記)

こっちの記事にもう少し詳しく書いてある

■ 参考 : 【ROOT】fittingに関するメモ






そういえばROOTに関する記事を全然書いてなかった・・・
と、言っても自分がROOTを使うときってのはヒストグラムを作るときくらい・・・
他にも色々便利な機能はあるらしいが、なにぶん英語なので敷居が高い・・・

今回は軸をlogスケールにしたいとき。
gPad->SetLogy(1);

1でlogスケールに、0でリニアスケール

x軸も同様にして
gPad->SetLogx(1);

他の方法だとROOTでグラフ書いてから、Editorでいじってもオーケーだけど
マクロだけで画像を作りたいときは、この方法で。







(2017/2/6 追記)

上記の方法でもできるけど、他の方法もあったのでメモしておく

キャンパスを分割したときは次のようにして分割したキャンパスごとにlogスケールを設定できる
括弧の中の1という数字はそれぞれのキャンパスの番号に置き換える(キャンパス番号は1から始まる)
c1->GetPad(1)->SetLogy();
または
c1->cd(1)->SetLogy();


ちなみに上記の方法のgPadというのは分割したキャンパスの今いる場所の設定を変更する、という意味らしいので
結局やってることは一緒っぽい・・・


また、キャンパス全体のデフォルトの設定を変更する場合は、
gStyle->SetOptLogx(1);
gStyle->SetOptLogy(1);
って感じらしい

■ 参考 : 軸をLogにする










#include
してから
M_PIで円周率が使えると思ってたけどうまくいかない。

調べてみたら
TMath::Pi()
で出せるらしい。

そのままROOTの上で打ってみたら
3.14159265358979312e+00
と出て来た
ROOTに関するプログラムを作ってみたくて、下の2つのページを参考にして、書いてあるソースをそのままコンパイルしてみた・・・
C++ソースコードの作成
Makefileの作成とコンパイル

が、

色々エラーでた・・・

メモってたのはこれだけ↓
(10個ほど出てた)
ld: warning: in sample_gaus.o, file was built for i386 which is not the architecture being linked (x86_64)


たぶん64bitに対応してないよ?
って言われてるのかと思って、ROOTを入れ直してみた・・・


ROOT公式 から
Mac OS X 10.6 x86-64 with gcc 4.2.1, version 5.32.00 (46 MB)
これを落としてきた。

README読んだけど、よくわからない・・・
解凍して、sudo root /usr/local/
パスを通したりする必要はあるけど、以前したので大丈夫だったっぽい。

ちなみに一番上にあったソースは無事に動きました。

参考画像
今回はcernが作ったグラフ描画ツール ROOTをインストールする


ROOT公式からソースをDLしてきて

./configure
make
sudo make install

してもよかったが、今回はバイナリ版を入れることにする
こっちのがお手軽。



バイナリ版は ここ に置いてある
最新版で、自分に合ったものを落とす

MBA Lionでは
root_v5.30.02.macosx106-i386-gcc-4.2.tar.gz
で大丈夫なはず

DesktopにDLしたとして
$cd Desktop
$tar zxvf root_v5.30.02.macosx106-i386-gcc-4.2.tar.gz
$sudo mv root /usr/local/root


あとはPATHを通して終了。

自分はtcshなので
setenv ROOTSYS /usr/local/root
setenv PATH ${ROOTSYS}/bin:${PATH}
setenv LD_LIBRARY_PATH ${ROOTSYS}/lib:${LD_LIBRARY_PATH}
set env DYLD_LIBRARY_PATH ${ROOTSYS}/lib:${DYLD_LIBRARY_PATH}

と .cshrc に書いておけばおk

bashの方も同様にPATHを通せばおk
ただし使っているSHELLによって、書き方が違うので注意


参考ページ
http://www-utheal.phys.s.u-tokyo.ac.jp/~oxon/drupal/ja/node/27


ターミナルで
root
と打つと、rootが起動する



見たくない人は
root -l
と打てばよい( .cshrc に書いておくと、ずっと見なくて済む)


ROOTさん、またあなたと戦えて嬉しく思います



このあと

alias root='root -l'

と登録して起動を軽くする
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#define WISH_LIST
amazonのほしい物リスト
#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#endif


int main(void){

printf("\n");
printf("D論・・・? あぁそんな子もいましたね(執筆中)\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中(こっちの執筆は半年以上何も進んでいない・・・・)\n");
/* 最終更新 2017/07/19 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]