odatse_separateT#
機能概要#
MCMCのログファイルを温度点ごとに分割します
書式#
odatse_separateT [OPTION]... [FILE]...
説明#
MCMC のログファイル (result.txt, trial.txt) を温度点ごとに個別のファイルに分割します。
ファイルは入力と同じディレクトリ内に作成され、ファイル名は元のファイルに _T{index} を付けた形式になります。{index} は異なる温度点のインデックスで、ログファイル内の出現順に 0 から付与されます。
注釈
ODAT-SE 本体と同様に Python 3.9 以上が必要です。
MCMCログファイルは温度値が3番目のカラム(インデックス2)にあることを前提としています。
入力ファイル内のコメント行(#で始まる行)はすべての出力ファイルに保持されます。
プログレスバー表示には tqdm ライブラリが必要です。未インストールの場合は通常のメッセージが表示されます。
指定可能なコマンドラインオプションを以下に示します。 FILE を指定した場合はそのファイルが対象となります。明示的にファイルを指定しない場合、DATA_DIR/*/FILE_TYPE が対象となります。
- FILE
MCMCのログファイルを指定します。複数のファイルを指定可能です。
- -d DATA_DIR, --data_dir DATA_DIR
データファイルをディレクトリから取得する場合(
FILEを指定しない場合)に、ディレクトリを指定します。- -t FILE_TYPE, --file_type FILE_TYPE
ディレクトリを指定して実行する場合に、対象となるファイル名を指定します。デフォルトは result.txt です。
- --progress
実行時にプログレスバーを表示します。表示には tqdm ライブラリが必要です。tqdmがインストールされていない場合は、代わりに処理中のファイル名がメッセージとして表示されます。
- -h, --help
ヘルプメッセージを表示してプログラムを終了します。
使用例#
ファイル名を指定して実行します
odatse_separateT output/0/result.txtoutput/0/result_T0.txt, output/0/result_T1.txt, ... が作成されます。
指定したディレクトリ以下のファイルを分割します
odatse_separateT -d output
output/0/result.txt, output/1/result.txt, ... が分割の対象となります。
指定したディレクトリ以下の result.txt 以外のファイルを分割します。
odatse_separateT -t trial.txt -d output
output/0/trial.txt, output/1/trial.txt, ... を分割します。
複数のファイルを一度に処理し、進捗状況を表示します。
odatse_separateT --progress file1.txt file2.txt file3.txt
各ファイルが温度点ごとに分割され、処理の進捗状況がプログレスバーで表示されます。
補足事項#
ファイル形式#
入力ファイル(MCMCログファイル)は以下のような形式を想定しています:
# コメント行(任意)
step replica_id T fx x1 ... xN ...
step replica_id T fx x1 ... xN ...
...
各行は空白文字で区切られたデータで、3番目のカラム(インデックス2)が温度値Tです。 同じ温度値を持つ行が1つのファイルにまとめられます。交換モンテカルロのように温度が交互に並ぶ場合でも、同じ温度の行は同一ファイルに集約されます。温度は初出順にインデックス付けされます。
処理の仕組み#
このスクリプトは以下の手順で処理を行います:
入力ファイルを1行ずつ読み込みます
コメント行(#で始まる行)をヘッダーとして記録します
各データ行の3番目のカラム(インデックス2)から温度値を取得します
各データ行を、その温度値をキーとする出力ファイルに振り分けます(温度が初めて現れたときに新しいファイルを開きます)
各温度値のデータは、元のファイル名に「_T{インデックス}」を付けたファイルに保存します
出力ファイルの形式#
出力ファイルは以下の形式になります:
ファイル名: 元のファイル名に「_T{インデックス}」を追加(例: result.txt → result_T0.txt, result_T1.txt, ...)
ファイル内容: 入力ファイルのヘッダー(コメント行)に続いて、同じ温度値を持つデータ行
パフォーマンス#
ファイルを1行ずつ処理するため、非常に大きなファイルでもメモリ使用量は抑えられます
各温度点のデータはメモリ上にバッファリングされるため、1つの温度点に非常に多くのデータがある場合はメモリ使用量が増加する可能性があります
処理時間は入力ファイルのサイズとともに増加しますが、行単位の処理のため比較的高速です
複数のファイルを処理する場合、
--progressオプションを使用することで進捗状況を確認できます
エラー処理#
入力ファイルが見つからない場合: ファイルオープンエラーが発生し、その旨のメッセージが表示されます
出力ファイルが書き込めない場合: 権限エラーなどが発生し、その旨のメッセージが表示されます
空行や列数が3未満の行はスキップされます