2011年1月13日 星期四

Compilation and Installation of PSSAC on Linux

pssac是朱露培老師所寫的小程式,是一個特別設計跟gmt參數相同的程式,適合寫在GMT script裡直接繪出sac圖形的有用工具。一年多前嘗試想要編譯成功他,卻一直沒有成功。今年彷彿又聽到大家有使用pssac的需求,於是提筆寫信問朱教授。朱教授熱心的回應,使我終於成功編譯pssac。

首先,你的linux/unix主機必須有gcc任何的c編譯器。
第二,你需要先安裝好GMT;GMT的安裝請參考GMT簡易安裝筆記。新版的GMT已經到4.5.5,但是安裝form大致上是一樣的。
第三,請到朱教授的個人網站下載pssac的原始碼。如果你的GMT版本是4.5以上,還請多下載新的pssac.c取代原本tar裡的檔案。
假設我們安裝好的GMT路徑是/opt/GMT4.5.2,netcdf的路徑為/opt/netcdf-3.6.3:

tar xvf pssac.tar
cd pssac; mv pssac.c pssac-old.c
wget -c http://www.eas.slu.edu/People/LZhu/downloads/pssac.c
不過直接使用原本的Makefile編譯成功的機會恐怕很少。請修改Makefile成如下的樣子:
  1. CC = gcc
  2. GMT_INC = -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include
  3. GMT_LIBS = -L /opt/GMT4.5.2/lib -L /opt/netcdf-3.6.3/lib -lgmt -lgmtps -lpsl -lnetcdf -lm -s
  4. CFLAGS = -O2 ${GMT_INC}
  5.  
  6. pssac: pssac.o sacio.o
  7.     ${CC} -o $@ $@.o sacio.o ${GMT_LIBS} ${CFLAGS}
  8.  
  9. clean:
  10.     @rm -f pssac *.o

接著請執行make。如果你有確實的寫對GMT以及netcdf的函式庫位置以及headers的位置,你應該可以看到如下的輸出:

gcc -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include -c -o pssac.o pssac.c
gcc -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include -c -o sacio.o sacio.c
gcc -o pssac pssac.o sacio.o -L /opt/GMT4.5.2/lib -L /opt/netcdf-3.6.3/lib -lgmt -lgmtps -lpsl -lnetcdf -lm -s -O2 -I /opt/GMT4.5.2/include -I /opt/netcdf-3.6.3/include
然而當你想要試著執行他的時候卻出現錯誤訊息:
./pssac: error while loading shared libraries: libnetcdf.so.4: cannot open shared object file: No such file or directory
可知pssac執行時期需要libnetcdf.so.4這個函式,利用find指令可以發現這個檔案就在/etc/netcdf-3.6.3/lib裡。原來是系統並不認識他,趕快加進來吧(別忘了切到root身份)!
echo "/opt/netcdf-3.6.3/lib" > /etc/ld.so.conf.d/libnetcdf.conf
echo "/opt/GMT4.5.2/lib" > /etc/ld.so.conf.d/libgmt.conf
ldconfig
此時再執行pssac試試看:
Usage: pssac standardGMToptions [SACfiles] [-C[t1/t2]] [-E(k|d|a|n|b)(t[n]|vel)] [-Gr/g/b/c] [-I] [-Msize[/alpha]] [-Q] [-r] [-Sshift] [-V]

    pssac plots SAC traces. If no SAC file names is provided in the command line, it expects (sacfile,[x,[y [pen]]) from stdin.
       -C only plot data between t1 and t2
       -E option determines
         (1) profile type:
   a: azimuth profile
   b: back-azimuth profiel
   d: epicentral distance (in degs.) profile
   k: epicentral distance (in km.) profile
   n: traces are numbered from 1 to N in y-axis
         (2) time alignment:
   tn: align up with time mark tn in SAC head
              default is the reference time. Others are
       n= -5(b), -3(o), -2(a), 0-9 (t0-t9)
   vel: use reduced velocity
       -G paint amplitudes larger than c with color r/g/b
       -I integrate the trace before plotting
       -M multiple traces
   size: each trace will normalized to size (in y-unit)
   size/alpha: if alpha<0, use same scale for all traces
       else plot absolute amplitude multiplied by size*r^alpha
       where r is the distance range in km
       -Q square the trace
       -r remove the mean value in the trace
       -S shift traces by shift seconds
       -V plot traces vertically
確定可以執行後,把他放到/usr/local/bin裡,這樣所有使用者都可以使用這隻程式啦!

再次感謝朱老師的熱心幫忙!

Share

2010年10月20日 星期三

[轉載]何謂博士(The illustrated guide to a ph.D)

這篇文章轉載自


這篇文章可以給許多博士生非常非常好的警惕--博士並不博。

每個研究生都鑽研在自己的專業領域,有些人喜歡把內圈變大,有些人喜歡專注在某一特定領域的獨特性。無論是哪一種,都不能忘記人類的知識何其浩瀚,絕不可能是人一輩子能夠通曉所有知識跟學問。

因此,博士們....是不是應該更謙虛的面對自己以及別人的專業呢?

Share

2010年10月6日 星期三

劉玲根老師提供的幾篇科普文章

劉玲根老師是台灣一位相當了不起的地球化學家,他深厚的學術涵養以及謙遜的態度、鍥而不捨研究精神,我在大學時代聽過幾場劉老師的演講而深受感動。他是一位了不起的學者,我問的問題,無論多麼外行或粗淺,他總是能細心且耐心的用最淺顯的字句解釋給我這毛頭小子聽懂為止。這幾篇文章適合給大學程度以上,喜歡地球化學、結晶學的同學閱讀;如果你不懂這些領域,也可以從中體會地球科學界的一些爭論及思考方向。

地函研究的爭議 --科學人, 102, 66-70, Aug, 2010.

地球深處的神秘礦物 -- 科學人, 102, 52-65, Aug, 2010.

大氣與海洋 - 談系內行星的演化 ─ 科學月刊, 第41卷第7期, 538-543, 2010.7月號.

Share

2010年9月3日 星期五

Takeoff and incident angle from TauP

TauP 1.2以上的版本可以在taup_time裡面求得該phase的takeoff angle以及incident angle,筆者目前所能下載到的最新版本為2.0 beta6,相信如果需要這些資訊的研究人員可以更輕易的使用taup。TauP的作者Philip非常貼心的把Takeoff angle以及incident angle欄位放在後面,這樣一來使用者就無需更改呼叫taup的shell script。

taup_time -ph PcP,ScP -deg 46.5 -h 122.2

Model: iasp91
Distance   Depth   Phase   Travel    Ray Param  Takeoff  Incident  Purist    Purist
  (deg)     (km)   Name    Time (s)  p (s/deg)   (deg)    (deg)   Distance   Name
-----------------------------------------------------------------------------------
   46.50   122.2   PcP      587.05     3.532     15.12    10.62    46.50   = PcP
   46.50   122.2   ScP      808.93     4.185      9.94    12.61    46.50   = ScP

請各位無痛升級到新版的TauP吧!

Share

2010年9月2日 星期四

SeisMac 初體驗

今天逛逛Apple Download時,發現其實在MacOSX上有許多好玩的小程式。特別是在Math & Science的分類裡,有一個SeisMac的小程式。不過從Apple Download經常無法下載,後來google才知道原來SeisMac也是IRIS提供的一套免費小程式,他利用MacBook上的Sudden Motion Sensor(SMS)來記錄XYZ三軸的加速度,並且允許你將所見的畫面儲存成tif,或是另存成sac(binary),asac(ascii)以及csv格式。

開啟SeisMac之後,輕輕搖晃或是手指輕拍你的laptop,或是跟我一樣隨意搖晃你的MacBook,你會發現移動的加速度已經被記錄下來啦!

接著,你可以儲存這些seismogram為sac格式!

缺點是,三個分量必須個別儲存,有點討厭。這三個分量並不是E/N/Z方向,而是以laptop為參考座標的X/Y/Z三個方向。儲存完之後,還真的可以用SAC去跑唷!

不過我還是不知道這樣有趣的小程式究竟可以如何使用--用在地震儀上未免也太貴了些。如果你對這個小程式感興趣的話,或許應該參考他的SeisMacHelp頁面!

Share

SAC installation on Linux and MacOSX

先前我一直沒有寫一篇如何在linux上安裝Seismic Analysis Code(SAC)的筆記,是因為在sac的網站上已經有很詳細的說明。下載下來的sac都已經是可以直接執行的binary,所以幾乎沒有任何問題。由於最近開始練習使用Mac來做日常工作,我想日後如果想在MacOSX上面跑sac的使用者也可以依此參考,因此寫下這篇簡單的sac on mac筆記。

在linux上,只要確定你安裝的linux是x86還是x86_64的版本即可。假設將sac解壓縮到/opt,則只需要在~/.profile裡設定幾個環境變數即可:

export SAC=/opt/sac
export SACLIB=$SAC/lib
export SACAUX=$SAC/aux
export PATH=$PATH:$SAC/bin
如果是csh的愛好者,你的環境變數應該長得像這樣:
setenv SAC /opt/sac
setenv SACLIB $SAC/lib
setenv SACAUX $SAC/aux
set path = ( $path $SAC/bin )

在MacOSX上,你也應該下載一個適合自己版本的sac來用。我的MacOS是Leopard(10.5),是64位元的版本,intel的cpu,可以執行x86或是x86_64的binary,不過當我設定好環境變數之後,敲入sac卻有錯誤訊息:

dyld: Library not loaded: /opt/local/lib/libSM.6.dylib
Referenced from: /opt/sac/bin/sac
Reason: image not found
Trace/BPT trap
dylib我不知道是什麼,不過看前面libSM.6我猜應該是缺乏動態函式libSM,所以dylib應該是dynamic library的意思,在linux相當於少了libSM.6.so的意思。知道少了這個lib,在linux只要用套件管理程式裝起來就可以了。但是在mac並沒有套件管理程式,該怎麼做呢?

為了解決這個問題,我們必須裝上MacPorts,這是一個開放原始碼的軟體,他收集了很多開放原始碼的程式,像是在linux世界裡常見的gedit,gimp等等的程式,可以透過MacPorts移植到MacOS上使用。但是,這些套件都是原始碼,他會下載原始碼到你的電腦上並自動編譯、安裝,所以會非常耗時;建議晚上安裝,早上起來就好了。

但是要安裝MacPorts,則必須要有gcc、make這些工具。而這些工具都是由xcode來的。也就是說,你必須先安裝xcode,才能有gcc,才能安裝MacPorts,才能安裝libSM.6.dylib,才能順利執行sac。

大部分安裝好MacOSX之後是不會有xcode的,你必須從安裝光碟裡去選擇並安裝xcode。安裝完xcode之後,你就有fortran, c, c++, python, Java等編譯器可以使用。接著下載給Snow Leopard(10.6), Leopard(10.5)以及Tiger(10.4)的MacPorts安裝檔來安裝。

安裝完成後,你的shell應該就能找到port這個指令。由於我不清楚mac如何更改default shell為tcsh,所以奉勸還是忘記有tcsh這類shell吧。安裝好之後,都是用port指令當做mac的套件管理程式。
更新MacPorts並且更新套件庫索引:

sudo port selfupdate
尋找套件名稱:
port search foo
安裝套件:
sudo port install foo
移除套件:
sudo port uninstall foo
回到我們的問題本身--套件的關鍵字是libSM,因此我們透過search找到的套件名稱為xorg-libsm,因此只需要輸入:
sudo port install xorg-libsm
再次執行sac,就可以快樂的在MacOSX上使用sac。

更舊版本的Mac恐怕需要更舊版本的sac才行--我所測試的sac版本為101.4。希望本文能對於Mac的使用者有所助益。

Share

2010年7月13日 星期二

What can shell script do?

最近暑期生來到這裡,讓整個地球所變得熱鬧且充滿生氣。其實我一直很想作一些bash的教學,不過礙於環境,所有的教學跟經驗,我希望能把握僅存的時間寫成教學文章,讓年輕的地震學家或地球物理學家能夠透過學習bash,充分體驗bash之美。

今天只是牛刀小試一番,我們來看看shell script的威力。假設我今天瀏覽一個網頁,該頁面上充滿著美麗的圖片(當然,圖片的內容是風景或是美女...筆者沒有權利過問@_@);以 這個頁面為例,我們要抓下裡面風景的圖檔其實不需要任何工具,一個終端機就行了。檢視這個頁面的原始碼,搜尋jpg或是png,你大約可以發現你要的圖片是位於哪個區塊。
我把選取的範圍另存成一個文字檔之後(temp.txt),就可以利用shell script來取得我們要的東西。 讓我們來思考一下這個東西。我們要得東西主要是http://blablabla.com/XXX.jpg這樣的格式,但是其他累贅的字串實在太多,而且大多處於同一行的狀態,這個時候用awk不太適合,先把sed請出來用:

cat temp.txt | sed 's/></\n/g'
我的目的是把每個網址列都盡量變成獨立的一行,把字串裡面所有的
><
符號都變成換行字元符號。 關鍵字串已經獨立成一行一行了,此時grep以及awk就可以雙劍合璧:
cat temp.txt | sed 's/></\n/g' | grep 'http'| awk '{print$2;}'
我利用pipe在延續剛剛的命令,取出包含http的字串後,發現關鍵字串在第二的colume,用awk取值非常容易。 我們要的網址列已經呼之欲出了,再做個最後的努力吧!
cat temp.txt | sed 's/></\n/g' | grep 'http'| awk '{print$2;}' | awk -F= '{print $2}' | uniq

我們要的網址列已經乖乖的呈獻在我們面前。讓我們愉快的把他寫成shell script當成送自己的第一份禮物吧!

  1. #!/bin/bash
  2. ## This script is going to help you to download pictures automatically from web.
  3.  
  4. ## pictures: the real link we need
  5. pictures=$(cat temp.txt | sed 's/></\n/g' | grep 'http'| awk '{print$2;}' | awk -F= '{print $2}' | uniq)
  6.  
  7. ## start to download:
  8. for files in $pictures; do
  9.     wget -c $pictures
  10. done

我們要的圖片就這樣下載下來了。希望這篇小文能讓你對shell script感到興趣,並在研究的路程上處理繁複的data能更得心應手,事事都以shell為想法來解決問題。

Share