dynamicsoar's log

主に研究関係のメモ

Rhinoceros with python script: CurveThroughPoints (rs.AddInterpCurve) after sorting the points

Background

I have a few points with witch I want to make a CurveThroughPoints. This is not a problem when doing it manually but when I tried that with python script using rs.AddInterpCurve, it generated strange looping curve. It's quite obvious the order of the points *1 is used for drawing the curve, instead of using the distance to the next point which is likely to be used in the CurveThroughPoints. Therefore, to my understanding, I have to sort the points by myself. So I did that.

Code

Assuming you have a layer "pts_test1" containing the points, and an empty layer "crv_test1" where your resultant curve will be placed.

def make_curve_through_points(layer_name_pts, layer_name_crv, deg, ktstyle):
    ## Obtain the GID of the points
    rs.CurrentLayer(layer_name_crv)
    id_points = rs.ObjectsByLayer(layer_name_pts, True)

    ## Obtain 3D coordinates of each point
    points_3d = []
    for i in range(0, len(id_points)):
        points_3d.append( rs.PointCoordinates(id_points[i]) )

    ## Sort the points
    points_sorted = rs.SortPointList(points_3d)

    ## Generate the curves
    rs.AddInterpCurve(points_sorted, degree=deg, knotstyle=ktstyle, start_tangent=None, end_tangent=None)


## Sample usage
layer_name_pts = "pts_test1"
layer_name_crv = "crv_test1"
deg = 3
ktstyle = 1
make_curve_through_points(layer_name_pts, layer_name_crv, deg, ktstyle)

Instead of using SortPointList, directly specifying the direction with SortPoints might be necessary depending on the situation.

References

*1:Perhaps the order of generations of the points, which is held internally and cannot be seen...

Papers 3 (legacy) から Zotero 5 へ移行中なのでメモ

まえがき

なぜ移行するか

いろいろな理由がある。

  • Papers 3 がかなり不安定になっていた
  • Mac だけで完結といえば聞こえは良いがその mac が死んだら論文が読めなくなる(ほぼ書けなくもなる)、というのが嫌だった。
    • 切実な問題として、macbook pro のバッテリが死にかけており、交換に出したいが、万が一を考えると他の環境でも作業できないと困る、というのもある。タイミング的にちょうどいいということ。
  • ReadCube Papers を trial したが、お金払う割にはまだ微妙な面が多いと感じた。Unlimited storage も、Dropbox にお金払って 2TB もスペースがある自分には魅力的ではない。
  • iPad いまはすごく古い機種しかないし、まぁとりあえずは読めなくても良い。

というわけでかねてから考えていた Zotero への移行をした(しつつある)。

環境

  • MacBook Pro(Papers 3を使っていた)
  • 他の Win マシン(自宅と研究室にある)

の全てに入れて sync することを目指す。また、Overleaf との連携か、少なくとも citekey の簡単なコピペもできないと困るので、そのへんもやる。

手順

最低限の知識

Zotero におけるネット経由の同期では、メタデータ(論文タイトルとか著者名とかそういうやつ)のことを data sync, PDFファイルなどの添付ファイルのことを file sync と呼んで明確に区別している。前者の data sync はどうせ容量も大したことないからだろうけど Zotero アカウント経由で無料で可能。一方、後者の file sync の方は、いくつかの方法があり、デフォルトの Zoteroクラウドストレージでは 300 MB を超えると有料(ストレージを買う必要がある)。今回はこの file sync の方を Dropbox 経由でやることにする。

[Mac] Papers 3 から bibtex ライブラリのエクスポート

気が向いたら書くかも。まぁ簡単なので…。

[Mac] Zotero のインストール

Zotero をインストールしたらまず Preferences > Sync タブ > File Syncing の2つの ticks を外す。たぶんこれをそのままにして他の設定をやってしまうと勝手に PDF を zoteroクラウドストレージ(無料アカウントだと 300 MBしかない)にアップロードし始めるんじゃないかと思う…。

[Mac・Win] Data sync の設定

もしまだ Zotero アカウントを作っていなかったらウェブから作る。

アプリを開き Preferences > Sync タブ > Data Syncing で link する。このとき、すぐ下の File Syncing の2つのアイテムに ticks が自動で入ってしまうので、これらは忘れずに untick する。

[Mac・Win] Dropbox 経由での file sync の設定

Preferences > Advanced タブ > Files and Folders タブ(ちょっと分かりづらい位置にある)で、Base directory を選択する。自分は今回、とりあえず Papers 3 のディレクトリ構造をそのまま使うことにしたので、Dropbox/Library.papers3/Filesmac, win の両方で選んだ。ここがポイントで、両方で設定しておかないとPDFの自動探索に失敗する。

[Mac or Win] bibtex ライブラリのインポート

難しいことはないので省略。別に Win でやってもいいと思うけど mac 側でやった。

[Mac・Win] Overleaf との連携

これができるのは Overleaf の有料プランだけかもしれない。が、公式に説明がない…ひどすぎる。しかしググると非公式の解説があったのでそのとおりにやった。

Overleaf のプロジェクト一覧みたいな一番基本の画面で、右上の Account > Account Settings で少し下の方にスクロールすると Zotero Integration てのがある。

次に、任意のプロジェクト(論文)を開いて、左上の方にあるアイコンで New File を選ぶ。すると From Zotero ってのがあるので、名前をつけて、BibTeX か BibLaTeX かを選んで、Create を押す。けっこう時間がかかる。しかもたぶん、失敗したというエラーメッセージが出る。が、実際にはもう少し待つと .bib ファイルはこっそり生成される。エントリの数はあっていたので、よくわからないがダイアログのほうがおかしいようだ。

というかこれ別に Zotero 側のライブラリの変更を検知とかしてないような気がする。Zotero で変更があっても、Overleaf 上でもう一度 Create しないと反映されないんじゃないか?(未確認)もしそうなら、ローカルの Zotero でエクスポートして、Overleaf にアップロードする、という従来の方法でもいいかもしれない…。

[Mac・Win] Better BibTeX for Zotero (BBT) のインストール・設定

retorque.re

インストールは他の add-on と同様。xpi ファイルをダウンロードしてきて、Zotero メニューの Tools > Add-ons > 右上の歯車アイコン > Install Add-on From File... でその xpi ファイルを選択。Zotero を再起動。

再起動すると、いくつか質問される。主には citekey 形式をどうするか。自分はせっかくなので BBT 形式にすることにした。その後、ライブラリ内のすべての文献について citekey が生成されるのでしばし待つ。終わると、メインペインに Citekey カラムが追加されるのと、右の Info ペインの一番上にも citekey が出るようになる。

しかしこれらをいちいちコピペするのはまだ面倒…そこで自分はこの後、文献のエントリを drag & drop することで \citep{ citekey } みたいのをコピペできるように設定した(参考: http://retorque.re/zotero-better-bibtex/citing/#drag-and-drophotkey-citations )。

  1. Preferences > Export タブ > Default Format: を Better BibTeX Citation Key Quick Copy に変更する。
  2. Preferences > Better BibTeX タブ(新しくできている)で自分の好みに設定する。
    • たとえば citep しか使わないのなら、Quick copy format を LaTeX にして、LaTeX command には citep と入れておく。
    • 一方で「cite を使ったり citep を使ったりするのでそこは自分で書きたい、純粋に citekey だけをコピペして欲しい」ということなら、QuickCopy format で Cite Keys を選べばよい。

ちょっとわからないのが、これ win と mac 両方に入れる場合、citekey 命名ルールとかを完全に同じにしとかないと data sync するときにコンフリクトしそうなんだが…さすがにそこはなにかしら考えられているはずか。

他の add-ons

ZotFile と Zutilo は入れてみたけどまだ使い方がぜんぜんわかってない。これから。

追記 (2020-01-17):Zotero Connector で data & file (PDF) を import するときの設定

Zotero Connector (Chrome) で保存すると、PDF が dropbox 内にはいかないことに気づいた。ググってるとかなりよいウェブページを発見:

en.dlyang.me

Step 4 の ZotFile Preferences の設定で、両方とも Dropbox 内のディレクトリに変えるとちゃんとそこ(のサブフォルダ)へ保存されるようになった。これまでにダウンロードしていたPDFを Dropboxディレクトリへ送ってそこへのリンクにしたいときは、エントリ(複数でもよい)を選択して右クリック>Manage attachments > Rename attachments すると自動的にそのようになった。

しかしまだよくわかってないな…このページの最後の方にある symbolic link を作れみたいのが必要なのかどうかがわからん…

ParaView 5.6 以降で Plot3D の function file を読むには .q file も読む必要がある、というバグ

discourse.paraview.org

現状、version 5.5.2 以下を使うのが手っ取り早い。あるいはダミーの .q file を用意するか。

実は自分も昔 FIELDVIEW を使っていた頃には中身のほぼ全部がダミーの .q file を作っていた*1。ダミーでないのは時刻や Mach, alpha などの変数のみで、しかも Mach や alpha のところに実際には別の変数を代入するという小技を使っていた。まぁそれはそれとして、これはとても不便。

*1:すべてのセルの値として0を書き込んでいた。

Rhino で自分だけの tab(ツールバー)を作る

もともとは複数の tabs にまたがる、よく使うボタンだけをまとめておくと、作業効率がとても上がる。まぁブログ記事書くほどのことではないかもしれないけど…

  • タブのあたりを右クリックして New Tab. これで新しい tab(ツールバー)ができる。
  • 既存のタブから、コピーしたいボタンにカーソルを合わせて、Ctrl を押しながら、先程作った tab へドラッグする。これでコピーできる。
  • tab 内でボタンの位置を変えたいときは、Shift を押しながらドラッグ。
  • 不要なボタンを消したいときは、Shift を押しながら tab 外までドラッグする。

Steve Jobs による「コンピュータは自分にとっての自転車みたいなもの」スピーチの出典は Vance Tucker の論文

イントロ

いつものように Researchat.fm を聴いていた。第30回 30. Battle Aura | Researchat.fm の開始10分程度で、この Steve Jobs による「コンピュータは自分にとって自転車みたいなもので、これがあることでヒトはぐっと enhance されるんだ」みたいなスピーチの話が出てきた。ほう。バイオメカニクスじゃん。

実際にどんなスピーチだろう、とググると、たとえば How the bicycle beats evolution and why Steve Jobs was so taken with this fact | Bike Boom などがヒットする。Sci Am が出典ということらしいが有料なので読めない(買いたいほどではない)。しかしここで引用されている figure のキャプションに、

this graph is based on data originally compiled by Vance A. Tucker of Duke University

とある。おっ?

Vance A. Tucker といえば、鳥の飛行のバイオメカニクスをやってる人間なら誰でも知っているであろう有名人だ。初期は風洞の中でマスクをつけた鳥を飛ばして酸素消費率を計測したことで知られ、後期には猛禽の翼端・狩り飛行やそれと眼の構造との関係なんかを調べたりしている。しかし恥ずかしながら、自分はこの metabolic rate の話は知らなかった。そこで Duke の公式ページ ( Vance A. Tucker | Scholars@Duke ) に行って、ダウンロード漏れしていた論文をなるべく全部収集した。

元ネタ論文

その結果、どうやら元ネタはこれらしいという論文がわかった:

この論文の figure 1 が非常によく似ている。なおこの論文のデータは全部自分で調べたわけというではなくて、他の論文等からデータを引用している。Table 1に出典付きでデータが書いてある。Cost of transport(CoT, 効率の逆数みたいなもの)を求めるには、Metabolic rate を Speed で割ればよい。この値を縦軸に、Wt(weightだろう)を横軸にとって両対数にすれば figure 1 になる。

気づき

さて、これで色々わかることがある。

  1. コンドルなんていない。Jobs は The condor used the least energy to move a kilometer みたいに言ってるが、Scientific American の記事にも、元論文にも、condor なんて出てきてない。たぶんどこか他で聞いた話と脳内で勝手にマージしたんじゃないだろうか。
    • 飛行で一番いい(縦軸の CoT が小さい)のはこの中では pigeon つまりハト。ハトなんてどう考えても効率最高の鳥ではない。もっと翼が細長い鳥のほうがいいのはかなり自明(説明は省略…)。実際、先の bikeboom.info の記事を読みすすめると、the bicycle is nowhere near as efficient as Solar Impulse, the aircraft currently attempting to fly around the world. ってあるんだよね…。これが事実なのか走らないけど、飛行だって相当効率をよくできるのは間違いないだろう(参考:ソーラー・インパルス - Wikipedia)。あともっというと CoT は「どれだけ速いか」は評価項目になってないのでそれを入れると飛行が圧倒的、みたいなのもあるよね。
    • もちろん、「地面が温まった熱で生じた上昇気流(サーマル)を利用してソアリングをして、次のサーマルを目指してまたソアリングをする」という繰り返しで飛んでいる(サーマルソアリング)をたぶんコンドルはよくやっていて、それは羽ばたき続けての飛行に比べてエネルギの消費はとても小さいだろうから、完全に的はずれとは言い切れない。ただ、そもそも具体的な値がわからないのだから自転車とも他のどれとも比較のしようがないし、blew the condor away, completely off the top of the charts とかは完全に言い過ぎでしょ。
  2. Sci Am 記事の plot の縦軸がちょっとおかしい。よく見ると1, 2, 4, 6, 8が2回出てきている。これはひどい typo で、下の方の、原点に近いものたちは 0.1, 0.2, 0.4, 0.6, 0.8 が正しいことが論文を見るとわかる。
  3. 元論文には bicycle のデータはない。Scientific American が足したのかもしれない。先の bikeboom.info の記事によると、この Sci Am 記事を執筆した S. S. Wilson という人が調べたようだ。彼は lecturer in engineering at Oxford University and a fellow of St. Cross College だったらしいが…
  4. ハチドリの値はちょっと怪しい。これだけは前進飛行時ではないようで、Table 1 欄外に "Speed assumed, metabolic rate measured while hovering." というコメントがある。つまり本当のハチドリの前進飛行に比べると、 metabolic rate が大きめで cost of transport (CoT) も大きめ = 効率が悪めに出ている可能性がある。出典の論文 ( ) は有料で読めませんでした…。
  5. 魚というか遊泳が salmon というたったの1サンプルしかない。一般的には遊泳がもっとも CoT 的に有利だったと思うので *1、これだけを元に語ってしまうのはかなりミスリーディングだろう。

もちろんもっと最近の文献を探せば遥かに網羅的で正確な CoT のデータは当然色々とあるだろう。That is, however, beyond the scope of the current entry... ということでおしまい。

おまけ:縦軸 (CoT) の次元・単位について

なお、縦軸について、論文の Figure 1 "Cost of transport, kcal/(kg km)" と書いてある。一方、Sci Am 記事の plot には "COST OF TRANSPORT (CALORIES PER GRAM PER KILOMETER)" とある。Cost of transport は en.wp の記事 ( Cost of transport - Wikipedia ) にあるようにこの次元で問題ない。Sci Am は単に kcal/kg の部分をキロで約分して cal/g にしているだけだろう。つまり縦軸の数字は論文と Sci Am で全く同じになる(実際、typo を考慮すれば同じになっている)。

ところでもうちょっと考えてみると、CoT は無次元数だという。てことはこの kg とか GRAM とか言ってるのは本当は kgf と GRAM FORCE じゃん。ちゃんと区別しろよ。まぁ論文では mass ではなく weight って書いてあるし、当時の時代的に weight で語るのは普通だったのかもしれないが。そんなこといったらそもそも分子が J でなく kcal じゃんって話か…そっすね。

*1:海外に荷物を発送した人は船便が安いことを知っているだろう。