clustal-omegaを用いてアライメントを実行
概要[編集]
開いているファイル内の配列データを、clustal-omegaを使ってアライメントにかけます。
clustal-omegaのサイトには、"The last alignment program you'll ever need"とのことなので、いまなりにはclustal-omegaがいいようです。
さくっと、アライメントを確認したいときに使ってください。
ファイル名を引数にしてアプリ起動の応用例です。
注意事項[編集]
要cllustal-omega
使用前に"CLUSTALO_DIR"を必ず設定して下さい。
ダウンロードしたclustal-omegaを解凍して出てきたフォルダの中に"tmp"という名前のフォルダを作ってください。
ソースコード[編集]
#title="clustal-omegaを用いてアライメントを実行"
#tooltip="clustal-omegaを用いてアライメントを実行します。*.alnファイルを作成しそれを開きます"
// -----------------------------------------------------------------------------
// clustal-omegaを用いてアライメントを実行
//
// suke
//
// 要clustal-omega
// http://www.clustal.org/omega/
// info : https://www.ebi.ac.uk/Tools/msa/clustalo/
// -----------------------------------------------------------------------------
(function(){
const fso = new ActiveXObject('Scripting.FileSystemObject');
const sh = new ActiveXObject('WScript.Shell');
const MERY_DIR = fso.GetParentFolderName(window.Editor.FullName);
// clustal-omegaを導入したフォルダへ移動する
const CLUSTALO_DIR = fso.BuildPath('ここにClustal-omegaのフォルダのパスを指定してください');
// カレントディレクトリを移動する
sh.CurrentDirectory = CLUSTALO_DIR;
// 実行ファイル
const CLUSTALO = 'clustalo.exe';
// ファイルが保存されていない場合の保存先
const TMP_DIR = fso.BuildPath(CLUSTALO_DIR,'tmp');
//clustaloのパスが正しいか確かめる
if ( !(fso.FileExists(CLUSTALO)) ){
alert('clustalo.exeへのパスが間違ってます。');
return ;
}
if ( !(sh.Exec(CLUSTALO + ' -h').StdOut.ReadAll().split('\n')[0].match(/^Clustal Omega.*/))){
alert('clustalo.exeではなさそうです。');
return ;
}
//TMP_DIRにフォルダがあるか確かめ、なければ作る
if (!(fso.FolderExists(TMP_DIR))){
alert(TMP_DIR + '\nが無いようなので作っときますね');
fso.CreateFolder(TMP_DIR);
}
// 実行確認
const isExec = Confirm('ファイルを保存してアライメントを実行しますか?');
if(!isExec){return};
// 現在のファイル名を取得
// 取得できなければ、勝手に作って、書き込む
const inputFile = document.FullName ||
fso.BuildPath(TMP_DIR, (new Date().getTime() + '.txt'));
document.Save(inputFile);
const alignmentFile = fso.BuildPath(
fso.GetParentFolderName(inputFile), fso.GetBaseName(inputFile) + '.aln');
// コマンドラインで渡す文字列を指定
// see clustalo.exe -h
let cmdline = CLUSTALO;
cmdline = cmdline + ' -i "' + inputFile + '"'; // Multiple sequence input file
cmdline = cmdline + ' -o "' + alignmentFile +'"'; // Multiple sequence alignment output file
cmdline = cmdline + ' --outfmt=clustal'; // MSA output file format(clustal)
cmdline = cmdline + ' --force'; // Force file overwriting
cmdline = cmdline + ' -v'; // Verbose output
// 実行
const execResult = sh.Exec(cmdline);
while (execResult.Status !== 0){sh.Sleep(100)}
// 出力メッセージを表示
const err_msg = execResult.StdErr.ReadAll();
const std_msg = execResult.StdOut.ReadAll();
if (err_msg !== ''){
alert('エラーが発生しました\n' + err_msg);
return;
}
if (std_msg !== ''){
alert('【実行結果】\n' + std_msg);
}
// アライメントの結果ファイルを開く
editor.OpenFile(alignmentFile, meEncodingNone, meOpenAllowNewWindow);
})();
スポンサーリンク