From 7cffd8760ba811a19949fe9f5923c9072edfc0f8 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 11:17:29 +0100 Subject: [PATCH 1/8] Initial Commit of Surface Charge Script SCI-1315 --- .../_surface_charge_calculator.py | 144 ++++++++++ scripts/surface_charge/surface_charge.py | 270 ++++++++++++++++++ 2 files changed, 414 insertions(+) create mode 100644 scripts/surface_charge/_surface_charge_calculator.py create mode 100644 scripts/surface_charge/surface_charge.py diff --git a/scripts/surface_charge/_surface_charge_calculator.py b/scripts/surface_charge/_surface_charge_calculator.py new file mode 100644 index 0000000..b811507 --- /dev/null +++ b/scripts/surface_charge/_surface_charge_calculator.py @@ -0,0 +1,144 @@ +# +# This script can be used for any purpose without limitation subject to the +# conditions at http://www.ccdc.cam.ac.uk/Community/Pages/Licences/v2.aspx +# +# This permission notice and the following statement of attribution must be +# included in all copies or substantial portions of this script. +# +# The following line states a licence feature that is required to show this script in Mercury and Hermes script menus. +# Created 18/08/2024 by Alex Moldovan +# ccdc-licence-features not-applicable + +import os +import warnings +from typing import List, Tuple + +import numpy as np +from ccdc.io import CrystalReader +from ccdc.particle import Surface +from ccdc.utilities import HTMLReport + + +class SurfaceCharge: + def __init__(self, crystal, use_existing_charges: bool = False): + if use_existing_charges: + # if crystal.molecule.assign_partial_charges() is False: + # warnings.warn(f"Gasteiger charges could not be assigned to molecule: {crystal.identifier}", + # RuntimeWarning) + raise NotImplementedError("Use existing charges instead. Current implementation only supports Gasteiger.") + self.crystal = crystal + self.surface = None + self._surface_charge = None + + def calculate_surface_charge(self, hkl: Tuple[int, int, int], offset: float): + self.surface = Surface(self.crystal, miller_indices=hkl, offset=offset) + if self.surface.slab.assign_partial_charges(): + self._surface_charge = np.round(np.sum([atom.partial_charge for atom in self.surface.surface_atoms]), 3) + return + warnings.warn(f"Gasteiger charges could not be assigned to molecule: {self.crystal.identifier}", + RuntimeWarning) + self._surface_charge = np.nan + + @property + def surface_charge(self): + if self._surface_charge is None: + raise ValueError("Surface charge calculation not yet calculated, run calculate_surface_charge()") + return self._surface_charge + + @property + def surface_charge_per_area(self): + return self.surface_charge / self.surface.descriptors.projected_area + + +class SurfaceChargeController: + def __init__(self, structure: str, hkl_and_offsets: List[Tuple[int, int, int, float]], + output_directory: str = None, use_existing_charges: bool = False): + self.surface_charges_per_area = [] + self.surface_charges = [] + self.projected_area = [] + self.crystal = None + if output_directory is None: + output_directory = os.getcwd() + self.output_directory = output_directory + self.structure = structure + self._surfaces = None + self.get_structure() + self.identifier = self.crystal.identifier + self._surfaces = hkl_and_offsets + self.use_existing_charges = use_existing_charges + + def get_structure(self): + if "." not in self.structure: + self.crystal = CrystalReader('CSD').crystal(self.structure) + elif ".mol2" in self.structure: + self.crystal = CrystalReader(self.structure)[0] + else: + raise IOError(" \n ERROR : Please supply ref code mol2") + + @property + def surfaces(self): + if self._surfaces: + return self._surfaces + + def calculate_surface_charge(self): + for surface in self.surfaces: + charges = SurfaceCharge(crystal=self.crystal, use_existing_charges=self.use_existing_charges) + charges.calculate_surface_charge(hkl=surface[:3], offset=surface[3]) + self.surface_charges.append(charges.surface_charge) + self.projected_area.append(charges.surface.descriptors.projected_area) + self.surface_charges_per_area.append(charges.surface_charge_per_area) + + def make_report(self): + html_content = self.generate_html_table() + output_file = os.path.join(self.output_directory, self.identifier + "_surface_charge.html") + with HTMLReport(file_name=output_file, + ccdc_header=True, append=False, embed_images=False, + report_title=f'Surface Charge Calculations - {self.identifier}') as self.report: + self.report.write(html_content) + + print(f"Results saved to {output_file}") + + def generate_html_table(self): + # HTML Table Header + html = """ + + + Calculation Results + + + +

Calculation Results

+ + + + + + + + + """ + + # HTML Table Rows + for i, (h, k, l, offset) in enumerate(self.surfaces): + hkl = "{" + f"{h}, {k}, {l}" + "}" + html += f""" + + + + + + + + """ + + # HTML Table Footer + html += """ +
hklOffsetProjected AreaSurface ChargeSurface Charge per Projected Area
{hkl}{offset:.2f}{self.projected_area[i]:.3f}{self.surface_charges[i]:.3f}{self.surface_charges_per_area[i]:.4f}
+ + + """ + return html diff --git a/scripts/surface_charge/surface_charge.py b/scripts/surface_charge/surface_charge.py new file mode 100644 index 0000000..ea76c31 --- /dev/null +++ b/scripts/surface_charge/surface_charge.py @@ -0,0 +1,270 @@ +# +# This script can be used for any purpose without limitation subject to the +# conditions at http://www.ccdc.cam.ac.uk/Community/Pages/Licences/v2.aspx +# +# This permission notice and the following statement of attribution must be +# included in all copies or substantial portions of this script. +# +# The following line states a licence feature that is required to show this script in Mercury and Hermes script menus. +# Created 18/08/2024 by Alex Moldovan (https://orcid.org/0000-0003-2776-3879) + + +import os +import sys +import tkinter as tk +from tkinter import ttk, messagebox, filedialog + +from ccdc.utilities import ApplicationInterface + +from _surface_charge_calculator import SurfaceChargeController + + +class SurfaceChargeGUI: + def __init__(self, initial_file_path=None): + self.root = tk.Tk() + self.root.title("Surface Charge Calculator") + try: + photo = tk.PhotoImage(file=os.path.join(os.path.dirname(__file__), 'assets/csd-python-api-logo.png')) + self.root.wm_iconphoto(False, photo) + except FileNotFoundError: + print("Could not find icon file for app.") + except Exception as e: + print("Unable to load icon") + print(e) # This doesn't seem to work with X11 port forwarding 🤷‍♀️ + # Disable window resizing + self.root.resizable(False, False) + + self.initial_file_path = initial_file_path + self.create_string_file_inputs() + self.create_input_fields() + self.create_buttons() + self.create_treeview() + self.create_directory_selection() + self.configure_grid() # Ensure grid configuration + if self.initial_file_path: + self.handle_initial_file_path(self.initial_file_path) + + def handle_initial_file_path(self, file_path): + """Handles the initial file path by disabling the input fields and setting the file path.""" + self.file_var.set(file_path) # Set the provided file path + self.string_var.set("") # Clear the string input + + # Disable the input fields + self.string_entry.config(state='disabled') + self.file_entry.config(state='readonly') + self.browse_button.config(state='disabled') + + def configure_grid(self): + self.root.grid_rowconfigure(8, weight=1) + self.root.grid_rowconfigure(9, weight=0) + self.root.grid_rowconfigure(10, weight=0) + + self.root.grid_columnconfigure(0, weight=1) + self.root.grid_columnconfigure(1, weight=1) + self.root.grid_columnconfigure(2, weight=1) + self.root.grid_columnconfigure(3, weight=1) + self.root.grid_columnconfigure(4, weight=1) + self.root.grid_columnconfigure(5, weight=1) + self.root.grid_columnconfigure(6, weight=1) + self.root.grid_columnconfigure(7, weight=1) + + def create_string_file_inputs(self): + tk.Label(self.root, text="Structure").grid(row=0, column=0, columnspan=2, sticky='w') + + tk.Label(self.root, text="Refcode:").grid(row=1, column=0, padx=5, pady=5, sticky='e') + self.string_var = tk.StringVar() + self.string_entry = tk.Entry(self.root, textvariable=self.string_var, validate="key", + validatecommand=(self.root.register(self.on_string_input), "%P")) + self.string_entry.grid(row=1, column=1, padx=5, pady=5, columnspan=2, sticky='ew') + + tk.Label(self.root, text="Select File:").grid(row=2, column=0, padx=5, pady=5, sticky='e') + self.file_var = tk.StringVar() + self.file_entry = tk.Entry(self.root, textvariable=self.file_var, state='readonly') + self.file_entry.grid(row=2, column=1, padx=5, pady=5, columnspan=2, sticky='ew') + self.browse_button = tk.Button(self.root, text="Browse", command=self.browse_file) + self.browse_button.grid(row=2, column=3, padx=5, pady=5, sticky='ew') + + def on_string_input(self, input_value): + if input_value.strip(): + self.browse_button.config(state='disabled') + else: + self.browse_button.config(state='normal') + return True + + def create_input_fields(self): + tk.Label(self.root, text="Select hkl and offset").grid(row=3, column=0, columnspan=2, sticky='w') + + input_frame = tk.Frame(self.root) + input_frame.grid(row=4, column=0, columnspan=8, padx=5, pady=5, sticky='ew') + + input_frame.grid_columnconfigure(0, weight=1) + input_frame.grid_columnconfigure(1, weight=1) + input_frame.grid_columnconfigure(2, weight=1) + input_frame.grid_columnconfigure(3, weight=1) + input_frame.grid_columnconfigure(4, weight=1) + input_frame.grid_columnconfigure(5, weight=1) + input_frame.grid_columnconfigure(6, weight=1) + input_frame.grid_columnconfigure(7, weight=1) + + tk.Label(input_frame, text="h:").grid(row=0, column=0, padx=2, pady=5, sticky='e') + tk.Label(input_frame, text="k:").grid(row=0, column=2, padx=2, pady=5, sticky='e') + tk.Label(input_frame, text="l:").grid(row=0, column=4, padx=2, pady=5, sticky='e') + tk.Label(input_frame, text="offset:").grid(row=0, column=6, padx=2, pady=5, sticky='e') + + self.h_var = tk.IntVar() + self.spin_h = tk.Spinbox(input_frame, from_=-9, to=9, width=2, textvariable=self.h_var) + self.spin_h.grid(row=0, column=1, padx=2, pady=5, sticky='ew') + + self.k_var = tk.IntVar() + self.spin_k = tk.Spinbox(input_frame, from_=-9, to=9, width=2, textvariable=self.k_var) + self.spin_k.grid(row=0, column=3, padx=2, pady=5, sticky='ew') + + self.l_var = tk.IntVar() + self.spin_z = tk.Spinbox(input_frame, from_=-9, to=9, width=2, textvariable=self.l_var) + self.spin_z.grid(row=0, column=5, padx=2, pady=5, sticky='ew') + + self.offset_var = tk.DoubleVar() + self.entry_offset = tk.Entry(input_frame, width=10, textvariable=self.offset_var) + self.entry_offset.grid(row=0, column=7, padx=2, pady=5, sticky='ew') + + def create_buttons(self): + self.add_button = tk.Button(self.root, text="Add Surface", command=self.add_combination) + self.add_button.grid(row=5, column=0, columnspan=2, pady=10, sticky='ew') + + self.delete_button = tk.Button(self.root, text="Delete Selected", command=self.delete_combination) + self.delete_button.grid(row=5, column=2, pady=5, sticky='ew') + + self.reset_button = tk.Button(self.root, text="Reset Fields", command=self.reset_fields) + self.reset_button.grid(row=5, column=3, pady=5, sticky='ew') + + self.create_directory_selection() + + def create_directory_selection(self): + tk.Label(self.root, text="Output Directory:").grid(row=9, column=0, padx=5, pady=5, sticky='e') + + self.dir_var = tk.StringVar(value=os.getcwd()) # Default to current working directory + self.dir_entry = tk.Entry(self.root, textvariable=self.dir_var, state='readonly', width=50) + self.dir_entry.grid(row=9, column=1, padx=5, pady=5, columnspan=3, sticky='ew') + + self.browse_dir_button = tk.Button(self.root, text="Browse", command=self.select_directory) + self.browse_dir_button.grid(row=9, column=4, padx=5, pady=5, sticky='ew') + + self.calculate_button = tk.Button(self.root, text="Calculate", command=self.calculate) + self.calculate_button.grid(row=10, column=0, columnspan=5, pady=10, sticky='ew') + + def select_directory(self): + selected_dir = filedialog.askdirectory(initialdir=self.dir_var.get(), title="Select Output Directory") + if selected_dir: + self.dir_var.set(selected_dir) + + def create_treeview(self): + + tk.Label(self.root, text="Current Selections").grid(row=7, column=0, padx=5, pady=5, columnspan=8, + sticky='w') + self.combination_tree = ttk.Treeview(self.root, columns=("h", "k", "l", "Offset"), show='headings') + self.combination_tree.grid(row=8, column=0, columnspan=8, padx=10, pady=10, sticky='nsew') + + self.combination_tree.heading("h", text="h") + self.combination_tree.heading("k", text="k") + self.combination_tree.heading("l", text="l") + self.combination_tree.heading("Offset", text="Offset") + + self.combination_tree.column("h", width=50, anchor=tk.CENTER) + self.combination_tree.column("k", width=50, anchor=tk.CENTER) + self.combination_tree.column("l", width=50, anchor=tk.CENTER) + self.combination_tree.column("Offset", width=100, anchor=tk.CENTER) + + def browse_file(self): + file_path = filedialog.askopenfilename(filetypes=[("mol2 files", "*.mol2")]) + if file_path: + self.file_var.set(file_path) + + def add_combination(self): + try: + h = self.h_var.get() + k = self.k_var.get() + l = self.l_var.get() + if (h, k, l) == (0, 0, 0): + messagebox.showerror("Invalid input", "Please enter valid integers for h, k, l and a float for offset.") + return + offset = self.offset_var.get() + combination = (h, k, l, offset) + if not self.is_duplicate(combination): + self.combination_tree.insert('', tk.END, values=combination) + else: + messagebox.showwarning("Duplicate Entry", "This hkl and offset already exists.") + except tk.TclError: + messagebox.showerror("Invalid input", "Please enter valid integers for h, k, l and a float for offset.") + + def is_duplicate(self, combination): + combination_converted = tuple((str(i) for i in combination)) + for row_id in self.combination_tree.get_children(): + row_values = self.combination_tree.item(row_id, 'values') + if tuple(row_values) == combination_converted: + return True + return False + + def delete_combination(self): + selected_item = self.combination_tree.selection() + if selected_item: + self.combination_tree.delete(selected_item) + else: + messagebox.showwarning("No selection", "Please select a surface to delete.") + + def reset_fields(self): + self.h_var.set(0) + self.k_var.set(0) + self.l_var.set(0) + self.offset_var.set(0.0) + self.string_var.set("") + self.file_var.set("") + self.browse_button.config(state='normal') + + def calculate(self): + string_input = self.string_var.get().strip() + file_input = self.file_var.get().strip() + if not (string_input or file_input): + tk.messagebox.showerror("Input Error", "Please provide a refcode or select a file.") + return + + if not self.combination_tree.get_children(): + tk.messagebox.showerror("Selection Error", "There must be at least one surface in the list.") + return + + items = self.combination_tree.get_children() + data = [] + for item in items: + values = self.combination_tree.item(item, 'values') + try: + h = int(values[0]) + k = int(values[1]) + l = int(values[2]) + offset = float(values[3]) + data.append((h, k, l, offset)) + except ValueError as e: + print(f"Error converting data: {e}") + continue + if string_input: + input_string = string_input # Use string input if available + elif file_input: + input_string = file_input + + output_dir = self.dir_var.get() + + surface_charge_controller = SurfaceChargeController(structure=input_string, output_directory=output_dir, + hkl_and_offsets=data) + surface_charge_controller.calculate_surface_charge() + surface_charge_controller.make_report() + self.root.destroy() + + +if __name__ == "__main__": + if len(sys.argv) > 3 and sys.argv[3].endswith(".m2a"): + mercury = ApplicationInterface() + run_from_mercury = True + input_structure = mercury.input_mol2_file + app = SurfaceChargeGUI(initial_file_path=input_structure) + app.root.mainloop() + else: + app = SurfaceChargeGUI() + app.root.mainloop() From c6f0335acf34ab86d787a39435ef8fa1b42759c4 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 11:17:56 +0100 Subject: [PATCH 2/8] Added Readme for surface charge script SCI-1396 --- scripts/surface_charge/ReadMe.md | 46 ++++++++++++++++++ .../surface_charge/assets/adding_location.png | Bin 0 -> 7458 bytes .../assets/csd-python-api-logo.png | Bin 0 -> 13457 bytes .../surface_charge/assets/example_input.png | Bin 0 -> 12754 bytes .../surface_charge/assets/example_output.png | Bin 0 -> 36920 bytes .../assets/selecting_script.png | Bin 0 -> 77158 bytes 6 files changed, 46 insertions(+) create mode 100644 scripts/surface_charge/ReadMe.md create mode 100644 scripts/surface_charge/assets/adding_location.png create mode 100644 scripts/surface_charge/assets/csd-python-api-logo.png create mode 100644 scripts/surface_charge/assets/example_input.png create mode 100644 scripts/surface_charge/assets/example_output.png create mode 100644 scripts/surface_charge/assets/selecting_script.png diff --git a/scripts/surface_charge/ReadMe.md b/scripts/surface_charge/ReadMe.md new file mode 100644 index 0000000..42809fb --- /dev/null +++ b/scripts/surface_charge/ReadMe.md @@ -0,0 +1,46 @@ +# Surface Charge Calculator + +## Summary + +This tool returns the surface charge for a given structure and list of supplied hkl and offsets. +The script provides a GUI that can be used from Mercury or from the command line. + +The output is a HTML file with a table for all the all selected surfaces and their associated charge, projected surface areas and normalised surface charge. + +Charges are currently calculated using Gasteiger charges. Further development could be made to use user derived charges. Please let me know if that is something you'd like [amoldovan@ccdc.cam.ac.uk](amoldovan@ccdc.cam.ac.uk). + +Example Output: +![Example Output](assets/example_output.png) + +> **Note** - When comparing charges for structures out of the CSD and from mol2 files the values might be different as the bonding might not be the same. When importing a mol2 the bonding and charges have to be calculated on the fly. Whereas the CSD structures the bonding is pre-assigned. + +## Requirements + +- Requires a minimum of CSD 2022.2 + +## Licensing Requirements + +- CSD-Particle Licence + +## Instructions on Running + +- To Run from command line: +```commandline +# With an activated environment +> python surface_charge.py +``` +- To run from mercury: +Add the folder containing the script to your Python API menu. Mercury -> CSD Python API-> Options -> Add Location. Then just select the `surface_charge.py` script from the drop down menu +![Adding_Locations](assets/adding_location.png) +![Selecting Scripts](assets/selecting_script.png) + +Running either from the command line or Mercury you will get the same interface allowing you to select a refcode from the CSD or input a mol2 file directly. + +Example input : +![Example Input](assets/example_input.png) + +## Author + +Alex Moldovan (2024) + +> For feedback or to report any issues please contact [support@ccdc.cam.ac.uk](mailto:support@ccdc.cam.ac.uk) \ No newline at end of file diff --git a/scripts/surface_charge/assets/adding_location.png b/scripts/surface_charge/assets/adding_location.png new file mode 100644 index 0000000000000000000000000000000000000000..312335a9bc1c6e123f4913abdaac22b7c972e5b5 GIT binary patch literal 7458 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 literal 0 HcmV?d00001 diff --git a/scripts/surface_charge/assets/csd-python-api-logo.png b/scripts/surface_charge/assets/csd-python-api-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f124221bdc642bbe2ea60cee0cedda2b306e73 GIT binary patch literal 13457 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 Xoc067VKe{!B&4FKp-?Gj7WTgYUVFSQ literal 0 HcmV?d00001 diff --git a/scripts/surface_charge/assets/example_input.png b/scripts/surface_charge/assets/example_input.png new file mode 100644 index 0000000000000000000000000000000000000000..4256aa7dd703ebd933595723e16f5ae90929a031 GIT binary patch literal 12754 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 N?wHfj@?S2+|1YYSBK`mX literal 0 HcmV?d00001 diff --git a/scripts/surface_charge/assets/example_output.png b/scripts/surface_charge/assets/example_output.png new file mode 100644 index 0000000000000000000000000000000000000000..3f9205a4bd9f1adcee50e852f1ab5276248cafa2 GIT binary patch literal 36920 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 A)Bpeg literal 0 HcmV?d00001 diff --git a/scripts/surface_charge/assets/selecting_script.png b/scripts/surface_charge/assets/selecting_script.png new file mode 100644 index 0000000000000000000000000000000000000000..6dde040e6a59d0ac4ef51599e73dea7f735550cc GIT binary patch literal 77158 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
    x5!Wja^dPgKtI#KGr;J}aNX2CS%)yJtpK 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 z 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
    fsxRw2^dM{K+fK>Xz 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 literal 0 HcmV?d00001 From e2519e5800553dddd2fec856386e492bf040e2ff Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 11:19:03 +0100 Subject: [PATCH 3/8] Updated scripts folder readme SCI-1396 --- scripts/ReadMe.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/ReadMe.md b/scripts/ReadMe.md index 6f34c18..b57e7cb 100644 --- a/scripts/ReadMe.md +++ b/scripts/ReadMe.md @@ -44,6 +44,11 @@ This folder contains scripts submitted by users or CCDC scientists for anyone to - Calculates the simulated BFDH particle rugosity weighted by facet area. +## Surface Charge + +- Calculates the surface charge for a given structure and surface terminations. Runs both from CMD and Mercury. + + ## Tips A section for top tips in using the repository and GitHub. From 6bbf52d7d17859749eebffe7279110258be26c24 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 11:20:03 +0100 Subject: [PATCH 4/8] Fixed typo SCI-1315 --- scripts/surface_charge/_surface_charge_calculator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/surface_charge/_surface_charge_calculator.py b/scripts/surface_charge/_surface_charge_calculator.py index b811507..b7f6a86 100644 --- a/scripts/surface_charge/_surface_charge_calculator.py +++ b/scripts/surface_charge/_surface_charge_calculator.py @@ -73,7 +73,7 @@ def get_structure(self): elif ".mol2" in self.structure: self.crystal = CrystalReader(self.structure)[0] else: - raise IOError(" \n ERROR : Please supply ref code mol2") + raise IOError(" \n ERROR : Please supply refcode or mol2") @property def surfaces(self): From 1d51751b3ba5a515ea04bb01b0d196f93fc0e515 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 11:33:21 +0100 Subject: [PATCH 5/8] Apply suggestions from reviewdog SCI-1396 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- scripts/ReadMe.md | 1 - scripts/surface_charge/ReadMe.md | 18 ++++++++++-------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/scripts/ReadMe.md b/scripts/ReadMe.md index b57e7cb..023632f 100644 --- a/scripts/ReadMe.md +++ b/scripts/ReadMe.md @@ -48,7 +48,6 @@ This folder contains scripts submitted by users or CCDC scientists for anyone to - Calculates the surface charge for a given structure and surface terminations. Runs both from CMD and Mercury. - ## Tips A section for top tips in using the repository and GitHub. diff --git a/scripts/surface_charge/ReadMe.md b/scripts/surface_charge/ReadMe.md index 42809fb..78a41c7 100644 --- a/scripts/surface_charge/ReadMe.md +++ b/scripts/surface_charge/ReadMe.md @@ -2,21 +2,21 @@ ## Summary -This tool returns the surface charge for a given structure and list of supplied hkl and offsets. -The script provides a GUI that can be used from Mercury or from the command line. +This tool returns the surface charge for a given structure and list of supplied hkl and offsets. +The script provides a GUI that can be used from Mercury or from the command line. -The output is a HTML file with a table for all the all selected surfaces and their associated charge, projected surface areas and normalised surface charge. +The output is a HTML file with a table for all the all selected surfaces and their associated charge, projected surface areas and normalised surface charge. Charges are currently calculated using Gasteiger charges. Further development could be made to use user derived charges. Please let me know if that is something you'd like [amoldovan@ccdc.cam.ac.uk](amoldovan@ccdc.cam.ac.uk). -Example Output: +Example Output: ![Example Output](assets/example_output.png) -> **Note** - When comparing charges for structures out of the CSD and from mol2 files the values might be different as the bonding might not be the same. When importing a mol2 the bonding and charges have to be calculated on the fly. Whereas the CSD structures the bonding is pre-assigned. +> **Note** - When comparing charges for structures out of the CSD and from mol2 files the values might be different as the bonding might not be the same. When importing a mol2 the bonding and charges have to be calculated on the fly. Whereas the CSD structures the bonding is pre-assigned. ## Requirements -- Requires a minimum of CSD 2022.2 +- Requires a minimum of CSD 2022.2 ## Licensing Requirements @@ -25,18 +25,20 @@ Example Output: ## Instructions on Running - To Run from command line: + ```commandline # With an activated environment > python surface_charge.py ``` -- To run from mercury: + +- To run from mercury: Add the folder containing the script to your Python API menu. Mercury -> CSD Python API-> Options -> Add Location. Then just select the `surface_charge.py` script from the drop down menu ![Adding_Locations](assets/adding_location.png) ![Selecting Scripts](assets/selecting_script.png) Running either from the command line or Mercury you will get the same interface allowing you to select a refcode from the CSD or input a mol2 file directly. -Example input : +Example input : ![Example Input](assets/example_input.png) ## Author From 9054c55a49e3705940c88e5e343eed7240df1517 Mon Sep 17 00:00:00 2001 From: maloney-ccdc Date: Tue, 20 Aug 2024 13:24:34 +0100 Subject: [PATCH 6/8] SCI-1396 reviewed and modified .md file --- scripts/surface_charge/ReadMe.md | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/scripts/surface_charge/ReadMe.md b/scripts/surface_charge/ReadMe.md index 78a41c7..5f4c140 100644 --- a/scripts/surface_charge/ReadMe.md +++ b/scripts/surface_charge/ReadMe.md @@ -2,17 +2,18 @@ ## Summary -This tool returns the surface charge for a given structure and list of supplied hkl and offsets. +This tool returns the total surface charges for a given structure and list of supplied hkl indices and offsets. The script provides a GUI that can be used from Mercury or from the command line. -The output is a HTML file with a table for all the all selected surfaces and their associated charge, projected surface areas and normalised surface charge. +The output is an HTML file with a table for all the selected surfaces and their associated charges, projected surface areas, and normalised surface charges (surface charge per projected area). -Charges are currently calculated using Gasteiger charges. Further development could be made to use user derived charges. Please let me know if that is something you'd like [amoldovan@ccdc.cam.ac.uk](amoldovan@ccdc.cam.ac.uk). +Charges are currently calculated using the Gasteiger charge model. Further development could be made to use user derived charges. Please let us know if that is of interest: [support@ccdc.cam.ac.uk](support@ccdc.cam.ac.uk). Example Output: + ![Example Output](assets/example_output.png) -> **Note** - When comparing charges for structures out of the CSD and from mol2 files the values might be different as the bonding might not be the same. When importing a mol2 the bonding and charges have to be calculated on the fly. Whereas the CSD structures the bonding is pre-assigned. +> **Note** - When comparing charges for non-CSD structures and structures from mol2 files the values might be different as the bonding might not be the same. When importing a mol2 file the bonding and charges may have to be calculated on the fly, whereas this information is assigned for CSD entries. ## Requirements @@ -22,7 +23,7 @@ Example Output: - CSD-Particle Licence -## Instructions on Running +## Instructions for use - To Run from command line: @@ -32,13 +33,14 @@ Example Output: ``` - To run from mercury: -Add the folder containing the script to your Python API menu. Mercury -> CSD Python API-> Options -> Add Location. Then just select the `surface_charge.py` script from the drop down menu +Add the folder containing the script to your Python API menu. Mercury -> CSD Python API-> Options -> Add Location. Then select the `surface_charge.py` script from the drop down menu ![Adding_Locations](assets/adding_location.png) ![Selecting Scripts](assets/selecting_script.png) -Running either from the command line or Mercury you will get the same interface allowing you to select a refcode from the CSD or input a mol2 file directly. +Running from either the command line or Mercury will show the same interface allowing you to select a refcode from the CSD or input a mol2 file directly. + +Example Input: -Example input : ![Example Input](assets/example_input.png) ## Author From dda2b9e4f549fe10b5c489d1b801de88de0fb0f0 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 13:27:31 +0100 Subject: [PATCH 7/8] Removed underscore from file name as no longer required SCI-1315 --- scripts/surface_charge/surface_charge.py | 2 +- ...urface_charge_calculator.py => surface_charge_calculator.py} | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename scripts/surface_charge/{_surface_charge_calculator.py => surface_charge_calculator.py} (100%) diff --git a/scripts/surface_charge/surface_charge.py b/scripts/surface_charge/surface_charge.py index ea76c31..c76ccb1 100644 --- a/scripts/surface_charge/surface_charge.py +++ b/scripts/surface_charge/surface_charge.py @@ -16,7 +16,7 @@ from ccdc.utilities import ApplicationInterface -from _surface_charge_calculator import SurfaceChargeController +from surface_charge_calculator import SurfaceChargeController class SurfaceChargeGUI: diff --git a/scripts/surface_charge/_surface_charge_calculator.py b/scripts/surface_charge/surface_charge_calculator.py similarity index 100% rename from scripts/surface_charge/_surface_charge_calculator.py rename to scripts/surface_charge/surface_charge_calculator.py From 51b4344021b69a41523134aa92272ed027a7b829 Mon Sep 17 00:00:00 2001 From: Alex Moldovan Date: Tue, 20 Aug 2024 15:12:22 +0100 Subject: [PATCH 8/8] Added description of Surface charge SCI-1315 --- scripts/surface_charge/surface_charge_calculator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/surface_charge/surface_charge_calculator.py b/scripts/surface_charge/surface_charge_calculator.py index b7f6a86..498c891 100644 --- a/scripts/surface_charge/surface_charge_calculator.py +++ b/scripts/surface_charge/surface_charge_calculator.py @@ -117,7 +117,7 @@ def generate_html_table(self): hkl Offset Projected Area - Surface Charge + Surface Charge* Surface Charge per Projected Area """ @@ -138,6 +138,7 @@ def generate_html_table(self): # HTML Table Footer html += """ +

    *-Surface charge is based on gasteiger partial charges 10.1016/S0040-4039(01)94977-9

    """