目的:
Jinja2形式のテンプレートファイルを使い、VASPの計算結果のsummaryを作る。
VASPの計算結果を読み込み、フラットな辞書変数に変換したのちにJinja2によりテンプレート処理を行う。
辞書変数のkeyには、subdirectory名やprefixをつけて、個別に参照できる。
Usage:
python make_summary.pl -h # helpを表示
usage: python make_summary.py [-h] [--mode {list,make,make_template,}]
[--base_dir BASE_DIR] [--subdirs SUBDIRS] [--prefix PREFIX]
[--template_file TEMPLATE_FILE] [--output_file OUTPUT_FILE] [--append]
ファイル構成:
・ make_summary.pl
├ templates [dir]
├ - テンプレートファイル (検索優先順位 2)
├ テンプレートファイル (検索優先順位 3)
└ read_inf.py (VASP用データ読み込みライブラリ)
テンプレートファイルの検索順序
・ --template_file=path でファイル名のみを指定した場合
(i) current directory, (ii) templates directory, (iii) script
directory の准で検索
・ --template_file=path でディレクトリなども指定した場合
指定したpathのみ検索
テンプレートファイルの種類: .--template_file=pathで指定したpathの拡張子によって判断
read_inf.pyで読み込んだ内容を、階層構造を持つ辞書変数
replace_dict に取り込み、
replace_dictのkeyをplace
holderとしてテンプレートファイルを生成する
・ TextFiles, ImageFiles, PDFFiles, HTMLFilesを検索し、place
holderに追加する
・ .txt, .md: テキストファイル
--appendを指定すると、5行空行を入れたのち追加する
・ .html:
keyを1列目、Jinjia2形式のプレースホルダーを2列目に追加する
--layout=page
を指定すると、フリーフォーマットのHTMLページ。
vstac
を指定すると、個々の計算jobのデータを行に並べるTable
指定なし、あるいは hstac
を指定すると、個々の計算jobのデータを列に並べるTable
--appendを指定すると、--layoutに応じてページ、行、列を追加する
・ .xlsx, .xlsm:
keyを1行目、Jinjia2形式のプレースホルダーを2行目に追加する
--appendを指定すると、行を追加する
.xlsmの場合、画像挿入機能のVBAが使える。コンテキストメニューで「画像ダイアログを開く...」あるいは開発タブ「マクロ」から起動。
・ .csv:
keyを1行目、Jinjia2形式のプレースホルダーを2行目に追加する
--appendを指定すると、行を追加する
Excelでは複数行を含むcellを正常に表示できないので、推奨しない
・ .docx: MS-Word形式
--appendを指定すると、改ページをしたのち追加する
.htmlテンプレート機能とhtml2pdf.pyを使えば同等のことができるので、使う機会はないかも
Excel .xlsm テンプレートの画像管理機能
・ コンテキストメニューで「画像ダイアログを開く...」あるいは開発タブ「マクロ」から起動
・
選択した列から画像ファイルパスを探し、右隣のセルに画像をinline表示させる
・
選択したセルから画像ファイルパスを分離し、ワークシートに画像を挿入
・
選択したセルからディレクトリパスをデフォルトとして読み込み、そのディレクトリにある画像をすべて挿入
・ ワークシート内の画像を削除
動作モード: --mode=[make_template|make|list]
・ list: 指定したbase_dir、subdirの計算結果のファイルを読み込み、keyのリストを表示
・ make_template: 指定したbase_dir、subdir
の計算結果のファイルを読み込み、key情報からテンプレートファイルを作成
・ make:
指定したテンプレートファイルをもとに、計算結果のファイルを読み込んだ結果で置換してoutput.*に出力する
計算結果を読み込むディレクトリ
・ --subdirsが空文字の場合、--base_dirで指定したディレクトリのみを読み込む
・ --subdirsが与えられている場合、--base_dirの下のsubdirsを読み込む。
subdirsは、,
で区切って複数行を与えられる。スペースがある場合は
"" でクオートする。
ワイルドカード (*,?)
も使えるが、Linuxのシェルスクリプトの場合は
シェルが展開してしまうのを防ぐため、""でクオートする。
subdirsにINCAR,POSCAR,OUTCARがある場合のみ、VASPの計算結果のディレクトリと判断する
使用例: