separateT.py¶
NAME¶
MCMCのログファイルを温度点ごとに分割する
SYNOPSIS¶
python3 separateT.py [OPTION]... [FILE]...
DESCRIPTION¶
MCMC のログファイル (result.txt, trial.txt) を温度点ごとに個別のファイルに分割する。
ファイルは入力と同じディレクトリ内に作成され、ファイル名は元のファイルに _T{index}
を付けた形式になる。{index}
は異なる温度点のインデックスで、ログファイル内の出現順に 0 から付与される。
注釈
Python 3.6以上が必要です(タイプヒントとf文字列を使用しているため)。
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
ヘルプメッセージを表示してプログラムを終了する。
USAGE¶
ファイル名を指定して実行する
python3 separateT.py output/0/result.txt
output/0/result_T0.txt, output/0/result_T1.txt, ... が作成される。
指定したディレクトリ以下のファイルを分割する
python3 separateT.py -d output
output/0/result.txt, output/1/result.txt, ... が分割の対象となる。
指定したディレクトリ以下の result.txt 以外のファイルを分割する。
python3 separateT.py -t trial.txt -d output
output/0/trial.txt, output/1/trial.txt, ... を分割する。
複数のファイルを一度に処理し、進捗状況を表示する。
python3 separateT.py --progress file1.txt file2.txt file3.txt
各ファイルが温度点ごとに分割され、処理の進捗状況がプログレスバーで表示される。
NOTES¶
ファイル形式¶
入力ファイル(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番目のカラムが存在しない場合)