ROOTでヒストグラムを書いたり、グラフを書いたりすると、右肩に名前とか、平均値とかの情報が表示される。
デフォルトでそうなっている。
だが、この表示が鬱陶しくなるときがある。
TH1だとSetStats(kFlase);とか書けば消すことができるのだが、他の場合ではどうするのか知らなかった。
この設定をいじくるにはgStyleという構造体の中の、SetOptStatという変数を指定してやればいい。
ここによれば、セットできるパラメータは9つ。
9桁の数字は、尖度(k)、歪度(s)、ビン数(i)、オーバーフロー数(o)、アンダーフロー数(u)、RMS(r)、平均値(m)、データ数(e)、ヒスト名(n)の9つに対応している。
kとsとrとmは0-2の値、その他は0-1の値を取る。
0は表記せず、1は値の表記あり、2は値とそのエラーの表記ありという風になっている。
ちなみにデフォルトだと000001111になっているので、RMS、平均値、データ数、ヒスト名が記入される。
また000001111のうち、0以外の最大の桁の数字より左側の0は省略可能。
つまり000001111と1111は同じになる。
全てがゼロの場合、統計情報のボックスは消える。
例1)gStyle->SetOptStat(0); //統計情報ボックス無し
例2)gStyle->SetOptStat(11); //ヒスト名とデータ数
またコンターマップの色を指定するときも、gStyleの変数SetPalleteを指定する。
デフォルトは色使いのセンスがイマイチなので、
gStyle->SetPallete(1);
とかしてやればいい。
2008/07/03
2008/06/28
タンジェントの逆関数
Cのタンジェントの逆関数atan(double)は-π/2からπ/2の値を返す。
しかしタンジェントは180度周期なので、360°で考えるときには、このままでは駄目だ。
そのため0°から360°の範囲で考えなくてはいけないときには、別途cosとかsinを見る必要がある。
atan2(double, double)はその点、-πからπまでの値を返してくれる。
どうせcosとsinが分かっていて、角度を知りたいときがほとんどなので、atanよりもatan2の方が使い易い。
ちなみに三角関数の逆関数が返す値の範囲をいつも忘れるのでメモ。
acosは-π/2からπ/2。
asinは0からπ。
それと角度を計算する時は単位に気を付ける。
大体、妙な動作をするときは決まって、度のまま三角関数を計算しようとしてしまっている。
しかしタンジェントは180度周期なので、360°で考えるときには、このままでは駄目だ。
そのため0°から360°の範囲で考えなくてはいけないときには、別途cosとかsinを見る必要がある。
atan2(double, double)はその点、-πからπまでの値を返してくれる。
どうせcosとsinが分かっていて、角度を知りたいときがほとんどなので、atanよりもatan2の方が使い易い。
ちなみに三角関数の逆関数が返す値の範囲をいつも忘れるのでメモ。
acosは-π/2からπ/2。
asinは0からπ。
それと角度を計算する時は単位に気を付ける。
大体、妙な動作をするときは決まって、度のまま三角関数を計算しようとしてしまっている。
2008/06/23
VMplayerのアップデート
yumでさまざまなアプリをアップデートしたせいで、カーネルもアップデートされてしまった。
そのせいでVMplayerが使えなくなってしまった。
これはかなり痛い。
/usr/bin/vmware-config.plを実行してみたが、途中でエラーを吐いて止まってしまう。
仕方が無くVMplayerをアップデートすることにした。
バージョンアップされていたので、アップデートしたら使えるのではないかと期待。
前と同じrpm版を落としてくる。
# rpm -Uvh VMware-player-2.0.4-93057.i386.rpm
でアップデート。
次いで、
# /usr/bin/vmware-config.pl
で設定。
デフォルトのまま、Enterを押していると、今度はOKだった。
これで今までのWindowsのイメージファイルが使えるようになった。
そのせいでVMplayerが使えなくなってしまった。
これはかなり痛い。
/usr/bin/vmware-config.plを実行してみたが、途中でエラーを吐いて止まってしまう。
仕方が無くVMplayerをアップデートすることにした。
バージョンアップされていたので、アップデートしたら使えるのではないかと期待。
前と同じrpm版を落としてくる。
# rpm -Uvh VMware-player-2.0.4-93057.i386.rpm
でアップデート。
次いで、
# /usr/bin/vmware-config.pl
で設定。
デフォルトのまま、Enterを押していると、今度はOKだった。
これで今までのWindowsのイメージファイルが使えるようになった。
2008/06/20
ヒートシンクお掃除
FC5を入れているPCのCPUがやたら熱くなっていた。
そこでケースについていた壊れたファンを交換してみた。
これで冷えるだろうと思いきや、全く効果が無かった。
最近は常時60度前後で、何か重い処理をするとすぐに70度とかになる。
ヒートシンクに直接風を当てても冷えないということなので、ヒートシンクからの放熱に問題があると思われた。
そこでヒートシンクの上についている、CPUファンを取り外してみた。
するとファンとヒートシンクの間に綿埃が層になって挟まっていた。
さらにヒートシンクの薄い金属板の間にも埃が挟まっていた。
埃を圧縮空気で吹き飛ばし、PCの電源をオンにすると、驚くほど温度が下がっていた。
常時60度前後だったのが、45度前後になった。
これで問題なく今年の夏を越せる。
そこでケースについていた壊れたファンを交換してみた。
これで冷えるだろうと思いきや、全く効果が無かった。
最近は常時60度前後で、何か重い処理をするとすぐに70度とかになる。
ヒートシンクに直接風を当てても冷えないということなので、ヒートシンクからの放熱に問題があると思われた。
そこでヒートシンクの上についている、CPUファンを取り外してみた。
するとファンとヒートシンクの間に綿埃が層になって挟まっていた。
さらにヒートシンクの薄い金属板の間にも埃が挟まっていた。
埃を圧縮空気で吹き飛ばし、PCの電源をオンにすると、驚くほど温度が下がっていた。
常時60度前後だったのが、45度前後になった。
これで問題なく今年の夏を越せる。
Firefox 3 続き
いくつかのPCで試したけど、Gmailから抜けるとき、おかしくなるのはThinkPad X23だけだと判明。
しかも必ずというわけでもなくて、問題なく抜けられることもある。
訳が分からない。
マウスジェスチャに関しては、All-in-One Gesturesのインストーラを書き換えると使えるらしい。
すぐに対応してくれても良さそうなものだ。
Linux版もFedora Core 5に入れようとしたけど、あえなく失敗。
GTK+のバージョンが2.10以降じゃないと使えないが、Fedora Core 5は2.8なので、GTK+をアップグレードしてくれと言われてしまう。
そもそもFC5にはもともとFirefox 2さえ入ってなかったし、ディストリ的にもう時代遅れだということか。
GTK+のアップグレードは面倒で試していない。
yumで簡単に出来るようなものでもなさそうなので、今のところFC5だけはFirefox 2で行く予定。
# yum update
ではうまく行かなかった。
余談だが、これでアップデートすると、Firefoxが2から1に戻されてしまった。
/usr/bin以下のFirefoxの実行ファイルを消して、Firefox 2の実行ファイルにリンクを貼っていたからだ。
なので後から直してやらないといけない。
yumは便利だけど、メジャーアップデートとかがあると面倒臭い。
しかも必ずというわけでもなくて、問題なく抜けられることもある。
訳が分からない。
マウスジェスチャに関しては、All-in-One Gesturesのインストーラを書き換えると使えるらしい。
すぐに対応してくれても良さそうなものだ。
Linux版もFedora Core 5に入れようとしたけど、あえなく失敗。
GTK+のバージョンが2.10以降じゃないと使えないが、Fedora Core 5は2.8なので、GTK+をアップグレードしてくれと言われてしまう。
そもそもFC5にはもともとFirefox 2さえ入ってなかったし、ディストリ的にもう時代遅れだということか。
GTK+のアップグレードは面倒で試していない。
yumで簡単に出来るようなものでもなさそうなので、今のところFC5だけはFirefox 2で行く予定。
# yum update
ではうまく行かなかった。
余談だが、これでアップデートすると、Firefoxが2から1に戻されてしまった。
/usr/bin以下のFirefoxの実行ファイルを消して、Firefox 2の実行ファイルにリンクを貼っていたからだ。
なので後から直してやらないといけない。
yumは便利だけど、メジャーアップデートとかがあると面倒臭い。
2008/06/18
Firefox 3
本日(6/18)午前2:00から正式版がリリースされた。
Firefoxのサイトはつながりづらくなっているが、早速DLしてみた。
Windowsだとexe形式で落ちてくる。
落としてきたファイルを実行するだけで、非常に簡単にFirefox 2から移行できた。
インターフェースは多少変わったが、特に大きな変更はないという印象。
設定は引き継がれるし、ブックマークもそのまま。
気になったのは、これまでのアドオンが一部使えなくなったということ。
Skypeはそのまま使えたが、SageとAll-in-One Gesturesが使えない旨の警告が出た。
SageはFirefox 3に対応した1.4が出ていたので、それを使えば問題なかったが、All-in-One Gesturesは使えなくなってしまった。
マウスジェスチャが使えないと非常に不便だ。
速度はややスピードアップしたかなという感想。
GmailとかGoogle Docs & Spreadsheetsとかがサクサク動くことを期待していたのだが、やっぱりそこまでは速くならなかった。
X23のハード的な問題も絡んでいるのかもしれない。
食べログ.comとか、YouTubeの表示は結構速くなった。
1つだけ気になる点は、Gmailからのログアウト時の挙動。
Gmailからログアウトしようとすると、突然CPU使用率が100%になり、メモリの使用量が際限なく上がっていく、ということが起こった。
この現象は再現性があった。
これはGoogleからのログアウトでは起こらなかった。
大騒ぎすることもないが、今回のバージョンアップで全体的に使いやすくなったと感じた。
後はマウスジェスチャとGmailの問題が何とかなってくれればいいのだが。
Firefoxのサイトはつながりづらくなっているが、早速DLしてみた。
Windowsだとexe形式で落ちてくる。
落としてきたファイルを実行するだけで、非常に簡単にFirefox 2から移行できた。
インターフェースは多少変わったが、特に大きな変更はないという印象。
設定は引き継がれるし、ブックマークもそのまま。
気になったのは、これまでのアドオンが一部使えなくなったということ。
Skypeはそのまま使えたが、SageとAll-in-One Gesturesが使えない旨の警告が出た。
SageはFirefox 3に対応した1.4が出ていたので、それを使えば問題なかったが、All-in-One Gesturesは使えなくなってしまった。
マウスジェスチャが使えないと非常に不便だ。
速度はややスピードアップしたかなという感想。
GmailとかGoogle Docs & Spreadsheetsとかがサクサク動くことを期待していたのだが、やっぱりそこまでは速くならなかった。
X23のハード的な問題も絡んでいるのかもしれない。
食べログ.comとか、YouTubeの表示は結構速くなった。
1つだけ気になる点は、Gmailからのログアウト時の挙動。
Gmailからログアウトしようとすると、突然CPU使用率が100%になり、メモリの使用量が際限なく上がっていく、ということが起こった。
この現象は再現性があった。
これはGoogleからのログアウトでは起こらなかった。
大騒ぎすることもないが、今回のバージョンアップで全体的に使いやすくなったと感じた。
後はマウスジェスチャとGmailの問題が何とかなってくれればいいのだが。
2008/06/11
2008/06/01
Solid Edge 2D Draftingでdxfファイルを扱う
Solid Edgeを使っていて、dxfファイルを開きたくなるときがある。
ところがこのとき問題がおきる。
デフォルトがインチになっていて、mmで書かれた図が拡大されて取り込まれてしまうのだ。
開発元がアメリカだからなのだろうが、こういった仕様は何とかして欲しい。
世界的にはmmだろう。
設定をいじってもうまく読めないので、配布元に連絡してみた。
そこで判明したやり方は以下のとおり。
1.まず[ファイルを開く]を用いて、dxfファイルをクリックする。
2.ダイアログボックスの[オプション]をクリックする。
3.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の1]というウィンドウで[次へ]をクリックする。
4.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の2]で単位をmmとし、[次へ]をクリックする。
5.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の4-7]で[次へ]をクリックする。
6.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[新規構成ファイルを作成する]を選択し、[コピー先]をクリックする。
7.[名前をつけて保存]で適当なファイル名をつけて、[保存]をクリックする。
8.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[完了]をクリックする。
これで開けばいい。
7.で決めた設定ファイルが呼ばれるので、次からは特に指定する必要は無い。
ところがこのとき問題がおきる。
デフォルトがインチになっていて、mmで書かれた図が拡大されて取り込まれてしまうのだ。
開発元がアメリカだからなのだろうが、こういった仕様は何とかして欲しい。
世界的にはmmだろう。
設定をいじってもうまく読めないので、配布元に連絡してみた。
そこで判明したやり方は以下のとおり。
1.まず[ファイルを開く]を用いて、dxfファイルをクリックする。
2.ダイアログボックスの[オプション]をクリックする。
3.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の1]というウィンドウで[次へ]をクリックする。
4.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の2]で単位をmmとし、[次へ]をクリックする。
5.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の4-7]で[次へ]をクリックする。
6.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[新規構成ファイルを作成する]を選択し、[コピー先]をクリックする。
7.[名前をつけて保存]で適当なファイル名をつけて、[保存]をクリックする。
8.[AutoCADからSolid Edgeへの変換ウィザードーステップ8の8]で[完了]をクリックする。
これで開けばいい。
7.で決めた設定ファイルが呼ばれるので、次からは特に指定する必要は無い。
2008/05/28
2008/05/25
Cでのプログラムあれこれ
1つ目のTipsはガウス記号について。
ガウス記号を用いるのにどうすればいいのか、良く知らなかった。
そこでこれまでは、(int)(double x)みたいな書き方をしていた。
こうするとxが正だったら、小数点以下を取ってくれる。
ただし負だと期待した動作にならない。
ただ小数点以下を取ってしまうので、欲しい値よりも+1された値が返ってくる。
具体的には、例えば-2.8は-3になって欲しいのに、-2になってしまう。
なので、正か負かをあらかじめ考えておく必要があった。
実際にはfloor関数を用いればよい。
これはガウス記号とまったく同じ動作をしてくれるので、正負に注意する必要がない。
これは床関数といい、これとは反対に天井関数というものもある。
天井関数はceil関数を用いる。
2つ目はgccについて。
sinとかcosの三角関数を使うようなとき、gccでコンパイルしようとするとエラーを吐く。
これを回避するには、-lmオプションを指定すればいい。
ガウス記号を用いるのにどうすればいいのか、良く知らなかった。
そこでこれまでは、(int)(double x)みたいな書き方をしていた。
こうするとxが正だったら、小数点以下を取ってくれる。
ただし負だと期待した動作にならない。
ただ小数点以下を取ってしまうので、欲しい値よりも+1された値が返ってくる。
具体的には、例えば-2.8は-3になって欲しいのに、-2になってしまう。
なので、正か負かをあらかじめ考えておく必要があった。
実際にはfloor関数を用いればよい。
これはガウス記号とまったく同じ動作をしてくれるので、正負に注意する必要がない。
これは床関数といい、これとは反対に天井関数というものもある。
天井関数はceil関数を用いる。
2つ目はgccについて。
sinとかcosの三角関数を使うようなとき、gccでコンパイルしようとするとエラーを吐く。
これを回避するには、-lmオプションを指定すればいい。
2008/05/21
2008/05/17
MobileMeter
MobileMeterはノートPCのCPUとHDDの温度をモニターする。
仕組みはよく分からないのだが、Core Tempと違って、X23でも温度モニター可能。
その他、CPUのクロック数が変動している様も見ることが出来る。
が、X23で900MHz以上の周波数を返してくることがあったりした。
ちなみに上限は866MHz。
X23のCPU温度は60度程度、HDDは40-45度。
ノートだとこんなもんか。
VMwareのXPに入れてみたが、こちらはCPUのクロックのみモニターできた。
仕組みはよく分からないのだが、Core Tempと違って、X23でも温度モニター可能。
その他、CPUのクロック数が変動している様も見ることが出来る。
が、X23で900MHz以上の周波数を返してくることがあったりした。
ちなみに上限は866MHz。
X23のCPU温度は60度程度、HDDは40-45度。
ノートだとこんなもんか。
VMwareのXPに入れてみたが、こちらはCPUのクロックのみモニターできた。
2008/05/07
2008/05/05
FC5その後
CPUを注意してモニターしていると、スクリーンセーバを表示しているとき、CPU使用率が100%になり、温度が70度程度まで上がることに気づいた。
そこでCPUに負担をかけないように、スクリーンセーバを真っ暗になるだけにした。
これで劇的な改善が見られた。
CPU温度は大体50-60度で安定するようになり、この状態でシステムも安定した。
CPU温度60度後半は危険水域で、これくらいでほぼ間違いなく熱暴走し始める。
もう少しマージンを取りたいのだが、PCの蓋を開けっ放しにしても効果が見られない。
モニターできているので、危なくなるとすぐにそれと分かるようになっただけだが、それでも幾分マシな状況にはなった。
そこでCPUに負担をかけないように、スクリーンセーバを真っ暗になるだけにした。
これで劇的な改善が見られた。
CPU温度は大体50-60度で安定するようになり、この状態でシステムも安定した。
CPU温度60度後半は危険水域で、これくらいでほぼ間違いなく熱暴走し始める。
もう少しマージンを取りたいのだが、PCの蓋を開けっ放しにしても効果が見られない。
モニターできているので、危なくなるとすぐにそれと分かるようになっただけだが、それでも幾分マシな状況にはなった。
2008/04/29
FC5でCPUとHDDの温度を監視する
FedoraCore5を使っているが、近頃どうしようもなくXの調子が悪い。
手始めに時計とかボリュームのアプリが落ち始め、連鎖的に落ちた挙句、最終的にXが落ちたり、あるいはそういう前触れなしに、いきなりXが落ちたりする。
前にディストリを入れ替えたが、そういえばそのときもXの不調が原因だったように思う。
そこでよくよく観察していると、CPUに大きな負荷がかかった時にXが駄目になっていた。
2つのディストリで同じような問題が発生したという事実を踏まえれば、これはハードの問題を疑わざるを得ない。
CPUの負荷を上げたときに落ちやすいことから、今の段階では、電源やメモリではなく、熱による暴走を疑っている。
そこでCPUの温度をモニターすることにした。
FC5でCPUの温度をモニターするには、GNOME Sensors Appletを用いる。
やり方はこことここを参考にした。
まずyumでGNOME Sensors Appletとhddtempを持ってくる。
# yum install gnome-applet-sensors
# yum install hddtemp
次にhddtempを起動し、自分の環境に合わせて、HDDを指定する。
# hddtemp -d /dev/hda
さらに[デスクトップ]>[設定]>[他の個人設定]>[セッション]で、[自動起動するプログラム]にhddtemp -d /dev/hdaを追加する。
こうしておいて再度ログインすると、Hardware Sensors Monitorというのが、パネルに追加できるようになっている。
これでパネルに温度を表示できる。
このアイコンを右クリックし、Sensorsタブを見ると、動いているセンサーが確認できる。
自分の環境ではacpiの下にCPUという項目があり、これはデフォルトでONになっていた。
一方HDDのほうはONになっていなかったので、hddtempのプロパティで、Enabledにチェックを入れた。
今の段階では、アイドル状態でCPU温度が51度、HDDの温度は36度になっている。
今後、監視してみて、落ちるときの温度をみてみよう。
手始めに時計とかボリュームのアプリが落ち始め、連鎖的に落ちた挙句、最終的にXが落ちたり、あるいはそういう前触れなしに、いきなりXが落ちたりする。
前にディストリを入れ替えたが、そういえばそのときもXの不調が原因だったように思う。
そこでよくよく観察していると、CPUに大きな負荷がかかった時にXが駄目になっていた。
2つのディストリで同じような問題が発生したという事実を踏まえれば、これはハードの問題を疑わざるを得ない。
CPUの負荷を上げたときに落ちやすいことから、今の段階では、電源やメモリではなく、熱による暴走を疑っている。
そこでCPUの温度をモニターすることにした。
FC5でCPUの温度をモニターするには、GNOME Sensors Appletを用いる。
やり方はこことここを参考にした。
まずyumでGNOME Sensors Appletとhddtempを持ってくる。
# yum install gnome-applet-sensors
# yum install hddtemp
次にhddtempを起動し、自分の環境に合わせて、HDDを指定する。
# hddtemp -d /dev/hda
さらに[デスクトップ]>[設定]>[他の個人設定]>[セッション]で、[自動起動するプログラム]にhddtemp -d /dev/hdaを追加する。
こうしておいて再度ログインすると、Hardware Sensors Monitorというのが、パネルに追加できるようになっている。
これでパネルに温度を表示できる。
このアイコンを右クリックし、Sensorsタブを見ると、動いているセンサーが確認できる。
自分の環境ではacpiの下にCPUという項目があり、これはデフォルトでONになっていた。
一方HDDのほうはONになっていなかったので、hddtempのプロパティで、Enabledにチェックを入れた。
今の段階では、アイドル状態でCPU温度が51度、HDDの温度は36度になっている。
今後、監視してみて、落ちるときの温度をみてみよう。
2008/04/25
cron
自動的にある時間ごとに実行していて欲しいプログラムがある。
このとき一定時間ごとに動くようにシェルを書くというのも1つの手だが、どんなきっかけでプロセスが終わってしまうとも限らない。
そういうのをターミナルから実行するのは、嬉しくない。
こういうときはcronを使えばいい。
時間間隔と実行して欲しいシェルを指定すると、あとは勝手に実行してくれる。
デーモンとして動いてくれるので、予後を気にする必要がない。
設定は非常に簡単。
$ crontab -e
と打てばいい。
こうすると、デフォルトのエディタで、設定ファイルが立ち上がる。
そこに例えば、
SHELL=/bin/bash
DIR=/home/hoge
0 1 * * * $DIR/hoge.sh
とか書いておく。
この例だと、1時間に1回、/home/hoge以下のhoge.shを実行してくれる。
デフォルトのエディタはFC5だとviだが、これはexportで指定できる。
export EDITOR=emacs
というのを.bashrcに足しておけばいい。
それと自分の環境では、シェルを実行するたびにいちいちメールが来るようになっていた。
これを回避するには、crontabに、
MAILTO=""
という1行を書いておけばいい。
ちなみに実行するhoge.shに、ROOTが入っている場合、hoge.shに環境変数の追加が必要になる。
自分の環境では、ROOTSYSとROOTDIR、PATH、LD_LIBRARYを付け加えると動いた。
それとファイルの場所はフルパスで指定する必要がある。
このとき一定時間ごとに動くようにシェルを書くというのも1つの手だが、どんなきっかけでプロセスが終わってしまうとも限らない。
そういうのをターミナルから実行するのは、嬉しくない。
こういうときはcronを使えばいい。
時間間隔と実行して欲しいシェルを指定すると、あとは勝手に実行してくれる。
デーモンとして動いてくれるので、予後を気にする必要がない。
設定は非常に簡単。
$ crontab -e
と打てばいい。
こうすると、デフォルトのエディタで、設定ファイルが立ち上がる。
そこに例えば、
SHELL=/bin/bash
DIR=/home/hoge
0 1 * * * $DIR/hoge.sh
とか書いておく。
この例だと、1時間に1回、/home/hoge以下のhoge.shを実行してくれる。
デフォルトのエディタはFC5だとviだが、これはexportで指定できる。
export EDITOR=emacs
というのを.bashrcに足しておけばいい。
それと自分の環境では、シェルを実行するたびにいちいちメールが来るようになっていた。
これを回避するには、crontabに、
MAILTO=""
という1行を書いておけばいい。
ちなみに実行するhoge.shに、ROOTが入っている場合、hoge.shに環境変数の追加が必要になる。
自分の環境では、ROOTSYSとROOTDIR、PATH、LD_LIBRARYを付け加えると動いた。
それとファイルの場所はフルパスで指定する必要がある。
2008/04/19
bashからROOTのマクロを動かす
シェルからROOTのマクロを呼びたいときがある。
これには下記のように打てばいい。
$ root -r -b -l -q hoge.C("hoge.dat")
-qがROOTの実行後、シェルに復帰させるためのオプション。
さらにこの読み込むファイルを変数にするには、
$ root -r -b -l -q hoge.C(`printf 'hoge.C("%s")' $data`)
と打てばいい。
$dataはファイル名を別途入れる。
ここで注意する必要があるのは、"のところ。
ROOTのマクロでファイルを引数に取るには、"を用いる必要があって、'とかだとエラーを吐く。
printfのほうは"でも'でも問題ないが、ROOTのマクロは"である必要がある。
これには下記のように打てばいい。
$ root -r -b -l -q hoge.C("hoge.dat")
-qがROOTの実行後、シェルに復帰させるためのオプション。
さらにこの読み込むファイルを変数にするには、
$ root -r -b -l -q hoge.C(`printf 'hoge.C("%s")' $data`)
と打てばいい。
$dataはファイル名を別途入れる。
ここで注意する必要があるのは、"のところ。
ROOTのマクロでファイルを引数に取るには、"を用いる必要があって、'とかだとエラーを吐く。
printfのほうは"でも'でも問題ないが、ROOTのマクロは"である必要がある。
TGraph2DとTH2
x座標、y座標、値の3つが並んだファイルがあったとする。
このときこれを2次元的なコンターマップにしたいとする。
これにはTGraph2DとTH2のどちらかを使えばいい。
ただし両者の振る舞いはかなり異なる。
TGraph2Dは各座標の値の中間値を計算しているらしく、やたらと時間がかかるし、x座標が全て共通だった場合、つまり線のような入力だとエラーを吐く。
2次元のマップにならないと駄目なようだ。
一方TH2はヒストグラムなので、入力が実質線であろうと関係ないし、時間も短い。
状況に応じて使い分ければいいのだろう。
このときこれを2次元的なコンターマップにしたいとする。
これにはTGraph2DとTH2のどちらかを使えばいい。
ただし両者の振る舞いはかなり異なる。
TGraph2Dは各座標の値の中間値を計算しているらしく、やたらと時間がかかるし、x座標が全て共通だった場合、つまり線のような入力だとエラーを吐く。
2次元のマップにならないと駄目なようだ。
一方TH2はヒストグラムなので、入力が実質線であろうと関係ないし、時間も短い。
状況に応じて使い分ければいいのだろう。
ROOTのマクロでファイルを引数に取る
ROOTのマクロに限った話ではないが、引数にファイルを取りたいとする。
ついでに存在しないファイルを引数に取ったときは、エラーを吐くようにしたい。
これを実現するには、以下のようにすればいい。
void hoge(const char* fname)
{
ifstream fin;
fin.open(fname);
if(!fin.good()){
cerr << "Can not open " << fname << "!\n";
return NULL;
}
}
fnameはファイル名、finがファイルのポインタ。
ついでに存在しないファイルを引数に取ったときは、エラーを吐くようにしたい。
これを実現するには、以下のようにすればいい。
void hoge(const char* fname)
{
ifstream fin;
fin.open(fname);
if(!fin.good()){
cerr << "Can not open " << fname << "!\n";
return NULL;
}
}
fnameはファイル名、finがファイルのポインタ。
登録:
投稿 (Atom)