2018年7月18日水曜日

第161回 質量分析関西談話会プログラム


161回 質量分析関西談話会プログラム
「四重極について学ぶ」

201884日(土) 1500分~1800

島津製作所関西支社マルチホール (会場定員60名)
大阪市北区芝田1-1-4
大阪梅田 阪急ターミナルビル14
JR大阪駅ホーム北側に隣接するビルです。阪急17番街のエレベータで14階までお越しください。)
電話06-6373-6522

四重極質量分析装置は最も広く普及しています。人生ではじめてつきあった質量分析装置が四重極という方は多くおられると思います。また、特に薬物動態分野の歴史は液体クロマトグラフ/トリプル四重極質量分析装置の発展とともにあり、多くの分析屋の相棒として活躍してきた四重極質量分析装置ですが、その原理や、発展の歴史、開発者の思いなどを知る機会は限られています。そこで、今回の関西談話会では、四重極質量分析装置に焦点を当て、原理や、発展の歴史、開発者のみなさまからお話を伺う機会としたいと思います。多くの方のご来聴を歓迎します。


講演プログラム:
15:0015:50:石原盛男氏(大阪大学大学院理学研究科)
「四重極型質量分析装置のしくみ(仮)」
15:5016:40:窪田雅之氏(サーモフィッシャーサイエンティフィック):
「トリプル四重極質量分析装置の歴史」
休憩
17:0018:00:御石浩三氏(島津製作所)
「四重極質量分析装置の開発」

参加費:
無料
講演終了後、簡単な懇親会を予定しております。懇親会に参加される方は当日会場にてお志を集めさせていただきます。

参加申込み:
参加希望の方は、(1)氏名、(2)所属、(3)メールアドレス、(4)日本質量分析学会
会員/非会員の別を添えて、下記メールアドレスにお申し込みください。
kansai17_%_mssj.jp (送信の際は、_%_@に変えてください)
関西談話会世話人代表 松田史生(大阪大学)


世話人:川畑 慎一郎(島津製作所)、黒野 定 (和光純薬工業)、豊田岐聡 (大阪大学)、松田 史生 (世話人代表、大阪大学)

2018年6月13日水曜日

mfapyインストール方法

mfapyインストール方法


180613

mfapyとはpythonベースの13C-MFAデータ解析用ツールボックスです。大阪大学大学院情報科学研究科バイオ情報計測学講座で開発を進めています。OpenMebius[論文] のPython番という位置づけで2012年ころより開発を開始しましたが、Toolbox化することで大幅に機能を拡張したため、互換性は全くなく、コードベースも別になっています。

変更点

ver 0.5.0
・pyfluxもfluxpyもpymfaもすべて使われていたため、mfapyになりました。
・python3に変更しました。さらにAnacondaの使用を推奨としました。
・python3に対応しないpyOptをあきらめnloptにソルバーを変更しました。また、有効な大域最適化法が見つかりました。
・1スレッドと並列実行のコマンドを統合しました。mfypy.metabolicmodel.MetabolicModel.fitting_flux()など。
・G-indexに対応するため、モデル定義ファイルを拡張しました。
・反応の制約に"pseudo"を追加しました。化学両論行列(フラックス)の計算では無視するが、アトムマッピングでは考慮する反応です。これでG-indexが使えます。
・set_configure => set_configuration などコマンド名を修正しました。
・GitHubにて公開しました。
ver 0.5.1
・炭素数10以上の中間体に対応しました。これにあわせてモデル定義ファイル//Target_fragmentsのフラグメントの表記がGluc_12345からGlu_1:2:3:4:5に変更になりました。付け焼刃感たっぷりです。
ver 0.5.2
・mfapy.mdv.correct_natural_isotope()
・mfapy.mdv.add_natural_isotope()
を追加しました。モデル定義ファイル//Target_fragmentsの5列目に組成式を記述すると、それをもとに、天然同位体比の補正(足す、除く)をやってくれます。
また、試験的に
・mfapy.metabolicmodel.MetabolicModel.set_configuration()

・add_naturalisotope_in_calmdv = "yes"
とすると、MDVの計算時に天然同位体比のを足す補正をしてくれるようにしました。MS/MSデータは未対応なのでご注意を。

注意点

・まだバグがありそうなので、見つけ次第報告お願いします。

入手

https://github.com/fumiomatsuda/mfapy
からダウンロードしてください。

インストール

1. windowsのユーザー名(フォルダ名)は1 byteアルファベット、スペースなしであることが無用なエラーを防ぐ。
× 松田
× Fumio Matsuda
〇 FumioMatsuda
この例ではFumioMatsuda

2. これまでのpythonをすべてアンインストール

3. mfapyを例えば
C:\Users\FumioMatsuda\pymfa
に置く

4. Anacondaをダウンロード
https://anaconda.org/
の右上のDownload Anacondaをクリック。Sign Upは不要
Python3.6 version, 64 bit versionの最新版をダウンロード

5. デフォルトのままインストール

6. スタートメニューのAnaconda3(64-bit)=>Anaconda Promptを起動
(base) C:\Users\FumioMatsuda>
というコマンドプロンプトが出る。
(base)は現在の環境名
C:\Users\FumioMatsuda>は現在参照しているフォルダのパス
> dir
でフォルダの中のファイルのリストが見れる。
> cd mfapy
でmfapyフォルダに移動可能
> cd..
で一つ上のフォルダに移動

7. 仮想環境をmfapyを構築する。
> conda create -n mfapy python=3.6 numpy scipy matplotlib=2.1
質問されたら y でお返事

8. 仮想環境mfapyをactivateする。
> conda activate mfapy
(mfapy) C:\Users\FumioMatsuda>
環境名がmfapyになる。

9. 他のパッケージをインストールする(この順番が大事)
> conda install -c conda-forge nlopt
> conda install -c anaconda mkl-service 

10. Parallel pythonをインストールする
https://www.parallelpython.com/content/view/18/32/
に行き、
Download pp-1.6.4.4.zip
をダウンロード(バージョン注意1.6.4.4限定)。解凍後
C:\Users\FumioMatsuda\mfapy\
にフォルダを移動する。
現在参照しているフォルダをpp-1.6.4.4にする
cd mfapy
cd pp-1.6.4.4
(mfapy) C:\Users\FumioMatsuda\mfapy\pp-1.6.4.4>
となるはず。
> python setup.py install

11. mfapyをインストールする
現在参照しているフォルダをmfapyにする
(mfapy) C:\Users\FumioMatsuda\mfapy>
> python setup.py install

12. unittestを行う。
続いて
> python setup.py test
と入力、なにやらでてきてエラーなしでOKと出ればインストール成功

13 PyScripter をインストール
https://sourceforge.net/projects/pyscripter/
64bit (x64)用のv3.4.1以降をダウンロード
 /PyScripter-v3.4/PyScripter-v3.4.1-x64-Setup.exe
をデフォルトでインストール
3.4.1以降で仮想環境に対応した(えらい) 

12 PyScripter を起動、仮想環境を設定
メニューのRunの一番下から2番目Python Versions=>Setup Python
"+"ボタンを押し、
C:\Users\FumioMatsuda\Anaconda3\envs\mfapy
選ぶ。Unresigtered versionに
Python 3.6 (64bit) C:\Users\FumioMatsuda\Anaconda3\envs\mfapy
が追加されるので、選択して左上の歯車ボタン。緑の矢印で選択される。

13 動作のテスト

C:\Users\FumioMatsuda\mfapy\script\
にExampleがあるので、これがすべて動くかを確かめる。 
このファイルをもとに使い方を勉強する。

質問など

コードの追加、修正案、バグのレポートは松田まで。
 特にEMU構築のあたりが泥沼になっているので、リフォームが必要

Todo

  • スキャンデータからのMDV取得
  • 天然同位体比除去
  • バグがないかの確認


2018年5月4日金曜日

Rでオイラー法を解く


#one reaction
step_num <- 10000
dt <- 0.001
S_initial <- 100
P_initial <- 0
k1 <- 1
S <- numeric(step_num+1)
P <- numeric(step_num+1)
t <- numeric(step_num+1)
S[1] <- S_initial
P[1] <- P_initial
t[1] <- 0
for (i in 1:step_num){
  S[i+1] <- S[i] - k1 * S[i] *dt
  P[i+1] <- P[i] + k1 * S[i] *dt
  t[i+1] <- t[i] + dt
}
plot(t, S, ylim =c(0,120))
points(t, P, col="red")

2018年4月8日日曜日

ZWF

グルコース6リン酸を酸化して6-ホスホグルコン酸に変換する酵素タンパク質(グルコース6リン酸脱水素酵素, glucose 6-phosphate dehydrogenase, G6PDH)をコードする遺伝子記号は、伝統的にZWFあるいはzwfなどと表記されます。他の酵素遺伝子の記号は、pgi = phosphoglucoisomerase, hxk = Hexokinaseのように反応名の略称の場合が多いのでふしぎだなと思っていたのですが、とある総説が答えを教えてくれました。

Stincone et al. The return of metabolism: biochemistry and physiology of the pentose phosphate pathway.Biol Rev Camb Philos Soc. 2015 Aug;90(3):927-63.

がん代謝のワールブルグ効果で有名なドイツのOtto Warburgが1935年ころの一連の論文で電子運搬体としてNADH, NADPHが存在すること、グルコース6リン酸を酸化して6-ホスホグルコン酸に変換する酵素はNADP+を電子受容体として要求すること、酵母からこの酵素を精製してZwischenferment ('intermediate enzyme'という意味らしい)と名付けたことが由来だそうです。
あと、この論文のタイトルかっこいいですな。。スターウォーズの初期3部作の最後ジェダイの帰還”Return of the Jedi”の引用なのかしらと思って調べてみたら、そもそもがトールキンの指輪物語3部作の最後”The Return of the King”の引用で(中学校で読んだぞ、懐かしい)、たぶんこれも何かの引用なんでしょうか、、あとこの総説が3部作になっているの??

2018年3月29日木曜日

林業的バイオプロダクション

バイオプロダクション、というのは植物が光合成で固定した炭素(バイオマス)を微生物の代謝能力で有用な化合物、例えば燃料やプラスチック原料に変換しよう。というものです。工学的な発想だと、でかい石油化学コンビナートの原料を石油からバイオマスに、触媒を微生物に変換したらいいじゃん。と考えます。この工業的バイオプロダクションがバイオプロダクション技術の背景にある基本思想といっていいでしょう。地下から湧き出て輸送効率がいい石油が原料なら、一か所にでかい設備を作るのが正解ですが、問題は、バイオマスというのは地理的に薄く広がった資源である。ということと、再生可能とはいえ、再生には時間がかかるということ、軽くて運搬するエネルギーがもったいないということと、バイオマスの運搬=土地から栄養素を奪うことにつながることだと思います。
工業的なバイオプロダクションがあるなら、農業的なバイオプロダクションというのもありじゃんと思います。けど、特に食料自給率の低い日本のような国では食べ物を作れる土地があるなら食べ物を作ったほうがいいですよね。
となると、残るは林業的バイオプロダクションです。そもそも、石炭石油の時代が来るまでは、山から切って来た木で燃料をまかない、いまならプラスチックで作るようなものもみな、木や竹を加工して作っていたのです。植物が光合成で固定した炭素(バイオマス)を微生物変換抜きで直接使っていたといえるでしょう。ただ、木を資源として復活させるには、切ってきて山の下まで運ぶのがとっても大変だというむつかしい問題があります。植物の光合成とは、光エネルギーを還元力(電気)あるいは化学エネルギーに変換し(光反応)、ついでそれらを利用して炭素を固定します。炭素として固定されちゃうと運ぶのが大変なので、
・林道沿いの木の樹冠に安価な太陽電池パネル(シート)をかぶせる感じでドローンで敷設する。太陽電池パネルからは電線で電気を集める(できれば太陽電池パネル(シート)と電線は生分解性のものがよい。10年くらいでだめになり、そのうち土に返ってほしい)。木が光合成に使う光エネルギーを一部電気として使わせてもらう。
・それから植物で発電ができる可能性があるらしい。山全体でやればいいじゃん。
・発電した電気は中山間地のエネルギーとして利用する。
・あまった電気は、エコひーぽんみたいな小型プラントに送りこむ。その中では電極から受けとった電子で炭素固定ができる微生物が炭素固定を行い、プラスチック原料へと変換する=微生物蓄電とする。
・固定したプラスチック原料がある程度たまったら、回収して地方中核都市にある工業的バイオプロダクション施設に売り払う。
・山の中に住んでるやつが、最後は勝つ。
という林業的なバイオプロダクションは、ありえませんかね。

2018年1月14日日曜日

データベース検索はヌル分布

たとえば、万引き犯を捕まえる役になったとしましょう。
万引き集団100人がお店にやってきて被害を受けました。ブラックリストを作りたいので防犯カメラに犯人のそれぞれの写った特徴から、お店の顧客リストと照合して犯人を特定すればいいじゃんと考えます。

そこで、ある基準で万引き集団100人と全顧客の特徴の類似度をすべて計算して、ある閾値以上の類似度だったら、あたりとして探索してみました。

そうすると、
x 該当する顧客が1名当てはまった犯人 x人
y 該当する顧客が1名以上当てはまった犯人 y人
z 該当する顧客が1人も当てはまらなかった犯人 z = 100-x-y人
の結果が得られます。

この結果を基に、お店の顧客をブラックリストに載せていいものでしょうか?

ここで考えるべき点は、間違っていたらおおごとだという点です。どうしても防犯カメラの特徴からだけでは、特定は難しいので

1.本当は犯人ではない顧客(シロ)を、誤ってクロとしてしまった可能性(偽陽性)

はあり得ます。そもそも y のように該当する顧客が二名以上当てはまったということは偽陽性がおきていたということです。

じゃあ、閾値を厳しくすると、

2.本当は犯人の顧客(クロ)を、誤って見逃す(シロ)する可能性(偽陰性)

がふえてしまいます。

そこで、とある識者に相談してみました。識者は、
お店の顧客リストに載っている100人を仮想的に犯人と見なし、このお客さんの防犯カメラ画像をつかって、同じ作業をしたところ、類似度トップ3に90%の割合で正解が入っているから、類似度を調べる方法としてはこれでいいのではないだろうか?
ということを教えてくれました。

この識者からの情報は一見意味ありげですが、すぐあまり役に立たないことがわかります。最大の問題点は、
3.お店の顧客リストに犯人がふくまれているのかそもそもわからない点にあります(カバー率)。従って、実際は、類似度トップ3に90%の割合で正解が入っていることはまったく保証されません。

4.こうなると、類似度の閾値の相対的な大小(トップ3)とかではなく、類似度の絶対値で判定するしかありません。

こういう不思議なことをいう識者はあまりいないとおもいますが、だまされないようにしなくてはならないですね、、、、自分で自分が何を言っているのかわかってない、、んですかね、、

そこで、別に相談してみました。するとこういうことをしてみよう。と言っています。

5.お店の顧客リストに"載っていない"ことがわかっている10000人の、防犯カメラ画像をつかって、同じ作業をしてみます。そうすると、10000個のデータの他人との偶然の類似度の分布を知ることができます(ヌル分布)。このヌル分布がわかっていれば、たとえばヌル分布の上位1パーセンタイル点(例えば10000個のデータの大きい方から100番目)の類似度値もわかります。これを閾値として、万引き集団100人と全顧客の特徴の類似度をすべて計算したとき、シロの人が偶然、閾値以上となる可能性は1%(誤ってヒットする確率γ = 0.01)なので、誤ってシロをクロとする偽陽性だと推定する期待値は1人と推定できます。(いろいろ簡略化してます)

6.お店の顧客リストに載っていることがわかっている10000人の、防犯カメラ画像をつかって、同じ作業をしてみます。そうすると、自分に一致するときの類似度がどのくらいになるのかの10000個のデータで分布を作ることができます。先ほどの閾値を使ったとき、この分布があるとクロを正しくクロと判定する確率(β)もわかりますよね。

で、最後までわからないのは、お店の顧客リストに犯人が何%含まれているのかのカバー率(α)です。

何を言っているのか、だれにもよくわかんないらしいのですが、どうやらここまでの話をまとめてみると、

・お店の顧客リストに犯人含まれるカバー率 α
・犯人がお店の顧客リストに含まれているときに正しくヒットする確率 β(1-偽陰性率)
・他のお客が誤ってヒットする確率 γ(おおよそ偽陽性率)

のうち、βとγは調べられるのだけど、αはわからないというのです。

そこで、先ほどの

x 該当する顧客が一名当てはまった犯人 x人
y 該当する顧客が二名以上当てはまった犯人 y人
z 該当する顧客が一人も当てはまらなかった犯人 z = 100-x-y人

という区分で該当する顧客が一人も当てはまらなかった犯人zの数の期待値は

z = 100 * ((1-α)*(1-γ) + α*(1-β)*(1-γ))

という式で書くことができます。
(1-α)*(1-γ) は顧客リストに載っていない犯人(1-α)が、他のお客が誤ってヒットしない(1-γ)確率
α*(1-β)*(1-γ)は顧客リストに載っている犯人が(α)、自分自身にヒットせずに(1-β)、他のお客が誤ってヒットしない(1-γ)確率
です。

実際にこのとき、γ とβがわかっているので、実際に万引き集団100人と全顧客の特徴の類似度をすべて計算してある閾値以上の類似度ヒットとしたときの、zからαが推定できますよね。

さらに一名以上のヒットがあった万引き犯 x+y 人の中の誤りの期待値は、100*γ人というところまで推定できます(偽陽性率 = 100*γ/(x+y))。

偽陽性が推定できると、こういう結論を出すことができます。

万引き犯100人について、全顧客データベースを照合したところ40人がヒットしました。このうち、シロをクロと誤った偽陽性の期待値は1人なので、かなりの確信を持ってこの顧客がクロであるといえます。

とか、

万引き犯100人について、全顧客データベースを照合したところ80人が、ヒットしました。このうち、シロをクロと誤った偽陽性の期待値は40人なので、あまり確信がありません。何らかの別の方法で犯人を絞りこむ必要があります。

といった、建設的な議論が可能になります。

要するにヌル分布(だけ)が大事なのです。ヌル分布がないデータベース検索の話にはご注意を。





2018年1月11日木曜日

いい湯加減の第9

昨年の年末から新年にかけて、ベートーベン第9交響曲、いわゆる第9を聞いていたーーとくに第4楽章で一回合唱でがーっと盛り上がったあと、トライアングルのリズムとピッコロによるトルコ風行進曲のなんかちょっと軽い感じの伴奏をバックにしてテノールが歌いまくった後に急に始まる、やや切迫感のある弦楽のスケルツォ風フゲッタがお気に入りで、このパートの後、あの有名な大合唱が始まるあの部分であるーー、というのもそもそもは、チェリビダッケのテンポが遅い録音を聞いたことにはじまっていて、このスケルツォ風フゲッタのパートに関していうと、この遅さがドンピシャであり、さらにチェリビダッケ+ミュンヘン・フィルハーモニー管弦楽団の異様に純度の高い演奏のせいで、なんだかとても感動してしまったのであるが(ときどきこうなる)、同じパートをたとえば、カラヤンとか、ヴァントとか、フルトウェングラーなどで聞くと、かっとぶかのような高速テンポですいすいとすすむため、感動している暇がないのはなぜだとばかりにいろいろ聴いてみると、そもそも第9交響曲の正しい姿というのはもはや誰も知らないわけで、指揮者が結構勝手にテンポを設定して好きに演奏していたらしく、90年代ころの古楽器ブームの中で、極力元の姿、楽譜に忠実にといういい子ちゃんな観点から、ガーディナーの録音が高く評価されたりして、これはこれで大変素晴らしい演奏で愛聴しているのだけど、ただ、肝心のスケルツォ風フゲッタ部分は楽譜の指示通りに弾くと、アナタ、速い、速すぎるあるよ、というテンポになってしまうようでおいおいと思っていたところ、異同を整理したベーレンライター版の楽譜が出た1996年に以降は原典というアイデアも怪しくなってきたという話にふーんと思って聴いてみた2010年のティレーマンの録音の快速っぷりに、もうこれはこれでありかなぁとも納得させられてしまった年末年始なのであった。で、昨日Youtubeでムーティ+シカゴ交響楽団の演奏を発見し、いい湯加減のテンポの遅さに、癒やされたのでした。問題の場所は1時間5分目くらいから始まります。