投稿

LGの5Kモニターがちらつくのを治す(Blinking LG 5K display)

 【問題】 iMac (2018) に繋いだLGの外付けディスプレイ  27MD5KL-B が一秒おきぐらいに暗転してちらついてしまう。 【効果のなかった対策】 再起動する LG display managerをインストールする ディスプレイのファームウェアをアップデートする 同じハブに繋がっているUSB機器を抜く Wi-Fiを切る(共鳴的なのを起こすらしい) SMCリセット、PRAMリセット cscreenコマンドでリフレッシュレートの変更 【なぜか治った方法】 別の Macbook Air (2022)に接続して動作確認した後に、iMacにつなぎ直すとちらつきが収まった。再現性は要確認。 After connecting the LG 5K display (27MD5KL-B) to a different computer and then reconnecting it to the problematic computer, the blinking issue was resolved. (Reproducibility not confirmed).

粗視化力場 SIRAH を使う

力場のディレクトリにチュートリアルが添付されており、それを元に書いています。 AMBERを使った変換 はじめに、解凍した sirah_x2.2_20-08.amber を sirah.amber としてシンボリックリンク(ln -s ../sirah_x2.2_20-08.amber sirah.amber)を張るか、力場のディレクトリにコピーしておくと使える。 構造ファイルの前処理として、  PDB2PQR でPDB ファイルを処理しておくと良きに計らってくれる。 得られたPQRファイルを粗視化したPDBファイルに変換する。 ./sirah.amber/tools/CGCONV/cgconv.pl -i initial.pqr -o initial_cg.pdb AMBERのインプットを作るため、 tleapで以下の通り実行する。 ---------------------------------------- # 力場を読み込む addPath ./sirah.amber source leaprc.sirah # PDBファイルを読み込む protein = loadpdb initial_cg.pdb # 電荷を反映させる? charge protein # ボックスを作成して中和する solvateBox protein WT4BOX 20 addIons protein NaW 0 addIons protein ClW 0 charge protein # 保存する saveAmberParm protein leap.prmtop leap.inpcrd # 終了 quit ---------------------------------------- GROMACSで使いたい場合は acpype などで変換して使う。 acpype -p ./leap.prmtop -x ./leap.inpcrd GROMACS での粗視化MDの実行  GROMACS版のファイルをダウンロードしておくと、タンパク質計算のチュートリアルが含まれている。ここに、.mdpファイルが入っているのでとりあえずこれを利用すれば計算できる。 gmx grompp -f ./em_CGLIP.mdp  -c ./leap_GMX.gro -p ./leap_GMX.top -

Alphafoldのインストールから実行までのメモ

Alphafoldをインストール・実行した時に起こったトラブルのメモ pdb_mmcifがrsyncでダウンロードできない PDBj も RCSB も Connection time out となってしまって接続できない。pingは通っていたのでおそらくrsyncのポートが大学で塞がれている可能性がある? 結局、ftpでダウンロードした。 mgnifyのファイル名が違う mgnifyのファイルをダウンロードするとmgy_clusters.faになっているが、参照しているのはmgy_clusters_2018_08.fa なので設定かファイル名をリネームして揃える。 jaxlibのpipインストールができない docker/Dockerfile を見ると、pip3でjax, jaxlibをインストールしている。この時、storage.googleapis.comを参照しているが、これに接続できない。ターミナル上ではwgetで.whlをダウンロードできたのでDockerfileを書き換えたが、run_docker.pyからは同じく接続できない。Docker内からの名前解決がうまく行ってないのかもしれない?結局、DNSの設定に8.8.8.8を追加して解決した。 tensorflowとcuda周りのバージョンが合わない https://github.com/deepmind/alphafold/pull/28 を参考にdocker/Dockerを ARG CUDA=11.1 #FROM nvidia/cuda:${CUDA}-base FROM nvidia/cuda:11.1.1-cudnn8-runtime-ubuntu20.04 上記のように変更。 githubに書いてある通りにcuda11.2.2にするとjaxlibのバージョンが1.65までしか存在していないためインストールエラーが起きる(1.69が必要)。 HHblitsがエラーで落ちる "Unrecognized HMM file format in '1271622666'."とエラーを吐いて落ちた。結局、bfdのbfd_metaclust_clu_complete_id30_c90_final_seq.sorted_opt_hhm.ffdata のファイルサイズが本来のも

PDF用のリーディングトラッカーを作った話

イメージ
長い文章とか本とかを読むときに、目が滑って読みにくい状況を改善するためにリーディングトラッカーなる物がある。真ん中が透明な栞のような板で、いろんなサイズ、色で市販されている。(https://www.kihara-lib.co.jp/wp-content/uploads/2019/11/p08.pdf) 今読んでいる行だけが見えるようにすることで、文字が読みにくい人でも読みやすくなるらしい。もちろんただ集中して読むためにも効果を発揮する。ということは集中して論文読むときにもいいのではないかな、と思ってPDF上にリーディングトラッカーを表示するツールを作ってみました。 https://readingtracker-morita.web.app/ 使い方は右上5番目のボタンからPDFファイルを開くだけ。 右下の四角を押すとオン・オフが切り替えられて、丸いボタンを押すと設定ができます。 不具合や改善点などあれば教えて下さい。 実装としては PDF.js というライブラリのデフォルトビューワー(viwewer.html)の上に黒い枠を表示しているだけ。 申請書とか自分で書いた論文原稿のミスチェックするときにも良いかもしれない。

DISOPRED の結果を FASTA に変換する

DISOPREDを使って Disorder 領域を予測するとそれらしいグラフとテキストファイルが作成されます。可用性を考えて FASATA 形式に変換してみました。 環境 Python 3.x ( csv モジュールは組み込みなので import だけで大丈夫) 形式 DISOPRED の .comb ファイルのフォーマットは以下の通り。 #で始まるヘッダ行に続いて残基ごとの「残基番号」「アミノ酸残基」「1文字表記」「スコア」が記載されています。 # ----- DISOPRED version 3.1 ----- # Disordered residues are marked with asterisks (*) # Ordered residues are marked with dots (.) 1 M * 0.97 2 E * 0.98 3 E * 0.97 4 P * 0.98 5 Q * 0.97 6 S * 0.97 ソースコード import csv protein_id = sys.argv[1] sequence = f">{protein_id}\n" with open(f"{protein_id}.comb") as f: reader = csv.reader(f, delimiter=" ", skipinitialspace=True) for line in reader: if line[0] == "#": continue sequence += line[2] with open(f"{protein_id}_diso.fa", mode="w") as f: f.write(sequence) 解説 #で始まる行を読み飛ばしながら、1文字表記をストックしていってファイルに書き込むだけ。 もし、判定の閾値を変更したいのであれば、、、 #sequence += line[2] sequence +

GAMESS を使って RESP 電荷を計算する

本記事はこちら( https://qiita.com/Ag_smith/items/430e9efb32a855d4c511 )を参考にGAMESS を利用して分子動力学計算用の RESP 電荷を計算する方法についてのメモです。 想定している環境 今どきでそこそこ良いスペックの Mac(Catalina) PyMOL(ファイルを眺めたり変換するだけなのでオープンソース版でも可) Molby のインストール Molby は分子構造を作成するためのソフト。Gaussian でいうところの GaussView 的に使える。GAMESS の入力ファイルをわかりやすく作ってくれる。Molby の公式サイト( http://molby.osdn.jp/doc/ja/index.html )からファイルをダウンロードしてインストールするだけ。 GAMESS のインストール GAMESS (US) の公式サイト( https://www.msg.chem.iastate.edu/gamess/download.html )からメールアドレス等を登録すると、ユーザ名とパスワードが送られてくる。今回ほしいのは「Pre-compiled Binary Distributions」の中にある「GAMESS version September 30, 2019 R2 for Apple MacOS X」。ダウンロードしたらアプリケーションフォルダに展開しておく。  ワークステーションやスパコンなどで計算する場合は適切なバージョンをインストールしてください。 実際の計算方法 計算したい分子の PDB ファイルを用意する。 Molby で PDB ファイルを読み込む。 必要であれば水素を付加する。 「MD/MM」→「Guess MM/MD Parameters」 「Guess atom types」にチェックを入れた状態で実行すると Antechamber がatom type を割り当ててくれる。 「MD/MM」→「GAMESS and RESP」 Step1の「Create GAMESS Input」を押すと設定画面が現れる。 SCF type は分子に合わせて選択する。( http://pc-chem-basics.blog.jp/archives/296303.html ) Runtyp

英文を書くのが捗る?スクリプト

イメージ
Wordファイルの単語数を監視して通知を表示するスクリプトを作った話 論文を書いてるとあまり捗らないので、脳に報酬を与えようという目論見。 pythonプログラムは以下の通り import sys import docx import subprocess import time def monitor(): target_file = sys.argv[1] document = docx.Document(target_file) prev_words = 0 for par in document.paragraphs: prev_words += len(par.text.split(" ")) while True: document = docx.Document(target_file) curr_words = 0 for par in document.paragraphs: curr_words += len(par.text.split(" ")) if curr_words >= prev_words + 10: subprocess.call("osascript -e \'display notification \"現在の単語数は " + str(curr_words) + " 単語\" with title \"その調子!\"\'", shell=True) prev_words = curr_words time.sleep(60) monitor() 実行するときは… python3 monitor_word.py ファイル名 &      でバックグラウンド実行される(最後に&をつけるのがポイント) 停止するときは ps でプロセスIDを調べて kill -kill PID 中身の説明 python-docx モジュ

論文で使う英語表現

メモなので間違っている点があるかもしれませんのでお気をつけください。 随時編集します。 正しい表現 マテメソは by より using 人によって行われたときが by 物によるときは主体ではないのでbyを使わない x: by FOOBAR analysis the mechanism regulating foobar.     foobar を制御する仕組み the foobar regulatory mechanism.   foobar による制御の仕組み Proteins は “play a role”, “have a role”, or “have a function”  “play a function”はダメ x: showed disorganization of actin patches o: showed disorganized actin patches x: may be important to ensure ... o: may be important for ensuring ... x: the Dijkstra’s algorithm o: Dijkstra’s algorithm いい表現 失敗した not able to find clear evidence supporting that this was not possible 注目すべきは Of note, On the other hand より On the contrary there are still limitations while -> whereas, where It is, therefore, reasonable which is referred to as a XXX method

Python で Wheel Diagram を描く

イメージ
タンパク質の二次構造である α-ヘリックスの概要を掴むために、Wheel Diagram というものがある。読んで字の如く、螺旋状のヘリックスを長軸方向から見て車輪のようにプロットするというもの。α-ヘリックスのどの面にどんなアミノ酸が存在するかがひと目で分かるので便利。これを描くためにいつも使っていたサーバーが繋がらなくなっていたので、自前で作ってみた。 まずは、疎水性パラメータを取得する関数を作成してみた。 使用した疎水性パラメータは Kyte and Doolittle, 1982 のもの。膜貫通領域の予測などでも使われている。 この関数では、[配列のインデックス、周期、残基、疎水性] と疎水性モーメント、疎水性モーメントの大きさを出力する。 import math def wheel_diagram(seq): result=[] RESIDUES = ["A","L","I","V","F","Y","W","M","C","G","P","N","Q","S","T","H","R","K","D","E"] kyte_doolittle = [1.8,3.8,4.5,4.2,2.8,-1.3,-0.9,1.9,2.5,-0.4,-1.6,-3.5,-3.5,-0.8,-0.7,-3.2,-4.5,-3.9,-3.5,-3.5] cycle = 0 moment = [0,0] for index, res in enumerate(seq): result.append([index, cycle, res, kyte_doolittle[RESIDUES.index(res)]]) moment[0] = moment[0] + (kyte_doolittl

DISOPRED のインストール

流行りの Disorder 領域を検出するプログラム DISOPRED をローカルにインストールして使う。単純に使いたいのであれば、Web版を使えば100倍快適。 マニュアル等はこちらから https://github.com/psipred/disopred 適当な bin ディレクトリに入って、 git でクローン、makeでインストール git clone https://github.com/psipred/disopred.git disopred cd disopred/src make clean make make install Disorder のデータベースをインストールする。 cd disopred wget http://bioinfadmin.cs.ucl.ac.uk/downloads/DISOPRED/dso_lib.tar.gz tar -zxvf dso_lib.tar.gz 展開されたデータベースのディレクトリを $DSO_LIB_PATH にパスを通しておく 次に、BLAST をインストールする。元々は BLAST を使っていたが、BLAST+ に移行して大変らしい。今回はとりあえず公式から使える BLAST+ をインストールしてみる。 最新版は  ftp://ftp.ncbi.nlm.nih.gov/blast/executables/blast+/LATEST/  からダウンロードできる。特にコンパイルする必要はないようだ。 BLAST+ もデータベースが必要なのでダウンロードする。 cd ./ncbi-blast-x.x.0+/bin ./update_blastdb.pl --decompress nr* JSON のモジュールが無いとエラーが出たので ここ曰く  https://github.com/tseemann/abricate/issues/20 apt-get update sudo apt-get install emboss bioperl ncbi-blast+ gzip libjson-perl libtext-csv-perl libfile-slurp-perl liblwp-protocol-https-perl libwww-perl もう

iTerm2 で pdf 画像をインラインプレビューする

イメージ
pdf 画像をターミナル上でプレビューしたい。 最近使ってるリモートのサーバーがX window が使えないので出力したグラフなどを確認するのに毎回scpを使ったりしてめんどくさい。最近はsshfsでローカルにマウントしてしまっているけど手間がかかる。 というわけで、インラインプレビューできるようにしてみた。 流れとしては pdftoppm で pdf ファイルを画像に変換 imgcat  で画像を表示 変換した画像を破棄 pdftoppm は以下のサイトからダウンロードして適切なフォルダに配置する wget https://xpdfreader-dl.s3.amazonaws.com/xpdf-tools-linux-4.01.01.tar.gz tar -xvzf xpdf-tools-linux-4.01.01.tar.gz 使い方は pdftoppm -r 解像度 変換元ファイル 変換後ファイル -png や -jpeg で画像の種類を選べるらしいが、今回インストールしたものでは使えなかった。 imgcat は iTerm2 で使えるコマンド。追加でインストールする必要がある。 公式サイト( https://www.iterm2.com/documentation-images.html )で配布されているコマンドを適当にパスの通ったところへ配置して、パーミッションを変更する。 使い方は imgcat 表示したい画像 これを組み合わせると function spdf () { pdftoppm -r 300 $1 tempimage imgcat tempimage-000001.ppm rm -f ./tempimage-000001.ppm } こんな感じの関数を .bash_profile に書けば使える。めでたしめでたし。

PyMOL の APBS Electrostatics プラグインで使われる実行ファイルのデフォルトパスを変更する

イメージ
上の画像と動画はGFPの結晶構造(PDB: 1GFL )を PyMOL で表示したもの。青い所が正電荷、赤い所が負電荷を示している。 PDB の構造ファイルからタンパク質の電荷を計算するには、構造の表示に用いる PyMOL とは別に APBS と pdb2pqr をインストールしておく必要がある。APBSが実際に計算を行うプログラムで、pdb2pqr は PDB 形式の構造ファイルを補完して計算に用いる PQR ファイルを作製してくれる。PyMOL にはこれらを簡便に使うためのプラグインが最初からインストールされている。 APBS Electrostatics プラグインを使用するためには、APBS と pdb2pqr の存在するパスを指定する必要がある(下図)。このパスはプラグインのウィンドウを閉じるたびにリセットされてしまうので非常に手間がかかる。 古いバージョンのAPBSプラグインの解説 では環境変数(APBS_BINARY_DIR, APBS_PDB2PQR_DIR)を変更すればデフォルトのパスを指定できると書いてあるが、現行のバージョンでは不可能になっている。 直接 Python のプログラムを書き換えるとデフォルト値を変更できる。目的のファイルは Applications/⁨PyMOL.app⁩/⁨Contents⁩/⁨share⁩/⁨pymol⁩/⁨data⁩/startup⁩/apbs_gui⁩ /__init__.py にある。 変更前 # executables from distutils.spawn import find_executable form.apbs_exe.setText(electrostatics.find_apbs_exe() or 'apbs') form.pdb2pqr_exe.setText(find_executable('pdb2pqr') or find_executable('share/pdb2pqr/pdb2pqr.py', os.getenv('FREEMOL', '/usr')) or &

Python の図を動画にして保存する

animation モジュールで図の動画を保存する時には、GIF 動画ファイルとして保存されることが多いらしい。検索してもそういった例が多く出てくる。GIF 形式は昔ながらのフォーマットでありながら Twitter 等でも投稿できるし、最近は GIF video なんていう形式も出てきて盛り返しつつあるフォーマット(GIFV の中身はただの動画で HTML5 を介して適当に制御されているらしい)。 ただ、ファイルサイズの小さい GIF と言えども、動画となると枚数が増えてファイルサイズも大きくなってしまう。1000 枚ぐらいのグラフを動画にすると数十 MB になったりしてとても扱いづらい。そこで、GIF ではなく mp4 の動画として保存すると早くて軽いファイルを書き出せる。save 関数の writer 引数を ffmpeg にしてやるだけなので簡単。 import matplotlib.pyplot as plot import matplotlib.animation as animation fig = plt.figure() def plot(): #描画済みのグラフを消去 plt.cla() #グラフの描画処理 plt.plot() ani = animation.FuncAnimation(fig, plot, interval=1, frames=1000) ani.save("output.mp4", writer="ffmpeg", fps=30, bitrate=1000) #gif ならこっち #ani.save("output.gif", writer="imagemagick")

bashでコマンド終了後に通知メールを送信する

出先で時間のかかる処理をさせていると、いつ処理が終わったのかわからず何度も確認しなければならないのであまり便利ではない。外部からアクセスできる状態なら ssh とかでなんとかなるけれど、ローカルで置いてあるマシンだとそうも行かない。 今回の対象はローカル設置だけどネットに繋がっている状態なので一方的に通知メールを送るようにした。 基本的には sendmail (または mail)コマンドを使ってメールを送るだけ。 単純なものなら1行のコマンドで送信できるが、拡張性も考えて一旦メールヘッダを作成してから送る方式にした。 #1つ目の引数を message に格納する message="" if [ -n "$1" ]; then message=$1 fi wd=$(pwd) #メールヘッダを作成して mailheader.txt に格納する cat << EOF > "$wd"/mailheader.txt From: hogehoge <hoge@hoge.com> To: fugafuga &ltfuga@fuga.com> Subject: mail no title ここに本文を書く $message EOF #sendmail にオプション -i -t をつけて実行 cat "$wd"/mailheader.txt | sendmail -i -t #mailheader.txt を削除する rm ./mailheader.txt 上のファイルを mailsender.sh として適当にパスの通ったところに置いて、 別のファイルから実行する時はこんな感じの1行を追加する。chmod で実行可能にしておく必要があるかもしれない。 mailsender.sh "$0 $*" "$0 $*" で mailsender.sh が呼び出された元のコマンドを message に送っている。 適当に工夫すればファイルを添付したりもできるはず。 送信元のアドレスに適当に自分のアドレスを入れて試したところ、実際の送信元は oooo.localdomain になって届

Arduino で物理パスワードをつくる

イメージ
Digispark (ATTINY85) の互換品を買って遊んでみた話。 Digispark Digispark は元々クラウドファンディングで作られた小型の USB 対応 Arduino ということでマイコンとしては AVR の ATINY85 を積んでいる。メモリの容量もそんなに大きくないので短めのプログラムを書き込むので精一杯な感じではある。画像や音楽を格納するほどの余裕は無いし、出力端子も少ないのでそういうのには向いていない。便利なのは、USB HID (Human Interface Device) として使えるところ。つまりは、キーボードとかマウスみたいなものを作るのに使える。ということでサンプルプログラムなどを色々試してみた。 今回購入したのは中国の通販で買える 10 個で 1700 円ぐらいのもの。注文してから一週間ちょっとで届いた。ポストに入るサイズなので受け取りも簡単。クローン品については賛否あるが、個人的にはあまり抵抗もないし、本家で買うと1つあたり 1000 円弱するので、やむ無し。 USBキーボード USB キーボードを作るときは、適当なスイッチの入力を検出して親デバイスに送れば良い。この時に送信する情報はプログラム次第なので色々とおもしろキーボードが作れたりする。例えば、ボタンを押すとメールアドレスが一発で入力されたり、センサーと繋いで現在の気温を入力したりもできる。Windows でよく使う 例のショートカットキー専用キーボード も自作できたりする(ひとつのキーにまとめてしまっても良い)。 キーボード入力が可能といいうことは CUI でコマンドを入力することも可能だ。映画などでおなじみのパソコンに USB メモリみたいなものを差し込むと勝手にプログラムが動作するかっこいいやつも簡単に作れてしまう。データを破壊したり、コピーして盗んだり、書き換えたりも簡単に出来てしまうので気をつけないと前科持ちになってしまう。最近だと所持しているだけでもお縄にかかりかねない。 物理パスワードを作った 今回はパスワードを入力することができる物理パスワードを作製した。概要としては、USB コネクタに差し込むとパスワードの文字を送信する。それだけ。 実際のプログラムは以下の通り。Digispark のライブラリを入れてお