mdkits 0.1a3__tar.gz → 0.1a6__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.

Potentially problematic release.


This version of mdkits might be problematic. Click here for more details.

Files changed (42) hide show
  1. {mdkits-0.1a3 → mdkits-0.1a6}/PKG-INFO +14 -14
  2. {mdkits-0.1a3 → mdkits-0.1a6}/README.md +13 -13
  3. {mdkits-0.1a3 → mdkits-0.1a6}/pyproject.toml +1 -1
  4. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/cmdline.py +3 -3
  5. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/convert.py +1 -1
  6. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/density.py +51 -18
  7. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/extract.py +1 -1
  8. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/log.py +1 -1
  9. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/plot.py +1 -1
  10. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/wrap.py +1 -1
  11. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/config/__init__.py +4 -4
  12. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/config/settings.yml +1 -1
  13. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/mdkits.py +2 -1
  14. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/numpy_geo.py +3 -2
  15. {mdkits-0.1a3 → mdkits-0.1a6}/LICENSE +0 -0
  16. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/__init__.py +0 -0
  17. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/,hb_distribution.py +0 -0
  18. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/,hb_distribution_down.py +0 -0
  19. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/adsorbate.py +0 -0
  20. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/build_bulk.py +0 -0
  21. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/build_interface.py +0 -0
  22. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/build_surface.py +0 -0
  23. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/cp2k_input.py +0 -0
  24. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/cube.py +0 -0
  25. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/cut_surface.py +0 -0
  26. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/data.py +0 -0
  27. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/density2.py +0 -0
  28. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/hartree_potential.py +0 -0
  29. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/hartree_potential_ave.py +0 -0
  30. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/hb.py +0 -0
  31. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/matplot.py +0 -0
  32. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/packmol_input.py +0 -0
  33. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/pdos.py +0 -0
  34. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/cli/supercell.py +0 -0
  35. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/__init__.py +0 -0
  36. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/arg_type.py +0 -0
  37. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/cp2k_input_parsing.py +0 -0
  38. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/encapsulated_ase.py +0 -0
  39. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/encapsulated_mda.py +0 -0
  40. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/fig_operation.py +0 -0
  41. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/os_operation.py +0 -0
  42. {mdkits-0.1a3 → mdkits-0.1a6}/src/mdkits/util/structure_parsing.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: mdkits
3
- Version: 0.1a3
3
+ Version: 0.1a6
4
4
  Summary: tools for md or dft
5
5
  License: MIT
6
6
  Keywords: molecular dynamics,density functional theory
@@ -24,9 +24,9 @@ Project-URL: Repository, https://github.com/jxxcr/mdkits
24
24
  Description-Content-Type: text/markdown
25
25
 
26
26
  # MD 轨迹分析脚本
27
- `mdtool` 提供了多种工具, 安装脚本:
27
+ `mdkits` 提供了多种工具, 安装脚本:
28
28
  ```bash
29
- pip install mdtool --upgrade
29
+ pip install mdkits --upgrade
30
30
  ```
31
31
  ### 密度分布
32
32
 
@@ -49,15 +49,15 @@ pip install mdtool --upgrade
49
49
  ### 位置归一化
50
50
  `wrap`用于将轨迹文件中的原子位置进行归一化处理, 如将`[FILENAME]`中的原子位置归一化到晶胞中, 并输出为`wrapped.xyz`, 默认从`cp2k`的输出文件`input_inp`中读取`ABC`和`ALPHA_BETA_GAMMA`信息作为晶胞参数:
51
51
  ```bash
52
- mdtool wrap [FILENAME]
52
+ mdkits wrap [FILENAME]
53
53
  ```
54
54
  或指定`cp2k`的输入文件:
55
55
  ```bash
56
- mdtool wrap [FILENAME] --cp2k_input_file setting.inp
56
+ mdkits wrap [FILENAME] --cp2k_input_file setting.inp
57
57
  ```
58
58
  或指定晶胞参数:
59
59
  ```bash
60
- mdtool wrap [FILENAME] --cell 10,10,10
60
+ mdkits wrap [FILENAME] --cell 10,10,10
61
61
  ```
62
62
  默认的`[FILENAME]`为`*-pos-1.xyz`
63
63
 
@@ -72,29 +72,29 @@ mdtool wrap [FILENAME] --cell 10,10,10
72
72
  ### 轨迹提取
73
73
  `extract`用于提取轨迹文件中的特定的帧, 如从`frames.xyz`中提取第 1000 帧到第 2000 帧的轨迹文件, 并输出为`1000-2000.xyz`, `-r`选项的参数与`Python`的切片语法一致:
74
74
  ```bash
75
- mdtool extract frames.xyz -r 1000:2000 -o 1000-2000.xyz
75
+ mdkits extract frames.xyz -r 1000:2000 -o 1000-2000.xyz
76
76
  ```
77
77
  或从`cp2k`的默认输出的轨迹文件`*-pos-1.xyz`文件中提取最后一帧输出为`extracted.xyz`(`extract`的默认行为):
78
78
  ```bash
79
- mdtool extract
79
+ mdkits extract
80
80
  ```
81
81
  或每50帧输出一个结构到`./coord`目录中, 同时调整输出格式为`cp2k`的`@INCLUDE coord.xyz`的形式:
82
82
  ```bash
83
- mdtool extract -cr ::50
83
+ mdkits extract -cr ::50
84
84
  ```
85
85
 
86
86
  ### 结构文件转换
87
87
  `convert`用于将结构文件从一种格式转换为另一种格式, 如将`structure.xyz`转换为`out.cif`(默认文件名为`out`), 对于不储存周期性边界条件的文件, 可以使用`--cell`选项指定`PBC`:
88
88
  ```bash
89
- mdtool convert -c structure.xyz --cell 10,10,10
89
+ mdkits convert -c structure.xyz --cell 10,10,10
90
90
  ```
91
91
  将`structure.cif`转换为`POSCAR`:
92
92
  ```bash
93
- mdtool convert -v structure.cif
93
+ mdkits convert -v structure.cif
94
94
  ```
95
95
  将`structure.cif`转换为`structure_xyz.xyz`:
96
96
  ```bash
97
- mdtool convert -c structure.cif -o structure_xyz
97
+ mdkits convert -c structure.cif -o structure_xyz
98
98
  ```
99
99
 
100
100
  ### 数据处理
@@ -153,9 +153,9 @@ figure2:
153
153
 
154
154
  `plot`可以同时处理多个`yaml`文件, 每个`yaml`文件可以包含多个绘图配置, `mode 1`和`mode 2`的绘图配置可以自动识别, 但是`error`模式需要而外指定, 如:
155
155
  ```bash
156
- mdtool plot *.yaml
156
+ mdkits plot *.yaml
157
157
  ```
158
158
  和:
159
159
  ```bash
160
- mdtool plot *.yaml --error
160
+ mdkits plot *.yaml --error
161
161
  ```
@@ -1,7 +1,7 @@
1
1
  # MD 轨迹分析脚本
2
- `mdtool` 提供了多种工具, 安装脚本:
2
+ `mdkits` 提供了多种工具, 安装脚本:
3
3
  ```bash
4
- pip install mdtool --upgrade
4
+ pip install mdkits --upgrade
5
5
  ```
6
6
  ### 密度分布
7
7
 
@@ -24,15 +24,15 @@ pip install mdtool --upgrade
24
24
  ### 位置归一化
25
25
  `wrap`用于将轨迹文件中的原子位置进行归一化处理, 如将`[FILENAME]`中的原子位置归一化到晶胞中, 并输出为`wrapped.xyz`, 默认从`cp2k`的输出文件`input_inp`中读取`ABC`和`ALPHA_BETA_GAMMA`信息作为晶胞参数:
26
26
  ```bash
27
- mdtool wrap [FILENAME]
27
+ mdkits wrap [FILENAME]
28
28
  ```
29
29
  或指定`cp2k`的输入文件:
30
30
  ```bash
31
- mdtool wrap [FILENAME] --cp2k_input_file setting.inp
31
+ mdkits wrap [FILENAME] --cp2k_input_file setting.inp
32
32
  ```
33
33
  或指定晶胞参数:
34
34
  ```bash
35
- mdtool wrap [FILENAME] --cell 10,10,10
35
+ mdkits wrap [FILENAME] --cell 10,10,10
36
36
  ```
37
37
  默认的`[FILENAME]`为`*-pos-1.xyz`
38
38
 
@@ -47,29 +47,29 @@ mdtool wrap [FILENAME] --cell 10,10,10
47
47
  ### 轨迹提取
48
48
  `extract`用于提取轨迹文件中的特定的帧, 如从`frames.xyz`中提取第 1000 帧到第 2000 帧的轨迹文件, 并输出为`1000-2000.xyz`, `-r`选项的参数与`Python`的切片语法一致:
49
49
  ```bash
50
- mdtool extract frames.xyz -r 1000:2000 -o 1000-2000.xyz
50
+ mdkits extract frames.xyz -r 1000:2000 -o 1000-2000.xyz
51
51
  ```
52
52
  或从`cp2k`的默认输出的轨迹文件`*-pos-1.xyz`文件中提取最后一帧输出为`extracted.xyz`(`extract`的默认行为):
53
53
  ```bash
54
- mdtool extract
54
+ mdkits extract
55
55
  ```
56
56
  或每50帧输出一个结构到`./coord`目录中, 同时调整输出格式为`cp2k`的`@INCLUDE coord.xyz`的形式:
57
57
  ```bash
58
- mdtool extract -cr ::50
58
+ mdkits extract -cr ::50
59
59
  ```
60
60
 
61
61
  ### 结构文件转换
62
62
  `convert`用于将结构文件从一种格式转换为另一种格式, 如将`structure.xyz`转换为`out.cif`(默认文件名为`out`), 对于不储存周期性边界条件的文件, 可以使用`--cell`选项指定`PBC`:
63
63
  ```bash
64
- mdtool convert -c structure.xyz --cell 10,10,10
64
+ mdkits convert -c structure.xyz --cell 10,10,10
65
65
  ```
66
66
  将`structure.cif`转换为`POSCAR`:
67
67
  ```bash
68
- mdtool convert -v structure.cif
68
+ mdkits convert -v structure.cif
69
69
  ```
70
70
  将`structure.cif`转换为`structure_xyz.xyz`:
71
71
  ```bash
72
- mdtool convert -c structure.cif -o structure_xyz
72
+ mdkits convert -c structure.cif -o structure_xyz
73
73
  ```
74
74
 
75
75
  ### 数据处理
@@ -128,9 +128,9 @@ figure2:
128
128
 
129
129
  `plot`可以同时处理多个`yaml`文件, 每个`yaml`文件可以包含多个绘图配置, `mode 1`和`mode 2`的绘图配置可以自动识别, 但是`error`模式需要而外指定, 如:
130
130
  ```bash
131
- mdtool plot *.yaml
131
+ mdkits plot *.yaml
132
132
  ```
133
133
  和:
134
134
  ```bash
135
- mdtool plot *.yaml --error
135
+ mdkits plot *.yaml --error
136
136
  ```
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mdkits"
3
- version = "0.1.a3"
3
+ version = "0.1.a6"
4
4
  description = "tools for md or dft"
5
5
  readme = "README.md"
6
6
  authors = ["jxxcr <jixxcr@qq.com>"]
@@ -2,9 +2,9 @@
2
2
  import click
3
3
  from click import Context
4
4
 
5
- from mdtool import __version__
6
- from mdtool.config import settings
7
- from mdtool.log import init_log
5
+ from mdkits import __version__
6
+ from mdkits.config import settings
7
+ from mdkits.log import init_log
8
8
 
9
9
 
10
10
  @click.group(invoke_without_command=True)
@@ -3,7 +3,7 @@
3
3
  from ase.io import write
4
4
  import click
5
5
  import os
6
- from mdtool.util import encapsulated_ase, arg_type
6
+ from mdkits.util import encapsulated_ase, arg_type
7
7
 
8
8
 
9
9
  @click.command(name='convert')
@@ -5,13 +5,18 @@ import click
5
5
  import MDAnalysis
6
6
  from MDAnalysis import Universe
7
7
  from MDAnalysis.analysis.base import AnalysisBase
8
- from mdtool.util import cp2k_input_parsing, numpy_geo, encapsulated_mda
8
+ from mdkits.util import (
9
+ arg_type,
10
+ numpy_geo,
11
+ encapsulated_mda,
12
+ os_operation,
13
+ )
9
14
  import warnings
10
15
  warnings.filterwarnings("ignore")
11
16
 
12
17
 
13
18
  class Density_distribution(AnalysisBase):
14
- def __init__(self, filename, cell, o, distance_judg, angle_judg, dt=0.001, bin_size=0.2, return_index=False):
19
+ def __init__(self, filename, cell, o, element, density, update_water, distance_judg, angle_judg, surface, dt=0.001, bin_size=0.2, return_index=False):
15
20
  u = Universe(filename)
16
21
  u.trajectory.ts.dt = dt
17
22
  u.dimensions = cell
@@ -25,21 +30,31 @@ class Density_distribution(AnalysisBase):
25
30
  self.bin_size = bin_size
26
31
  self.frame_count = 0
27
32
  self.return_index = return_index
33
+ self.surface = surface
34
+ self.element = element
35
+ self.density = density
36
+ self.update_water = update_water
37
+
38
+ if surface is not None:
39
+ self.surface_group = self.atomgroup.select_atoms(f"{surface}")
40
+ else:
41
+ self.surface_group = False
28
42
 
29
43
  super(Density_distribution, self).__init__(self.atomgroup.universe.trajectory, verbose=True)
30
44
 
31
45
  def _prepare(self):
32
46
  self.bin_num = int(self.u.dimensions[2] / self.bin_size) + 2
33
47
  self.density_distribution = np.zeros(self.bin_num, dtype=np.float64)
34
- if self.surface:
35
- self.surface_pos = ()
48
+ if self.surface_group:
49
+ self.surface_pos = np.zeros(2)
36
50
 
37
51
  def _append(self, z):
38
52
  bins = np.floor(z / self.bin_size).astype(int) + 1
39
53
  np.add.at(self.density_distribution, bins, 1)
40
54
 
55
+
41
56
  def _single_frame(self):
42
- if self.water:
57
+ if self.update_water:
43
58
  o_group = self.atomgroup.select_atoms("name O")
44
59
  h_group = self.atomgroup.select_atoms("name H")
45
60
 
@@ -48,40 +63,58 @@ class Density_distribution(AnalysisBase):
48
63
  self._append(o.positions[:, 2])
49
64
 
50
65
  else:
51
- group = self.atomgroup.select_atoms(f"name {self.element}")
66
+ group = self.atomgroup.select_atoms(f"{self.element}")
52
67
  self._append(group.positions[:, 2])
53
68
 
54
- self.
69
+ if self.surface_group:
70
+ lower_z, upper_z = numpy_geo.find_surface(self.surface_group.positions[:, 2], layer_tolerance=1, surface_tolerance=5)
71
+ self.surface_pos[0] += lower_z
72
+ self.surface_pos[1] += upper_z
73
+
55
74
  self.frame_count += 1
56
75
 
57
76
  def _conclude(self):
58
77
  if self.frame_count > 0:
59
78
  V = self.u.dimensions[0] * self.u.dimensions[1] * self.bin_size
60
79
 
61
- if self.water:
62
- density_distribution = (self.density_distribution * (15.999+1.008*2) * 1.660539 / V) / self.frame_count
80
+ if self.density:
81
+ density_distribution = (self.density_distribution * self.density * 1.660539 / V) / self.frame_count
63
82
  else:
64
83
  density_distribution = (self.density_distribution * (10000/6.02) / V) / self.frame_count
65
84
 
66
85
  bins_z = np.arange(len(self.density_distribution)) * self.bin_size
67
86
 
68
- surface = self.find_surface(self.atomgroup.select_atoms("name Pt"))
87
+ if self.surface:
88
+ lower_z = self.surface_pos[0] / self.frame_count
89
+ upper_z = self.surface_pos[1] / self.frame_count
69
90
 
70
- lower_z, upper_z = surface
71
- mask = (bins_z >= lower_z) & (bins_z <= upper_z)
72
- filtered_bins_z = bins_z[mask] - lower_z
73
- filtered_density_distribution = density_distribution[mask]
74
- conbined_data = np.column_stack((filtered_bins_z, filtered_density_distribution))
91
+ mask = (bins_z >= lower_z) & (bins_z <= upper_z)
92
+ filtered_bins_z = bins_z[mask] - lower_z
93
+ filtered_density_distribution = density_distribution[mask]
94
+
95
+ conbined_data = np.column_stack((filtered_bins_z, filtered_density_distribution))
96
+ else:
97
+ conbined_data = np.column_stack((bins_z, density_distribution))
75
98
 
76
99
  np.savetxt(self.o, conbined_data, header="Z\tdensity", fmt='%.5f', delimiter='\t')
77
100
 
78
101
  @click.command(name='density')
79
102
  @click.argument('filename', type=click.Path(exists=True), default=os_operation.default_file_name('*-pos-1.xyz', last=True))
80
- @click.option('--cell', type=arg_type.Cell, help='set xyz file cell, --cell x,y,z,a,b,c')
81
103
  @click.option('--cell', type=arg_type.Cell, help='set cell from cp2k input file or a list of lattice: --cell x,y,z or x,y,z,a,b,c', default='input.inp', show_default=True)
104
+ @click.option('--element', type=str, help='element to analysis')
105
+ @click.option('--density', type=float, help='output density unit (g/cm3), should give atomic mass of element, else is concentration unit (mol/L)')
82
106
  @click.option('-o', type=str, help='output file name', default='density.dat', show_default=True)
83
- def main(filename, cell, o):
84
- density_dist = Density_distribution(filename, cell, o=o)
107
+ @click.option('--update_water', is_flag=True, help='update water with distance or angle judgment')
108
+ @click.option('--distance', type=float, help='update water distance judgment', default=1.2, show_default=True)
109
+ @click.option('--angle', type=(float), help='update water angle judgment')
110
+ @click.option('--surface', type=str, help='surface element')
111
+ def main(filename, cell, o, element, density, update_water, distance, angle, surface):
112
+ """
113
+ analysis density or concentration of element in a trajectory file
114
+ """
115
+
116
+ density_dist = Density_distribution(filename, cell, o=o, distance_judg=distance, angle_judg=angle, element=element, density=density, update_water=update_water, surface=surface)
117
+
85
118
  density_dist.run()
86
119
 
87
120
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  import os
6
6
  import click
7
- from mdtool.util import os_operation, arg_type
7
+ from mdkits.util import os_operation, arg_type
8
8
  import MDAnalysis
9
9
  from MDAnalysis import Universe
10
10
 
@@ -3,7 +3,7 @@ import logging
3
3
  import os
4
4
  from logging.config import dictConfig
5
5
 
6
- from mdtool.config import settings
6
+ from mdkits.config import settings
7
7
 
8
8
  os.makedirs(settings.LOGPATH, exist_ok=True)
9
9
 
@@ -6,7 +6,7 @@ from matplotlib import pyplot as plt
6
6
  from matplotlib import rcParams
7
7
  import matplotlib.ticker as ticker
8
8
  import yaml, click
9
- from mdtool.util import fig_operation
9
+ from mdkits.util import fig_operation
10
10
 
11
11
  DEFAULT_CONFIG = {
12
12
  'data': {},
@@ -3,7 +3,7 @@
3
3
  import os
4
4
  from MDAnalysis import Universe
5
5
  import MDAnalysis, click
6
- from mdtool.util import (
6
+ from mdkits.util import (
7
7
  arg_type,
8
8
  os_operation,
9
9
  cp2k_input_parsing
@@ -18,17 +18,17 @@ _settings_files = [
18
18
 
19
19
  # User configuration. It will be created automatically by the pip installer .
20
20
  _external_files = [
21
- Path(sys.prefix, 'etc', 'mdtool', 'settings.yml')
21
+ Path(sys.prefix, 'etc', 'mdkits', 'settings.yml')
22
22
  ]
23
23
 
24
24
 
25
25
  settings = Dynaconf(
26
- # Set env `MDTOOL_FOO='bar'`,use `settings.FOO` .
27
- envvar_prefix='MDTOOL',
26
+ # Set env `mdkits_FOO='bar'`,use `settings.FOO` .
27
+ envvar_prefix='mdkits',
28
28
  settings_files=_settings_files, # load user configuration.
29
29
  # environments=True, # Enable multi-level configuration,eg: default, development, production
30
30
  load_dotenv=True, # Enable load .env
31
- # env_switcher='MDTOOL_ENV',
31
+ # env_switcher='mdkits_ENV',
32
32
  lowercase_read=False, # If true, can't use `settings.foo`, but can only use `settings.FOO`
33
33
  includes=_external_files, # Customs settings.
34
34
  base_dir=_base_dir, # `settings.BASE_DIR`
@@ -1,4 +1,4 @@
1
1
  verbose: false
2
2
  debug: false
3
3
  loglevel: warning
4
- logpath: /tmp/mdtool
4
+ logpath: /tmp/mdkits
@@ -5,6 +5,7 @@ from mdkits.cli import (
5
5
  extract,
6
6
  data,
7
7
  plot,
8
+ density
8
9
  )
9
10
 
10
11
 
@@ -12,7 +13,6 @@ from mdkits.cli import (
12
13
  @click.pass_context
13
14
  @click.version_option()
14
15
  def cli(ctx):
15
- print(ctx)
16
16
  """tools for md or dft"""
17
17
  pass
18
18
 
@@ -22,6 +22,7 @@ cli.add_command(wrap.main)
22
22
  cli.add_command(extract.main)
23
23
  cli.add_command(data.main)
24
24
  cli.add_command(plot.main)
25
+ cli.add_command(density.main)
25
26
 
26
27
 
27
28
  if __name__ == '__main__':
@@ -97,7 +97,7 @@ def unwrap(atom1, atom2, coefficients, max=0, total=False):
97
97
 
98
98
 
99
99
  def find_surface(surface_group:np.ndarray, layer_tolerance=1, surface_tolerance=5):
100
- sort_group = surface_group.sort()
100
+ sort_group = np.sort(surface_group)
101
101
  layer_mean = []
102
102
  current_layer = [sort_group[0]]
103
103
  for i in range(1, len(sort_group)):
@@ -106,6 +106,7 @@ def find_surface(surface_group:np.ndarray, layer_tolerance=1, surface_tolerance=
106
106
  else:
107
107
  layer_mean.append(np.mean(current_layer))
108
108
  current_layer = [sort_group[i]]
109
+ layer_mean.append(np.mean(current_layer))
109
110
 
110
111
  if len(current_layer) == 1:
111
112
  return layer_mean[0]
@@ -115,4 +116,4 @@ def find_surface(surface_group:np.ndarray, layer_tolerance=1, surface_tolerance=
115
116
  index = np.argmax(diff > 5)
116
117
  return (layer_mean[index], layer_mean[index + 1])
117
118
  else:
118
- return layer_mean[-1]
119
+ return (layer_mean[-1], layer_mean[0])
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes