プログラム解説: [tkProg_X_path]/VASP/summary/make_summary.pl

目的: 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の計算結果のディレクトリと判断する
 
使用例: