mdkits 0.1a4__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.1a4 → mdkits-0.1a6}/PKG-INFO +1 -1
  2. {mdkits-0.1a4 → mdkits-0.1a6}/pyproject.toml +1 -1
  3. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/density.py +51 -18
  4. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/mdkits.py +2 -1
  5. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/numpy_geo.py +3 -2
  6. {mdkits-0.1a4 → mdkits-0.1a6}/LICENSE +0 -0
  7. {mdkits-0.1a4 → mdkits-0.1a6}/README.md +0 -0
  8. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/__init__.py +0 -0
  9. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/,hb_distribution.py +0 -0
  10. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/,hb_distribution_down.py +0 -0
  11. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/adsorbate.py +0 -0
  12. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/build_bulk.py +0 -0
  13. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/build_interface.py +0 -0
  14. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/build_surface.py +0 -0
  15. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/cmdline.py +0 -0
  16. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/convert.py +0 -0
  17. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/cp2k_input.py +0 -0
  18. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/cube.py +0 -0
  19. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/cut_surface.py +0 -0
  20. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/data.py +0 -0
  21. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/density2.py +0 -0
  22. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/extract.py +0 -0
  23. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/hartree_potential.py +0 -0
  24. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/hartree_potential_ave.py +0 -0
  25. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/hb.py +0 -0
  26. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/log.py +0 -0
  27. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/matplot.py +0 -0
  28. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/packmol_input.py +0 -0
  29. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/pdos.py +0 -0
  30. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/plot.py +0 -0
  31. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/supercell.py +0 -0
  32. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/cli/wrap.py +0 -0
  33. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/config/__init__.py +0 -0
  34. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/config/settings.yml +0 -0
  35. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/__init__.py +0 -0
  36. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/arg_type.py +0 -0
  37. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/cp2k_input_parsing.py +0 -0
  38. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/encapsulated_ase.py +0 -0
  39. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/encapsulated_mda.py +0 -0
  40. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/fig_operation.py +0 -0
  41. {mdkits-0.1a4 → mdkits-0.1a6}/src/mdkits/util/os_operation.py +0 -0
  42. {mdkits-0.1a4 → 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.1a4
3
+ Version: 0.1a6
4
4
  Summary: tools for md or dft
5
5
  License: MIT
6
6
  Keywords: molecular dynamics,density functional theory
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "mdkits"
3
- version = "0.1.a4"
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>"]
@@ -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 mdkits.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
 
@@ -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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes