共重合反応の確率シミュレーション(アルゴリズム編)

要約

 分子Aと分子Bが交互に結合することでABABAB…という形式で連なった分子を生じる反応のシミュレーションをR言語で行った。本シミュレーションでは、ランダムな衝突によって生じる分子の結合を再現するため、無作為抽出で生成物を決定した。様々なAとBの比で反応を開始したところ、AとBの数が同程度であるほど長い分子を生じやすく、どちらかの分子の数が偏っているほど短い分子を生じやすいことが明らかとなった。特に、有用な分子として知られるBAB型分子を効率よく得るには、Bの割合が少なくとも96%~98%程度必要であることが明らかとなった。

1.動機付け

 ゲル材料は寒天のような柔らかい材料として知られており、食品や医療用途の材料として広く用いられている。このような材料は、直鎖型の長い分子を含む溶液に、鎖の橋渡し役となる「架橋剤」を添加することで作製できる(図1)。架橋剤は鎖同士を繋ぎ、溶液中の分子全体を網目状の構造に変える。このようにして生成した網目状の構造は柔らかいながらも流動性が抑制され、ゲルという状態になる。したがって、ゲル材料の作製において架橋剤は、ゲル化を左右する重要な役割を果たす。

図1. 一般的なゲル材料の作製方法を表す概念図.

 ゲル化反応においては機能性架橋剤を導入することで、発光性などといった様々な機能性を有するゲルを創製することができる。一般に機能性架橋剤は、中央の機能性部位Aと両端の架橋部位Bで構成される(図2)。このようなBAB型構造であることによって、Bの部位を介した網目構造の形成と、A由来の機能性発現が可能となる1

図2. 機能性ゲルの作製手順.

 一般に、機能性架橋剤BABを得るには、予めAとBを反応させる必要がある。反応とは、分子間のランダムな衝突によって結合を生成させる過程を指す。すなわち、反応溶液中でAとBが衝突を起こすとABになり、続いてABがBと衝突することで、BABを生じる。ただし、A同士またはB同士が衝突を起こしても何も起きないため、生成する分子はBABAB…のようにそれぞれの分子が交互に結合したものとなる。このようなランダムな反応は、反応開始時点でのAとBの比を調整することで制御できる。具体例として、3つのケースを図3に示した。ケース①としてBの数がAの数を大きく上回る場合、Aは2回連続的にBと衝突する確率が高い一方で、生じたBABがBよりも先にAと衝突する確率は低く、ほぼ全てのAがBABに変換される。このため、ケース①のようなA対Bの比で反応を開始すれば、効率よくBAB型分子を得ることができる。しかしながらこのような手法では、大多数のBがAとの衝突を起こさず、言い換えれば未反応の状態で残ることになる。このような未反応のBは一般に廃液として処理されるため、環境負荷の原因になるという問題がある。

図3. 反応開始時点におけるA/B比によって異なる生成物.

ケース②としてBの数とAの数が同程度である場合、生じたBABが再度Aと衝突することが十分に起こり得るため、BAB型より長いBABABA…といった形式の分子を生じる。しかし、BAB型より長い分子は精製や同定が困難であり、材料物性を緻密に制御できなくなるという問題につながる。ケース③としてAの数がBの数を上回る場合、Bの両端にAが修飾されたABA型分子を多く生じてしまう。このような両端がAとなった分子は架橋剤としての反応性がなく、ゲル化反応を起こすことができない。したがってケース①-③より、AからBAB型分子を効率よく得るには、Bの割合が高いことが必要である一方で、かつ最小限で済むことが望ましい。すなわち、Bの割合には最適値が存在することが考えられる。このような最適値を実験的に求めるには、様々なA/B比で実験を行わなければならないことから多大な労力が発生する。そこで本記事では、以上のようなAとBのランダムな衝突反応を無作為抽出と見なし、AがBABに変換される確率を様々なA/B比の下でシミュレーションすることで、Bの割合の最適値を調査した。

2.モデル化

 分子A,Bは文字A,Bで表せるものとしてモデル化する。また、現実に起きる化学反応の規則に則り、本シミュレーションにおける結合反応の原則を図4のように定めた。その原則とは、衝突(無作為抽出)によって①A同士は結合しないこと、②B同士は結合しないこと、③AとBは結合可能であること、の3つである。このような条件分岐はif文によって定めることができる。

図4. 本シミュレーションにおける結合反応の原則.

 反応のアルゴリズムについては、次のように定めた(図5)。具体例として、反応容器(flaskというベクトル)にAが3つとBが6つ存在する場合を初期状態として仮定する。まず、while文で反応を開始させることで、while文の条件が満たされ続ける限り、反応が続行されるような設定を行う。具体的には、衝突が起きない回数が何度も続くような状況を停止できるようにwhile文を記述する。続いて、sample()関数によってflask内で衝突させる2個の分子のインデックスを決定する。選択された分子は、どちらも等しい場合を除いて反応が可能となるため、これを満たすようにif文を記述する。ただし、2つの分子として同じ形であるABとABが選択された場合には、ABABを生じるような反応が可能となる。そのため、より一般的には、「選択された2分子の4つの末端が全て等しい場合を除いて反応が可能である」という条件を設定する。すなわち、末端が全て等しくない場合はTRUEが返され、反応は続行する。一方で、末端が全て等しい場合はFALSEが返され、再度sample()関数による分子の選択段階に戻る。図5の例では、インデックスが2と6の分子が選択されており、それぞれAとBという異なる分子に対応することから、それらが結合したものと見なす。そこで、paste()関数によってAとBをABに変換し、生成物としてflaskの最後尾に追加する。続いて、インデックス指定によって、反応物であるAとBを容器から除外する。この操作はflaskをflask[c(-2, -6)]で置き換えることによって行える。

図5. シミュレーション対象である共重合反応のアルゴリズム.

 以上のような反応を繰り返すと、反応容器内にはAやBといった1文字で表せる分子だけでなく、ABやBAなどといった2文字以上の分子が出現する。仮にABとBAが衝突するとした場合、反応の原則に基づくとABBAは生成せず、ABAB(BABAと同じ)が生成する。よって、2文字以上で表現される分子が選択された場合には、反応相手によってその向きを変えるアルゴリズムを設定しなければならない。そこで、2文字以上の分子の反応パターンを4つの場合に分け、図6に示した。

図6. 衝突する分子の長さが2文字以上である場合の結合アルゴリズム.赤枠は反応末端を示す.…は中間部分の省略を意味する.表の1個目の分子は全てA…B型である.1個目の分子がB…A型となる場合は、表の2個目の分子を反転させたものが反応相手として対応する.

図6①のABABが反応する場合は、両分子とも反応末端が向かい合っているため、初期の向きを保持したままABABを生じる(下線は反応末端)。一方で、②のABとBAが反応する場合は、1個目を反転させることで、反応末端が隣り合った形のBABAを生成できる。同様に、③のABとBAが反応する場合は、2個目の分子を反転させて結合させることで、ABABを生成できる。④のABとABは反応末端が互いに逆方向を向いているため、両分子を反転させて結合させることでBABAという生成物に変換できる。以上のようなアルゴリズムによって、どのような分子が選択されてもpaste()関数から生成物を作り出すことができる。

引用

1. Russell, G. M.; Inamori, D.; Masai, H.; Tamaki, T.; Terao, J. Polym. Chem. 2019, 10, 5280-5284.

【就活】HTMLタグを用いた録画面接必勝法

posted in: Technology | 1

本日(本記事の投稿日)はギリギリ3月ですが、3月といえば就活の開始時期です

といっても筆者は博士課程の人間であるため、去年の11月には就活が終わったのですが、その過程で就活の選考突破に関する新しい方法論を見出しました

それは、録画面接に関する方法です

録画面接って、「3分あげるから特定のテーマのもと自己アピールしてください」みたいなやつです

この場合、面接官はいないので、話すことは決まっているわけです

ですので、予め用意した文章を読めば、伝えたい内容は確実に伝えられるわけです

ところが、文章を読んでしまうと、ある問題を生じます

これは上図の通りで、カメラの位置が文章の位置と異なるという問題です

よって、文章を読みながら録画面接を行ってしまうと、カメラに映る自分の目線から、文章を読んでいることがバレバレになってしまいます

(目線によって文章を読んでいることがバレるということは、自分自身を録画して確認しています)

こうなってしまうと、もしかしたら面接官に「用意した文章を読んでいるだけの中身のない人間だ」とか「誰でもできるような楽な方法を突き通すような人間だ」とか思われてしまうかもしれません

最も望ましいのは、カメラを見ながら、伝えたい文章を言葉に変換するということです

ですが、決まった時間内に無駄なくしゃべることは難しいですし、できるだけ暗記などの手間は省きたいですよね

つまり、文章を読みながら録画面接を行いたいけれども、カメラ目線は維持したいという要望を生じるわけです

そこで、これを叶えるため、以下の図に示すような方法論を着想しました

要するに、「カメラ付近に文章を流し続ける」という方法です

文章を流すことによって視線の位置を保持でき、視線が左右を往復するという従来の余計な動作を抑制することができます

これによって、カメラ付近の位置を見続けることができるようになり、面接官から「目を見て話せる人間だ」とか「自らの意思に基づいて話せている」とか思ってもらえるわけです

じゃあ、どうやって文章をカメラ付近の定位置に一定速度で流すのか?

これを実現するために、HTMLタグを利用します

HTMLタグというのは、本来は、ブラウザに表示される文字のサイズとか色とかを制御するために用いられる機能です

今回はその機能を使って、録画面接用の文章をブラウザに流します

そこで用いることになるタグが、具体的には、marqueeタグと呼ばれるものです

以下では、その使用方法を説明します

手順は、上図の通りです

まず、メモを開きます

開いたメモ帳の中には、読みたい文章を入力するわけですが、これをHTMLタグで囲みます

具体的な全入力内容は

<marquee scrollamount=”36″ truespeed scrollamount=”1″><font size=”9″>読みたい文章</font></marquee>

という具合です

入力が完了したら、保存を行います

ただし、.txtファイルとしてではなく、.htmlファイルとして保存しましょう

.htmlとして保存されたファイルは、Webブラウザによって開かれたときに、Webサイトと同様に振る舞います

そこで、このファイルをFirefoxなどのブラウザで開いてみましょう

上図のように、入力した文章が右から左へ流れてくるはずです

本記事上でこれを再現すると、下の行のようになります(sizeは6に設定)

文章文章文章文章文章文章文章

ただ、これではまだWebブラウザのツールバーの距離だけ、文章とPCカメラが離れてしまっています

そこで、F11キーを押してみましょう

Firefox以外のブラウザではどうなるか分かりませんが、Webブラウザのツールバーを非表示にできます

これによって、読みたい文章とPCカメラの位置を極限まで近づけることができます

録画を開始するときはF5キーを押すことによって、文章を最初からスタートさせましょう

方法の説明は以上です

実際に試してみた感想

実際に私はこの方法を用いて就活の録画面接を乗り切ることができました

録画面接の通過率は100%です(ただし1社しか受けていないので、1分の1ということになります)

この方法の良いところは、アプリなどを使わず、PCに備わっている機能だけで実現可能ということです

文章を流すアプリなどは存在するのですが、使ってみたところ、いろいろなパラメータの調節ができるとも限らず、使いづらいというのが正直な感想です

しかし、本手法はHTMLタグを用いており、文章を流す速度やフォントサイズなど細かくパラメータ調節できます

ですので、HTMLタグを用いるのがベストと考えられます

録画面接でもし困っていられる方がおられたら、本記事の手法で乗り切ってくれれば幸いです

ただ、その後のリアルな対面面接は自身のパワーで頑張ってください

読んでいただき、ありがとうございました。

フーリエ変換を体験せよ

posted in: Processing | 1

フーリエ変換って聞いたことありますか?

理系であれば、少なくとも聞いたことはあるのではないでしょうか

簡単に説明します

一言でいうと、重なり合ってしまった波形を、元の波形の形に戻す作業のことです

例えば、典型的な波として、音波を思い浮かべてみてください

音は、波の振動数が高いほど、高い音として聞こえ、振動数が低いほど、低い音として聞こえます

ですので、ドレミファソラシドのいずれかを用いて表現するならば、ファの方がミより高い振動数をもっています

これをやや大げさに表現したものが下の図です

それぞれは単純な波形で表すことができますので、音楽の成績が優秀だった人は、どちらがどの音であるか、聞けば分かるかと思います

しかし一般的には、我々の耳に入る音というのは、そう単純ではありません

もしかしたら、ファとミが同時に再生されていて、その重なり合った波(図の緑色)が我々の耳やマイクに伝わってきているかもしれません

こうなると、どの周波数(振動数)の波が再生されているか、人間の力では検知しにくくなってきます

この問題を解決するのが、フーリエ変換です

つまり、観測された音から、どのような周波数の音が入っているかを明らかにする技術をフーリエ変換といいます

具体的なイメージは下図の通りです

緑色の波はミとファの重なりであるため、時間を横軸としたとき、その振幅はもはや単純なsin関数では描けない形となっています

ここで、この緑色の波に対してフーリエ変換を行うと、ミの音に対応する周波数と、ファの音に対応する周波数がピークとなって現れます

これによって、緑色の波は、それぞれの周波数をもった波の重なり(合成波)であることを明らかにできます

Processingで体験しよう

というわけで便利なフーリエ変換なのですが、その数学を理解しようとすると難しく感じられる方も多いと思います

そこで、視覚的にフーリエ変換を理解できることが望ましいと考えまして、画像処理の力を借りることにしました

以下のページから、「波を合成する過程」と「その周波数を明らかにする過程」を実際に遊んでみることができます

以下は、表示画面の説明です

①2つある構成波のうちの1つ目である赤波のパラメータを調節できます。具体的には、その周波数と初期位相をいじることができます。赤丸をドラッグして、適当な位置に設定してください。(初期位相はノリで弄れるようにしましたが、最初の設定のままにしておくことをオススメします)

②2つある構成波のうちの2つ目である青波のパラメータを調節できます。

③上記の①と②で設定した波の合成波が表示されます。

③’ 続いては合成波を円状に貼り付ける作業が必要となります。その範囲をドラッグによって指定してください。

④指定された範囲の合成波が円状に貼り付けられます。

⑤円状に貼り付けられた波の重心位置が表示されます。

⑥上記⑤において表示された重心のx座標がプロットされます。③’の貼り付け範囲を動かしてみることによって、どのようなプロットが現れるかを楽しんでください。もし合成波が、純粋に1つの周波数をもつ波によって構成されているのであれば、現れるピークは一つになると思います。一方、合成波において異なる2つの周波数が混在しているのであれば、現れるピークは二つになると思います。

【参考資料】

今回のプログラムを作製するにあたって、3Blue1Brownさんの動画を参考にしました

プログラムそのものは完全なオリジナルですが、円状に巻き付けた合成波の重心を計算するという考え方は、動画を見るまでは知りませんでした

本ページでは解説しきれなかった点について、この動画では完全に説明していますので、もし興味があれば御覧ください

【補足】

より低い周波数の波を混在させた場合は、そのピークは高周波数のものよりもブロードに観測されます。おそらくこれは、不確定性原理のためであることが考えられるのですが、よくは分かっていません。分かった方がいらっしゃいましたら、コメントよろしくお願いいたします。

Chemdrawの構造をBlenderへインポートする方法

posted in: 3D Modeling, Chemistry | 0

Chemdrawで書いた構造を立体的に見せたり、発光などのエフェクトを書けて見せたりしたい時があると思います

そんなときはBlenderを使いましょう!

ただ、BlenderにChemdrawの構造を取り込むには、ちょっとした工夫が必要です

それが、svgファイルへの変換です

これはInkscapeという無料ソフトを使うことで、簡単にできます

これについて、以下の動画にまとめました

トークが含まれる動画は、GAINENZとしては初です

これによってパワポでの研究発表が分かりやすくなるなど、役に立てば幸いです!