忍者ブログ
日々の研究生活のメモ書きなど

(2010/11/22)
勢いでblogを作成してしまいました。

扱うテーマについては、C言語(たまーにc++も)、gnuplot、Debian、Macなどです
(これから他のジャンルに手を出していく可能性もあります)
メモ書き程度のものですが、同じことで悩んでいる方の役に立てれば幸いです

本業は学生で、物理屋を目指しています


( 2015/11/6 追記)
「bus error」「segmentation fault」で来られた方にはとてもイラっとするブログタイトルで申し訳ありません
bus error はファイルの入出力関連
segmentation fault は配列のindexまわりのエラーである可能性があるので、そこらへんをチェックしてください



PR

こんな感じでOK
[ ]の中はすべて半角スペースで区切る
[ と !の間にスペース、$FILEのEと]の間のスペースを忘れるとエラーで怒られる
if [ ! -s $FILE ]; then
# ファイルサイズが0のとき
fi





似たようなのでこんな記事もある

■ 参考 : 【シェルコマンド】ファイルサイズが0のファイルを削除する












やりたいことは
文章前半に出てきた式(19)という式番号を何らかの変数に代入して保存
文章後半で、その式をもう一度書いて、そのときの式番号を(19)にしたい


一応、これを簡単にできる方法は過去の記事にまとめた(約6年前に)

■ 過去記事 : 【TeX】数式番号に章番号を付加・途中の式番号から

■ 過去記事 : 【TeX】数式番号を途中から(2)
\begin{align}
 A=B
\end{align}
% 上記の式番号が(19)

% 中略

\setcounter{equation}{18}
\begin{align}
 A=B
\end{align}
% 式の内容は上記の式(19)と同じなので、この式にも(19)と付けたい
\setcounter{equation}{30}
% 30は適当に書いたので、この式の直前の番号ときちんと接続する数字を書く
この方法でもとりあえず目的は達成できます(上の記事ではこの方法について書いてる)
ただ、19とか30って数字は中略の部分に文章に当たらしいい式を追加したらずれてしまう
なのでまた修正しないといけない・・・・・
めんどくさいし、たぶんミスる・・・・


そ こ で 、
最初の式(19)の直前に現在の式番号を変数に代入して保存しておく
それを2度目の式(19)のときに\setcounterで代入してやれば、特に何も気にする必要がなくなるはず

ただ、\setcounterで値を設定できるのはequationとかsectionとかデフォルトで入っている変数のみ
どんな変数があるかは以下にまとめられていた

■ 参考 : カウンタ


ユーザーが新しくカウンターを用意する方法は、
\newcounter{hoge1}
\setcounter{hoge1}{5}
みたいな感じでOK
これでhoge1というカウンターに5を代入できる
また、hoge1というカウンタに入っている数字を参照するときは、\value{hoge1}のようにする



これを使って、上記の式を書き直すと、
% hoge1とhoge2というカウンタを用意する
\newcounter{hoge1}
\newcounter{hoge2}

% 式(19)の前にhoge1に今の式番号を保存、18が代入されているはず
\setcounter{hoge1}{\value{equation}}
\begin{align}
 A=B
\end{align}
% 上記の式番号が(19)

% 中略


% setcounterで式番号を18にする前に、現在の式番号をhoge2に保存しておく、後で元の数字に戻すときに使うので
\setcounter{hoge2}{\value{equation}}
% ここでequationに18を代入する、これで次の式が(19)になる
\setcounter{equation}{\value{hoge1}}
\begin{align}
 A=B
\end{align}

% 式番号を元の数字に戻す
\setcounter{equation}{\value{hoge2}}
これで、中略の部分に式を追加しても特に新しくここを修正する必要はなくなった
















\newcommand{\lbar}{\lambda \kern -0.5em\raise 0.5ex \hbox{--}}

■ 参考 : LaTeXでラムダバーを表示する方法 [ TeX ]

とか
\newcommand{\lambdabar}{{\mkern0.75mu\mathchar '26\mkern -9.75mu\lambda}}

■ 参考 : How can I type “lambda-bar”?

とか
\usepackage{txfonts}
$\lambdabar$

3番目の方法は、txfonts.styが入ってなくてダメだった












{\bf {\it n}}
ではできないので、
\boldsymbol n
を使う



こんな感じ↓

bf

■ 参考 : 5.9 数式モードにおけるボールド体


















よくアクセス解析をしてると、URLの中身が%に置き換わってたりして何書いてるのか全然わからないことがある・・・

そういうときは、以下のページに入力すると変換して見やすくなる


■ 参考サイト : URLエンコード・デコードフォーム

例として、この記事のURLは次のように変換される
http://coffee.guhaw.com/Entry/697/
  ↑
  ↓
http%3a%2f%2fcoffee%2eguhaw%2ecom%2fEntry%2f697%2f





ググったら、これはnkfコマンドとかを使えば同等のことができるっぽい
echo 'http://coffee.guhaw.com/Entry/697/' | nkf -WwMQ | tr = %
  ↓
http%3A%2F%2Fcoffee%2Eguhaw%2Ecom%2FEntry%2F697%2F

また、逆は、
echo 'http%3a%2F%2Fcoffee%2Eguhaw%2Ecom%2FEntry%2F697%2F' | nkf -w --url-input
  ↓
http://coffee.guhaw.com/Entry/697/









condorに関する過去記事

■ 過去記事 : 【condor】について調べたのでメモ


■ 過去記事 : 【condor】shared libraryを使ったプログラムをジョブに渡すとき





condor_rmのヘルプを見るとタイトルと関係あるオプションを見つけてしまった
(スペースとタブが潰れたので見にくい・・・)
Usage: condor_rm [options] [constraints]
 where [options] is zero or more of:
  -help Display this message and exit
  -version Display version information and exit
  -long Display full result classad
  -totals Display success/failure totals
  -name schedd_name Connect to the given schedd
  -pool hostname Use the given central manager to find daemons
  -addr Connect directly to the given "sinful string"
  -reason reason Use the given RemoveReason
  -forcex Force the immediate local removal of jobs in the X state
     (only affects jobs already being removed)
 and where [constraints] is one of:
  cluster.proc Remove the given job
  cluster Remove the given cluster of jobs
  user Remove all jobs owned by user
  -constraint expr Remove all jobs matching the boolean expression
  -all Remove all jobs (cannot be used with other constraints)


単体のジョブを消すときは、
condor_rm [ID]

自分が投下したジョブをすべて止めるときは、
condor_rm [user name]
 または
condor_rm -all


condor_rm -constraint
で、条件文を書いてそれにmatchしたジョブだけを取り消せるらしい
ちなみに-constraintは-constと省略することもできるっぽい

条件文は、
condor_rm -const 'ClusterId > 3880'
な感じで書く
condor_qで表示されるジョブIDはClusterIdと呼ばれるらしい(CとIは大文字)

この変数名を探すのにかなり苦労したが、
condor_q -long | grep "3571"
みたいな感じで調べた
他にもやたら変数がセットされてるっぽいので、それらも使えるかもしれない(試してないけど)





















自分の症状としては、bluetoothで接続したマウスとキーボードの接続が頻繁に切れる(1時間に1回くらいの頻度で)
さらにマウスに至っては動きがもっさりしている
普通、右に1cm同じように動かしたら毎回同じ距離を画面上で動くはずだけど、
それが毎回違う距離を動いてしまう・・・

電池を交換してみたが改善せず
最初はマウスの下面にあるセンサー部分に髪の毛が挟まって誤作動してるかのと思って掃除したけど改善せず・・・(何度かそういうことはあったので)
で、マウスのせいかと思って、新しいマウスに変えてみたけど改善せず・・
マウスパッドのせいかな、と思って洗浄したけどダメ


となると、bluetooth接続に問題がある?
Mac miniとマウスの位置関係で信号がきちんと届いていないのかと思って、Mac miniの受光部の場所を調べたけどよくわからん・・・

一応、bluetooth関連のトラブル改善リストがあったので下にメモしておく
ちなみにこれをやったあとは、症状がなくなった気がする(1週間後にどうなってるかは追記しておく・・・)




(2017/04/17 追記)

1週間は経っていないけど状況を追記
マウスを動かしたときに、マウスカーソルの動きがもっさりする現象については無くなった
また、頻繁にbluetooth接続が切れる現象もなくなった
ので、おそらく以下のどれかが効果的に働いたんだと思う・・・(どれかはわからんが)

と書こうと思ってたら、少しだけマウスカーソルがもっさりしだしたぞ・・・





1. Macの再起動
これはまぁ基本、どんなトラブルでも最初にやるよね

2. bluetoothのON/OFF
右上のアイコンからできるが、今回はUSBのマウスがないのでこれはできなかった

3. bluetoothの再ペアリング
一度、登録しているマウスをリストから削除して、もう一度再ペアリングする
これも2と同じ理由でできなかった

4. bluetooth関連の設定ファイルを削除する
/Library/Preferences/com.apple.Bluetooth.plist
を消す
削除前にバックアップを取っておくようにした方がいい
その後再起動

5. PRAMリセット
単純な再起動ではなくて、NVRAMというのを綺麗にする再起動らしい
Macの電源を落とす
 ↓
電源を入れる
 ↓
デーンと鳴ったら command + option + p + r を長押し
 ↓
もう一度デーンとなったら、PRAMリセット成功
(スーファミの裏技みたいだな・・・)

















sshログインしてたら、次のようなエラーがログイン時に表示されるようになった
/usr/bin/xauth: error in locking authority file /somewhere/.Xauthority
/somewhereは自分のホームディレクトリ

rm ~/.Xauthority-c
:> .Xauthority
chmod 600 ~/.Xauthority
で、エラーはでなくなった
何が原因で起こったんだ?
















前回は塗りつぶしのプロットを書いた

■ 過去記事 : 【gnuplot 6】gsl-histogramの結果を塗りつぶしてプロットしたい

(今気づいたけどgnuplot6になってますよ・・・おいおい・・・)


今回は、with stepsでこれをプロットしたい
今まで単一のデータをプロットするときは、塗りつぶしプロットでも用は足りていたが、2種類のデータを塗りつぶしのwith boxesで重ねると
多少は透過させているとはいえ、見にくい・・・・
単純にwith stepsで2つのデータをプロットすると、一見綺麗に書けるが
set log yとしてみると、データ点が入っていないbin(y軸の値が0になるbin)の処理がlogスケールなので、想像と違うことになってしまう・・・


hoge2


カウントが0のbinの端の処理が嫌・・・・
with boxesでもいいかなぁ〜と思っていたが解決方法に気づいたので、ここに書いとく・・・




まずはデータの用意
gsl-randist 0 1000 rayleigh 10 | gsl-histogram 0 50 30 > hoge.txt
gsl-randistで1000個の乱数データを生成して、
gsl-histogramで0から50の間を30個のbinで分けてヒストグラムのデータを生成する
plot [:][0.1:] "hoge.txt" u 1:3 w steps lw 3 lc 2
でこれ

hoge3
特に問題なさそう・・・・
けど、もっとデータ点が増えてくると、y軸をlogスケールにしたくなる・・・
set log y
plot [:][0.1:] "hoge.txt" u 1:3 w steps lw 3 lc 2
hoge2

矢印を書いたあたりの側面の処理がなんか嫌・・・
with stepsは(x_1, y_1)の点から(x_2, y_2)の点に向かって垂直な直線を引くようなプロットらしい
それでそのうちのいずれかがy=0だとy軸がログスケールだと、直線が引かれない仕様らしい

思いついた解決方法は、三項演算子でy=0になっている点はy=0.0001のようなグラフに影響が出ないような小さい数字を代わりに当てはめてプロットする方法

set log y
plot [:][0.1:] "hoge.txt" u 1:($3 == 0 ? 0.001 : $3) w steps lw 3 lc 2
hoge3












plot "hoge.txt" every n
で最初の1点を打った後、次の(n-1)点を飛ばして、その次はn番目のデータをプロットする
実際に使うときはnじゃなくて(n=3と事前に打っておくならnでもいいけど)3とか整数値に置き換えて使う

plot "hoge.txt" every n u 1:3 w lp
のようにプロットタイプはeveryの後に打つっぽい
every nの前に打つと、エラーが出たのでダメっぽい

このeveryはfor文のようにもっと複雑なことができるけど、そこまでは・・・・いいや・・・


















まずデータの紹介

これがhoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
1111 0.79844
3333 0.911647
3333 0.197551
4444 0.335223
これがhoge2.txt
3333.0 0.840188
4444.2 0.394383
1111.1 0.783099
1111.2 0.79844
3333.0 0.911647
3333.5 0.197551
4444.9 0.335223
hoge1.txtは$1が整数だけど、
hoge2.txtは$1が小数なのでhoge1.txtと同じ方法では重複を判別できない




ググったらまずは「uniqを使うんや」という知見を得たのでやってみた。

まずuniqコマンドの使い方は、
% uniq hoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
1111 0.79844
3333 0.911647
3333 0.197551
4444 0.335223
で、連続して重複した行を1つにまとめてくれるはずなのだが、
行全体の一致を調べてくれているので、この場合は役に立たない
%uniq -c hoge1.txt
で、一致している行には数字を打ってくれる機能をうまく使えばなんとかできる気がしたけど、
アフォなのでパス

また、連続していない重複は消してくれないので
もし連続していない別の列との重複も消したい場合は事前にsortしておく必要がある


■ 参考 : uniq コマンド







googleで「sort 重複 -uniq」で調べたらやっと出てきた・・・

■ 参考 : ソートしないで重複行を削除する
awk '!a[$0]++' FILE
でいいらしい
説明は参考リンクにあるのでパス(正直わからんちん)


このコマンドをそのままこれそのまま打っても ! がダメっぽい
シェルスクリプトとかにすればいける?
% awk '\!a[$1]++' hoge1.txt
3333 0.840188
4444 0.394383
1111 0.783099
で、! をエスケープすればたぶんOK

一応、これでhoge1.txtの$1から重複してるものを取り除くことはできた
他の行の重複を調べたいときは$1を置き換えればOK


他には、$2が大きいものから残しているようにしたかったら
% sort -k2 -r -g hoge1.txt | awk '\!a[$1]++'
3333 0.911647
1111 0.79844
4444 0.394383
ただし、$1の並び順はめちゃくちゃになるけど

(2017/4/13 追記)
上記のソートで sort -k -r -nと書いていたけど、nオプションは整数を並べ替えるときに使うっぽい
符号を含んだ実数(+1e-5とか-1e-13)とかは-gオプションを付けてソートする






次にhoge2.txtの$1の整数部分を取り出してみる
% awk '{print int($1), $1, $2}' hoge2.txt

または

% awk '{printf "%d %f %f\n", $1, $1, $2}' hoge2.txt
1つめの方法を見つけたときに、ほほ〜と思ったけど、2つめのprintfでごり押した方が早かったわ・・・・

これで、データを整数型にできれば、あとはhoge1.txtと同様にして重複部分を取り除けるわー






















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

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

■ 参考 : Cern ROOT quick reference for paw users





y軸の範囲指定は、

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
















昔書いた気もするけど、グラフにエラーバーを付けたことがあるのって4年生以来だから一体何年舞なんだよ・・・って感じだ・・・・
とはいえ、実際に測定したものにエラーバーを付けるのではなくて
自分の場合ほとんどがモンテカルロシミュレーションを繰り返しやって、それにエラーバーを付ける程度の使い方だけど・・・・




どういうエラーバーを付けられるかは、次のページを見てもらうのが一番早い

■ 参考 : gnuplot demo script: mgr.dem


X軸方向のエラーバー、Y軸方向のエラーバー、X軸とY軸両方に伸びてるエラーバー全部できる
ただし、ちょっとめんどくさい制約が・・・・
詳細は次のページに書かれてる

■ 参考 : 34.2 Errorbars


まずはデータ作り
% seq 1 20 > hoge.txt
% awk '{x=rand*10; print $1, x, sqrt(x)}' hoge.txt > foo.txt

% cat foo.txt
1 8.40188 2.8986
2 3.94383 1.98591
3 7.83099 2.79839
4 7.9844 2.82567
5 9.11647 3.01935
6 1.97551 1.40553
7 3.35223 1.83091
8 7.6823 2.7717
9 2.77775 1.66666
10 5.5397 2.35366
11 4.77397 2.18494
12 6.28871 2.50773
13 3.64784 1.90993
14 5.13401 2.26584
15 9.5223 3.08582
16 9.16195 3.02687
17 6.35712 2.52133
18 7.17297 2.67824
19 1.41603 1.18997
20 6.06969 2.46367



plot "foo.txt" u 1:2:3 w e
でエラーバー付きのグラフが書ける

hoge1


u 1:2:3だけではダメで、それにw e(with errorbarsの略)を付ければOK
plot "foo.txt" u 1:2:(sqrt($2)) w e
でも同じプロットが書けるはず



データ点を線で結びながら、エラーバーを付ける場合は2回プロットしないといけなくて、
plot "foo.txt" u 1:2:3 w e, "" u 1:2 w l lw 2
hoge2

ここまで調べてわかったのが w eはwith yerrorbarsの略称らしい
他には
w xe : x軸方向のエラーバー
w ye : y軸方向のエラーバー
w xye : x軸とy軸方向両方にエラーバー
があるらしい

w xyeを使う場合はu 1:2:3:4のように4つ使うデータ列を指定しないといけない
例えば、
plot "foo.txt" u 1:2:($2/10.0):($2/10.0) w xye lc 7
で、

hoge3

他の形のエラーバーを使いたかったら、以下を参照

■ 参考 : gnuplot demo script: mgr.dem

























TeXで画像を貼付ける方法はむかーし記事に書いた
(まさかの7年前である・・・ 寿命のうち約1/10もこのブログを書き続けてるのか・・・)

■ 過去記事 : 【LaTeX】pdfファイルを切り出してTeXに貼り付け

■ 過去記事 : 【TeX】bbがあるのに画像が貼付けられない

■ 過去記事 : 【TeX】mediabb.styがすごい便利





ちなみに上記の記事ではebbというコマンドを使っているが、
\usepackage[dvips,dvipdfmx]{graphicx}
というパッケージを使うようになったので今はebbではなく、extractbbというコマンドが必要




今回、これに関連した情報を見つけたのでメモしておく・・・・

■ 参考 :extractbb の自動実行許可の設定
ただし,以下に挙げる方法は間違いであることに注意してください.
mediabb パッケージを用いる: mediabb は(現在の)dvipdfmx には対応していません.
まーじかー・・・
まぁ使ってないから関係ないけど・・・


で、extractbbを自動で実行するように設定変更ができるらしいのでやってみる・・・・

■ 参考 : TeX Live 2014 以前と MacTeX-2014 以前

tlmgr というコマンドが使える場合は
tlmgr conf texmf shell_escape_commands `kpsewhich -var-value shell_escape_commands`
でいけるらしいが、
tlmgrがないのでダメポ・・・


たぶんこのコマンドを使って、設定ファイルに追記をしているだけだと思うので場所を調べて手で修正することにする・・・・
設定ファイルの場所は、
kpsewhich -all texmf.cnf
でわかる

今回は、macportsで入れたTeXなので /opt/local/etc/texmf/texmf.cnf だった
sudo emacs /opt/local/etc/texmf/texmf.cnf

shell_escape_commands の変数の場所に extractbb を追記すればOK












こういうcontourにlabelを書き込むことがやりたかった

blog
一応やり方は記事にまとめられてるけど、よくわからん
■ 参考 : Contour plots



それで他の方法を探してみたら、こんなのを見つけた

■ 参考 : Labels with white background in LaTeX terminals

■ 参考 :Label size in epslatex terminal

■ 参考 :Images within a graph

特に最後の写真にlabelを貼付けるのは職人すぎるわ・・・・
自分ならkeynoteで矢印を付けて、それを保存してるところだ・・・













なんか自分の書いたコードが思っているのと違う挙動をしていてちょっと困った・・・・

fprintf(stdout, "hoge ");
みたいな感じで改行を挟まずにループを何個も回して、最後に
fprintf(stdout, "\n");
と改行を入れるコード

実際に動かしてみると、待ってもhogeが表示されない・・・
しかし計算はどんどん進んでいっていることがstderrの情報からはわかる
stdoutは内部に出力バッファを持っていて、printfやfprintfでは改行文字を出力するか出力バッファが一杯になるまで溜め込みます。
改行文字がなくても強制的に吐き出させるのが fflush です。
■ 参考 : fflush(stdout)の意味

とのことらしい
なるほどね・・・
fprintfは、\nが来るまで実際に画面表示がされないというのは今回初めて知った・・・・

今回のコードでstderrは毎回\nが入っていたので、その都度表示されていたのも納得がいった
なおかつ、stderrとstdoutはバッファが違うから、今回のようなことになったんだろうなぁ〜















■ 参考 : sedを使って複数ファイルの文字列を一気に置換する


find *.c | xargs sed -i "s/hoge/foo/g"

これで、今のディレクトリの .c で終わるファイルの中身で、hogeをfooに一括置き換えできる

sedの-iオプションはファイルを上書き保存するオプション

sedは便利だけどsとかgとか絶対に忘れるのでメモしておく・・・











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

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

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

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



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

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









■ 過去記事 :【gnuplot】を使ってリサージュ曲線のgifを作りたいとき、

以前こんな記事を書いた↑

プロットするデータを(例えば)100行ごとに空行を入れて生成すると
gnuplotでindexというオプションを使って分割プロットができる(1つの空行でいけるはずだけど、なぜかうまくいかなかったので今回は2行入れた)

for文を使って1行で一括プロットするには
plot for [i=0:40] "hoge.txt" index i
とかでOK
最初はi=0の場合とi!=0の場合をわざわざ分けて、replotとかを使って書いていたけど、そんなめんどくさいことはしなくてもいいっぽい



ちなみにこのfor loopの中でindex 2のデータにきちんと"2"とタイトルを付けたいときは
plot for [i=0:40] "hoge.txt" index i title "No.".i
とする
この書き方でそれぞれのタイトルがNo.1、No.2、、、、となるはず

■ 参考 : Loop structure inside gnuplot?






他にも調べたらeveryとかdo forとかでてきたけど、難し過ぎてよくわからん・・・・
一応リンクだけメモしておく

■ 参考 : gnuplotのコマンドまとめ(ループとかeveryとか)

■ 参考 : 80.10 Plot コマンドの for ループ (for loops in plot command)

■ 参考 : X行毎にデータをプロットする











毎回忘れてググることになるのでメモしておく
たぶんこれらのことをしなくても就職活動の結果にはほとんど影響しないと思うけど、
もしここで差をつけるような人が審査した場合こんなところで差をつけられて落とされたら目もあてられないので一応慣習に従っておく

(たぶんまた追記していく)


・履歴書は折らない(どうしてもやむを得ない事情で折り曲げるとしたら3つ折り)
 なので封筒はA4の履歴書が丸々入る大きいサイズのものを用意する
 100円均一で5枚入りとか

・封筒には履歴書に加えて添え状を入れる
 添え状のテンプレートをアップロードしようとしたけど、めんどくさくて挫折
 添え状には「相手の会社名」「自分の情報(名前、電話番号、住所、メールアドレス)」「挨拶(1年中いつでも使えるようなものを用意しておく)」「内容物」を書く

・封筒の宛名について
 送り先が個人の場合は「〜〜〜〜山田太郎様」でOK
 送り先が個人でない場合は「〜〜〜採用担当者御中」
 「採用担当者様」はNG

・封筒の裏には送り人の住所、名前を書く
 封筒の口は〆みたいなものを書いておく








シェルスクリプトでプログラムを走らせているときに、通し番号的なものを使うことがある
そのときi=1, 2, 3あたりで終わるものならいいけど、10を超えるとファイルの並び順がめちゃくちゃになって嫌になる・・・
そこで01, 02, 03, ...10, 11, ...みたいに通し番号を0埋めしてしまう


そのためにはprintfというコマンドが使えるらしい
% printf "%02d\n" 2
02
% printf "%02d\n" 10
10

使い方はC言語のprintfとほとんど同じだろう








twitterで以下の記事に関するツイートを見かけた

■ 参考 : 【xkcd】pythonコードにたった一行で漫画のようなグラフを作る!

そもそも「xkcd」って漫画を知らない・・・

リンク先にあるように、
xkcd()
とpytyonスクリプトの最初に書いてしまうと、あとはmatplotlibがやってくれるらしい
へぇ〜





で、もしかしてこれgnuplotでもできるんじゃない?
と思って「gnuplot xkcd」とかで調べてみたらあったわ・・・

■ 参考 : xkcd-gnuplot

このコードのミソはここで宣言されているjigglea関数jiggle関数
これによってsin(x)とcos(x)に揺らぎを与えて漫画調のぐらぐらした線を再現している

また漫画調のフォントは"Humor Sans"というらしい
ググったら以下のページに落ちていた
■ 参考 : xkcd-desktop/Humor-Sans.ttf

ダウンロードしたttfファイルをダブルクリックすれば、Macなら簡単にインストールできるはず
インストールしたフォントファイルにPATHを通さないとgnuplotでは使えないので注意
PATHの通し方は以下を参考に

■ 過去記事 : 【gnuplot】Could not find/open font...というエラーが出るのでフォントの指定をする


これでこんな感じのグラフが書ける

hoge

コードは以下の通り、
(オリジナルからpng出力に変更しただけ)
set term png font 'Humor Sans'
set output "hoge.png"

# Some line types
set style line 10 lt 1 lc rgbcolor "#ffffff" lw 15 #thick white
set style line 11 lt 1 lc rgbcolor "#000000" lw 4 #black

set style line 1 lt 1 lc rgbcolor "#ff0000" lw 4 #red
set style line 2 lt 1 lc rgbcolor "#0000ff" lw 4 #blue

# No border with tics
set border 0

set noxtics
set noytics

# Show the axis
set xzeroaxis ls 11
set yzeroaxis ls 11

#Arrow end to the axis
set arrow from graph 0.95, first 0 to graph 1, first 0 size 2,3 front
set arrow from first 0, graph 0.95 to first 0, graph 1 size 2,3 front

set yrange [-1.1:1.1]
set xrange [-1:15]

set key bottom

set label 'Wasted time' at 11,0.7 right
set arrow from 11.1,0.7 to 12,((12/15.0)**2) ls 11


set title 'Check this out! XKCD in Gnuplot'

#Jiggling functions
range = 2.0 #Range for the absolute jiggle
jigglea(x) = x+range*(2*(rand(0)-0.5)*0.005) #Absolute (as a fraction of the range)
jiggle(x) = x*(1+(2*rand(0)-0.5)*0.015) #Relative +-1.5% (as a fraction of the y value)

dpsin(x) = sin(x) * exp(-0.1 * (x - 5) ** 2)
dpcos(x) = - cos(x) * exp(-0.1 * (x - 5) ** 2)

plot jiggle(dpsin(x)) ls 10 t '', \
jiggle(dpsin(x)) ls 1 t 'Damped Sin',\
jiggle(dpcos(x)) ls 10 t '', \
jiggle(dpcos(x)) ls 2 t 'Damped Cos',\
jigglea((x/15)**2) ls 10 t '',\
jigglea((x/15)**2) ls 11 t ''












起きたらAppleから下取りやってますよメールが来てた
試しに・・・と思って、今はもう使っていないairを下取りに出したらいくら付くか試してみた

Mac買い取り

5年以上使って12600円は割とアリな気もする・・・
確か買ったときの金額が10万ちょいだったので、還元率がかなりいい・・・

特に画面割れや付属品紛失もないので、おそらくこの値段でそのまま下取りされそう

ただ、半年TAやって稼いだお金で買ったパソコンだけに色々と思い入れがあるから、手放しはしないと思う・・・

とりあえずappleの下取り額が良かったというだけ

■ 参考 : 簡単に使えるApple製品。リサイクルまで簡単です。













検索したら、まず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











プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

int main(void){

printf("\n");
printf("過去記事でリンクしていた画像を忍者ブログからflickrへ移転、これですこしは見やすくなったかも\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中(何も進んでいない・・・・)\n");
/* 最終更新 2016/11/25 */
return 0;

}
カウンター
ブログ内検索
feedlyボタン
follow us in feedly
twitter
Flickr

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