自身が役に立つと思ってるテクニックをいくつか挙げとく


☆misc
・c言語や一部のバージョンのgnuplotにおいて、"int/int"は使えない。
・clスクリプト内で、「a="hoge"da」と出力したければ、「print("a=""hoge""da")」というふうにする。



☆xtermでのコピペ(mac)

◎Aqua emacs/端末/safariでコピー => xtermでペースト
・x11の環境設定
環境設定(入力)から
"3 ボタンマウスをエミュレート"
にチェック
・コピペ
emacs/端末の場合文字をドラッグするだけでコピー完了(safariの場合、command+cまでする)
xterm上で"option+左クリック"でペースト完了
※マウスがある場合、x11の環境設定いらなくて、中ボタンを押すだけでペースト可能

◎xtermでコピー => Aqua emacs/端末/safariでペースト
・x11の環境設定
環境設定(ペーストボード)から
"新しいテキストが選択されたら、すぐにペーストボードをアップデート"
にチェック
※これがクリティカルなのか分からない。とにかくこれを含む全項目にチェックが入ってる状態だと上手くいった。
・コピペ
xtermの場合文字をドラッグするだけでコピー完了(場合によってcommand+cまでした方がいいかも)
emacs/端末/safariで"command+c"でペースト完了



☆gnuplotで書いた図の保存

◎とりあえずgnuplotで図を描き、JPEG形式で保存

・gnuplotの起動
$ gnuplot
    G N U P L O T
    Version 4.2 patchlevel 4
    last modified Sep 2008
    System: Linux 2.6.30.10-105.2.4.fc11.i686.PAE
    Copyright (C) 1986 - 1993, 1998, 2004, 2007, 2008
    Thomas Williams, Colin Kelley and many others
    Type `help` to access the on-line reference manual.
    The gnuplot FAQ is available from http://www.gnuplot.info/faq/
    Send bug reports and suggestions to
Terminal type set to 'wxt'
gnuplot>
のような表示が出てくるが、
ここで「Terminal type set to 'wxt'」で、デフォルトのterminalタイプが書かれていることに留意しておく。これはOSによって'x11'だったり'0'だったりするので自分のpcではデフォルトのterminalが何か?を確認しておく。

・data.txtというテキストファイルの1行目と2行目をplotさせる
gnuplot> plot "data.txt" u 1:2 w l
gnuplot> set title "useful tecnique"
gnuplot> set xlabel "x"
gnuplot> set ylabel "y"

・terminalタイプをJPEGにして保存
gnuplot> set terminal jpeg
gnuplot> set output 'data.jpg'
gnuplot> replot
gnuplot> set terminal wxt   (←terminalタイプをデフォルトに戻す)


以上でdata.jpgというjpeg形式の図が現在のディレクトリに出来る


◎EPS形式で保存しtexに貼り付ける
図をtexなどに貼り付ける時には、拡大しても粗くならないEPS形式(ベクトル量としての図)にした方が便利

・epsで保存
gnuplot> plot "data.txt" u 1:2 w l
gnuplot> set terminal postscript eps enhanced color solid
(ここで、"enhanced color"はカラーで保存、"solid"は実線は実線のままで保存、という意味)
gnuplot> set output 'data.eps'
gnuplot> replot
gnuplot> set terminal wxt

・texファイルに貼り付ける
以下のようなtexファイル(data.tex)をつくればいい

\documentclass[a4]{jarticle}
\usepackage{graphicx}
\begin{document}
\begin{table}[h]
\includegraphics[origin=c]{data.eps}\\[-20.0em]   //基本的にはこれでOK。\\[-20.0em]は次の図との間合い調整
\includegraphics[origin=c,angle=270,scale=1.4]{data.eps}  //回転や拡大も可能
\end{table}

このtexファイルの実行
$ platex data.tex
dviファイルのままでも良いがpdfファイルに変換しとけば安全
$ dvipdfmx data.dvi


以上でgnuplotで書いた図を自由にtexに貼り付けpdfとして保存できる。


◎おまけ:gpファイルをロードする
「gnuplotでプロット→terminalの切り替え→保存→terminalの切り替え」というようなある種gnuplot内でのルーチンワークはファイルに保存し、それを読み込むことでいちいち手打ちしなくても済む。
例えば上記でやっていたdata.txtをプロットしdata.epsをつくるという作業なら
data.gp
のようなgpファイルを作り実行させれば
gnuplot> load "data.gp"
data.epsが保存される。



☆シェルスクリプト
端末上での作業(コマンド)もいちいち打たずにプログラム化できる。その際に使えるシェルはsh,csh,tsch,zshなど多岐に渡り、かつシェルにより文法が異なるので大変。
cshはC言語っぽくて使いやすい(Mノート11/17日分参照)がバグが多く評判悪いので、ここではshスクリプトを紹介する。

◎shスクリプト
今天体画像が10枚あり(subsky_skyflat-001.fit〜subsky_skyflat-010.fit)、その10枚にSExtractorをかけて天体検出をし、明るい方の100天体分のデータが入ったテキストファイル(detect001.cat〜detect010.cat)を作りたい。

これを普通にやるならば
$ sex subsky_skyflat-00?.fits -c detect.sex
$ awk '$1>0{print}' test.cat | sort -n -k 4 -r | head -110 | tail -100 > detect00?.cat
を10回繰り返さないといけない

しかし、detect_skyflat.shのようなスクリプトファイルを組み実行させれば、自動でやってくれる
実行方法は
$ sh  (←shに入る)
sh-4.0$ chmod u+x detect_skyflat.sh  (←実行権限を持たせる)
sh-4.0$ ./detect_skyflat.sh

・awkの中で変数を渡したい時
% awk 'パターン{アクション}' ファイル名
(1)パターンに変数を渡す場合
${変数}を/'""'/で囲む
=> (例) awk '$1>/'"${hoge}"'/{print $1}' test.dat
(2)パターン以外に変数を渡す場合
-vオプションを以下のように使う
=> (例) awk -v aho="${hoge}" '{if ($1>2) printf "%.5f\n", $1+aho}' test.dat



TOP画面に戻る