dynamicsoar's log

主に研究関係のメモ

【論文読み】ショウジョウバエの翼平面形は機動性に最適化されてはいない

論文内容まとめ

対象

手法と結果のまとめ

  1. 単一の遺伝子をノックアウトすることで、ショウジョウバエ (fruit fly, D. melanogaster) の翅の平面形をわずかに変更した。コントロール(野生型*1に近い形状)の他に3種類の変異群をつくった。
    • ⇒ 基本形状に比べて、細長く(アスペクト比が大きく)、かつ先細な(テーパ比の大きな)形状が3種類。翼面積は、いずれも減少。とくに変異が大きな方の2群では7%程度と大きめの減少。
  2. 2m x 2m x 2m くらいの部屋で、それぞれのグループのショウジョウバエを自由に飛行させ、2台の高速度カメラでステレオ撮影しトラッキング。位置・速度・加速度・旋回半径・旋回率などを算出した。Motivational state としては、エサ無し・捕食者なしの voluntary.
    • ⇒ 変異群3種類のうち、コントロールに近い(変異の穏やかな)2種類では、直線飛行速度が低下すること無く旋回半径が減少・旋回率が増加した。一方、最大の変異の群では直線飛行速度が低下、進路変更の加速度も減少し、旋回性能はコントロールと変わらなかった。
  3. 小さめのボックスに閉じ込めたショウジョウバエを1台の高速度カメラで撮影し、羽ばたき周波数を計測した。これを質量の(1/3)乗で正規化した。
    • ⇒ 有意差なし。なお体重(質量)自体は変異群で僅かに増加しているが有意ではない。
  4. それぞれのグループの平面形を元に、翅の付け根(ヒンジ)周りの慣性モーメントの計算を行った。また、慣性パワー・空気力・空力トルク・空力パワーの計算を行い、これらにより機械効率を求めた*2。空気力学計算は翼素理論による。羽ばたき運動は今回計測していないので、文献値のホバリング状態のものを用いている。
    • ⇒ 機械効率は変異の度合いが大きいほど低下。翅の慣性モーメントも同様に低下(テーパ増大に伴う)。また、空気力の鉛直上向き成分*3は、変異の大きな方の2群で低下している。

考察のまとめ

  • 野生状態の翼平面形が変異群よりも機械効率が高い、すなわち燃費が良い。一方、捕食者からの回避行動に重要であろう機動性は、ごく僅かな(遺伝子1つの)変異で向上が可能であるのに、これはなされていない。そのようなバランスのもとで平面形状が選択されているということ。
  • 変異が最大でない2群で旋回性能が向上したのはなぜか?
    • ⇒ テーパ比の増大、つまりより先細な翅になることで、慣性モーメントが減少したためと考えられる。なお、ホバリングに関する計算では風圧中心位置までのモーメントアームに変化はなかった(空力トルクには変化がないことを示唆)。
  • 変異を増やすと機械効率が低下したのはなぜか?また、最大の変異でなぜ飛行性能が低下したのか?
    • ⇒ 筋骨格系をそのままに翅だけを変更したことが主要因ではないか。既にコントロール群の翼平面形に最適化されたモータ(筋肉)であったため、変異を増やすごとに機械効率が低下した。しかし、変異が穏やかな2群では、上記の理由(テーパ比増大による慣性モーメント減)によって機動性は向上していた。変異が最大の群では、モータの最適から外れすぎたために機動性にも悪影響が及んだのではないか。
  • 羽ばたき運動について
    • ⇒ 変異の大きな方の2群では、翼面積が減少しているのに、さらにおなじ羽ばたき運動ではいわゆる揚力がたりない。したがって、羽ばたき運動の変更がとくに必要と考えられる。しかし、(ノーマライズした)羽ばたき周波数が変わっていない*4ことから、羽ばたき振幅 and/or 長軸まわりの回転(迎え角変動)が変化していると考えられる。

補足・感想

なぜ遺伝子のノックアウトをしたか

まず、なぜ遺伝子のノックアウトという手法を用いたかについて補足。これは自分の意見というよりイントロにあったお話。他の方法としては、これまでにスズメガの翼端をクリップする(裁ち落とす)*5とか、ハチドリの羽根をカットする*6とか、あと文献すぐ出てこないけど鳥の羽根を抜くとかはけっこうやられていたが、いずれも侵襲的であることは問題視されていた。また、鳥の場合は換羽といって羽根が生え変わることがあるのでそのタイミングで実験することもあるが、運任せの面が大きくなってあまり好まれない、というか例が少ない。そういえば、ズグロムシクイという鳥の飛行実験準備中に(ストレスで?)尾羽根が全部抜けてしまったが、そのまま実験してみたら、尾羽根ありの個体とほとんど差がなかった、なんていう報告もある*7

なぜ羽ばたき運動を同時計測しなかったのか?

これはもしできていたら慣性・空力計算のところが「文献値によるホバリング」でなくて実測値に基づいた値になり、よりストレートなストーリ・説得力の強いストーリにできたはずで、たぶん Science あたりに出ていただろう。なぜしなかったのか。書いてあるわけではないので推測だが、おそらく、ショウジョウバエが小さすぎることが問題。体重が 1 mg (グラムでなくミリグラム)程度、翅一枚の長さは 2 mm くらいしかない。したがって、カメラを昆虫を追尾するように動かす(そんなことしたらそれ自体が別の論文になるだろう…)か、台数を増やすしかないだろうが、高速度カメラは安くても一台100万円ではきかない程度には高価なので、難しい。羽ばたき周波数が高いことが次の問題だが、これは照明を強力にすれば概ね解決する。一方で、種をもっと大きなものに変更する*8というのはより現実的な解としてあり得ると思うが、その場合はおそらく遺伝子操作の方になにか課題があるのではないだろうか。そちら方面に詳しくはないが、ショウジョウバエは遺伝子関係では最もよく使われているモデル生物の一種だろうから。

環境の影響?

これは別に今回の結果に疑義を呈するものではないが、一般性というかどこまで演繹できるのかという点には関係してくるかも。たとえば、motivational state がエサ無し・捕食者なしの voluntary である点は議論の余地があるかもしれない。これについてはたとえば Tobalske のとこ *9 や Combes のとこ *10 などでちょいちょいやられていて、バイオメカニクスエコロジーの界面として興味深いところでもある。が、実際に全部試したりコントロールして比較するとかかなり大変…。まぁその前に視覚情報からか…。一般的に、空気力学や翼運動がメインの論文だとあまり環境は気にされてない。Flight dynamics(飛行力学)になるとやっぱりちょっと気にするか、みたいになり、神経や行動になっていくとむしろメインになる場合すら多い、という印象。

他にもいくつかマイナな疑問点があるので、気が向いたら書きます。

*1:= Oregon R?

*2:具体的には、理論的な最小の誘導パワーを、現実のパワー(空力パワー+慣性パワー)で割った値を効率と定義している。

*3:羽ばたき面が水平なので、この場合はいわゆる「揚力」と呼んでもよかろう。論文でも lift となっている。

*4:間接飛翔筋タイプであるから大きくは変えようがない?

*5:Fernández, M. J., Springthorpe, D. & Hedrick, T. L. 2012 Neuromuscular and biomechanical compensation for wing asymmetry in insect hovering flight. J. Exp. Biol. 215, 3631–3638. (doi:10.1242/jeb.073627).

*6:Chai, P. 1997 Hummingbird hovering energetics during moult of primary flight feathers. J. Exp. Biol. 200, 1527–1536.

*7:Johansson, L. C. & Hedenström, A. 2009 The vortex wake of blackcaps (Sylvia atricapilla L.) measured using high-speed digital particle image velocimetry (DPIV). J. Exp. Biol. 212, 3365–3376. (doi:10.1242/jeb.034454).

*8:たとえばハナアブは実績がある:Walker, S. M., Thomas, A. L. R. & Taylor, G. K. 2010 Deformable wing kinematics in free-flying hoverflies. J. R. Soc. Interface 7, 131–142. (doi:10.1098/rsif.2009.0120).

*9:Provini, P., Tobalske, B. W., Crandell, K. E. & Abourachid, A. 2012 Transition from leg to wing forces during take-off in birds. J. Exp. Biol. 215, 4115–4124. (doi:10.1242/jeb.074484).

*10:Combes, S. A., Rundle, D. E., Iwasaki, J. M. & Crall, J. D. 2012 Linking biomechanics and ecology through predator-prey interactions: flight performance of dragonflies and their prey. J. Exp. Biol. 215, 903–913. (doi:10.1242/jeb.059394).

fortran でよく使うコンパイラオプションのメモ

自分用。あとで書き足す

gfortran

牛島先生本で紹介されていたのがキッカケで使い始めた g95 がわりと好きだったんだけど、だいぶ前から開発が止まってる(というか終わってる?)ので、最近は gfortran を使うことが多い(本気の計算だけ ifort)。

$ gfortran foo.f90 -Wall -O1 -fbounds-check -fbacktrace -fcheck=all -ffpe-trap=invalid,zero,overflow,underflow

あたりから適当に選んで。

  • -Wall に含まれる -Wuninitialized はデフォルトの -O0*1では作動しないので、-O1 が無難か。
  • -finit-local-zero が便利だけど多用は危険か。というか基本的には使わないでちゃんと自分で初期化したほうが良さげ。

ifort (version 2021.5.0)

$ ifort foo.f90 -xHost -ipo -mcmodel=medium -shared-intel -qopenmp
  • no-prec-div や -fp-model=fast=2 は本番計算で自ら付けるべきものではないような気が今はする。

*1:たぶん。ifortでは-O2がデフォルトだが。

FieldView(可視化ソフト)のライセンスマネージャ (flexlm) が落ちた時の対応 (Linux)

前のブログにも書いたんだけど、さっきまた遭遇したので、再掲しとく。

環境

x86_64 (64 bit) の CentOS. 他の場合は変わるかも。FV のバージョンはライセンスサーバごとに複数ある。

やること

コマンドを2つ叩くだけ。セキュリティの設定次第かもしれないが、自分の場合は root になる必要はなかった。

  1. LM_LICENSE_FILE という環境変数にライセンスファイルの位置を教える(どこかにある license.dat を探す)
  2. どこかにある lmgrd というやつを実行する

例 (FV14)

具体的には、自分の version 14 のサーバの場合は以下のとおりだった:

$ export LM_LICENSE_FILE=/usr/fieldview/V14/fv/data/license.dat
$ /usr/fieldview/V14/fv/flexlm/linux_amd64/lmgrd

他のバージョン

他の計算機を見たところ、バージョンが違う場合は /fieldview/V14 の部分*1が変わる模様。具体的には、FV12 だと /usr/FV/FV12.2.1 となっていた。

*1:と、もちろん 32 bit システムなら linux_amd64 のところもだろうが。

TeXstudio メモ

随時追加予定

internal PDF viewer を分離した時 (Windowed Viewer にしたとき)、cmd+tab でエディタかビューアのどっちかにしかいけない

原因

cmd+tab は「アプリごと」の移動しかできないため。

解決策

Witch を使う。WindowFlow だと認識されない (Mavericksでは。ほかは知らない)。



internal PDF viewer を分離した時 (Windowed Viewer にしたとき)、タッチパッドでのスクロールがおかしい

原因

何かの拍子に Continuous が OFF になったようだ。

解決策

Windowed Viewer が active な状態で、メニューバーの View > Continuous にチェックをいれる。

pandas, matplotlib, seaborn でハマったところメモ

随時追加予定

ix するとき x 軸用のデータを忘れるな

df から ix してそのまま .plot して ax に代入、としたいわけだが、このとき ix で選ぶ columns には x 軸となるものを含めないといけない!自分の場合は主に時間。

具体的には、

ax = df.ix[:,["data_column1","data_column2"]].plot( x="t" )

としていて何回も何回も「KeyError: 't'」って怒られてた。KeyError ってなんだろう…?ってずーっと思ってたけどこれ単に「ないよ」ってことだよね…

つまり、

ax = df.ix[:,["t","data_column1","data_column2"]].plot( x="t" )

が正しい。そりゃそうだ。ないものを軸にはできねーよ。

いやまぁ、上の例だと自明なんだけど、本当は最初はこうやって数字で columns 指定してたんですよ…

ax = df.ix[:,2:].plot( x="t" )

で、正しくは 1: にしないと t が含まれなかったというオチ(t の場所が2列目だった)。

Jupyter notebook (IPython notebook 4.x) で Notebook Extensions を使う(Anaconda利用)

まえがき

Jupyter notebook で、各セル内のコードがだらーっと縦長になってしまった。 include のやりかたがよくわからんので(できるのかも含め)、とりあえず folding でごまかせないかな?と思ってググったところ、 Notebook Extensions というのを導入すればできそうだった。本当はセルごと hide (fold) して欲しいんだけど、これはそうではなく code 内の一部ということのようだ。まぁとりあえず試そうかなと。

前提(環境)

  • Jupyter notebook
  • Anaconda 3

を利用。Mac OS X Mavericks だけど別に Win でも関係ないかも。わからん。

手順

github のページの wiki にあるとおりやるだけ*1

リポジトリのクローン

まず適当なディレクトリ(でいいと思うが…)にて、github のリポジトリをクローン。具体的には、HTTPSの右の方にあるボタンを押してURLをクリップボードにコピーして、SourceTree を立ち上げて、+New Repository > Clone from URL で Source URL のとこに貼り付ける。そしたらなんかガーッとDLされるので、BRANCHES で master 選んだ状態で、メイン画面のツールバー右上にある Show in Finder を押すと実際にどこに保存されたかわかる。

インストール

次にターミナルを立ち上げてそこのひとつ上のディレクトリに移動し($ ls したときに IPython-notebook-extensions ていうディレクトリが見える状態で)、さっきのページにあるとおり

$ conda build IPython-notebook-extensions

する。終わったら、これも書いてあるとおりに下から四行目の .tar.bz2 を使う。(ここ訂正。Mac OS なのでこんな感じのはず)

$ conda install ~/anaconda/conda-bld/osx-64/nbextensions-master-py34_0.tar.bz2

設定

まずいつものように $ jupyter notebook で起動する。それから別のタブを開いて
http://localhost:8888/nbextensions へ行くと設定画面が起動するはず。あとはうまいことやってください。

その他

ショートカットで fold/unfold が作動しない…

…で、僕の場合 Codefolding というやつを Activate したら確かに folding 自体はでてきて、クリックでの開閉はできるようになった。だけど、デフォルトで設定されてるショートカットの option+F で fold/unfold されない。適当なものに変えてみてもダメ。ちょっとこれは困るな…。ブラウザのキャッシュをクリアしろとかあるしやってみるか。

マニュアルインストール?

config extension · ipython-contrib/IPython-notebook-extensions Wiki · GitHub ←このページも結局 githubwiki の一部なんだけど、下の方にゴチャゴチャと「設定ファイルがあるディレクトリを確認して…」とか書いてあるが、その前に

You only need the instructions below to perform a manual installation.

とあるとおりで、自分の場合は一切やる必要なかった。場合によっては必要なのだろうけれど。

他の extension

Keyboard shortcut editor がある!どうやらこれを activate するとヘルプのショートカット一覧 (h で起動) から編集できるようになるようだ。が…実際に active するとなぜかショートカット一覧が開かなくなった…なんでだ…。キャッシュなどクリアしても駄目。普段使いの chrome だけでなく、デフォルトから設定を全くいじってない safari でもだめだった。

UPDATE 2016-06-12

久々に extension 使ってみたのでメモ。

まず何はともあれ NbExtensions menu item を enable するのをオススメ。これで今度からはアドレスバーにコマンド打ち込まなくても、notebook 画面で Edit メニューの一番下にコンフィグ画面を開くためのリンクが追加される。

それから上でうまく作動しないと書いていた keyboard shortcut editor が問題なく作動していた。今回はショートカットで「セルを上に移動」「セルを下に移動」がしたかった。実は extension のエントリに Move selected cells というのがあるのだが、自分の環境 (Chrome on Mac OS X Mavericks) ではこれを enable してもうまく動かなかった。そもそも複数セルを一度選択してから移動、というのが意図された動作のようだが、もっと単純に単にセルを移動したかった。で、これは結局新しくショートカットを追加してアッサリできた。手順は以下:

  1. extension で keyboard shortcut editor を enable する
  2. 適当な notebook を開く。おそらくこの時に自動的にショートカットの一覧が開くはず(開かなかった場合は、メニューバーの Help > Keyboard Shortcuts から開く)
  3. セル移動は Command Mode での作業なので、Command Mode の一番下あたりにある「+ : Add a new command-mode shortcut」をクリック
  4. 上の行に Bind [select action] to: とあるので、[select action] の部分のドロップダウンリストをクリックして、下に行ったところにある jupyter-notebook:move-cell-down を選択する。
  5. 下の行にある というところの右をカーソルでクリックし、好みのショートカットを入力する。自分は Ctrl + J にしてみた。OK で確定。
  6. 同じことを jupyter-notebook:move-cell-up についても行う(Ctrl + K にしてみた)。

以上。

なお、ググってるときに知ったけど、どうやら昔はこの Ctrl + K, Ctrl + J がセル移動に割り当てられていたらしいが、特定のブラウザ自体のショートカットとコンフリクトするというのであるときに無効化されたらしい。そこでの議論では「は?使いたかったら custom.js をいじれや」みたいになってたけど、こうして extension を使って javascript わからない素人でも設定できるのはありがたいことです…

*1:Anaconda 使わない場合も、このページの周辺や同じ wiki 内にある情報でなんとかなるはず($python setup.py install とかするっぽい?)。