Spacepy安裝與使用

Spacepy安裝與使用

最近科研的時候需要用到geopack惠昔,這個包本身并不陌生缤苫,但是作者的源碼是Fortran寫的赁温,之后一般在IDL 上使用坛怪。第一次學(xué)習(xí)磁層的時候老師讓我去下一個geopack并且畫出一張磁力線的圖,我當(dāng)時就對IDL 這門語言產(chǎn)生了抗拒股囊。我認(rèn)為一個好的語言是方便學(xué)習(xí)和交流袜匿,世界上很多人說英語,所以英語是一門好的語言稚疹,很多人說漢語居灯,所以漢語也是一門好的語言。很多人用python内狗,很多人用matlab怪嫌,但是當(dāng)遇到IDL的時候,google老師就很難派上用場柳沙。 使用范圍的狹窄限制了我的自學(xué)能力岩灭,IDL 的幫助文檔看起來真的是一頭霧水,而且正版IDL價格不菲赂鲤,相信它早晚會被淘汰噪径。這篇就記錄一下通過spacepy來達到geopack的功能。

關(guān)于spacepy的安裝

spacepy 官方doc:

https://pythonhosted.org/SpacePy/index.html

spacepy是一個基于python的用于空間科學(xué)計算的包数初,主要用于基本的數(shù)據(jù)分析和可視化找爱。更新和維護速度雖然很慢,(聽師兄說是Boulder的那群人寫的)但是查看了git后發(fā)現(xiàn)居然還有幾個兄弟在默默地維護和更新泡孩,比如升級對python3.6的支持等等车摄。真的是想buy them beers!
我使用的是OS 系統(tǒng),也在Ubuntu系統(tǒng)下成功配置了這個包。雖然是一個簡單的python模塊练般,但是有相當(dāng)多的dependence矗漾。
我使用的是Python3.6,最近3.7版本已經(jīng)發(fā)布薄料,還沒有測試在這個版本下是否安裝成功

配置python環(huán)境

配置python環(huán)境是一件比較容易的事情敞贡,如果想使用pycharm等編譯器的話最好有自己獨立于系統(tǒng)的環(huán)境。使用前可以查看一下當(dāng)前自己python的位置

?  ~ which python
/Users/madonglai/anaconda3/bin/python

這是自己配置的環(huán)境摄职,具體anaconda使用的方法就不在這里寫出誊役。如果是需要在linux服務(wù)器上使用,可以通過miniconda或者virtualenv來配置自己的虛擬環(huán)境谷市,他們的好處是可以配置自己的環(huán)境甚至是python的版本蛔垢。

之后開始安裝spacepy所需要的依賴包

https://pythonhosted.org/SpacePy/dependencies.html

基本上利用pip install 這個神奇的命令都可以完成,唯一需要注意的是CDF這個是需要自己去下的迫悠。
依賴都安裝好了之后同樣可以用pip install spacepy 來安裝鹏漆。運行過程中會自動檢測你的依賴是否都安裝好了。
當(dāng)然也可以去git上下載他們一直在更新的包解壓后進入目錄创泄,然后通過

python setup.py build
python setup.py install

來進行安裝艺玲。

當(dāng)然這么簡單的安裝過程大概率是有bug的!我遇到的一個比較嚴(yán)重的bug就是gfortran的編譯器版本問題鞠抑。安裝后需要閱讀下是否安裝成功饭聚,這也是我最后不用pip的原因

Compiler /usr/local/bin/gfortran failed, trying another
Compiler gfortran failed, trying another
irbemlib compile failed. Try a different Fortran compiler? (--fcompiler)

irbemlib這個包的作者,使用了f2p這種簡單的把fortran語言轉(zhuǎn)換成python語言的方法搁拙,所以需要fortran的編譯器秒梳,但是如果是通過

brew install gcc

這種方法安裝的帶有g(shù)fortran的版本似乎不能好的編譯,而且一般都是安裝home brew箕速,不便于卸載gcc,經(jīng)常會遇到一些權(quán)限問題(運行brew doctor 可以方便地查看哪里除了問題)于是

 sudo rm -r /usr/local/gfortran /usr/local/bin/gfortran

之后再重新下載一個gfortran問題就解決了酪碘。

在Ubuntu下的安裝就相對比較順利,基本步驟也類似弧满,完全可以參照之前的例子或者spacepy的主頁來解決婆跑。但是在CDF的安裝時會出現(xiàn)一點問題此熬,具體問題和解決方法在之后會提到庭呜。

關(guān)于這個例子

Geopack有很多優(yōu)點,在spacepy并沒有單獨的接口犀忱,但是Geopack本質(zhì)上是基于Ts磁場模型計算磁場(還有一些坐標(biāo)轉(zhuǎn)換募谎。)
本次例子的目的是根據(jù)時間和位置,獲得空間中任意一點的磁場阴汇。在spacepy中有很多完成的接口供我們使用数冬。例如在這個例子中需要使用的包irbempy得到磁場的函數(shù)

spacepy.irbempy.get_Bfield(ticks, loci, extMag='T01STORM', options=[1, 0, 0, 0, 0], omnivals=None)

當(dāng)然第一次使用的時候可能會出問題,因為你并沒有下載那個OMNI 的數(shù)據(jù),命令行會給出提示,也有可能不會給拐纱,下載的時候也會出很多問題铜异,需要多嘗試幾遍〗占埽可以在命令行前加入以下命令

import spacepy.toolbox as spt
spt.update(omni = True)

更新過一次數(shù)據(jù)庫就不用了揍庄,本質(zhì)上這個包是從OMNI 的database那里去下載數(shù)據(jù),然后再進行數(shù)據(jù)處理东抹,OMNI中的數(shù)據(jù)都是CDF格式蚂子,所以之前cdf的安裝是必須的。

我也曾經(jīng)嘗試過在Ubuntu16下安裝cdf缭黔,會出現(xiàn)一點問題食茎,具體問題是環(huán)境變量的配置。在make install 之后會有解釋文件 definition.B (在安裝目錄./bin 下)馏谨,將其最后一行改為

export LD_LIBRARY_PATH=$HOME/Libraries/cdf/cdf37_0-dist/lib:$LD_LIBRARY_PATH

在~/.bashrc中最后加入 .$HOME/Libraries/cdf/cdf37_0-dist/definition.B 然后chmod +x將這個文件變成可執(zhí)行文件并運行别渔。
以上路徑是我瞎寫的,需要自己參照自己的路徑來使用

數(shù)據(jù)的一些基本處理

配置好所有的庫和下載好數(shù)據(jù)之后就可以開始進行操作了惧互。所有包的解釋都在

https://pythonhosted.org/SpacePy/index.html

可以參照進行閱讀钠糊,但是有些最新版本的更新在這個網(wǎng)站上沒有解釋,推薦準(zhǔn)確的解釋去閱讀源代碼中的note壹哺,這是一個比較好的選擇抄伍。

import spacepy.time as spt
import spacepy.coordinates as spc
import spacepy.irbempy as ib
import spacepy.toolbox as st

t = spt.Ticktock(['2014-02-02T12:00:00', '2014-02-02T12:10:00'], 'ISO')
y = spc.Coords([[3,3,0],[2,3,0]], 'SM', 'car')
m = ib.get_Bfield(t,y)
print(m)

得出結(jié)果如下

{'Blocal': array([ 396.1620274 ,  648.43456977]), 'Bvec': array([[  15.7710819 ,  -51.64604429,  392.46440735],
       [  16.65412153,  -90.57326112,  641.86175761]])}

沒有指定參數(shù)的時候會按照默認(rèn)參數(shù)得出結(jié)果。這個例子中我想得到的是包含外場(TS05)模型的磁場,有趣的是這個模型在spacepy中的簡稱是T05... 并沒有另一位兄弟Sitnov管宵。

Bfield = ib.get_Bfield(dts,ys_GEO,'T05')
Bfield_noe = ib.get_Bfield(dts,ys_GEO,'0')

0代表沒有外部場截珍,T05代表外場用的是TS05模型等等,這樣就達到了geopack的基礎(chǔ)功能箩朴。在閱讀源碼的過程中會發(fā)現(xiàn)getfield這個函數(shù)只能得到在geo坐標(biāo)下的磁場岗喉!這個是在note里沒有寫的
實現(xiàn)了第一步,那么畫磁力線啊等等等等基于geopack的功能就不難實現(xiàn)了炸庞!

還有一些關(guān)于坐標(biāo)轉(zhuǎn)換和時間序列的基礎(chǔ)操作钱床,在這里就不去詳述了,但毫無疑問這些都是需要注意的事情埠居。python的數(shù)組操作雖然有了numpy等一系列的包查牌,但在處理數(shù)組和一些函數(shù)方面,(比如弧度轉(zhuǎn)角度并不能對整個數(shù)組使用)個人感覺還是不如matlab的滥壕。

當(dāng)然spacepy還有很多很多很多的有用的function纸颜,之后用到的時候再記錄下來。

感想

把一些東西記錄下來還是很有趣的绎橘,每次在科研或者學(xué)習(xí)的過程中都會開很多網(wǎng)頁胁孙,而很多網(wǎng)頁都是打開過一遍的。留在腦子里的東西很少,而記錄下來應(yīng)該會對自己有所幫助涮较。
我python的使用還是處在入門階段稠鼻,比如spacepy安裝的源碼有一些就沒有看懂,并沒有時間去靜下心來學(xué)習(xí)總結(jié)狂票,感到很難受枷餐。
FORTRAN辣雞!IDL辣雞!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市老客,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌润匙,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唉匾,死亡現(xiàn)場離奇詭異孕讳,居然都是意外死亡,警方通過查閱死者的電腦和手機巍膘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門厂财,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峡懈,你說我怎么就攤上這事璃饱。” “怎么了肪康?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵荚恶,是天一觀的道長。 經(jīng)常有香客問我磷支,道長谒撼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任雾狈,我火速辦了婚禮廓潜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘善榛。我一直安慰自己辩蛋,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布锭弊。 她就那樣靜靜地躺著堪澎,像睡著了一般擂错。 火紅的嫁衣襯著肌膚如雪味滞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機與錄音剑鞍,去河邊找鬼昨凡。 笑死,一個胖子當(dāng)著我的面吹牛蚁署,可吹牛的內(nèi)容都是我干的便脊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼光戈,長吁一口氣:“原來是場噩夢啊……” “哼哪痰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起久妆,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晌杰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后筷弦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肋演,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年烂琴,在試婚紗的時候發(fā)現(xiàn)自己被綠了爹殊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡奸绷,死狀恐怖梗夸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情号醉,我是刑警寧澤绒瘦,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站扣癣,受9級特大地震影響惰帽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜父虑,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一该酗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧士嚎,春花似錦呜魄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至笨蚁,卻和暖如春睹晒,著一層夾襖步出監(jiān)牢的瞬間趟庄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工伪很, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留戚啥,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓锉试,卻偏偏與公主長得像猫十,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子呆盖,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容