MoleditPy 2.2.0__py3-none-any.whl → 2.2.0a1__py3-none-any.whl
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.
- moleditpy/modules/constants.py +1 -1
- moleditpy/modules/main_window_main_init.py +13 -31
- moleditpy/modules/main_window_ui_manager.py +2 -21
- moleditpy/modules/plugin_interface.py +10 -1
- moleditpy/modules/plugin_manager.py +3 -0
- moleditpy/plugins/Analysis/ms_spectrum_neo.py +919 -0
- moleditpy/plugins/File/animated_xyz_giffer.py +583 -0
- moleditpy/plugins/File/cube_viewer.py +689 -0
- moleditpy/plugins/File/gaussian_fchk_freq_analyzer.py +1148 -0
- moleditpy/plugins/File/mapped_cube_viewer.py +552 -0
- moleditpy/plugins/File/orca_out_freq_analyzer.py +1226 -0
- moleditpy/plugins/File/paste_xyz.py +336 -0
- moleditpy/plugins/Input Generator/gaussian_input_generator_neo.py +930 -0
- moleditpy/plugins/Input Generator/orca_input_generator_neo.py +1028 -0
- moleditpy/plugins/Input Generator/orca_xyz2inp_gui.py +286 -0
- moleditpy/plugins/Optimization/all-trans_optimizer.py +65 -0
- moleditpy/plugins/Optimization/complex_molecule_untangler.py +268 -0
- moleditpy/plugins/Optimization/conf_search.py +224 -0
- moleditpy/plugins/Utility/atom_colorizer.py +547 -0
- moleditpy/plugins/Utility/console.py +163 -0
- moleditpy/plugins/Utility/pubchem_ressolver.py +244 -0
- moleditpy/plugins/Utility/vdw_radii_overlay.py +303 -0
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/METADATA +1 -1
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/RECORD +28 -11
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/WHEEL +0 -0
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/entry_points.txt +0 -0
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/licenses/LICENSE +0 -0
- {moleditpy-2.2.0.dist-info → moleditpy-2.2.0a1.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
|
|
2
|
+
import os
|
|
3
|
+
import json
|
|
4
|
+
import traceback
|
|
5
|
+
import pyvista as pv
|
|
6
|
+
import numpy as np
|
|
7
|
+
import functools
|
|
8
|
+
import types
|
|
9
|
+
from PyQt6.QtWidgets import (QDialog, QVBoxLayout, QLabel,
|
|
10
|
+
QSlider, QHBoxLayout, QPushButton)
|
|
11
|
+
from PyQt6.QtGui import QAction
|
|
12
|
+
from PyQt6.QtCore import Qt, QTimer
|
|
13
|
+
|
|
14
|
+
# Try to import VDW radii from constants, fallback if needed
|
|
15
|
+
try:
|
|
16
|
+
from moleditpy.modules.constants import pt, CPK_COLORS_PV
|
|
17
|
+
except ImportError:
|
|
18
|
+
try:
|
|
19
|
+
from modules.constants import pt, CPK_COLORS_PV
|
|
20
|
+
except ImportError:
|
|
21
|
+
try:
|
|
22
|
+
from rdkit import Chem
|
|
23
|
+
pt = Chem.GetPeriodicTable()
|
|
24
|
+
except Exception:
|
|
25
|
+
pt = None
|
|
26
|
+
CPK_COLORS_PV = {} # Last resort fallback
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# Plugin Metadata
|
|
30
|
+
__version__="2025.12.17"
|
|
31
|
+
__author__="HiroYokoyama"
|
|
32
|
+
PLUGIN_NAME = "VDW Radii Overlay"
|
|
33
|
+
SETTINGS_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), "vdw_radii_overlay.json")
|
|
34
|
+
|
|
35
|
+
# Global State
|
|
36
|
+
_config_window = None
|
|
37
|
+
_vdw_settings = {
|
|
38
|
+
"occupancy": 0.3 # Opacity (0.0 - 1.0)
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
def load_settings():
|
|
42
|
+
global _vdw_settings
|
|
43
|
+
try:
|
|
44
|
+
if os.path.exists(SETTINGS_FILE):
|
|
45
|
+
with open(SETTINGS_FILE, 'r') as f:
|
|
46
|
+
saved = json.load(f)
|
|
47
|
+
# Filter to only keep occupancy
|
|
48
|
+
if "occupancy" in saved:
|
|
49
|
+
_vdw_settings["occupancy"] = float(saved["occupancy"])
|
|
50
|
+
except Exception as e:
|
|
51
|
+
print(f"Error loading VDW settings: {e}")
|
|
52
|
+
|
|
53
|
+
def save_settings():
|
|
54
|
+
try:
|
|
55
|
+
with open(SETTINGS_FILE, 'w') as f:
|
|
56
|
+
json.dump(_vdw_settings, f, indent=4)
|
|
57
|
+
except Exception as e:
|
|
58
|
+
print(f"Error saving VDW settings: {e}")
|
|
59
|
+
|
|
60
|
+
class VDWConfigWindow(QDialog):
|
|
61
|
+
def __init__(self, main_window):
|
|
62
|
+
super().__init__(parent=main_window)
|
|
63
|
+
self.mw = main_window
|
|
64
|
+
self.setWindowTitle("VDW Overlay Settings")
|
|
65
|
+
self.setModal(False)
|
|
66
|
+
self.resize(300, 100)
|
|
67
|
+
self.init_ui()
|
|
68
|
+
|
|
69
|
+
def init_ui(self):
|
|
70
|
+
layout = QVBoxLayout()
|
|
71
|
+
|
|
72
|
+
# Occupancy Slider
|
|
73
|
+
occ_layout = QHBoxLayout()
|
|
74
|
+
occ_layout.addWidget(QLabel("Occupancy:"))
|
|
75
|
+
self.slider_occ = QSlider(Qt.Orientation.Horizontal)
|
|
76
|
+
self.slider_occ.setRange(0, 100)
|
|
77
|
+
current_occ = int(_vdw_settings.get("occupancy", 0.3) * 100)
|
|
78
|
+
self.slider_occ.setValue(current_occ)
|
|
79
|
+
self.slider_occ.valueChanged.connect(self.on_occupancy_changed)
|
|
80
|
+
occ_layout.addWidget(self.slider_occ)
|
|
81
|
+
self.lbl_occ_val = QLabel(f"{current_occ}%")
|
|
82
|
+
occ_layout.addWidget(self.lbl_occ_val)
|
|
83
|
+
layout.addLayout(occ_layout)
|
|
84
|
+
|
|
85
|
+
# Close Button
|
|
86
|
+
btn_close = QPushButton("Close")
|
|
87
|
+
btn_close.clicked.connect(self.close)
|
|
88
|
+
layout.addWidget(btn_close)
|
|
89
|
+
|
|
90
|
+
self.setLayout(layout)
|
|
91
|
+
|
|
92
|
+
def on_occupancy_changed(self, value):
|
|
93
|
+
opacity = value / 100.0
|
|
94
|
+
_vdw_settings["occupancy"] = opacity
|
|
95
|
+
self.lbl_occ_val.setText(f"{value}%")
|
|
96
|
+
save_settings()
|
|
97
|
+
self.update_view()
|
|
98
|
+
|
|
99
|
+
def update_view(self):
|
|
100
|
+
# Trigger redraw if we are in the correct mode
|
|
101
|
+
if hasattr(self.mw, 'current_3d_style') and self.mw.current_3d_style == "vdw_overlay":
|
|
102
|
+
if getattr(self.mw, 'current_mol', None):
|
|
103
|
+
# Trigger redraw
|
|
104
|
+
if hasattr(self.mw, 'draw_molecule_3d'):
|
|
105
|
+
self.mw.draw_molecule_3d(self.mw.current_mol)
|
|
106
|
+
|
|
107
|
+
def draw_vdw_overlay(mw, mol):
|
|
108
|
+
"""
|
|
109
|
+
Callback for drawing the VDW overlay style.
|
|
110
|
+
Registered via context.register_3d_style.
|
|
111
|
+
"""
|
|
112
|
+
# 1. Draw standard Ball & Stick
|
|
113
|
+
# Attempt to locate the standard draw method
|
|
114
|
+
draw_std = None
|
|
115
|
+
if hasattr(mw, 'main_window_view_3d') and hasattr(mw.main_window_view_3d, 'draw_standard_3d_style'):
|
|
116
|
+
draw_std = mw.main_window_view_3d.draw_standard_3d_style
|
|
117
|
+
elif hasattr(mw, 'view3d') and hasattr(mw.view3d, 'draw_standard_3d_style'):
|
|
118
|
+
draw_std = mw.view3d.draw_standard_3d_style
|
|
119
|
+
|
|
120
|
+
if draw_std:
|
|
121
|
+
draw_std(mol, style_override='ball_and_stick')
|
|
122
|
+
else:
|
|
123
|
+
print("VDW Plugin Error: could not find draw_standard_3d_style")
|
|
124
|
+
return
|
|
125
|
+
|
|
126
|
+
# 2. Draw VDW Surface Overlay
|
|
127
|
+
if mol and mol.GetNumAtoms() > 0:
|
|
128
|
+
try:
|
|
129
|
+
positions = []
|
|
130
|
+
radii = []
|
|
131
|
+
atom_colors = []
|
|
132
|
+
|
|
133
|
+
# Use custom colors if available, otherwise CPK
|
|
134
|
+
custom_map = getattr(mw, 'custom_atom_colors', {})
|
|
135
|
+
|
|
136
|
+
if mol.GetNumConformers() > 0:
|
|
137
|
+
conf = mol.GetConformer()
|
|
138
|
+
for i in range(mol.GetNumAtoms()):
|
|
139
|
+
atom = mol.GetAtomWithIdx(i)
|
|
140
|
+
pos = conf.GetAtomPosition(i)
|
|
141
|
+
positions.append([pos.x, pos.y, pos.z])
|
|
142
|
+
|
|
143
|
+
sym = atom.GetSymbol()
|
|
144
|
+
# GetRvdw returns standard VDW radius.
|
|
145
|
+
r = 1.5 # Default
|
|
146
|
+
if pt:
|
|
147
|
+
r = pt.GetRvdw(atom.GetAtomicNum())
|
|
148
|
+
radii.append(r)
|
|
149
|
+
|
|
150
|
+
# Color handling
|
|
151
|
+
if i in custom_map:
|
|
152
|
+
c = custom_map[i]
|
|
153
|
+
# Normalize 0-255 to 0-1 if needed
|
|
154
|
+
if any(x > 1.0 for x in c):
|
|
155
|
+
c = [x/255.0 for x in c]
|
|
156
|
+
else:
|
|
157
|
+
c = CPK_COLORS_PV.get(sym, [0.8, 0.8, 0.8]) # Default grey if missing
|
|
158
|
+
atom_colors.append(c)
|
|
159
|
+
|
|
160
|
+
if positions:
|
|
161
|
+
positions = np.array(positions)
|
|
162
|
+
radii = np.array(radii)
|
|
163
|
+
atom_colors = np.array(atom_colors)
|
|
164
|
+
|
|
165
|
+
# --- Generate Merged Surface (SDF) ---
|
|
166
|
+
|
|
167
|
+
# 1. Define Grid Bounds
|
|
168
|
+
padding = radii.max() + 1.0
|
|
169
|
+
min_bounds = positions.min(axis=0) - padding
|
|
170
|
+
max_bounds = positions.max(axis=0) + padding
|
|
171
|
+
|
|
172
|
+
# Resolution (voxel size in Angstroms)
|
|
173
|
+
spacing = (0.125, 0.125, 0.125)
|
|
174
|
+
|
|
175
|
+
dims = np.ceil((max_bounds - min_bounds) / spacing).astype(int)
|
|
176
|
+
|
|
177
|
+
grid = pv.ImageData()
|
|
178
|
+
grid.dimensions = dims
|
|
179
|
+
grid.origin = min_bounds
|
|
180
|
+
grid.spacing = spacing
|
|
181
|
+
|
|
182
|
+
grid_points = grid.points
|
|
183
|
+
n_points = grid_points.shape[0]
|
|
184
|
+
values = np.empty(n_points)
|
|
185
|
+
|
|
186
|
+
# Process in chunks of 100k points
|
|
187
|
+
chunk_size = 100000
|
|
188
|
+
for start_idx in range(0, n_points, chunk_size):
|
|
189
|
+
end_idx = min(start_idx + chunk_size, n_points)
|
|
190
|
+
chunk_pts = grid_points[start_idx:end_idx]
|
|
191
|
+
|
|
192
|
+
d = np.linalg.norm(chunk_pts[:, np.newaxis, :] - positions[np.newaxis, :, :], axis=2)
|
|
193
|
+
d_surface = d - radii[np.newaxis, :]
|
|
194
|
+
values[start_idx:end_idx] = d_surface.min(axis=1)
|
|
195
|
+
|
|
196
|
+
grid.point_data["values"] = values
|
|
197
|
+
|
|
198
|
+
# 3. Contour at iso-value 0 to get the surface
|
|
199
|
+
mesh = grid.contour([0], scalars="values")
|
|
200
|
+
|
|
201
|
+
# 4. Map Colors to Surface Vertices
|
|
202
|
+
mesh_points = mesh.points
|
|
203
|
+
if mesh_points.shape[0] > 0:
|
|
204
|
+
n_mesh_pts = mesh_points.shape[0]
|
|
205
|
+
mesh_colors = np.zeros((n_mesh_pts, 3))
|
|
206
|
+
|
|
207
|
+
chunk_size = 50000
|
|
208
|
+
for start_idx in range(0, n_mesh_pts, chunk_size):
|
|
209
|
+
end_idx = min(start_idx + chunk_size, n_mesh_pts)
|
|
210
|
+
chunk_pts = mesh_points[start_idx:end_idx]
|
|
211
|
+
|
|
212
|
+
d_center = np.linalg.norm(chunk_pts[:, np.newaxis, :] - positions[np.newaxis, :, :], axis=2)
|
|
213
|
+
d_surface = d_center - radii[np.newaxis, :]
|
|
214
|
+
nearest_atom_indices = np.argmin(d_surface, axis=1)
|
|
215
|
+
mesh_colors[start_idx:end_idx] = atom_colors[nearest_atom_indices]
|
|
216
|
+
|
|
217
|
+
mesh.point_data["AtomColors"] = mesh_colors
|
|
218
|
+
|
|
219
|
+
opacity = _vdw_settings.get("occupancy", 0.3)
|
|
220
|
+
|
|
221
|
+
# Assume mw.plotter is available
|
|
222
|
+
if hasattr(mw, 'plotter'):
|
|
223
|
+
mw.plotter.add_mesh(
|
|
224
|
+
mesh,
|
|
225
|
+
scalars="AtomColors",
|
|
226
|
+
rgb=True,
|
|
227
|
+
opacity=opacity,
|
|
228
|
+
smooth_shading=True,
|
|
229
|
+
specular=0.2,
|
|
230
|
+
name="vdw_overlay_mesh"
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
except Exception as e:
|
|
234
|
+
print(f"VDW Overlay Error: {e}")
|
|
235
|
+
traceback.print_exc()
|
|
236
|
+
|
|
237
|
+
def run(mw):
|
|
238
|
+
global _config_window
|
|
239
|
+
load_settings()
|
|
240
|
+
|
|
241
|
+
if _config_window is None:
|
|
242
|
+
_config_window = VDWConfigWindow(mw)
|
|
243
|
+
_config_window.finished.connect(lambda: _cleanup_config())
|
|
244
|
+
|
|
245
|
+
_config_window.show()
|
|
246
|
+
_config_window.raise_()
|
|
247
|
+
_config_window.activateWindow()
|
|
248
|
+
|
|
249
|
+
def initialize(context):
|
|
250
|
+
"""
|
|
251
|
+
New Plugin System Entry Point
|
|
252
|
+
"""
|
|
253
|
+
mw = context.get_main_window()
|
|
254
|
+
load_settings()
|
|
255
|
+
|
|
256
|
+
# Register 3D Style
|
|
257
|
+
if hasattr(context, 'register_3d_style'):
|
|
258
|
+
context.register_3d_style("vdw_overlay", draw_vdw_overlay)
|
|
259
|
+
else:
|
|
260
|
+
print("Error: PluginContext does not support register_3d_style")
|
|
261
|
+
|
|
262
|
+
# 1. Register Configuration Menu - REMOVED in favor of run()
|
|
263
|
+
# (Managed by run() function now)
|
|
264
|
+
|
|
265
|
+
# 2. Inject into Style Menu (Legacy behavior preserved via mw access)
|
|
266
|
+
def add_menu_item():
|
|
267
|
+
# Locate the "3D Style" tool button on the main toolbar
|
|
268
|
+
style_button = getattr(mw, 'style_button', None)
|
|
269
|
+
|
|
270
|
+
if style_button and style_button.menu():
|
|
271
|
+
style_menu = style_button.menu()
|
|
272
|
+
|
|
273
|
+
# Check if already added
|
|
274
|
+
exists = False
|
|
275
|
+
for a in style_menu.actions():
|
|
276
|
+
if a.text() == "VDW Overlay":
|
|
277
|
+
exists = True
|
|
278
|
+
break
|
|
279
|
+
|
|
280
|
+
if not exists:
|
|
281
|
+
# Add to action group for mutual exclusion
|
|
282
|
+
existing_actions = style_menu.actions()
|
|
283
|
+
group = None
|
|
284
|
+
if existing_actions:
|
|
285
|
+
group = existing_actions[0].actionGroup()
|
|
286
|
+
|
|
287
|
+
action = QAction("VDW Overlay", mw)
|
|
288
|
+
action.setCheckable(True)
|
|
289
|
+
|
|
290
|
+
if group:
|
|
291
|
+
group.addAction(action)
|
|
292
|
+
|
|
293
|
+
# Connect to set_3d_style
|
|
294
|
+
action.triggered.connect(lambda: mw.set_3d_style("vdw_overlay"))
|
|
295
|
+
|
|
296
|
+
style_menu.addAction(action)
|
|
297
|
+
|
|
298
|
+
# Run after 2000ms to ensure UI is ready
|
|
299
|
+
QTimer.singleShot(2000, add_menu_item)
|
|
300
|
+
|
|
301
|
+
def _cleanup_config():
|
|
302
|
+
global _config_window
|
|
303
|
+
_config_window = None
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: MoleditPy
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.0a1
|
|
4
4
|
Summary: A cross-platform, simple, and intuitive molecular structure editor built in Python. It allows 2D molecular drawing and 3D structure visualization. It supports exporting structure files for input to DFT calculation software.
|
|
5
5
|
Author-email: HiroYokoyama <titech.yoko.hiro@gmail.com>
|
|
6
6
|
License: GNU GENERAL PUBLIC LICENSE
|
|
@@ -12,7 +12,7 @@ moleditpy/modules/bond_item.py,sha256=eVkEeKvM4igYI67DYxpey3FllqDyt_iWDo4VPYMhaP
|
|
|
12
12
|
moleditpy/modules/bond_length_dialog.py,sha256=k5x_DhK9Q8CSwouKhEo_kLRRdaYHDaK84KDNmuDNLvY,14868
|
|
13
13
|
moleditpy/modules/calculation_worker.py,sha256=KiGQY7i-QCQofEoE0r65KoQgpEGFcbhmxWv6egfkUdc,42324
|
|
14
14
|
moleditpy/modules/color_settings_dialog.py,sha256=Ow44BhCOLo0AFb6klO001k6B4drOgKX9DeNBQhZLp5o,15474
|
|
15
|
-
moleditpy/modules/constants.py,sha256=
|
|
15
|
+
moleditpy/modules/constants.py,sha256=FeDinXswiCE3mVvn04ts1K8_wT2lsxft6PqIEAGHnSA,4704
|
|
16
16
|
moleditpy/modules/constrained_optimization_dialog.py,sha256=IEdNVhFoNSEMeA5ABpUH9Q88-YzDXFloQM2gwnPwnHY,30150
|
|
17
17
|
moleditpy/modules/custom_interactor_style.py,sha256=NjsXE2a43IDNEanZBlcG9eR4ZIERT1MsQC6lbfesapQ,38453
|
|
18
18
|
moleditpy/modules/custom_qt_interactor.py,sha256=MFaTuDh-FPeFBS4303CqxsxmsOIOW4QXUz6USwI8PHQ,2451
|
|
@@ -25,11 +25,11 @@ moleditpy/modules/main_window_dialog_manager.py,sha256=S1ROCWqzB2uVSKHY4o5CbTtJA
|
|
|
25
25
|
moleditpy/modules/main_window_edit_3d.py,sha256=uY203adPg3CLyAdbG2NCThG2Am0WduzPDan9rXAlc14,19841
|
|
26
26
|
moleditpy/modules/main_window_edit_actions.py,sha256=lUFxNFTUQzeXN8CNlb4_4S9j4M1EEq8kpJmh9dCzM3M,64818
|
|
27
27
|
moleditpy/modules/main_window_export.py,sha256=e0HA_jeaokIOBunQqGxUn5QKdniCmE8GrsE1Igy6zm8,38351
|
|
28
|
-
moleditpy/modules/main_window_main_init.py,sha256=
|
|
28
|
+
moleditpy/modules/main_window_main_init.py,sha256=2MWBLY_u4UoSC4orjhDh1WcfR8FoWEnhR9ibUeA_fnE,88438
|
|
29
29
|
moleditpy/modules/main_window_molecular_parsers.py,sha256=Ex4-urYsKf6PyHp4XToOhgXzuYWa_n7q--QmHci4OCU,48401
|
|
30
30
|
moleditpy/modules/main_window_project_io.py,sha256=q1vEmWQDqla32HVkmk8-j0OY9ut5TI5NJ4ikahewkEo,17259
|
|
31
31
|
moleditpy/modules/main_window_string_importers.py,sha256=mQVDv2Dj4MwnPgMRe2IqdAAKnB_quE6QfYeAgCjfv28,10892
|
|
32
|
-
moleditpy/modules/main_window_ui_manager.py,sha256=
|
|
32
|
+
moleditpy/modules/main_window_ui_manager.py,sha256=dqnBzvYZdE5Da6x4IAeGYSgwHp4EUO13THudf2hUePo,22843
|
|
33
33
|
moleditpy/modules/main_window_view_3d.py,sha256=TKRerktpCTYxX9HU-dSOnIhx4OyZaVrRYj4pEOUXmGc,74088
|
|
34
34
|
moleditpy/modules/main_window_view_loaders.py,sha256=Dbdgv4TY_ZkX8Qyaevwr-mBJYJ59CBzRTEks-U1FiGw,14462
|
|
35
35
|
moleditpy/modules/mirror_dialog.py,sha256=c3v4qY6R4FAljzk4EPaDjL9ZdZMjLQSFLqDMXz2fBUk,4696
|
|
@@ -38,8 +38,8 @@ moleditpy/modules/molecule_scene.py,sha256=khdt7h9Mk_D1cMbYeHGtq7P9aFXo0xG-hcShU
|
|
|
38
38
|
moleditpy/modules/move_group_dialog.py,sha256=65HVXTJSaQ9lp03XFhI1l7OzUsXmH_aqd8OgwjpjfGg,27174
|
|
39
39
|
moleditpy/modules/periodic_table_dialog.py,sha256=ItEZUts1XCietz9paY-spvbzxh6SXak3GnikwqkHZCw,4006
|
|
40
40
|
moleditpy/modules/planarize_dialog.py,sha256=yY8o-SxT8vGEHVWnjDTXecRv5NUaEejEsXH-836Xk8g,8681
|
|
41
|
-
moleditpy/modules/plugin_interface.py,sha256=
|
|
42
|
-
moleditpy/modules/plugin_manager.py,sha256=
|
|
41
|
+
moleditpy/modules/plugin_interface.py,sha256=54zMHkjf9TCyXyAqYeYvnG-R4mWhTaSZ8oIQt3lHqvQ,8082
|
|
42
|
+
moleditpy/modules/plugin_manager.py,sha256=ghIKOBsWlTmzsQJXtncH9nyfQJUF_dwBOKrU4iBlNo0,13576
|
|
43
43
|
moleditpy/modules/plugin_manager_window.py,sha256=m2lJ-UltwoXQ2SYA1im6Q0v-5SfqWL2HcOBCTzUmiBw,9963
|
|
44
44
|
moleditpy/modules/settings_dialog.py,sha256=Nr7yE8UmYRi3VObWvRlrnv0DnjSjmYXbvqryZ02O12k,65348
|
|
45
45
|
moleditpy/modules/template_preview_item.py,sha256=djdq3tz73d_fJGOvai3E-V9Hk9q9ZW7skx7BV59mooA,6556
|
|
@@ -50,9 +50,26 @@ moleditpy/modules/zoomable_view.py,sha256=hjwljui13QpvjvxJHY4Evot4jMQvxRBQUNH5HU
|
|
|
50
50
|
moleditpy/modules/assets/icon.icns,sha256=wD5R6-Vw7K662tVKhu2E1ImN0oUuyAP4youesEQsn9c,139863
|
|
51
51
|
moleditpy/modules/assets/icon.ico,sha256=RfgFcx7-dHY_2STdsOQCQziY5SNhDr3gPnjO6jzEDPI,147975
|
|
52
52
|
moleditpy/modules/assets/icon.png,sha256=kCFN1WacYIdy0GN6SFEbNA00ef39pCczBnFdkkBI8Bs,147110
|
|
53
|
-
moleditpy
|
|
54
|
-
moleditpy
|
|
55
|
-
moleditpy
|
|
56
|
-
moleditpy
|
|
57
|
-
moleditpy
|
|
58
|
-
moleditpy
|
|
53
|
+
moleditpy/plugins/Analysis/ms_spectrum_neo.py,sha256=dmTh48f9to2efOX0-jpQXSQVq7OoKpA_r0U6SScFAV8,35533
|
|
54
|
+
moleditpy/plugins/File/animated_xyz_giffer.py,sha256=yCCgl9Gladki7eNJ6j-82dx8SloB6zwuzNvEHRTp2lo,20716
|
|
55
|
+
moleditpy/plugins/File/cube_viewer.py,sha256=_An7KX89FIxbCF7WJbbNiZXKZPfC55NCfT7Y-7suxx8,24836
|
|
56
|
+
moleditpy/plugins/File/gaussian_fchk_freq_analyzer.py,sha256=tBQs8xQYIPWab26G2tpadoW4rqYcDSuXaR4a3HaFATs,45152
|
|
57
|
+
moleditpy/plugins/File/mapped_cube_viewer.py,sha256=tO1hbjXG2xp0pRXmwVBNCO0c0HUu1HU7zIFJ4S7buls,19557
|
|
58
|
+
moleditpy/plugins/File/orca_out_freq_analyzer.py,sha256=6opjTpcK3B2XUIPk8fpOKlZ_IjaBCNZAREYOO3OJsuk,48219
|
|
59
|
+
moleditpy/plugins/File/paste_xyz.py,sha256=kV-_CMmXLcqMIyFNRAeiwsOECPE64GCizT3hDCNfaXk,15112
|
|
60
|
+
moleditpy/plugins/Input Generator/gaussian_input_generator_neo.py,sha256=3EXzxcxmJmgxVF9F-jFOPYJksubUdxZxvmNoUx7DTW4,37769
|
|
61
|
+
moleditpy/plugins/Input Generator/orca_input_generator_neo.py,sha256=vqMpwJ9NaUw2SLcSqgIhWpdUaaJjnBvWHc4S0vtA7FI,40013
|
|
62
|
+
moleditpy/plugins/Input Generator/orca_xyz2inp_gui.py,sha256=bWwkLwauyXZkjxGMztdCgESnD3fZw0WsvqdNwnxDLes,11050
|
|
63
|
+
moleditpy/plugins/Optimization/all-trans_optimizer.py,sha256=_7zAnYIRShPquIOFUf8_5N1o0g7iIXKFmcD0Eey8Lac,2532
|
|
64
|
+
moleditpy/plugins/Optimization/complex_molecule_untangler.py,sha256=kGJ1nIWdLCcSxmKJOHLhTW4SAQSrESMkKsILeDqKbhA,10837
|
|
65
|
+
moleditpy/plugins/Optimization/conf_search.py,sha256=equ6W02Yf2DAYSj1jSNeVrQSYPPpdlNrPDt3lm_Bek8,9110
|
|
66
|
+
moleditpy/plugins/Utility/atom_colorizer.py,sha256=vysv-nmNZFVgfDA5tbJtMvEU2qkeHxrwNU7BxaEvePY,22824
|
|
67
|
+
moleditpy/plugins/Utility/console.py,sha256=4_WgDiEHhalDFOLJGmYNRa1odzxdtg46qr9DUz_ht4I,5943
|
|
68
|
+
moleditpy/plugins/Utility/pubchem_ressolver.py,sha256=w1Zfm_2LTDhuU6uYKQSSaGpyU36-14kvDssc0L8hsDc,10048
|
|
69
|
+
moleditpy/plugins/Utility/vdw_radii_overlay.py,sha256=TtufVe8Gowmpd2O-JmN4nECBoCphfcwXy4LlpVt_LMc,11390
|
|
70
|
+
moleditpy-2.2.0a1.dist-info/licenses/LICENSE,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
71
|
+
moleditpy-2.2.0a1.dist-info/METADATA,sha256=IE4vrtPdPiLDEfMQfz_vV5bazWJvsglrxiN6gs8OKwk,59277
|
|
72
|
+
moleditpy-2.2.0a1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
73
|
+
moleditpy-2.2.0a1.dist-info/entry_points.txt,sha256=yH1h9JjALhok1foXT3-hYrC4ufoZt8b7oiBcsdnGNNM,54
|
|
74
|
+
moleditpy-2.2.0a1.dist-info/top_level.txt,sha256=ARICrS4ihlPXqywlKl6o-oJa3Qz3gZRWu_VZsQ3_c44,10
|
|
75
|
+
moleditpy-2.2.0a1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|