yu-mcal 0.1.5__tar.gz → 0.1.6__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.
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/PKG-INFO +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/mcal.html +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/utils/cif_reader.html +43 -4
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/mcal.utils.html +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/pyproject.toml +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/mcal.py +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/utils/cif_reader.py +43 -4
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/uv.lock +1 -1
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/.gitignore +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/.python-version +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/LICENSE +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/README.md +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/README_ja.md +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/.nojekyll +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/index.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/calculations/hopping_mobility_model.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/calculations/rcal.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/utils/gaus_log_reader.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_modules/mcal/utils/gjf_maker.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_sources/index.rst.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_sources/mcal.calculations.rst.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_sources/mcal.rst.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_sources/mcal.utils.rst.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_sources/modules.rst.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/autodoc_pydantic.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/basic.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/debug.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/doctools.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/documentation_options.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/file.png +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/language_data.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/minus.png +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/plus.png +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/pygments.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/scripts/furo-extensions.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/scripts/furo.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/scripts/furo.js.LICENSE.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/scripts/furo.js.map +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/searchtools.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/skeleton.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/sphinx_highlight.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/styles/furo-extensions.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/styles/furo-extensions.css.map +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/styles/furo.css +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/_static/styles/furo.css.map +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/genindex.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/index.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/mcal.calculations.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/mcal.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/modules.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/objects.inv +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/py-modindex.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/search.html +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs/searchindex.js +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/Makefile +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/make.bat +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/conf.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/index.rst +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/mcal.calculations.rst +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/mcal.rst +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/mcal.utils.rst +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/docs-src/source/modules.rst +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/requirements.txt +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/__init__.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/calculations/__init__.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/calculations/hopping_mobility_model.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/calculations/rcal.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/constants/element_properties.csv +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/utils/__init__.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/utils/gaus_log_reader.py +0 -0
- {yu_mcal-0.1.5 → yu_mcal-0.1.6}/src/mcal/utils/gjf_maker.py +0 -0
|
@@ -377,7 +377,7 @@
|
|
|
377
377
|
<span class="n">cif_path_without_ext</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">'</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">'</span>
|
|
378
378
|
|
|
379
379
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'----------------------------------------'</span><span class="p">)</span>
|
|
380
|
-
<span class="nb">print</span><span class="p">(</span><span class="s1">' mcal 0.1.
|
|
380
|
+
<span class="nb">print</span><span class="p">(</span><span class="s1">' mcal 0.1.6 (2026/01/29) by Matsui Lab. '</span><span class="p">)</span>
|
|
381
381
|
<span class="nb">print</span><span class="p">(</span><span class="s1">'----------------------------------------'</span><span class="p">)</span>
|
|
382
382
|
|
|
383
383
|
<span class="k">if</span> <span class="n">args</span><span class="o">.</span><span class="n">read_pickle</span><span class="p">:</span>
|
|
@@ -233,13 +233,14 @@
|
|
|
233
233
|
</div>
|
|
234
234
|
<article role="main" id="furo-main-content">
|
|
235
235
|
<h1>Source code for mcal.utils.cif_reader</h1><div class="highlight"><pre>
|
|
236
|
-
<span></span><span class="sd">"""CifReader beta (2026/01/
|
|
236
|
+
<span></span><span class="sd">"""CifReader beta (2026/01/29)"""</span>
|
|
237
237
|
<span class="kn">import</span><span class="w"> </span><span class="nn">os</span>
|
|
238
238
|
<span class="kn">import</span><span class="w"> </span><span class="nn">re</span>
|
|
239
|
+
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
|
240
|
+
<span class="kn">from</span><span class="w"> </span><span class="nn">collections</span><span class="w"> </span><span class="kn">import</span> <span class="n">deque</span>
|
|
239
241
|
<span class="kn">from</span><span class="w"> </span><span class="nn">itertools</span><span class="w"> </span><span class="kn">import</span> <span class="n">product</span>
|
|
240
242
|
<span class="kn">from</span><span class="w"> </span><span class="nn">pathlib</span><span class="w"> </span><span class="kn">import</span> <span class="n">Path</span>
|
|
241
243
|
<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">Tuple</span>
|
|
242
|
-
<span class="kn">import</span><span class="w"> </span><span class="nn">warnings</span>
|
|
243
244
|
|
|
244
245
|
<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
246
|
<span class="kn">import</span><span class="w"> </span><span class="nn">pandas</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="nn">pd</span>
|
|
@@ -304,6 +305,8 @@
|
|
|
304
305
|
<span class="bp">self</span><span class="o">.</span><span class="n">_make_adjacency_mat</span><span class="p">()</span>
|
|
305
306
|
<span class="bp">self</span><span class="o">.</span><span class="n">_split_mols</span><span class="p">()</span>
|
|
306
307
|
<span class="bp">self</span><span class="o">.</span><span class="n">_put_unit_cell</span><span class="p">()</span>
|
|
308
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">_unwrap_molecules</span><span class="p">()</span>
|
|
309
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">_put_unit_cell</span><span class="p">()</span>
|
|
307
310
|
<span class="c1"># Remove duplicates again as they may occur when moving atoms into the unit cell</span>
|
|
308
311
|
<span class="bp">self</span><span class="o">.</span><span class="n">sym_symbols</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_duplicates</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sym_symbols</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">)</span>
|
|
309
312
|
<span class="bp">self</span><span class="o">.</span><span class="n">_make_adjacency_mat</span><span class="p">()</span>
|
|
@@ -315,6 +318,14 @@
|
|
|
315
318
|
<span class="sa">f</span><span class="s1">'Z value is not match. Z value in cif file is </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">_ref_z_value</span><span class="si">}</span><span class="s1">, but calculated Z value is </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">z_value</span><span class="si">}</span><span class="s1">.'</span>
|
|
316
319
|
<span class="p">)</span>
|
|
317
320
|
|
|
321
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_apply_minimum_image</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
322
|
+
<span class="w"> </span><span class="sd">"""Apply minimum image convention."""</span>
|
|
323
|
+
<span class="n">frac_diff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">[:,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:]</span>
|
|
324
|
+
<span class="n">frac_diff</span> <span class="o">=</span> <span class="n">frac_diff</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="n">frac_diff</span><span class="p">)</span>
|
|
325
|
+
<span class="n">cart_diff</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">frac_diff</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">lattice</span><span class="p">)</span>
|
|
326
|
+
<span class="n">distance</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">cart_diff</span><span class="p">,</span> <span class="n">axis</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
|
|
327
|
+
<span class="k">return</span> <span class="n">distance</span>
|
|
328
|
+
|
|
318
329
|
<span class="k">def</span><span class="w"> </span><span class="nf">_calc_lattice</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
319
330
|
<span class="w"> </span><span class="sd">"""Calculate lattice."""</span>
|
|
320
331
|
<span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">,</span> <span class="n">c</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cell_lengths</span>
|
|
@@ -368,7 +379,7 @@
|
|
|
368
379
|
<span class="n">num_atoms</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sym_symbols</span><span class="p">)</span>
|
|
369
380
|
<span class="bp">self</span><span class="o">.</span><span class="n">adjacency_mat</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">num_atoms</span><span class="p">,</span> <span class="n">num_atoms</span><span class="p">),</span> <span class="n">dtype</span><span class="o">=</span><span class="nb">bool</span><span class="p">)</span>
|
|
370
381
|
|
|
371
|
-
<span class="
|
|
382
|
+
<span class="n">distance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_apply_minimum_image</span><span class="p">()</span>
|
|
372
383
|
|
|
373
384
|
<span class="k">try</span><span class="p">:</span>
|
|
374
385
|
<span class="n">covalent_distance</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">COVALENT_RADII</span><span class="p">[</span><span class="n">symbol</span><span class="p">]</span> <span class="k">for</span> <span class="n">symbol</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_symbols</span><span class="p">])</span> \
|
|
@@ -376,7 +387,6 @@
|
|
|
376
387
|
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
|
|
377
388
|
<span class="k">raise</span> <span class="n">ElementPropertiesIsNotDefinedError</span><span class="p">(</span><span class="s1">'Element properties is not defined.'</span><span class="p">)</span>
|
|
378
389
|
|
|
379
|
-
<span class="n">distance</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="bp">self</span><span class="o">.</span><span class="n">cart_coords</span><span class="p">[:,</span> <span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">cart_coords</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">newaxis</span><span class="p">,</span> <span class="p">:,</span> <span class="p">:],</span> <span class="n">axis</span><span class="o">=-</span><span class="mi">1</span><span class="p">)</span>
|
|
380
390
|
<span class="bp">self</span><span class="o">.</span><span class="n">adjacency_mat</span><span class="p">[(</span><span class="n">distance</span> <span class="o"><=</span> <span class="n">covalent_distance</span> <span class="o">*</span> <span class="mf">1.3</span><span class="p">)</span> <span class="o">&</span> <span class="p">(</span><span class="n">distance</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)]</span> <span class="o">=</span> <span class="mi">1</span>
|
|
381
391
|
|
|
382
392
|
<span class="k">def</span><span class="w"> </span><span class="nf">_operate_sym</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span>
|
|
@@ -599,6 +609,35 @@
|
|
|
599
609
|
<span class="n">sub_matrix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">adjacency_mat</span><span class="p">[</span><span class="n">np</span><span class="o">.</span><span class="n">ix_</span><span class="p">(</span><span class="n">index_group</span><span class="p">,</span> <span class="n">index_group</span><span class="p">)]</span>
|
|
600
610
|
<span class="bp">self</span><span class="o">.</span><span class="n">sub_matrices</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">sub_matrix</span><span class="p">)</span>
|
|
601
611
|
|
|
612
|
+
<span class="k">def</span><span class="w"> </span><span class="nf">_unwrap_molecules</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
613
|
+
<span class="w"> </span><span class="sd">"""Unwrap molecules using the adjacency matrix based on the minimum image convention."""</span>
|
|
614
|
+
<span class="k">for</span> <span class="n">atom_group</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bonded_atoms</span><span class="p">:</span>
|
|
615
|
+
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">atom_group</span><span class="p">)</span> <span class="o"><=</span> <span class="mi">1</span><span class="p">:</span>
|
|
616
|
+
<span class="k">continue</span>
|
|
617
|
+
|
|
618
|
+
<span class="n">criterion_idx</span> <span class="o">=</span> <span class="n">atom_group</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
619
|
+
|
|
620
|
+
<span class="c1"># Depth-first search</span>
|
|
621
|
+
<span class="n">visited</span> <span class="o">=</span> <span class="p">{</span><span class="n">criterion_idx</span><span class="p">}</span>
|
|
622
|
+
<span class="n">stack</span> <span class="o">=</span> <span class="n">deque</span><span class="p">([</span><span class="n">criterion_idx</span><span class="p">])</span>
|
|
623
|
+
|
|
624
|
+
<span class="k">while</span> <span class="n">stack</span><span class="p">:</span>
|
|
625
|
+
<span class="n">current_idx</span> <span class="o">=</span> <span class="n">stack</span><span class="o">.</span><span class="n">popleft</span><span class="p">()</span>
|
|
626
|
+
<span class="n">current_coord</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">[</span><span class="n">current_idx</span><span class="p">]</span>
|
|
627
|
+
|
|
628
|
+
<span class="k">for</span> <span class="n">neighbor_idx</span> <span class="ow">in</span> <span class="n">atom_group</span><span class="p">:</span>
|
|
629
|
+
<span class="k">if</span> <span class="n">neighbor_idx</span> <span class="ow">in</span> <span class="n">visited</span><span class="p">:</span>
|
|
630
|
+
<span class="k">continue</span>
|
|
631
|
+
|
|
632
|
+
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">adjacency_mat</span><span class="p">[</span><span class="n">current_idx</span><span class="p">,</span> <span class="n">neighbor_idx</span><span class="p">]:</span>
|
|
633
|
+
<span class="c1"># Minimum image convention</span>
|
|
634
|
+
<span class="n">frac_diff</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">[</span><span class="n">neighbor_idx</span><span class="p">]</span> <span class="o">-</span> <span class="n">current_coord</span>
|
|
635
|
+
<span class="n">frac_diff</span> <span class="o">=</span> <span class="n">frac_diff</span> <span class="o">-</span> <span class="n">np</span><span class="o">.</span><span class="n">round</span><span class="p">(</span><span class="n">frac_diff</span><span class="p">)</span>
|
|
636
|
+
<span class="bp">self</span><span class="o">.</span><span class="n">sym_coords</span><span class="p">[</span><span class="n">neighbor_idx</span><span class="p">]</span> <span class="o">=</span> <span class="n">current_coord</span> <span class="o">+</span> <span class="n">frac_diff</span>
|
|
637
|
+
|
|
638
|
+
<span class="n">visited</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">neighbor_idx</span><span class="p">)</span>
|
|
639
|
+
<span class="n">stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">neighbor_idx</span><span class="p">)</span>
|
|
640
|
+
|
|
602
641
|
<div class="viewcode-block" id="CifReader.calc_cen_of_weight">
|
|
603
642
|
<a class="viewcode-back" href="../../../mcal.utils.html#mcal.utils.cif_reader.CifReader.calc_cen_of_weight">[docs]</a>
|
|
604
643
|
<span class="k">def</span><span class="w"> </span><span class="nf">calc_cen_of_weight</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">coordinates</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="o">-></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>
|
|
@@ -246,7 +246,7 @@
|
|
|
246
246
|
</section>
|
|
247
247
|
<section id="module-mcal.utils.cif_reader">
|
|
248
248
|
<span id="mcal-utils-cif-reader-module"></span><h2>mcal.utils.cif_reader module<a class="headerlink" href="#module-mcal.utils.cif_reader" title="Link to this heading">¶</a></h2>
|
|
249
|
-
<p>CifReader beta (2026/01/
|
|
249
|
+
<p>CifReader beta (2026/01/29)</p>
|
|
250
250
|
<dl class="py class">
|
|
251
251
|
<dt class="sig sig-object py" id="mcal.utils.cif_reader.CifReader">
|
|
252
252
|
<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">mcal.utils.cif_reader.</span></span><span class="sig-name descname"><span class="pre">CifReader</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">cif_path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/mcal/utils/cif_reader.html#CifReader"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#mcal.utils.cif_reader.CifReader" title="Link to this definition">¶</a></dt>
|
|
@@ -140,7 +140,7 @@ def main():
|
|
|
140
140
|
cif_path_without_ext = f'{directory}/{filename}'
|
|
141
141
|
|
|
142
142
|
print('----------------------------------------')
|
|
143
|
-
print(' mcal 0.1.
|
|
143
|
+
print(' mcal 0.1.6 (2026/01/29) by Matsui Lab. ')
|
|
144
144
|
print('----------------------------------------')
|
|
145
145
|
|
|
146
146
|
if args.read_pickle:
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
"""CifReader beta (2026/01/
|
|
1
|
+
"""CifReader beta (2026/01/29)"""
|
|
2
2
|
import os
|
|
3
3
|
import re
|
|
4
|
+
import warnings
|
|
5
|
+
from collections import deque
|
|
4
6
|
from itertools import product
|
|
5
7
|
from pathlib import Path
|
|
6
8
|
from typing import Dict, List, Literal, Tuple
|
|
7
|
-
import warnings
|
|
8
9
|
|
|
9
10
|
import numpy as np
|
|
10
11
|
import pandas as pd
|
|
@@ -67,6 +68,8 @@ class CifReader:
|
|
|
67
68
|
self._make_adjacency_mat()
|
|
68
69
|
self._split_mols()
|
|
69
70
|
self._put_unit_cell()
|
|
71
|
+
self._unwrap_molecules()
|
|
72
|
+
self._put_unit_cell()
|
|
70
73
|
# Remove duplicates again as they may occur when moving atoms into the unit cell
|
|
71
74
|
self.sym_symbols, self.sym_coords = self.remove_duplicates(self.sym_symbols, self.sym_coords)
|
|
72
75
|
self._make_adjacency_mat()
|
|
@@ -78,6 +81,14 @@ class CifReader:
|
|
|
78
81
|
f'Z value is not match. Z value in cif file is {self._ref_z_value}, but calculated Z value is {self.z_value}.'
|
|
79
82
|
)
|
|
80
83
|
|
|
84
|
+
def _apply_minimum_image(self):
|
|
85
|
+
"""Apply minimum image convention."""
|
|
86
|
+
frac_diff = self.sym_coords[:, np.newaxis, :] - self.sym_coords[np.newaxis, :, :]
|
|
87
|
+
frac_diff = frac_diff - np.round(frac_diff)
|
|
88
|
+
cart_diff = np.dot(frac_diff, self.lattice)
|
|
89
|
+
distance = np.linalg.norm(cart_diff, axis=-1)
|
|
90
|
+
return distance
|
|
91
|
+
|
|
81
92
|
def _calc_lattice(self):
|
|
82
93
|
"""Calculate lattice."""
|
|
83
94
|
a, b, c = self.cell_lengths
|
|
@@ -131,7 +142,7 @@ class CifReader:
|
|
|
131
142
|
num_atoms = len(self.sym_symbols)
|
|
132
143
|
self.adjacency_mat = np.zeros((num_atoms, num_atoms), dtype=bool)
|
|
133
144
|
|
|
134
|
-
|
|
145
|
+
distance = self._apply_minimum_image()
|
|
135
146
|
|
|
136
147
|
try:
|
|
137
148
|
covalent_distance = np.array([self.COVALENT_RADII[symbol] for symbol in self.sym_symbols]) \
|
|
@@ -139,7 +150,6 @@ class CifReader:
|
|
|
139
150
|
except KeyError:
|
|
140
151
|
raise ElementPropertiesIsNotDefinedError('Element properties is not defined.')
|
|
141
152
|
|
|
142
|
-
distance = np.linalg.norm(self.cart_coords[:, np.newaxis, :] - self.cart_coords[np.newaxis, :, :], axis=-1)
|
|
143
153
|
self.adjacency_mat[(distance <= covalent_distance * 1.3) & (distance != 0)] = 1
|
|
144
154
|
|
|
145
155
|
def _operate_sym(self) -> None:
|
|
@@ -362,6 +372,35 @@ class CifReader:
|
|
|
362
372
|
sub_matrix = self.adjacency_mat[np.ix_(index_group, index_group)]
|
|
363
373
|
self.sub_matrices.append(sub_matrix)
|
|
364
374
|
|
|
375
|
+
def _unwrap_molecules(self):
|
|
376
|
+
"""Unwrap molecules using the adjacency matrix based on the minimum image convention."""
|
|
377
|
+
for atom_group in self.bonded_atoms:
|
|
378
|
+
if len(atom_group) <= 1:
|
|
379
|
+
continue
|
|
380
|
+
|
|
381
|
+
criterion_idx = atom_group[0]
|
|
382
|
+
|
|
383
|
+
# Depth-first search
|
|
384
|
+
visited = {criterion_idx}
|
|
385
|
+
stack = deque([criterion_idx])
|
|
386
|
+
|
|
387
|
+
while stack:
|
|
388
|
+
current_idx = stack.popleft()
|
|
389
|
+
current_coord = self.sym_coords[current_idx]
|
|
390
|
+
|
|
391
|
+
for neighbor_idx in atom_group:
|
|
392
|
+
if neighbor_idx in visited:
|
|
393
|
+
continue
|
|
394
|
+
|
|
395
|
+
if self.adjacency_mat[current_idx, neighbor_idx]:
|
|
396
|
+
# Minimum image convention
|
|
397
|
+
frac_diff = self.sym_coords[neighbor_idx] - current_coord
|
|
398
|
+
frac_diff = frac_diff - np.round(frac_diff)
|
|
399
|
+
self.sym_coords[neighbor_idx] = current_coord + frac_diff
|
|
400
|
+
|
|
401
|
+
visited.add(neighbor_idx)
|
|
402
|
+
stack.append(neighbor_idx)
|
|
403
|
+
|
|
365
404
|
def calc_cen_of_weight(self, coordinates: NDArray[np.float64]) -> NDArray[np.float64]:
|
|
366
405
|
"""Calculate center of weight.
|
|
367
406
|
|
|
@@ -1244,7 +1244,7 @@ wheels = [
|
|
|
1244
1244
|
|
|
1245
1245
|
[[package]]
|
|
1246
1246
|
name = "yu-mcal"
|
|
1247
|
-
version = "0.1.
|
|
1247
|
+
version = "0.1.6"
|
|
1248
1248
|
source = { editable = "." }
|
|
1249
1249
|
dependencies = [
|
|
1250
1250
|
{ name = "numpy", version = "2.0.2", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|