yu-mcal 0.1.6__tar.gz → 0.2.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/PKG-INFO +11 -1
  2. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/README.md +9 -0
  3. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/README_ja.md +9 -0
  4. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/mcal.html +135 -19
  5. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_sources/index.rst.txt +13 -0
  6. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/genindex.html +4 -2
  7. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/index.html +16 -0
  8. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/mcal.html +43 -16
  9. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/modules.html +1 -0
  10. yu_mcal-0.2.1/docs/objects.inv +0 -0
  11. yu_mcal-0.2.1/docs/searchindex.js +1 -0
  12. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/index.rst +13 -0
  13. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/pyproject.toml +2 -1
  14. yu_mcal-0.2.1/requirements.txt +43 -0
  15. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/mcal.py +131 -18
  16. yu_mcal-0.2.1/uv.lock +2278 -0
  17. yu_mcal-0.1.6/docs/objects.inv +0 -0
  18. yu_mcal-0.1.6/docs/searchindex.js +0 -1
  19. yu_mcal-0.1.6/requirements.txt +0 -6
  20. yu_mcal-0.1.6/uv.lock +0 -1303
  21. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/.gitignore +0 -0
  22. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/.python-version +0 -0
  23. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/LICENSE +0 -0
  24. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/.nojekyll +0 -0
  25. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/index.html +0 -0
  26. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/calculations/hopping_mobility_model.html +0 -0
  27. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/calculations/rcal.html +0 -0
  28. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/utils/cif_reader.html +0 -0
  29. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/utils/gaus_log_reader.html +0 -0
  30. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_modules/mcal/utils/gjf_maker.html +0 -0
  31. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_sources/mcal.calculations.rst.txt +0 -0
  32. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_sources/mcal.rst.txt +0 -0
  33. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_sources/mcal.utils.rst.txt +0 -0
  34. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_sources/modules.rst.txt +0 -0
  35. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/autodoc_pydantic.css +0 -0
  36. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/basic.css +0 -0
  37. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/debug.css +0 -0
  38. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/doctools.js +0 -0
  39. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/documentation_options.js +0 -0
  40. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/file.png +0 -0
  41. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/language_data.js +0 -0
  42. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/minus.png +0 -0
  43. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/plus.png +0 -0
  44. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/pygments.css +0 -0
  45. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/scripts/furo-extensions.js +0 -0
  46. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/scripts/furo.js +0 -0
  47. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/scripts/furo.js.LICENSE.txt +0 -0
  48. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/scripts/furo.js.map +0 -0
  49. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/searchtools.js +0 -0
  50. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/skeleton.css +0 -0
  51. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/sphinx_highlight.js +0 -0
  52. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/styles/furo-extensions.css +0 -0
  53. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/styles/furo-extensions.css.map +0 -0
  54. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/styles/furo.css +0 -0
  55. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/_static/styles/furo.css.map +0 -0
  56. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/mcal.calculations.html +0 -0
  57. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/mcal.utils.html +0 -0
  58. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/py-modindex.html +0 -0
  59. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs/search.html +0 -0
  60. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/Makefile +0 -0
  61. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/make.bat +0 -0
  62. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/conf.py +0 -0
  63. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/mcal.calculations.rst +0 -0
  64. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/mcal.rst +0 -0
  65. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/mcal.utils.rst +0 -0
  66. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/docs-src/source/modules.rst +0 -0
  67. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/__init__.py +0 -0
  68. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/calculations/__init__.py +0 -0
  69. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/calculations/hopping_mobility_model.py +0 -0
  70. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/calculations/rcal.py +0 -0
  71. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/constants/element_properties.csv +0 -0
  72. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/utils/__init__.py +0 -0
  73. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/utils/cif_reader.py +0 -0
  74. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/utils/gaus_log_reader.py +0 -0
  75. {yu_mcal-0.1.6 → yu_mcal-0.2.1}/src/mcal/utils/gjf_maker.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: yu-mcal
3
- Version: 0.1.6
3
+ Version: 0.2.1
4
4
  Summary: Program for the calculation of mobility tensor for organic semiconductor crystals
5
5
  Author: Koki Ozawa
6
6
  Author-email: Hiroyuki Matsui <h-matsui@yz.yamagata-u.ac.jp>
@@ -40,6 +40,7 @@ Classifier: Topic :: Scientific/Engineering
40
40
  Classifier: Topic :: Scientific/Engineering :: Chemistry
41
41
  Classifier: Topic :: Scientific/Engineering :: Physics
42
42
  Requires-Python: >=3.9
43
+ Requires-Dist: matplotlib>=3.9.4
43
44
  Requires-Dist: numpy>=2.0.2
44
45
  Requires-Dist: pandas>=2.3.3
45
46
  Requires-Dist: yu-tcal==3.1.0
@@ -57,6 +58,7 @@ Description-Content-Type: text/markdown
57
58
  * Python 3.9 or newer
58
59
  * NumPy
59
60
  * Pandas
61
+ * Matplotlib
60
62
  * yu-tcal==3.1.0
61
63
  * Gaussian 09 or 16
62
64
 
@@ -157,6 +159,14 @@ Specify the number of unit cells to expand in each direction around the central
157
159
  Save calculation results to a pickle file.
158
160
  - **Example**: `mcal xxx.cif p -p`
159
161
 
162
+ #### `--plot-plane <plane>`
163
+ Plot mobility tensor as a 2D polar plot on specified crystallographic plane.
164
+ - **Available planes**: `ab`, `ac`, `ba`, `bc`, `ca`, `cb`
165
+ - **Default**: None (no plot generated)
166
+ - **Examples**:
167
+ - `mcal xxx.cif p --plot-plane ab` (plot on ab-plane)
168
+ - `mcal xxx.cif p --plot-plane bc` (plot on bc-plane)
169
+
160
170
  ### Diffusion Coefficient Calculation Methods
161
171
 
162
172
  #### `--mc`
@@ -10,6 +10,7 @@
10
10
  * Python 3.9 or newer
11
11
  * NumPy
12
12
  * Pandas
13
+ * Matplotlib
13
14
  * yu-tcal==3.1.0
14
15
  * Gaussian 09 or 16
15
16
 
@@ -110,6 +111,14 @@ Specify the number of unit cells to expand in each direction around the central
110
111
  Save calculation results to a pickle file.
111
112
  - **Example**: `mcal xxx.cif p -p`
112
113
 
114
+ #### `--plot-plane <plane>`
115
+ Plot mobility tensor as a 2D polar plot on specified crystallographic plane.
116
+ - **Available planes**: `ab`, `ac`, `ba`, `bc`, `ca`, `cb`
117
+ - **Default**: None (no plot generated)
118
+ - **Examples**:
119
+ - `mcal xxx.cif p --plot-plane ab` (plot on ab-plane)
120
+ - `mcal xxx.cif p --plot-plane bc` (plot on bc-plane)
121
+
113
122
  ### Diffusion Coefficient Calculation Methods
114
123
 
115
124
  #### `--mc`
@@ -11,6 +11,7 @@
11
11
  * Python 3.9以降
12
12
  * NumPy
13
13
  * Pandas
14
+ * Matplotlib
14
15
  * yu-tcal==3.1.0
15
16
  * Gaussian 09または16
16
17
 
@@ -111,6 +112,14 @@ Gaussianを実行せずに既存のlogファイルから結果を読み取りま
111
112
  計算結果をpickleファイルに保存します。
112
113
  - **例**: `mcal xxx.cif p -p`
113
114
 
115
+ #### `--plot-plane <plane>`
116
+ 指定した結晶学的面上で移動度テンソルを2D極座標プロットで描画します。
117
+ - **利用可能な面**: `ab`, `ac`, `ba`, `bc`, `ca`, `cb`
118
+ - **デフォルト**: None(プロットは生成されません)
119
+ - **例**:
120
+ - `mcal xxx.cif p --plot-plane ab`(ab面にプロット)
121
+ - `mcal xxx.cif p --plot-plane bc`(bc面にプロット)
122
+
114
123
  ### 拡散係数計算手法
115
124
 
116
125
  #### `--mc`
@@ -241,6 +241,9 @@
241
241
  <span class="kn">from</span><span class="w"> </span><span class="nn">time</span><span class="w"> </span><span class="kn">import</span> <span class="n">time</span>
242
242
  <span class="kn">from</span><span class="w"> </span><span class="nn">typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">Dict</span><span class="p">,</span> <span class="n">List</span><span class="p">,</span> <span class="n">Literal</span><span class="p">,</span> <span class="n">Optional</span><span class="p">,</span> <span class="n">Tuple</span><span class="p">,</span> <span class="n">Union</span>
243
243
 
244
+ <span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib</span>
245
+ <span class="n">matplotlib</span><span class="o">.</span><span class="n">use</span><span class="p">(</span><span class="s1">&#39;Agg&#39;</span><span class="p">)</span>
246
+ <span class="kn">import</span><span class="w"> </span><span class="nn">matplotlib.pyplot</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">plt</span>
244
247
  <span class="kn">import</span><span class="w"> </span><span class="nn">numpy</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">np</span>
245
248
  <span class="kn">from</span><span class="w"> </span><span class="nn">numpy.typing</span><span class="w"> </span><span class="kn">import</span> <span class="n">NDArray</span>
246
249
  <span class="kn">from</span><span class="w"> </span><span class="nn">tcal</span><span class="w"> </span><span class="kn">import</span> <span class="n">Tcal</span>
@@ -270,40 +273,41 @@
270
273
  <span class="sd"> --------</span>
271
274
  <span class="sd"> Basic usage:</span>
272
275
  <span class="sd"> - Calculate p-type mobility for xxx crystal\n</span>
273
- <span class="sd"> $ python hop_mcal.py xxx.cif p</span>
276
+ <span class="sd"> $ mcal xxx.cif p</span>
274
277
 
275
278
  <span class="sd"> - Calculate n-type mobility for xxx crystal\n</span>
276
- <span class="sd"> $ python hop_mcal.py xxx.cif n</span>
279
+ <span class="sd"> $ mcal xxx.cif n</span>
277
280
 
278
281
  <span class="sd"> With resource options:</span>
279
282
  <span class="sd"> - Use 8 CPUs and 16GB memory\n</span>
280
- <span class="sd"> $ python hop_mcal.py xxx.cif p -c 8 -m 16</span>
283
+ <span class="sd"> $ mcal xxx.cif p -c 8 -m 16</span>
281
284
 
282
285
  <span class="sd"> - Use different calculation method (default is B3LYP/6-31G(d,p))\n</span>
283
- <span class="sd"> $ python hop_mcal.py xxx.cif p -M &quot;B3LYP/6-311G(d,p)&quot;</span>
286
+ <span class="sd"> $ mcal xxx.cif p -M &quot;B3LYP/6-311G(d,p)&quot;</span>
284
287
 
285
288
  <span class="sd"> High-precision calculation:</span>
286
289
  <span class="sd"> - Calculate all transfer integrals without speedup using moment of inertia and distance between centers of weight\n</span>
287
- <span class="sd"> $ python hop_mcal.py xxx.cif p --fullcal</span>
288
-
289
- <span class="sd"> - Expand calculation range to 3x3x3 supercell\n</span>
290
- <span class="sd"> $ python hop_mcal.py xxx.cif p --cellsize 1</span>
290
+ <span class="sd"> $ mcal xxx.cif p --fullcal</span>
291
291
 
292
292
  <span class="sd"> - Expand calculation range to 5x5x5 supercell to widen transfer integral calculation range\n</span>
293
- <span class="sd"> $ python hop_mcal.py xxx.cif p --cellsize 2</span>
293
+ <span class="sd"> $ mcal xxx.cif p --cellsize 2</span>
294
294
 
295
295
  <span class="sd"> Resume and save results:</span>
296
296
  <span class="sd"> - Resume from existing calculations\n</span>
297
- <span class="sd"> $ python hop_mcal.py xxx.cif p --resume</span>
297
+ <span class="sd"> $ mcal xxx.cif p --resume</span>
298
298
 
299
299
  <span class="sd"> - Save results to pickle file\n</span>
300
- <span class="sd"> $ python hop_mcal.py xxx.cif p --pickle</span>
300
+ <span class="sd"> $ mcal xxx.cif p --pickle</span>
301
301
 
302
302
  <span class="sd"> - Read results from existing pickle file\n</span>
303
- <span class="sd"> $ python hop_mcal.py xxx_result.pkl p -rp</span>
303
+ <span class="sd"> $ mcal xxx_result.pkl p -rp</span>
304
304
 
305
305
  <span class="sd"> - Read results from existing log files without running Gaussian\n</span>
306
- <span class="sd"> $ python hop_mcal.py xxx.cif p -r</span>
306
+ <span class="sd"> $ mcal xxx.cif p -r</span>
307
+
308
+ <span class="sd"> Plot mobility tensor in 2D plane:</span>
309
+ <span class="sd"> - Plot mobility tensor in 2D plane (Examples: ab, ac, ba, bc, ca, cb (default is ab))\n</span>
310
+ <span class="sd"> $ python hop_mcal.py xxx.cif p --plot-plane ab</span>
307
311
 
308
312
  <span class="sd"> Compare calculation methods:</span>
309
313
  <span class="sd"> - Compare results using kinetic Monte Carlo and ODE methods\n</span>
@@ -356,6 +360,13 @@
356
360
  <span class="n">help</span><span class="o">=</span><span class="s1">&#39;use Ordinary Differential Equation method to calculate diffusion coefficient&#39;</span><span class="p">,</span>
357
361
  <span class="n">action</span><span class="o">=</span><span class="s1">&#39;store_true&#39;</span><span class="p">,</span>
358
362
  <span class="p">)</span>
363
+ <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
364
+ <span class="s1">&#39;--plot-plane&#39;</span><span class="p">,</span>
365
+ <span class="n">help</span><span class="o">=</span><span class="s1">&#39;plot mobility tensor in 2D plane (Examples: ab, ac, ba, bc, ca, cb (default is ab))&#39;</span><span class="p">,</span>
366
+ <span class="nb">type</span><span class="o">=</span><span class="nb">str</span><span class="p">,</span>
367
+ <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
368
+ <span class="n">choices</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;ab&#39;</span><span class="p">,</span> <span class="s1">&#39;ac&#39;</span><span class="p">,</span> <span class="s1">&#39;ba&#39;</span><span class="p">,</span> <span class="s1">&#39;bc&#39;</span><span class="p">,</span> <span class="s1">&#39;ca&#39;</span><span class="p">,</span> <span class="s1">&#39;cb&#39;</span><span class="p">],</span>
369
+ <span class="p">)</span>
359
370
  <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span>
360
371
  <span class="s1">&#39;--resume&#39;</span><span class="p">,</span>
361
372
  <span class="n">help</span><span class="o">=</span><span class="s1">&#39;resume calculation&#39;</span><span class="p">,</span>
@@ -377,11 +388,11 @@
377
388
  <span class="n">cif_path_without_ext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">directory</span><span class="si">}</span><span class="s1">/</span><span class="si">{</span><span class="n">filename</span><span class="si">}</span><span class="s1">&#39;</span>
378
389
 
379
390
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;----------------------------------------&#39;</span><span class="p">)</span>
380
- <span class="nb">print</span><span class="p">(</span><span class="s1">&#39; mcal 0.1.6 (2026/01/29) by Matsui Lab. &#39;</span><span class="p">)</span>
391
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39; mcal 0.2.1 (2026/01/29) by Matsui Lab. &#39;</span><span class="p">)</span>
381
392
  <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;----------------------------------------&#39;</span><span class="p">)</span>
382
393
 
383
394
  <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">:</span>
384
- <span class="n">read_pickle</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">file</span><span class="p">)</span>
395
+ <span class="n">read_pickle</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">file</span><span class="p">,</span> <span class="n">args</span><span class="o">.</span><span class="n">plot_plane</span><span class="p">)</span>
385
396
  <span class="n">exit</span><span class="p">()</span>
386
397
 
387
398
  <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Calculate as </span><span class="si">{</span><span class="n">args</span><span class="o">.</span><span class="n">osc_type</span><span class="si">}</span><span class="s1">-type organic semiconductor.&#39;</span><span class="p">)</span>
@@ -589,6 +600,14 @@
589
600
  <span class="s1">&#39;mobility_vector&#39;</span><span class="p">:</span> <span class="n">vector</span>
590
601
  <span class="p">},</span> <span class="n">f</span><span class="p">)</span>
591
602
 
603
+ <span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">plot_plane</span><span class="p">:</span>
604
+ <span class="n">plot_mobility_2d</span><span class="p">(</span>
605
+ <span class="n">Path</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">cif_path_without_ext</span><span class="si">}</span><span class="s1">_result.pkl&#39;</span><span class="p">),</span>
606
+ <span class="n">mu</span><span class="p">,</span>
607
+ <span class="n">cif_reader</span><span class="o">.</span><span class="n">lattice</span><span class="p">,</span>
608
+ <span class="n">args</span><span class="o">.</span><span class="n">plot_plane</span>
609
+ <span class="p">)</span>
610
+
592
611
  <span class="n">Tcal</span><span class="o">.</span><span class="n">print_timestamp</span><span class="p">()</span>
593
612
  <span class="n">end_time</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
594
613
  <span class="n">elapsed_time</span> <span class="o">=</span> <span class="n">end_time</span> <span class="o">-</span> <span class="n">start_time</span>
@@ -988,6 +1007,85 @@
988
1007
 
989
1008
 
990
1009
 
1010
+ <div class="viewcode-block" id="plot_mobility_2d">
1011
+ <a class="viewcode-back" href="../../mcal.html#mcal.mcal.plot_mobility_2d">[docs]</a>
1012
+ <span class="k">def</span><span class="w"> </span><span class="nf">plot_mobility_2d</span><span class="p">(</span>
1013
+ <span class="n">save_path</span><span class="p">:</span> <span class="n">Path</span><span class="p">,</span>
1014
+ <span class="n">mobility_tensor</span><span class="p">:</span> <span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span>
1015
+ <span class="n">lattice</span><span class="p">:</span> <span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span>
1016
+ <span class="n">plane</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="s1">&#39;ab&#39;</span><span class="p">,</span> <span class="s1">&#39;ac&#39;</span><span class="p">,</span> <span class="s1">&#39;ba&#39;</span><span class="p">,</span> <span class="s1">&#39;bc&#39;</span><span class="p">,</span> <span class="s1">&#39;ca&#39;</span><span class="p">,</span> <span class="s1">&#39;cb&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;ab&#39;</span>
1017
+ <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
1018
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Plot mobility tensor in 2D plane.</span>
1019
+
1020
+ <span class="sd"> Parameters</span>
1021
+ <span class="sd"> ----------</span>
1022
+ <span class="sd"> save_path : Path</span>
1023
+ <span class="sd"> Path to save the plot</span>
1024
+ <span class="sd"> mobility_tensor : NDArray[np.float64]</span>
1025
+ <span class="sd"> Mobility tensor</span>
1026
+ <span class="sd"> lattice : NDArray[np.float64]</span>
1027
+ <span class="sd"> Lattice vectors [Å]</span>
1028
+ <span class="sd"> plane : Literal[&#39;ab&#39;, &#39;ac&#39;, &#39;ba&#39;, &#39;bc&#39;, &#39;ca&#39;, &#39;cb&#39;]</span>
1029
+ <span class="sd"> Plane to plot, by default &#39;ab&#39;</span>
1030
+ <span class="sd"> &quot;&quot;&quot;</span>
1031
+ <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Plot mobility in </span><span class="si">{</span><span class="n">plane</span><span class="si">}</span><span class="s2"> plane.&quot;</span><span class="p">)</span>
1032
+ <span class="n">angle_list</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">360</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
1033
+ <span class="n">mobility_values</span> <span class="o">=</span> <span class="p">[]</span>
1034
+
1035
+ <span class="n">a_vec</span> <span class="o">=</span> <span class="n">lattice</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
1036
+ <span class="n">b_vec</span> <span class="o">=</span> <span class="n">lattice</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
1037
+ <span class="n">c_vec</span> <span class="o">=</span> <span class="n">lattice</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
1038
+ <span class="k">if</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;ab&#39;</span><span class="p">:</span>
1039
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="o">=</span> <span class="n">a_vec</span><span class="p">,</span> <span class="n">b_vec</span>
1040
+ <span class="k">elif</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;ba&#39;</span><span class="p">:</span>
1041
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="o">=</span> <span class="n">b_vec</span><span class="p">,</span> <span class="n">a_vec</span>
1042
+ <span class="k">elif</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;bc&#39;</span><span class="p">:</span>
1043
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="o">=</span> <span class="n">b_vec</span><span class="p">,</span> <span class="n">c_vec</span>
1044
+ <span class="k">elif</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;cb&#39;</span><span class="p">:</span>
1045
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="o">=</span> <span class="n">c_vec</span><span class="p">,</span> <span class="n">b_vec</span>
1046
+ <span class="k">elif</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;ac&#39;</span><span class="p">:</span>
1047
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">,</span> <span class="o">=</span> <span class="n">a_vec</span><span class="p">,</span> <span class="n">c_vec</span>
1048
+ <span class="k">elif</span> <span class="n">plane</span> <span class="o">==</span> <span class="s1">&#39;ca&#39;</span><span class="p">:</span>
1049
+ <span class="n">v1</span><span class="p">,</span> <span class="n">v2</span> <span class="o">=</span> <span class="n">c_vec</span><span class="p">,</span> <span class="n">a_vec</span>
1050
+
1051
+ <span class="c1"># Angle between the two specified crystal axes</span>
1052
+ <span class="n">second_axis_angle</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">rad2deg</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arccos</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">v1</span><span class="p">,</span> <span class="n">v2</span><span class="p">)</span> <span class="o">/</span> <span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span> <span class="o">*</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">v2</span><span class="p">))))</span>
1053
+ <span class="nb">print</span><span class="p">(</span><span class="s1">&#39;Crystal axis directions in the plotted plane:&#39;</span><span class="p">)</span>
1054
+ <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">plane</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">-axis: 0.0 deg&#39;</span><span class="p">)</span>
1055
+ <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">plane</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s1">-axis: </span><span class="si">{</span><span class="n">second_axis_angle</span><span class="si">:</span><span class="s1">.1f</span><span class="si">}</span><span class="s1"> deg&#39;</span><span class="p">)</span>
1056
+ <span class="nb">print</span><span class="p">()</span>
1057
+
1058
+ <span class="c1"># Gram–Schmidt orthonormalization</span>
1059
+ <span class="n">e1</span> <span class="o">=</span> <span class="n">v1</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">v1</span><span class="p">)</span>
1060
+ <span class="n">e2</span> <span class="o">=</span> <span class="n">v2</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">dot</span><span class="p">(</span><span class="n">v2</span><span class="p">,</span> <span class="n">e1</span><span class="p">)</span> <span class="o">*</span> <span class="n">e1</span>
1061
+ <span class="n">e2</span> <span class="o">=</span> <span class="n">e2</span> <span class="o">/</span> <span class="n">np</span><span class="o">.</span><span class="n">linalg</span><span class="o">.</span><span class="n">norm</span><span class="p">(</span><span class="n">e2</span><span class="p">)</span>
1062
+
1063
+ <span class="k">for</span> <span class="n">angle</span> <span class="ow">in</span> <span class="n">angle_list</span><span class="p">:</span>
1064
+ <span class="n">phi</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">deg2rad</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span>
1065
+ <span class="n">direction</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">cos</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> <span class="o">*</span> <span class="n">e1</span> <span class="o">+</span> <span class="n">np</span><span class="o">.</span><span class="n">sin</span><span class="p">(</span><span class="n">phi</span><span class="p">)</span> <span class="o">*</span> <span class="n">e2</span>
1066
+ <span class="n">mobility_value</span> <span class="o">=</span> <span class="n">direction</span> <span class="o">@</span> <span class="n">mobility_tensor</span> <span class="o">@</span> <span class="n">direction</span>
1067
+ <span class="n">mobility_values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">mobility_value</span><span class="p">)</span>
1068
+
1069
+ <span class="n">plt</span><span class="o">.</span><span class="n">rcParams</span><span class="p">[</span><span class="s1">&#39;font.size&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="mi">12</span>
1070
+ <span class="n">width_cm</span><span class="p">,</span> <span class="n">height_cm</span> <span class="o">=</span> <span class="mi">20</span><span class="p">,</span> <span class="mi">8</span>
1071
+ <span class="n">width_inch</span><span class="p">,</span> <span class="n">height_inch</span> <span class="o">=</span> <span class="n">width_cm</span> <span class="o">/</span> <span class="mf">2.54</span><span class="p">,</span> <span class="n">height_cm</span> <span class="o">/</span> <span class="mf">2.54</span>
1072
+
1073
+ <span class="n">fig</span><span class="p">,</span> <span class="n">ax</span> <span class="o">=</span> <span class="n">plt</span><span class="o">.</span><span class="n">subplots</span><span class="p">(</span><span class="n">subplot_kw</span><span class="o">=</span><span class="p">{</span><span class="s1">&#39;projection&#39;</span><span class="p">:</span> <span class="s1">&#39;polar&#39;</span><span class="p">},</span> <span class="n">tight_layout</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">figsize</span><span class="o">=</span><span class="p">(</span><span class="n">width_inch</span><span class="p">,</span> <span class="n">height_inch</span><span class="p">))</span>
1074
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_theta_zero_location</span><span class="p">(</span><span class="s1">&#39;E&#39;</span><span class="p">)</span>
1075
+ <span class="n">ax</span><span class="o">.</span><span class="n">grid</span><span class="p">(</span><span class="kc">True</span><span class="p">,</span> <span class="n">linestyle</span><span class="o">=</span><span class="s1">&#39;--&#39;</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mf">0.5</span><span class="p">)</span>
1076
+ <span class="n">ax</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">deg2rad</span><span class="p">(</span><span class="n">angle_list</span><span class="p">),</span> <span class="n">mobility_values</span><span class="p">,</span> <span class="n">linewidth</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
1077
+
1078
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_rlim</span><span class="p">(</span><span class="n">bottom</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
1079
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_xticks</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">arange</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="o">*</span><span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">pi</span><span class="o">/</span><span class="mi">6</span><span class="p">))</span>
1080
+ <span class="n">ax</span><span class="o">.</span><span class="n">tick_params</span><span class="p">(</span><span class="n">axis</span><span class="o">=</span><span class="s2">&quot;x&quot;</span><span class="p">,</span> <span class="n">pad</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
1081
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="sa">R</span><span class="s1">&#39;Mobility [$\mathrm</span><span class="si">{cm}</span><span class="s1">^2 \mathrm</span><span class="si">{V}</span><span class="s1">^{-1} \mathrm</span><span class="si">{s}</span><span class="s1">^{-1}$]&#39;</span><span class="p">)</span>
1082
+ <span class="n">ax</span><span class="o">.</span><span class="n">yaxis</span><span class="o">.</span><span class="n">set_label_coords</span><span class="p">(</span><span class="o">-</span><span class="mf">0.2</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)</span>
1083
+ <span class="n">ax</span><span class="o">.</span><span class="n">set_rlabel_position</span><span class="p">(</span><span class="mi">90</span><span class="p">)</span>
1084
+ <span class="n">plt</span><span class="o">.</span><span class="n">savefig</span><span class="p">(</span><span class="n">save_path</span><span class="o">.</span><span class="n">parent</span> <span class="o">/</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">save_path</span><span class="o">.</span><span class="n">stem</span><span class="si">}</span><span class="s2">_</span><span class="si">{</span><span class="n">plane</span><span class="si">}</span><span class="s2">.png&quot;</span><span class="p">,</span> <span class="n">dpi</span><span class="o">=</span><span class="mi">300</span><span class="p">,</span> <span class="n">bbox_inches</span><span class="o">=</span><span class="s1">&#39;tight&#39;</span><span class="p">)</span>
1085
+ <span class="n">plt</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div>
1086
+
1087
+
1088
+
991
1089
  <div class="viewcode-block" id="print_mobility">
992
1090
  <a class="viewcode-back" href="../../mcal.html#mcal.mcal.print_mobility">[docs]</a>
993
1091
  <span class="k">def</span><span class="w"> </span><span class="nf">print_mobility</span><span class="p">(</span><span class="n">value</span><span class="p">:</span> <span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">vector</span><span class="p">:</span> <span class="n">NDArray</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">],</span> <span class="n">sim_type</span><span class="p">:</span> <span class="n">Literal</span><span class="p">[</span><span class="s1">&#39;MC&#39;</span><span class="p">,</span> <span class="s1">&#39;ODE&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="p">):</span>
@@ -1093,14 +1191,24 @@
1093
1191
 
1094
1192
  <div class="viewcode-block" id="read_pickle">
1095
1193
  <a class="viewcode-back" href="../../mcal.html#mcal.mcal.read_pickle">[docs]</a>
1096
- <span class="k">def</span><span class="w"> </span><span class="nf">read_pickle</span><span class="p">(</span><span class="n">file_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">):</span>
1194
+ <span class="k">def</span><span class="w"> </span><span class="nf">read_pickle</span><span class="p">(</span>
1195
+ <span class="n">file_name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
1196
+ <span class="n">plot_plane</span><span class="p">:</span> <span class="n">Optional</span><span class="p">[</span><span class="n">Literal</span><span class="p">[</span><span class="s1">&#39;ab&#39;</span><span class="p">,</span> <span class="s1">&#39;ac&#39;</span><span class="p">,</span> <span class="s1">&#39;ba&#39;</span><span class="p">,</span> <span class="s1">&#39;bc&#39;</span><span class="p">,</span> <span class="s1">&#39;ca&#39;</span><span class="p">,</span> <span class="s1">&#39;cb&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="kc">None</span>
1197
+ <span class="p">)</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
1198
+ <span class="w"> </span><span class="sd">&quot;&quot;&quot;Read pickle file and plot mobility tensor in 2D plane.</span>
1199
+
1200
+ <span class="sd"> Parameters</span>
1201
+ <span class="sd"> ----------</span>
1202
+ <span class="sd"> file_name : str</span>
1203
+ <span class="sd"> Path to the pickle file</span>
1204
+ <span class="sd"> plot_plane : Optional[Literal[&#39;ab&#39;, &#39;ac&#39;, &#39;ba&#39;, &#39;bc&#39;, &#39;ca&#39;, &#39;cb&#39;]]</span>
1205
+ <span class="sd"> Plane to plot, by default None</span>
1206
+ <span class="sd"> &quot;&quot;&quot;</span>
1097
1207
  <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Input File Name: </span><span class="si">{</span><span class="n">file_name</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span>
1098
1208
 
1099
1209
  <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">file_name</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
1100
1210
  <span class="n">results</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">f</span><span class="p">)</span>
1101
1211
 
1102
- <span class="c1"># print(results)</span>
1103
-
1104
1212
  <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">Calculate as </span><span class="si">{</span><span class="n">results</span><span class="p">[</span><span class="s2">&quot;osc_type&quot;</span><span class="p">]</span><span class="si">}</span><span class="s1">-type organic semiconductor.&#39;</span><span class="p">)</span>
1105
1213
 
1106
1214
  <span class="n">print_reorg_energy</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="s1">&#39;osc_type&#39;</span><span class="p">],</span> <span class="n">results</span><span class="p">[</span><span class="s1">&#39;reorganization&#39;</span><span class="p">])</span>
@@ -1114,7 +1222,15 @@
1114
1222
 
1115
1223
  <span class="n">print_tensor</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_tensor&#39;</span><span class="p">],</span> <span class="n">msg</span><span class="o">=</span><span class="s2">&quot;Mobility tensor (cm^2/Vs)&quot;</span><span class="p">)</span>
1116
1224
 
1117
- <span class="n">print_mobility</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_value&#39;</span><span class="p">],</span> <span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_vector&#39;</span><span class="p">])</span></div>
1225
+ <span class="n">print_mobility</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_value&#39;</span><span class="p">],</span> <span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_vector&#39;</span><span class="p">])</span>
1226
+
1227
+ <span class="k">if</span> <span class="n">plot_plane</span><span class="p">:</span>
1228
+ <span class="n">plot_mobility_2d</span><span class="p">(</span>
1229
+ <span class="n">Path</span><span class="p">(</span><span class="n">file_name</span><span class="p">)</span><span class="o">.</span><span class="n">with_suffix</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">),</span>
1230
+ <span class="n">results</span><span class="p">[</span><span class="s1">&#39;mobility_tensor&#39;</span><span class="p">],</span>
1231
+ <span class="n">results</span><span class="p">[</span><span class="s1">&#39;lattice&#39;</span><span class="p">],</span>
1232
+ <span class="n">plot_plane</span><span class="p">,</span>
1233
+ <span class="p">)</span></div>
1118
1234
 
1119
1235
 
1120
1236
 
@@ -32,6 +32,7 @@ Requirements
32
32
  * Python 3.9 or newer
33
33
  * NumPy
34
34
  * Pandas
35
+ * Matplotlib
35
36
  * yu-tcal==3.1.0
36
37
  * Gaussian 09 or 16
37
38
 
@@ -177,6 +178,18 @@ Save calculation results to a pickle file.
177
178
 
178
179
  * **Example**: ``mcal xxx.cif p -p``
179
180
 
181
+ ``--plot-plane <plane>``
182
+ ^^^^^^^^^^^^^^^^^^^^^^^^^
183
+
184
+ Plot mobility tensor as a 2D polar plot on specified crystallographic plane.
185
+
186
+ * **Available planes**: ``ab``, ``ac``, ``ba``, ``bc``, ``ca``, ``cb``
187
+ * **Default**: None (no plot generated)
188
+ * **Examples**:
189
+
190
+ * ``mcal xxx.cif p --plot-plane ab`` (plot on ab-plane)
191
+ * ``mcal xxx.cif p --plot-plane bc`` (plot on bc-plane)
192
+
180
193
  Diffusion Coefficient Calculation Methods
181
194
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
182
195
 
@@ -524,12 +524,14 @@
524
524
  <li><a href="mcal.utils.html#mcal.utils.gjf_maker.GjfMaker.parent_dir">(mcal.utils.gjf_maker.GjfMaker attribute)</a>
525
525
  </li>
526
526
  </ul></li>
527
- <li><a href="mcal.html#mcal.mcal.print_mobility">print_mobility() (in module mcal.mcal)</a>
527
+ <li><a href="mcal.html#mcal.mcal.plot_mobility_2d">plot_mobility_2d() (in module mcal.mcal)</a>
528
528
  </li>
529
- <li><a href="mcal.html#mcal.mcal.print_reorg_energy">print_reorg_energy() (in module mcal.mcal)</a>
529
+ <li><a href="mcal.html#mcal.mcal.print_mobility">print_mobility() (in module mcal.mcal)</a>
530
530
  </li>
531
531
  </ul></td>
532
532
  <td style="width: 33%; vertical-align: top;"><ul>
533
+ <li><a href="mcal.html#mcal.mcal.print_reorg_energy">print_reorg_energy() (in module mcal.mcal)</a>
534
+ </li>
533
535
  <li><a href="mcal.calculations.html#mcal.calculations.hopping_mobility_model.print_tensor">print_tensor() (in module mcal.calculations.hopping_mobility_model)</a>
534
536
 
535
537
  <ul>
@@ -267,6 +267,7 @@ and determines mobility tensors considering anisotropy and path continuity.</p>
267
267
  <li><p>Python 3.9 or newer</p></li>
268
268
  <li><p>NumPy</p></li>
269
269
  <li><p>Pandas</p></li>
270
+ <li><p>Matplotlib</p></li>
270
271
  <li><p>yu-tcal==3.1.0</p></li>
271
272
  <li><p>Gaussian 09 or 16</p></li>
272
273
  </ul>
@@ -410,6 +411,20 @@ for transfer integral calculations.</p>
410
411
  <li><p><strong>Example</strong>: <code class="docutils literal notranslate"><span class="pre">mcal</span> <span class="pre">xxx.cif</span> <span class="pre">p</span> <span class="pre">-p</span></code></p></li>
411
412
  </ul>
412
413
  </section>
414
+ <section id="plot-plane-plane">
415
+ <h5><code class="docutils literal notranslate"><span class="pre">--plot-plane</span> <span class="pre">&lt;plane&gt;</span></code><a class="headerlink" href="#plot-plane-plane" title="Link to this heading">¶</a></h5>
416
+ <p>Plot mobility tensor as a 2D polar plot on specified crystallographic plane.</p>
417
+ <ul class="simple">
418
+ <li><p><strong>Available planes</strong>: <code class="docutils literal notranslate"><span class="pre">ab</span></code>, <code class="docutils literal notranslate"><span class="pre">ac</span></code>, <code class="docutils literal notranslate"><span class="pre">ba</span></code>, <code class="docutils literal notranslate"><span class="pre">bc</span></code>, <code class="docutils literal notranslate"><span class="pre">ca</span></code>, <code class="docutils literal notranslate"><span class="pre">cb</span></code></p></li>
419
+ <li><p><strong>Default</strong>: None (no plot generated)</p></li>
420
+ <li><p><strong>Examples</strong>:</p>
421
+ <ul>
422
+ <li><p><code class="docutils literal notranslate"><span class="pre">mcal</span> <span class="pre">xxx.cif</span> <span class="pre">p</span> <span class="pre">--plot-plane</span> <span class="pre">ab</span></code> (plot on ab-plane)</p></li>
423
+ <li><p><code class="docutils literal notranslate"><span class="pre">mcal</span> <span class="pre">xxx.cif</span> <span class="pre">p</span> <span class="pre">--plot-plane</span> <span class="pre">bc</span></code> (plot on bc-plane)</p></li>
424
+ </ul>
425
+ </li>
426
+ </ul>
427
+ </section>
413
428
  </section>
414
429
  <section id="diffusion-coefficient-calculation-methods">
415
430
  <h4>Diffusion Coefficient Calculation Methods<a class="headerlink" href="#diffusion-coefficient-calculation-methods" title="Link to this heading">¶</a></h4>
@@ -653,6 +668,7 @@ mcal<span class="w"> </span>xxx.cif<span class="w"> </span>p<span class="w"> </s
653
668
  </li>
654
669
  <li><a class="reference internal" href="#output-settings">Output Settings</a><ul>
655
670
  <li><a class="reference internal" href="#p-pickle"><code class="docutils literal notranslate"><span class="pre">-p,</span> <span class="pre">--pickle</span></code></a></li>
671
+ <li><a class="reference internal" href="#plot-plane-plane"><code class="docutils literal notranslate"><span class="pre">--plot-plane</span> <span class="pre">&lt;plane&gt;</span></code></a></li>
656
672
  </ul>
657
673
  </li>
658
674
  <li><a class="reference internal" href="#diffusion-coefficient-calculation-methods">Diffusion Coefficient Calculation Methods</a><ul>