From 672a375b310d40789af3e663169be5a5150dee38 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 24 Oct 2026 16:57:12 +0200 Subject: [PATCH 001/122] v1.0.0-rc.180: VERSION and update_version.sh Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu --- VERSION | 2 +- broker/gen/model/Azim_int_settings.cpp | 2 +- broker/gen/model/Azim_int_settings.h | 2 +- broker/gen/model/Bragg_integration_settings.cpp | 2 +- broker/gen/model/Bragg_integration_settings.h | 2 +- broker/gen/model/Broker_status.cpp | 2 +- broker/gen/model/Broker_status.h | 2 +- broker/gen/model/Calibration_statistics_inner.cpp | 2 +- broker/gen/model/Calibration_statistics_inner.h | 2 +- broker/gen/model/Dark_mask_settings.cpp | 2 +- broker/gen/model/Dark_mask_settings.h | 2 +- broker/gen/model/Dataset_settings.cpp | 2 +- broker/gen/model/Dataset_settings.h | 2 +- broker/gen/model/Dataset_settings_smargon.cpp | 2 +- broker/gen/model/Dataset_settings_smargon.h | 2 +- .../gen/model/Dataset_settings_xray_fluorescence_spectrum.cpp | 2 +- .../gen/model/Dataset_settings_xray_fluorescence_spectrum.h | 2 +- broker/gen/model/Detector.cpp | 2 +- broker/gen/model/Detector.h | 2 +- broker/gen/model/Detector_list.cpp | 2 +- broker/gen/model/Detector_list.h | 2 +- broker/gen/model/Detector_list_element.cpp | 2 +- broker/gen/model/Detector_list_element.h | 2 +- broker/gen/model/Detector_module.cpp | 2 +- broker/gen/model/Detector_module.h | 2 +- broker/gen/model/Detector_module_direction.cpp | 2 +- broker/gen/model/Detector_module_direction.h | 2 +- broker/gen/model/Detector_power_state.cpp | 2 +- broker/gen/model/Detector_power_state.h | 2 +- broker/gen/model/Detector_selection.cpp | 2 +- broker/gen/model/Detector_selection.h | 2 +- broker/gen/model/Detector_settings.cpp | 2 +- broker/gen/model/Detector_settings.h | 2 +- broker/gen/model/Detector_state.cpp | 2 +- broker/gen/model/Detector_state.h | 2 +- broker/gen/model/Detector_status.cpp | 2 +- broker/gen/model/Detector_status.h | 2 +- broker/gen/model/Detector_timing.cpp | 2 +- broker/gen/model/Detector_timing.h | 2 +- broker/gen/model/Detector_type.cpp | 2 +- broker/gen/model/Detector_type.h | 2 +- broker/gen/model/Error_message.cpp | 2 +- broker/gen/model/Error_message.h | 2 +- broker/gen/model/File_writer_format.cpp | 2 +- broker/gen/model/File_writer_format.h | 2 +- broker/gen/model/File_writer_settings.cpp | 2 +- broker/gen/model/File_writer_settings.h | 2 +- broker/gen/model/Fpga_status_inner.cpp | 2 +- broker/gen/model/Fpga_status_inner.h | 2 +- broker/gen/model/Geom_refinement_algorithm.cpp | 2 +- broker/gen/model/Geom_refinement_algorithm.h | 2 +- broker/gen/model/Grid_scan.cpp | 2 +- broker/gen/model/Grid_scan.h | 2 +- broker/gen/model/Helpers.cpp | 2 +- broker/gen/model/Helpers.h | 2 +- broker/gen/model/Image_buffer_status.cpp | 2 +- broker/gen/model/Image_buffer_status.h | 2 +- broker/gen/model/Image_format_settings.cpp | 2 +- broker/gen/model/Image_format_settings.h | 2 +- broker/gen/model/Image_pusher_status.cpp | 2 +- broker/gen/model/Image_pusher_status.h | 2 +- broker/gen/model/Image_pusher_type.cpp | 2 +- broker/gen/model/Image_pusher_type.h | 2 +- broker/gen/model/Indexing_algorithm.cpp | 2 +- broker/gen/model/Indexing_algorithm.h | 2 +- broker/gen/model/Indexing_settings.cpp | 2 +- broker/gen/model/Indexing_settings.h | 2 +- broker/gen/model/Instrument_metadata.cpp | 2 +- broker/gen/model/Instrument_metadata.h | 2 +- broker/gen/model/Integration_model.cpp | 2 +- broker/gen/model/Integration_model.h | 2 +- broker/gen/model/Jfjoch_settings.cpp | 2 +- broker/gen/model/Jfjoch_settings.h | 2 +- broker/gen/model/Jfjoch_statistics.cpp | 2 +- broker/gen/model/Jfjoch_statistics.h | 2 +- broker/gen/model/Measurement_statistics.cpp | 2 +- broker/gen/model/Measurement_statistics.h | 2 +- broker/gen/model/Pcie_devices_inner.cpp | 2 +- broker/gen/model/Pcie_devices_inner.h | 2 +- broker/gen/model/Pixel_mask_statistics.cpp | 2 +- broker/gen/model/Pixel_mask_statistics.h | 2 +- broker/gen/model/Plot.cpp | 2 +- broker/gen/model/Plot.h | 2 +- broker/gen/model/Plot_unit_x.cpp | 2 +- broker/gen/model/Plot_unit_x.h | 2 +- broker/gen/model/Plots.cpp | 2 +- broker/gen/model/Plots.h | 2 +- broker/gen/model/Powder_calibration_fit_sigma.cpp | 2 +- broker/gen/model/Powder_calibration_fit_sigma.h | 2 +- broker/gen/model/Powder_calibration_output.cpp | 2 +- broker/gen/model/Powder_calibration_output.h | 2 +- broker/gen/model/Powder_calibration_quality.cpp | 2 +- broker/gen/model/Powder_calibration_quality.h | 2 +- broker/gen/model/Powder_calibration_spot_check.cpp | 2 +- broker/gen/model/Powder_calibration_spot_check.h | 2 +- broker/gen/model/Roi_azim_list.cpp | 2 +- broker/gen/model/Roi_azim_list.h | 2 +- broker/gen/model/Roi_azimuthal.cpp | 2 +- broker/gen/model/Roi_azimuthal.h | 2 +- broker/gen/model/Roi_box.cpp | 2 +- broker/gen/model/Roi_box.h | 2 +- broker/gen/model/Roi_box_list.cpp | 2 +- broker/gen/model/Roi_box_list.h | 2 +- broker/gen/model/Roi_circle.cpp | 2 +- broker/gen/model/Roi_circle.h | 2 +- broker/gen/model/Roi_circle_list.cpp | 2 +- broker/gen/model/Roi_circle_list.h | 2 +- broker/gen/model/Roi_definitions.cpp | 2 +- broker/gen/model/Roi_definitions.h | 2 +- broker/gen/model/Rotation_axis.cpp | 2 +- broker/gen/model/Rotation_axis.h | 2 +- broker/gen/model/Rugnux_live_status.cpp | 2 +- broker/gen/model/Rugnux_live_status.h | 2 +- broker/gen/model/Rugnux_live_step.cpp | 2 +- broker/gen/model/Rugnux_live_step.h | 2 +- broker/gen/model/Rugnux_settings.cpp | 2 +- broker/gen/model/Rugnux_settings.h | 2 +- broker/gen/model/Rugnux_status.cpp | 2 +- broker/gen/model/Rugnux_status.h | 2 +- broker/gen/model/Rugnux_summary_row.cpp | 2 +- broker/gen/model/Rugnux_summary_row.h | 2 +- broker/gen/model/Scan_result.cpp | 2 +- broker/gen/model/Scan_result.h | 2 +- broker/gen/model/Scan_result_images_inner.cpp | 2 +- broker/gen/model/Scan_result_images_inner.h | 2 +- broker/gen/model/Spot_finding_settings.cpp | 2 +- broker/gen/model/Spot_finding_settings.h | 2 +- broker/gen/model/Standard_detector_geometry.cpp | 2 +- broker/gen/model/Standard_detector_geometry.h | 2 +- broker/gen/model/Tcp_settings.cpp | 2 +- broker/gen/model/Tcp_settings.h | 2 +- broker/gen/model/Unit_cell.cpp | 2 +- broker/gen/model/Unit_cell.h | 2 +- broker/gen/model/Zeromq_metadata_settings.cpp | 2 +- broker/gen/model/Zeromq_metadata_settings.h | 2 +- broker/gen/model/Zeromq_preview_settings.cpp | 2 +- broker/gen/model/Zeromq_preview_settings.h | 2 +- broker/gen/model/Zeromq_settings.cpp | 2 +- broker/gen/model/Zeromq_settings.h | 2 +- broker/jfjoch_api.yaml | 2 +- broker/redoc-static.html | 4 ++-- docs/conf.py | 2 +- docs/python_client/README.md | 4 ++-- fpga/hdl/action_config.v | 2 +- fpga/pcie_driver/dkms.conf | 2 +- fpga/pcie_driver/install_dkms.sh | 2 +- fpga/pcie_driver/jfjoch_drv.c | 2 +- fpga/pcie_driver/postinstall.sh | 2 +- fpga/pcie_driver/preuninstall.sh | 2 +- frontend/package-lock.json | 4 ++-- frontend/package.json | 2 +- frontend/src/version.ts | 2 +- 152 files changed, 155 insertions(+), 155 deletions(-) diff --git a/VERSION b/VERSION index bfa826350..59f83b8bb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.0.0-rc.179 +1.0.0-rc.180 diff --git a/broker/gen/model/Azim_int_settings.cpp b/broker/gen/model/Azim_int_settings.cpp index 5eb181267..833512e64 100644 --- a/broker/gen/model/Azim_int_settings.cpp +++ b/broker/gen/model/Azim_int_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Azim_int_settings.h b/broker/gen/model/Azim_int_settings.h index 632c8449f..5cfdbff2c 100644 --- a/broker/gen/model/Azim_int_settings.h +++ b/broker/gen/model/Azim_int_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Bragg_integration_settings.cpp b/broker/gen/model/Bragg_integration_settings.cpp index ec0aa6078..6f0820d8c 100644 --- a/broker/gen/model/Bragg_integration_settings.cpp +++ b/broker/gen/model/Bragg_integration_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Bragg_integration_settings.h b/broker/gen/model/Bragg_integration_settings.h index d0513f887..9b132c285 100644 --- a/broker/gen/model/Bragg_integration_settings.h +++ b/broker/gen/model/Bragg_integration_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Broker_status.cpp b/broker/gen/model/Broker_status.cpp index 80436ccb5..a593da3ba 100644 --- a/broker/gen/model/Broker_status.cpp +++ b/broker/gen/model/Broker_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Broker_status.h b/broker/gen/model/Broker_status.h index d9c2b18f3..a5bc2ac71 100644 --- a/broker/gen/model/Broker_status.h +++ b/broker/gen/model/Broker_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Calibration_statistics_inner.cpp b/broker/gen/model/Calibration_statistics_inner.cpp index 985c2b623..7c3f96f85 100644 --- a/broker/gen/model/Calibration_statistics_inner.cpp +++ b/broker/gen/model/Calibration_statistics_inner.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Calibration_statistics_inner.h b/broker/gen/model/Calibration_statistics_inner.h index 80c17cc83..b84285fb2 100644 --- a/broker/gen/model/Calibration_statistics_inner.h +++ b/broker/gen/model/Calibration_statistics_inner.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dark_mask_settings.cpp b/broker/gen/model/Dark_mask_settings.cpp index 3dac6d0e2..a5d35150d 100644 --- a/broker/gen/model/Dark_mask_settings.cpp +++ b/broker/gen/model/Dark_mask_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dark_mask_settings.h b/broker/gen/model/Dark_mask_settings.h index 84141189d..f7cc35de7 100644 --- a/broker/gen/model/Dark_mask_settings.h +++ b/broker/gen/model/Dark_mask_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings.cpp b/broker/gen/model/Dataset_settings.cpp index e174f99c4..5da814adc 100644 --- a/broker/gen/model/Dataset_settings.cpp +++ b/broker/gen/model/Dataset_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings.h b/broker/gen/model/Dataset_settings.h index 0afa4dc0c..723ea0b63 100644 --- a/broker/gen/model/Dataset_settings.h +++ b/broker/gen/model/Dataset_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings_smargon.cpp b/broker/gen/model/Dataset_settings_smargon.cpp index 770d2487e..0c06c01ea 100644 --- a/broker/gen/model/Dataset_settings_smargon.cpp +++ b/broker/gen/model/Dataset_settings_smargon.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings_smargon.h b/broker/gen/model/Dataset_settings_smargon.h index e511a1caf..1da2e7c57 100644 --- a/broker/gen/model/Dataset_settings_smargon.h +++ b/broker/gen/model/Dataset_settings_smargon.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.cpp b/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.cpp index 429df57f4..1a0a6671c 100644 --- a/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.cpp +++ b/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.h b/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.h index 2c1417eb7..3f8df35f6 100644 --- a/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.h +++ b/broker/gen/model/Dataset_settings_xray_fluorescence_spectrum.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector.cpp b/broker/gen/model/Detector.cpp index 5eb85f5a5..4ca016935 100644 --- a/broker/gen/model/Detector.cpp +++ b/broker/gen/model/Detector.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector.h b/broker/gen/model/Detector.h index 728d690b4..23352e313 100644 --- a/broker/gen/model/Detector.h +++ b/broker/gen/model/Detector.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_list.cpp b/broker/gen/model/Detector_list.cpp index 5237182e8..c2332e842 100644 --- a/broker/gen/model/Detector_list.cpp +++ b/broker/gen/model/Detector_list.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_list.h b/broker/gen/model/Detector_list.h index 695bff2b8..32255b629 100644 --- a/broker/gen/model/Detector_list.h +++ b/broker/gen/model/Detector_list.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_list_element.cpp b/broker/gen/model/Detector_list_element.cpp index 8c592213b..873771c2d 100644 --- a/broker/gen/model/Detector_list_element.cpp +++ b/broker/gen/model/Detector_list_element.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_list_element.h b/broker/gen/model/Detector_list_element.h index 036fb8067..a2259f6fa 100644 --- a/broker/gen/model/Detector_list_element.h +++ b/broker/gen/model/Detector_list_element.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_module.cpp b/broker/gen/model/Detector_module.cpp index c89209164..369fccac4 100644 --- a/broker/gen/model/Detector_module.cpp +++ b/broker/gen/model/Detector_module.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_module.h b/broker/gen/model/Detector_module.h index 75ceca17f..1f24c1c11 100644 --- a/broker/gen/model/Detector_module.h +++ b/broker/gen/model/Detector_module.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_module_direction.cpp b/broker/gen/model/Detector_module_direction.cpp index c8a982e96..55b0a505e 100644 --- a/broker/gen/model/Detector_module_direction.cpp +++ b/broker/gen/model/Detector_module_direction.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_module_direction.h b/broker/gen/model/Detector_module_direction.h index ca0d0bbb1..8bf48a5d2 100644 --- a/broker/gen/model/Detector_module_direction.h +++ b/broker/gen/model/Detector_module_direction.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_power_state.cpp b/broker/gen/model/Detector_power_state.cpp index fd07aa072..7c8bd783b 100644 --- a/broker/gen/model/Detector_power_state.cpp +++ b/broker/gen/model/Detector_power_state.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_power_state.h b/broker/gen/model/Detector_power_state.h index 389f2d87e..4d5fce3d3 100644 --- a/broker/gen/model/Detector_power_state.h +++ b/broker/gen/model/Detector_power_state.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_selection.cpp b/broker/gen/model/Detector_selection.cpp index 62efbcfaf..74e0d2c0e 100644 --- a/broker/gen/model/Detector_selection.cpp +++ b/broker/gen/model/Detector_selection.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_selection.h b/broker/gen/model/Detector_selection.h index 36e6bd025..0a5dd6490 100644 --- a/broker/gen/model/Detector_selection.h +++ b/broker/gen/model/Detector_selection.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_settings.cpp b/broker/gen/model/Detector_settings.cpp index a8703479e..2aa4a7c48 100644 --- a/broker/gen/model/Detector_settings.cpp +++ b/broker/gen/model/Detector_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_settings.h b/broker/gen/model/Detector_settings.h index cd3ccee68..ff8618dfa 100644 --- a/broker/gen/model/Detector_settings.h +++ b/broker/gen/model/Detector_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_state.cpp b/broker/gen/model/Detector_state.cpp index 35011d667..763d6c19e 100644 --- a/broker/gen/model/Detector_state.cpp +++ b/broker/gen/model/Detector_state.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_state.h b/broker/gen/model/Detector_state.h index 31aeb57aa..11dc3d41f 100644 --- a/broker/gen/model/Detector_state.h +++ b/broker/gen/model/Detector_state.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_status.cpp b/broker/gen/model/Detector_status.cpp index b6743070d..04f2f12a2 100644 --- a/broker/gen/model/Detector_status.cpp +++ b/broker/gen/model/Detector_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_status.h b/broker/gen/model/Detector_status.h index c058d0766..1de1b46d9 100644 --- a/broker/gen/model/Detector_status.h +++ b/broker/gen/model/Detector_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_timing.cpp b/broker/gen/model/Detector_timing.cpp index 3962b9671..db8a7d1d1 100644 --- a/broker/gen/model/Detector_timing.cpp +++ b/broker/gen/model/Detector_timing.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_timing.h b/broker/gen/model/Detector_timing.h index a3fa4c3d8..81b54bd6f 100644 --- a/broker/gen/model/Detector_timing.h +++ b/broker/gen/model/Detector_timing.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_type.cpp b/broker/gen/model/Detector_type.cpp index cccab64dc..3630540e2 100644 --- a/broker/gen/model/Detector_type.cpp +++ b/broker/gen/model/Detector_type.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Detector_type.h b/broker/gen/model/Detector_type.h index 6387098a7..39b3b049d 100644 --- a/broker/gen/model/Detector_type.h +++ b/broker/gen/model/Detector_type.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Error_message.cpp b/broker/gen/model/Error_message.cpp index a88e821c8..491a0b018 100644 --- a/broker/gen/model/Error_message.cpp +++ b/broker/gen/model/Error_message.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Error_message.h b/broker/gen/model/Error_message.h index bf408c53d..d0a72c33f 100644 --- a/broker/gen/model/Error_message.h +++ b/broker/gen/model/Error_message.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/File_writer_format.cpp b/broker/gen/model/File_writer_format.cpp index 573810eaa..bd9b04866 100644 --- a/broker/gen/model/File_writer_format.cpp +++ b/broker/gen/model/File_writer_format.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/File_writer_format.h b/broker/gen/model/File_writer_format.h index 554a025ef..5259ca938 100644 --- a/broker/gen/model/File_writer_format.h +++ b/broker/gen/model/File_writer_format.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/File_writer_settings.cpp b/broker/gen/model/File_writer_settings.cpp index 0032c7724..c71993006 100644 --- a/broker/gen/model/File_writer_settings.cpp +++ b/broker/gen/model/File_writer_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/File_writer_settings.h b/broker/gen/model/File_writer_settings.h index d14cff05a..63e72ad39 100644 --- a/broker/gen/model/File_writer_settings.h +++ b/broker/gen/model/File_writer_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Fpga_status_inner.cpp b/broker/gen/model/Fpga_status_inner.cpp index 3c6286c01..c07654f3c 100644 --- a/broker/gen/model/Fpga_status_inner.cpp +++ b/broker/gen/model/Fpga_status_inner.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Fpga_status_inner.h b/broker/gen/model/Fpga_status_inner.h index 61bbbbb40..b143f2215 100644 --- a/broker/gen/model/Fpga_status_inner.h +++ b/broker/gen/model/Fpga_status_inner.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Geom_refinement_algorithm.cpp b/broker/gen/model/Geom_refinement_algorithm.cpp index 3332c5e65..6dd36ca50 100644 --- a/broker/gen/model/Geom_refinement_algorithm.cpp +++ b/broker/gen/model/Geom_refinement_algorithm.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Geom_refinement_algorithm.h b/broker/gen/model/Geom_refinement_algorithm.h index 6cb37b28b..5e2c31473 100644 --- a/broker/gen/model/Geom_refinement_algorithm.h +++ b/broker/gen/model/Geom_refinement_algorithm.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Grid_scan.cpp b/broker/gen/model/Grid_scan.cpp index 1fd8e01bf..30f82608d 100644 --- a/broker/gen/model/Grid_scan.cpp +++ b/broker/gen/model/Grid_scan.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Grid_scan.h b/broker/gen/model/Grid_scan.h index cee76dea7..44aba0284 100644 --- a/broker/gen/model/Grid_scan.h +++ b/broker/gen/model/Grid_scan.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Helpers.cpp b/broker/gen/model/Helpers.cpp index 7ddfe3cde..1e173d751 100644 --- a/broker/gen/model/Helpers.cpp +++ b/broker/gen/model/Helpers.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Helpers.h b/broker/gen/model/Helpers.h index d0c3e01b9..d168f38df 100644 --- a/broker/gen/model/Helpers.h +++ b/broker/gen/model/Helpers.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_buffer_status.cpp b/broker/gen/model/Image_buffer_status.cpp index 3470aa238..2ea9ab1fe 100644 --- a/broker/gen/model/Image_buffer_status.cpp +++ b/broker/gen/model/Image_buffer_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_buffer_status.h b/broker/gen/model/Image_buffer_status.h index 975a44332..e505e17e4 100644 --- a/broker/gen/model/Image_buffer_status.h +++ b/broker/gen/model/Image_buffer_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_format_settings.cpp b/broker/gen/model/Image_format_settings.cpp index c0e8418f4..103a31df2 100644 --- a/broker/gen/model/Image_format_settings.cpp +++ b/broker/gen/model/Image_format_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_format_settings.h b/broker/gen/model/Image_format_settings.h index a177753f6..52ba959c8 100644 --- a/broker/gen/model/Image_format_settings.h +++ b/broker/gen/model/Image_format_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_pusher_status.cpp b/broker/gen/model/Image_pusher_status.cpp index 4371e6ac8..5c1f947c2 100644 --- a/broker/gen/model/Image_pusher_status.cpp +++ b/broker/gen/model/Image_pusher_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_pusher_status.h b/broker/gen/model/Image_pusher_status.h index 4b16c62cf..fb9df6a6d 100644 --- a/broker/gen/model/Image_pusher_status.h +++ b/broker/gen/model/Image_pusher_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_pusher_type.cpp b/broker/gen/model/Image_pusher_type.cpp index e425dc6c3..f444201b1 100644 --- a/broker/gen/model/Image_pusher_type.cpp +++ b/broker/gen/model/Image_pusher_type.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Image_pusher_type.h b/broker/gen/model/Image_pusher_type.h index 1fa5d7130..a2c79900a 100644 --- a/broker/gen/model/Image_pusher_type.h +++ b/broker/gen/model/Image_pusher_type.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Indexing_algorithm.cpp b/broker/gen/model/Indexing_algorithm.cpp index 1230d8a4b..486aaf2f6 100644 --- a/broker/gen/model/Indexing_algorithm.cpp +++ b/broker/gen/model/Indexing_algorithm.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Indexing_algorithm.h b/broker/gen/model/Indexing_algorithm.h index bae3bbf8d..6d8ea4b93 100644 --- a/broker/gen/model/Indexing_algorithm.h +++ b/broker/gen/model/Indexing_algorithm.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Indexing_settings.cpp b/broker/gen/model/Indexing_settings.cpp index dbee64636..38d02d692 100644 --- a/broker/gen/model/Indexing_settings.cpp +++ b/broker/gen/model/Indexing_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Indexing_settings.h b/broker/gen/model/Indexing_settings.h index 61e0cba3e..e610d0830 100644 --- a/broker/gen/model/Indexing_settings.h +++ b/broker/gen/model/Indexing_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Instrument_metadata.cpp b/broker/gen/model/Instrument_metadata.cpp index 5211c4cf2..243fb960f 100644 --- a/broker/gen/model/Instrument_metadata.cpp +++ b/broker/gen/model/Instrument_metadata.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Instrument_metadata.h b/broker/gen/model/Instrument_metadata.h index 89748a30a..1f9f43f67 100644 --- a/broker/gen/model/Instrument_metadata.h +++ b/broker/gen/model/Instrument_metadata.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Integration_model.cpp b/broker/gen/model/Integration_model.cpp index d8c3ffd3c..f427b9119 100644 --- a/broker/gen/model/Integration_model.cpp +++ b/broker/gen/model/Integration_model.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Integration_model.h b/broker/gen/model/Integration_model.h index 4445967f5..946e1d5ce 100644 --- a/broker/gen/model/Integration_model.h +++ b/broker/gen/model/Integration_model.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Jfjoch_settings.cpp b/broker/gen/model/Jfjoch_settings.cpp index a9075174e..cc348b97f 100644 --- a/broker/gen/model/Jfjoch_settings.cpp +++ b/broker/gen/model/Jfjoch_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Jfjoch_settings.h b/broker/gen/model/Jfjoch_settings.h index f41050629..7e100951d 100644 --- a/broker/gen/model/Jfjoch_settings.h +++ b/broker/gen/model/Jfjoch_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Jfjoch_statistics.cpp b/broker/gen/model/Jfjoch_statistics.cpp index 411fa0655..a112d02a7 100644 --- a/broker/gen/model/Jfjoch_statistics.cpp +++ b/broker/gen/model/Jfjoch_statistics.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Jfjoch_statistics.h b/broker/gen/model/Jfjoch_statistics.h index dcd06d807..494a90a06 100644 --- a/broker/gen/model/Jfjoch_statistics.h +++ b/broker/gen/model/Jfjoch_statistics.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Measurement_statistics.cpp b/broker/gen/model/Measurement_statistics.cpp index 40c6aa250..50360ea57 100644 --- a/broker/gen/model/Measurement_statistics.cpp +++ b/broker/gen/model/Measurement_statistics.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Measurement_statistics.h b/broker/gen/model/Measurement_statistics.h index b94d10cfd..2b5d850e6 100644 --- a/broker/gen/model/Measurement_statistics.h +++ b/broker/gen/model/Measurement_statistics.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Pcie_devices_inner.cpp b/broker/gen/model/Pcie_devices_inner.cpp index 45f112b23..8b5fd7696 100644 --- a/broker/gen/model/Pcie_devices_inner.cpp +++ b/broker/gen/model/Pcie_devices_inner.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Pcie_devices_inner.h b/broker/gen/model/Pcie_devices_inner.h index ccb6ea27c..7d727e0f4 100644 --- a/broker/gen/model/Pcie_devices_inner.h +++ b/broker/gen/model/Pcie_devices_inner.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Pixel_mask_statistics.cpp b/broker/gen/model/Pixel_mask_statistics.cpp index 4282a8564..49be9f5fc 100644 --- a/broker/gen/model/Pixel_mask_statistics.cpp +++ b/broker/gen/model/Pixel_mask_statistics.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Pixel_mask_statistics.h b/broker/gen/model/Pixel_mask_statistics.h index 3e4c0e063..02b40444c 100644 --- a/broker/gen/model/Pixel_mask_statistics.h +++ b/broker/gen/model/Pixel_mask_statistics.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plot.cpp b/broker/gen/model/Plot.cpp index bdd1940c3..285961f49 100644 --- a/broker/gen/model/Plot.cpp +++ b/broker/gen/model/Plot.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plot.h b/broker/gen/model/Plot.h index 74910c46f..66e3348c0 100644 --- a/broker/gen/model/Plot.h +++ b/broker/gen/model/Plot.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plot_unit_x.cpp b/broker/gen/model/Plot_unit_x.cpp index bae5f1316..26b3ca835 100644 --- a/broker/gen/model/Plot_unit_x.cpp +++ b/broker/gen/model/Plot_unit_x.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plot_unit_x.h b/broker/gen/model/Plot_unit_x.h index 115ec5e4a..dc16fa29f 100644 --- a/broker/gen/model/Plot_unit_x.h +++ b/broker/gen/model/Plot_unit_x.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plots.cpp b/broker/gen/model/Plots.cpp index e51893833..58281b393 100644 --- a/broker/gen/model/Plots.cpp +++ b/broker/gen/model/Plots.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Plots.h b/broker/gen/model/Plots.h index 34147efb3..a58144f0c 100644 --- a/broker/gen/model/Plots.h +++ b/broker/gen/model/Plots.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_fit_sigma.cpp b/broker/gen/model/Powder_calibration_fit_sigma.cpp index c1b72c27a..8c91ea91d 100644 --- a/broker/gen/model/Powder_calibration_fit_sigma.cpp +++ b/broker/gen/model/Powder_calibration_fit_sigma.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_fit_sigma.h b/broker/gen/model/Powder_calibration_fit_sigma.h index fa7551dd3..38d42eaae 100644 --- a/broker/gen/model/Powder_calibration_fit_sigma.h +++ b/broker/gen/model/Powder_calibration_fit_sigma.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_output.cpp b/broker/gen/model/Powder_calibration_output.cpp index 4180f05b2..ded107086 100644 --- a/broker/gen/model/Powder_calibration_output.cpp +++ b/broker/gen/model/Powder_calibration_output.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_output.h b/broker/gen/model/Powder_calibration_output.h index 0ad009726..af0231874 100644 --- a/broker/gen/model/Powder_calibration_output.h +++ b/broker/gen/model/Powder_calibration_output.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_quality.cpp b/broker/gen/model/Powder_calibration_quality.cpp index c0460f452..423b8e8ec 100644 --- a/broker/gen/model/Powder_calibration_quality.cpp +++ b/broker/gen/model/Powder_calibration_quality.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_quality.h b/broker/gen/model/Powder_calibration_quality.h index 73dd89c28..a47f0e76f 100644 --- a/broker/gen/model/Powder_calibration_quality.h +++ b/broker/gen/model/Powder_calibration_quality.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_spot_check.cpp b/broker/gen/model/Powder_calibration_spot_check.cpp index 25a144799..877de4041 100644 --- a/broker/gen/model/Powder_calibration_spot_check.cpp +++ b/broker/gen/model/Powder_calibration_spot_check.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Powder_calibration_spot_check.h b/broker/gen/model/Powder_calibration_spot_check.h index f05677c37..1ef1b75ba 100644 --- a/broker/gen/model/Powder_calibration_spot_check.h +++ b/broker/gen/model/Powder_calibration_spot_check.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_azim_list.cpp b/broker/gen/model/Roi_azim_list.cpp index f2e91b20f..b13ffb7c5 100644 --- a/broker/gen/model/Roi_azim_list.cpp +++ b/broker/gen/model/Roi_azim_list.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_azim_list.h b/broker/gen/model/Roi_azim_list.h index ba6d57169..8b7f915aa 100644 --- a/broker/gen/model/Roi_azim_list.h +++ b/broker/gen/model/Roi_azim_list.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_azimuthal.cpp b/broker/gen/model/Roi_azimuthal.cpp index 29bf6b680..c8f319f3b 100644 --- a/broker/gen/model/Roi_azimuthal.cpp +++ b/broker/gen/model/Roi_azimuthal.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_azimuthal.h b/broker/gen/model/Roi_azimuthal.h index 1fb9d96b3..b15885155 100644 --- a/broker/gen/model/Roi_azimuthal.h +++ b/broker/gen/model/Roi_azimuthal.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_box.cpp b/broker/gen/model/Roi_box.cpp index 4d8c3d79b..ed20bbee3 100644 --- a/broker/gen/model/Roi_box.cpp +++ b/broker/gen/model/Roi_box.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_box.h b/broker/gen/model/Roi_box.h index ba8617d43..aa92fb4f3 100644 --- a/broker/gen/model/Roi_box.h +++ b/broker/gen/model/Roi_box.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_box_list.cpp b/broker/gen/model/Roi_box_list.cpp index 8b790af50..46401cc12 100644 --- a/broker/gen/model/Roi_box_list.cpp +++ b/broker/gen/model/Roi_box_list.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_box_list.h b/broker/gen/model/Roi_box_list.h index 45750e5d1..90dfbcd42 100644 --- a/broker/gen/model/Roi_box_list.h +++ b/broker/gen/model/Roi_box_list.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_circle.cpp b/broker/gen/model/Roi_circle.cpp index 81f517d53..f55912211 100644 --- a/broker/gen/model/Roi_circle.cpp +++ b/broker/gen/model/Roi_circle.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_circle.h b/broker/gen/model/Roi_circle.h index 87ddb8905..e96562b6d 100644 --- a/broker/gen/model/Roi_circle.h +++ b/broker/gen/model/Roi_circle.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_circle_list.cpp b/broker/gen/model/Roi_circle_list.cpp index 861c1179b..d6a2feb55 100644 --- a/broker/gen/model/Roi_circle_list.cpp +++ b/broker/gen/model/Roi_circle_list.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_circle_list.h b/broker/gen/model/Roi_circle_list.h index ea219340e..f7276fcb7 100644 --- a/broker/gen/model/Roi_circle_list.h +++ b/broker/gen/model/Roi_circle_list.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_definitions.cpp b/broker/gen/model/Roi_definitions.cpp index 82cde7be1..b6344bd10 100644 --- a/broker/gen/model/Roi_definitions.cpp +++ b/broker/gen/model/Roi_definitions.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Roi_definitions.h b/broker/gen/model/Roi_definitions.h index 3650b76db..6e6a9c266 100644 --- a/broker/gen/model/Roi_definitions.h +++ b/broker/gen/model/Roi_definitions.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rotation_axis.cpp b/broker/gen/model/Rotation_axis.cpp index 99cc9739f..f3faf4e4e 100644 --- a/broker/gen/model/Rotation_axis.cpp +++ b/broker/gen/model/Rotation_axis.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rotation_axis.h b/broker/gen/model/Rotation_axis.h index 83e78112c..124f40300 100644 --- a/broker/gen/model/Rotation_axis.h +++ b/broker/gen/model/Rotation_axis.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_live_status.cpp b/broker/gen/model/Rugnux_live_status.cpp index d0382a3a2..92daa9e8f 100644 --- a/broker/gen/model/Rugnux_live_status.cpp +++ b/broker/gen/model/Rugnux_live_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_live_status.h b/broker/gen/model/Rugnux_live_status.h index 2dd4d359c..92d0e9399 100644 --- a/broker/gen/model/Rugnux_live_status.h +++ b/broker/gen/model/Rugnux_live_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_live_step.cpp b/broker/gen/model/Rugnux_live_step.cpp index c1dd2b171..3db9278a6 100644 --- a/broker/gen/model/Rugnux_live_step.cpp +++ b/broker/gen/model/Rugnux_live_step.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_live_step.h b/broker/gen/model/Rugnux_live_step.h index 7f4d1fe91..f60d957c7 100644 --- a/broker/gen/model/Rugnux_live_step.h +++ b/broker/gen/model/Rugnux_live_step.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_settings.cpp b/broker/gen/model/Rugnux_settings.cpp index f70739811..65483eb9c 100644 --- a/broker/gen/model/Rugnux_settings.cpp +++ b/broker/gen/model/Rugnux_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_settings.h b/broker/gen/model/Rugnux_settings.h index 252dabe36..8a035fbfa 100644 --- a/broker/gen/model/Rugnux_settings.h +++ b/broker/gen/model/Rugnux_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_status.cpp b/broker/gen/model/Rugnux_status.cpp index f7624b0bc..31e566564 100644 --- a/broker/gen/model/Rugnux_status.cpp +++ b/broker/gen/model/Rugnux_status.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_status.h b/broker/gen/model/Rugnux_status.h index cc187fbec..662f0c0fb 100644 --- a/broker/gen/model/Rugnux_status.h +++ b/broker/gen/model/Rugnux_status.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_summary_row.cpp b/broker/gen/model/Rugnux_summary_row.cpp index 076d5e5cf..8db2fdf5f 100644 --- a/broker/gen/model/Rugnux_summary_row.cpp +++ b/broker/gen/model/Rugnux_summary_row.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Rugnux_summary_row.h b/broker/gen/model/Rugnux_summary_row.h index 0f933b8ec..cc9c31334 100644 --- a/broker/gen/model/Rugnux_summary_row.h +++ b/broker/gen/model/Rugnux_summary_row.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Scan_result.cpp b/broker/gen/model/Scan_result.cpp index b8f5b103e..bbfb6bc51 100644 --- a/broker/gen/model/Scan_result.cpp +++ b/broker/gen/model/Scan_result.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Scan_result.h b/broker/gen/model/Scan_result.h index a0bcc97e8..b57362156 100644 --- a/broker/gen/model/Scan_result.h +++ b/broker/gen/model/Scan_result.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Scan_result_images_inner.cpp b/broker/gen/model/Scan_result_images_inner.cpp index f4415e936..5d3683bd3 100644 --- a/broker/gen/model/Scan_result_images_inner.cpp +++ b/broker/gen/model/Scan_result_images_inner.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Scan_result_images_inner.h b/broker/gen/model/Scan_result_images_inner.h index e5a2748df..d0e019b56 100644 --- a/broker/gen/model/Scan_result_images_inner.h +++ b/broker/gen/model/Scan_result_images_inner.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Spot_finding_settings.cpp b/broker/gen/model/Spot_finding_settings.cpp index 72fb87a78..77f48415f 100644 --- a/broker/gen/model/Spot_finding_settings.cpp +++ b/broker/gen/model/Spot_finding_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Spot_finding_settings.h b/broker/gen/model/Spot_finding_settings.h index 28f4e111a..9a0d4bbcd 100644 --- a/broker/gen/model/Spot_finding_settings.h +++ b/broker/gen/model/Spot_finding_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Standard_detector_geometry.cpp b/broker/gen/model/Standard_detector_geometry.cpp index 36a08aab6..bd19b4e97 100644 --- a/broker/gen/model/Standard_detector_geometry.cpp +++ b/broker/gen/model/Standard_detector_geometry.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Standard_detector_geometry.h b/broker/gen/model/Standard_detector_geometry.h index ba628f8f0..1870ed6d3 100644 --- a/broker/gen/model/Standard_detector_geometry.h +++ b/broker/gen/model/Standard_detector_geometry.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Tcp_settings.cpp b/broker/gen/model/Tcp_settings.cpp index 907ffd0ec..1332d13e9 100644 --- a/broker/gen/model/Tcp_settings.cpp +++ b/broker/gen/model/Tcp_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Tcp_settings.h b/broker/gen/model/Tcp_settings.h index 6f231af30..993ee4c7a 100644 --- a/broker/gen/model/Tcp_settings.h +++ b/broker/gen/model/Tcp_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Unit_cell.cpp b/broker/gen/model/Unit_cell.cpp index 4bb1cf7cb..1406dcee7 100644 --- a/broker/gen/model/Unit_cell.cpp +++ b/broker/gen/model/Unit_cell.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Unit_cell.h b/broker/gen/model/Unit_cell.h index 08ae72199..66da75868 100644 --- a/broker/gen/model/Unit_cell.h +++ b/broker/gen/model/Unit_cell.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_metadata_settings.cpp b/broker/gen/model/Zeromq_metadata_settings.cpp index cee6e9997..f122f102a 100644 --- a/broker/gen/model/Zeromq_metadata_settings.cpp +++ b/broker/gen/model/Zeromq_metadata_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_metadata_settings.h b/broker/gen/model/Zeromq_metadata_settings.h index 67c223389..1ab0704cc 100644 --- a/broker/gen/model/Zeromq_metadata_settings.h +++ b/broker/gen/model/Zeromq_metadata_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_preview_settings.cpp b/broker/gen/model/Zeromq_preview_settings.cpp index af833b377..b8d423fbd 100644 --- a/broker/gen/model/Zeromq_preview_settings.cpp +++ b/broker/gen/model/Zeromq_preview_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_preview_settings.h b/broker/gen/model/Zeromq_preview_settings.h index 60c759fff..c6bde3c38 100644 --- a/broker/gen/model/Zeromq_preview_settings.h +++ b/broker/gen/model/Zeromq_preview_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_settings.cpp b/broker/gen/model/Zeromq_settings.cpp index 5cf921e73..9f03f3680 100644 --- a/broker/gen/model/Zeromq_settings.cpp +++ b/broker/gen/model/Zeromq_settings.cpp @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/gen/model/Zeromq_settings.h b/broker/gen/model/Zeromq_settings.h index 0a7e25fc9..c2015aba8 100644 --- a/broker/gen/model/Zeromq_settings.h +++ b/broker/gen/model/Zeromq_settings.h @@ -2,7 +2,7 @@ * Jungfraujoch * API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. * -* The version of the OpenAPI document: 1.0.0-rc.179 +* The version of the OpenAPI document: 1.0.0-rc.180 * Contact: filip.leonarski@psi.ch * * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). diff --git a/broker/jfjoch_api.yaml b/broker/jfjoch_api.yaml index ea8c7b01d..6fb927c8c 100644 --- a/broker/jfjoch_api.yaml +++ b/broker/jfjoch_api.yaml @@ -22,7 +22,7 @@ info: requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. - version: 1.0.0-rc.179 + version: 1.0.0-rc.180 contact: name: Filip Leonarski (Paul Scherrer Institute) email: filip.leonarski@psi.ch diff --git a/broker/redoc-static.html b/broker/redoc-static.html index 04e0ab299..f760cd30c 100644 --- a/broker/redoc-static.html +++ b/broker/redoc-static.html @@ -426,7 +426,7 @@ This format doesn't transmit information about X-axis, only values, so it i 55.627 l 55.6165,55.627 -231.245496,231.24803 c -127.185,127.1864 -231.5279,231.248 -231.873,231.248 -0.3451,0 -104.688, -104.0616 -231.873,-231.248 z - " fill="currentColor">

Jungfraujoch (1.0.0-rc.179)

Download OpenAPI specification:

Filip Leonarski (Paul Scherrer Institute): filip.leonarski@psi.ch License: GPL-3.0

API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). + " fill="currentColor">

Jungfraujoch (1.0.0-rc.180)

Download OpenAPI specification:

Filip Leonarski (Paul Scherrer Institute): filip.leonarski@psi.ch License: GPL-3.0

API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates.

License Clarification

While this API definition is licensed under GPL-3.0, the GPL copyleft provisions do not apply @@ -1115,7 +1115,7 @@ then image might be replaced in the buffer between calling /images and /image.cb

+ + + +
+ Jungfraujoch + + +
+ +
+ +
+ +
+

Paul Scherrer Institute · open source

+

From the detector to the merged reflections.

+

Software for X-ray diffraction data: Rugnux processes a stored + dataset with one command, the Viewer shows what is in it, and + Jungfraujoch acquires it from the detector at full speed.

+ +

rugnux <diffraction image file>is the whole command: cell, space group and resolution come out of the data.

+
+
+ +
+
+ +
+

Data processing

+

Rugnux

+

Takes a macromolecular diffraction dataset, a rotation sweep or serial stills, from the + images to merged reflections: spot finding, indexing, integration, scaling and merging, with + the space group, cell and resolution decided from the data and a report that says on what + evidence. Writes .mtz, .cif and .hkl for the programs + that come next.

+

Linux · macOS · Windows · command line · fast on an NVIDIA GPU, works without one

+ +
+ +
+

Desktop application

+

Jungfraujoch Viewer

+

Shows what is in a dataset: every image with its spots, predictions and resolution rings, + per-image statistics over the sweep, grid-scan maps, and the same processing pipeline as + Rugnux, run from a settings panel on the open file. Follows a live collection from a running + Jungfraujoch broker.

+

Linux · macOS · Windows · Qt 6

+ +
+ +
+

Data acquisition

+

Jungfraujoch

+

The acquisition and real-time analysis system for the PSI JUNGFRAU and EIGER detectors, + and for DECTRIS detectors through their control unit: an FPGA and GPU pipeline that takes + the detector's frames at full rate, analyses them on the fly, streams them to the NXmx HDF5 + writer and serves a web interface and REST API to the beamline.

+

Linux servers · AMD Alveo U55C FPGA · NVIDIA GPUs

+ +
+ +
+
+ +
+
+

Download

+

Pre-built, signed where the platform asks for it, nothing to install beside them. +

+
+ +
+

Rugnux

+

One self-contained executable. Unpack the archive into a directory of its own and run + bin/rugnux; no CUDA toolkit, no Qt, no service. On a machine with an NVIDIA GPU + take the GPU build, which also runs without one. Details, packages and building from source.

+ {{downloads:rugnux}} +
+ +
+

Jungfraujoch Viewer

+

A desktop application with the Qt runtime included: a portable archive on Linux, a + notarized disk image on macOS, an installer on Windows. Details and building from source.

+ {{downloads:viewer}} +
+ +
+

Jungfraujoch, the acquisition system

+

Installed on the beamline's Linux servers from the RPM and APT + repositories (jfjoch, jfjoch-writer, jfjoch-driver-dkms, + jfjoch-viewer, rugnux), with the FPGA firmware and the writer's + packages attached to every release. + Deployment is the step-by-step guide; Release contents says what each package needs on the machine.

+
+
+ +
+

Free to use, in academia and industry

+

Rugnux, the viewer and the Jungfraujoch services are free software under the + GNU General Public License v3; the FPGA design is released under the + CERN Open Hardware Licence v2, strongly reciprocal. Both let + anyone use, study and modify the software and the hardware design at no charge, commercial use + included; what they ask is that a modified version which is passed on is shared under the same + terms. The released binaries bundle third-party components under GPL-compatible licences, and the + CUDA builds the NVIDIA CUDA runtime under NVIDIA's EULA: see the + third-party notices.

+
+ +
+ + + + + + + diff --git a/docs/landing/landing.css b/docs/landing/landing.css new file mode 100644 index 000000000..f95f805fc --- /dev/null +++ b/docs/landing/landing.css @@ -0,0 +1,369 @@ +/* The front page (docs/landing/index.html). Self-contained: system fonts, no framework, one + palette per theme. The download blocks use the same jfj-dl markup as the Sphinx download pages + (docs/_ext/jfjoch_downloads.py) and are styled here for this page. */ + +:root { + --bg: #fbfbfd; + --bg-raised: #ffffff; + --bg-tint: #eef0fa; + --fg: #1b1d2a; + --fg-muted: #5b6072; + --line: rgba(27, 29, 42, 0.12); + --primary: #3949ab; + --primary-strong: #2c3a8f; + --primary-soft: rgba(57, 73, 171, 0.1); + --on-primary: #ffffff; + --accent: #e9a23b; + --accent-soft: rgba(233, 162, 59, 0.16); + --shadow: 0 1px 2px rgba(27, 29, 42, 0.06), 0 8px 24px rgba(27, 29, 42, 0.06); + --ring: rgba(57, 73, 171, 0.22); + --spot: rgba(57, 73, 171, 0.55); +} + +@media (prefers-color-scheme: dark) { + :root:not([data-theme="light"]) { + --bg: #11131c; + --bg-raised: #181b27; + --bg-tint: #1d2130; + --fg: #e8e9f1; + --fg-muted: #9ea3b8; + --line: rgba(232, 233, 241, 0.12); + --primary: #8e9dff; + --primary-strong: #aab5ff; + --primary-soft: rgba(142, 157, 255, 0.14); + --on-primary: #0d1030; + --accent: #f0b65b; + --accent-soft: rgba(240, 182, 91, 0.16); + --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 24px rgba(0, 0, 0, 0.35); + --ring: rgba(142, 157, 255, 0.24); + --spot: rgba(170, 181, 255, 0.7); + } +} + +:root[data-theme="dark"] { + --bg: #11131c; + --bg-raised: #181b27; + --bg-tint: #1d2130; + --fg: #e8e9f1; + --fg-muted: #9ea3b8; + --line: rgba(232, 233, 241, 0.12); + --primary: #8e9dff; + --primary-strong: #aab5ff; + --primary-soft: rgba(142, 157, 255, 0.14); + --on-primary: #0d1030; + --accent: #f0b65b; + --accent-soft: rgba(240, 182, 91, 0.16); + --shadow: 0 1px 2px rgba(0, 0, 0, 0.4), 0 8px 24px rgba(0, 0, 0, 0.35); + --ring: rgba(142, 157, 255, 0.24); + --spot: rgba(170, 181, 255, 0.7); +} + +* { box-sizing: border-box; } + +html { scroll-behavior: smooth; } + +body { + margin: 0; + background: var(--bg); + color: var(--fg); + font: 16px/1.55 -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; + -webkit-font-smoothing: antialiased; +} + +a { color: var(--primary); text-decoration: none; } +a:hover { color: var(--primary-strong); text-decoration: underline; } + +code { + font-family: "SFMono-Regular", Menlo, Consolas, "Roboto Mono", monospace; + font-size: 0.92em; + background: var(--primary-soft); + padding: 0.1em 0.35em; + border-radius: 4px; +} + +h1, h2, h3 { line-height: 1.2; letter-spacing: -0.01em; margin: 0; } + +main > section, .top, .foot { + max-width: 1120px; + margin: 0 auto; + padding: 0 24px; +} + +/* ---- header ---------------------------------------------------------------------------------- */ + +.top { + display: flex; + align-items: center; + gap: 24px; + padding-top: 18px; + padding-bottom: 18px; +} + +.brand { + display: inline-flex; + align-items: center; + gap: 10px; + color: var(--fg); + font-weight: 600; + font-size: 1.05em; +} +.brand:hover { text-decoration: none; } +.brand img { display: block; } + +.top__nav { display: flex; gap: 22px; margin-left: auto; font-weight: 500; } +.top__nav a { color: var(--fg-muted); } +.top__nav a:hover { color: var(--primary); text-decoration: none; } + +.theme-toggle { + display: inline-flex; + align-items: center; + justify-content: center; + width: 38px; height: 38px; + border: 1px solid var(--line); + border-radius: 50%; + background: var(--bg-raised); + color: var(--fg-muted); + cursor: pointer; +} +.theme-toggle:hover { color: var(--primary); border-color: var(--primary); } +.theme-toggle__moon { display: none; } +:root[data-theme="dark"] .theme-toggle__sun { display: none; } +:root[data-theme="dark"] .theme-toggle__moon { display: block; } +@media (prefers-color-scheme: dark) { + :root:not([data-theme="light"]) .theme-toggle__sun { display: none; } + :root:not([data-theme="light"]) .theme-toggle__moon { display: block; } +} + +/* ---- hero ------------------------------------------------------------------------------------ */ + +.hero { + position: relative; + display: grid; + grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); + align-items: center; + gap: 32px; + padding-top: 56px; + padding-bottom: 64px; +} + +.hero__art { + grid-column: 2; + grid-row: 1; + width: 100%; + max-width: 460px; + justify-self: end; + aspect-ratio: 1; +} +.hero__art .ring { fill: none; stroke: var(--ring); stroke-width: 1; } +.hero__art .ring--strong { stroke-width: 1.6; } +.hero__art .spot { fill: var(--spot); } +.hero__art .beam { stroke: var(--accent); stroke-width: 2; } + +.hero__text { grid-column: 1; grid-row: 1; max-width: 600px; } + +.eyebrow { + margin: 0 0 14px; + font-size: 0.78em; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--primary); +} + +.hero h1 { + font-size: clamp(2.1rem, 4.6vw, 3.4rem); + font-weight: 700; + letter-spacing: -0.025em; + margin-bottom: 18px; +} + +.lede { font-size: 1.2em; color: var(--fg-muted); margin: 0 0 26px; } +.lede strong { color: var(--fg); font-weight: 600; } + +.hero__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 26px; } + +.btn { + display: inline-block; + padding: 11px 20px; + border-radius: 8px; + font-weight: 600; + border: 1px solid transparent; + transition: transform 0.12s, box-shadow 0.12s, background 0.12s; +} +.btn:hover { text-decoration: none; transform: translateY(-1px); } +.btn--primary { background: var(--primary); color: var(--on-primary); box-shadow: var(--shadow); } +.btn--primary:hover { background: var(--primary-strong); color: var(--on-primary); } +.btn--ghost { border-color: var(--line); color: var(--fg); background: var(--bg-raised); } +.btn--ghost:hover { border-color: var(--primary); color: var(--primary); } + +.hero__run { + display: flex; + flex-wrap: wrap; + align-items: baseline; + gap: 10px 14px; + margin: 0; + color: var(--fg-muted); + font-size: 0.95em; +} +.hero__run code { font-size: 1em; padding: 0.35em 0.7em; } + +/* ---- programs -------------------------------------------------------------------------------- */ + +.programs { padding-bottom: 56px; } + +.programs__grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 20px; +} + +.program { + display: flex; + flex-direction: column; + padding: 24px 24px 20px; + border: 1px solid var(--line); + border-radius: 14px; + background: var(--bg-raised); + box-shadow: var(--shadow); +} +.program__kicker { + margin: 0 0 8px; + font-size: 0.74em; + font-weight: 700; + letter-spacing: 0.1em; + text-transform: uppercase; + color: var(--primary); +} +.program h2 { font-size: 1.45em; font-weight: 650; margin-bottom: 12px; } +.program > p:not([class]) { margin: 0 0 14px; color: var(--fg); flex: 1 1 auto; } +.program__meta { margin: 0 0 14px; font-size: 0.82em; color: var(--fg-muted); } +.program__links { + margin: 0; + padding-top: 14px; + border-top: 1px solid var(--line); + display: flex; + flex-wrap: wrap; + gap: 6px 18px; + font-weight: 500; +} +.program__links a:first-child { font-weight: 700; } + +/* ---- download -------------------------------------------------------------------------------- */ + +.download { + padding-top: 48px; + padding-bottom: 24px; + border-top: 1px solid var(--line); +} +.download__head { max-width: 640px; margin-bottom: 28px; } +.download__head h2 { font-size: 2em; font-weight: 700; margin-bottom: 10px; } +.download__head p { margin: 0; color: var(--fg-muted); font-size: 1.05em; } +.download__head [data-os-note]:not(:empty) { color: var(--fg); font-weight: 500; } + +.download__program { margin-bottom: 36px; } +.download__program h3 { font-size: 1.3em; font-weight: 650; margin-bottom: 8px; } +.download__program > p { margin: 0 0 16px; max-width: 720px; color: var(--fg-muted); } +.download__program--text > p { color: var(--fg); } + +.jfj-dl__release { margin: 0 0 14px; font-size: 0.95em; color: var(--fg-muted); } +.jfj-dl__release strong { color: var(--fg); } + +.jfj-dl__grid { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); + gap: 16px; +} + +.jfj-dl__card { + position: relative; + padding: 18px 18px 8px; + border: 1px solid var(--line); + border-radius: 12px; + background: var(--bg-raised); +} +.jfj-dl__card.is-yours { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-soft), var(--shadow); +} +.jfj-dl__card.is-yours::after { + content: "Your system"; + position: absolute; + top: -11px; right: 14px; + padding: 2px 10px; + border-radius: 999px; + background: var(--accent); + color: #1b1d2a; + font-size: 0.72em; + font-weight: 700; + letter-spacing: 0.04em; +} + +.jfj-dl__platform { font-size: 1.1em; font-weight: 650; margin-bottom: 12px; } + +a.jfj-dl__btn { + display: block; + margin-bottom: 10px; + padding: 10px 14px; + border: 1px solid var(--primary); + border-radius: 8px; + background: var(--primary); + color: var(--on-primary); + font-weight: 600; + line-height: 1.3; + transition: background 0.12s, box-shadow 0.12s; +} +a.jfj-dl__btn:hover { text-decoration: none; background: var(--primary-strong); box-shadow: var(--shadow); color: var(--on-primary); } +a.jfj-dl__btn--secondary { background: transparent; color: var(--primary); } +a.jfj-dl__btn--secondary:hover { background: var(--primary-soft); color: var(--primary-strong); } +a.jfj-dl__btn--missing, a.jfj-dl__btn--missing:hover { + background: transparent; + border-style: dashed; + border-color: var(--line); + color: var(--fg-muted); + box-shadow: none; + cursor: default; +} +.jfj-dl__file { + display: block; + margin-top: 2px; + font-family: "SFMono-Regular", Menlo, Consolas, "Roboto Mono", monospace; + font-size: 0.74em; + font-weight: 400; + opacity: 0.85; + word-break: break-all; +} +.jfj-dl__req { margin: 6px 0 8px; font-size: 0.82em; line-height: 1.45; color: var(--fg-muted); } +.jfj-dl__note { margin: 10px 0 0; font-size: 0.82em; color: var(--fg-muted); } +.jfj-dl__note:empty { display: none; } + +/* ---- licence, footer ------------------------------------------------------------------------- */ + +.licence { + padding-top: 40px; + padding-bottom: 48px; + border-top: 1px solid var(--line); +} +.licence h2 { font-size: 1.5em; font-weight: 650; margin-bottom: 12px; } +.licence p { margin: 0; max-width: 760px; color: var(--fg-muted); } + +.foot { + padding-top: 24px; + padding-bottom: 40px; + border-top: 1px solid var(--line); + font-size: 0.88em; + color: var(--fg-muted); +} +.foot p { margin: 0 0 6px; } + +/* ---- small screens --------------------------------------------------------------------------- */ + +@media (max-width: 760px) { + body { font-size: 15px; } + .top { gap: 14px; flex-wrap: wrap; } + .top__nav { gap: 14px; margin-left: 0; order: 3; width: 100%; font-size: 0.95em; } + .theme-toggle { margin-left: auto; } + .hero { grid-template-columns: 1fr; padding-top: 28px; padding-bottom: 40px; } + .hero__art { grid-column: 1; grid-row: 1; max-width: 220px; justify-self: center; opacity: 0.9; } + .hero__text { grid-row: 2; } + .programs__grid { grid-template-columns: 1fr; } +} diff --git a/docs/landing/landing.js b/docs/landing/landing.js new file mode 100644 index 000000000..c4fdd47f0 --- /dev/null +++ b/docs/landing/landing.js @@ -0,0 +1,60 @@ +// The front page: theme toggle, the hero's diffraction-pattern drawing, and the download section's +// "your system" highlight. The download buttons themselves are repointed at the newest release by +// _static/jfjoch_downloads.js, shared with the Sphinx download pages. +(function () { + // ---- theme: follows the system until the toggle is used, then remembered ----------------- + var root = document.documentElement; + var toggle = document.querySelector(".theme-toggle"); + function isDark() { + var set = root.getAttribute("data-theme"); + if (set) return set === "dark"; + return window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches; + } + if (toggle) toggle.addEventListener("click", function () { + var next = isDark() ? "light" : "dark"; + root.setAttribute("data-theme", next); + try { localStorage.setItem("jfj-theme", next); } catch (e) {} + }); + + // ---- hero art: resolution rings and a scatter of spots, the same every time -------------- + var art = document.querySelector(".hero__art"); + if (art) { + var seed = 7; + function rand() { seed = (seed * 16807) % 2147483647; return seed / 2147483647; } + var ns = "http://www.w3.org/2000/svg", out = []; + function el(name, attrs) { + var e = document.createElementNS(ns, name); + for (var k in attrs) e.setAttribute(k, attrs[k]); + return e; + } + var cx = 300, cy = 300; + [60, 110, 160, 210, 260].forEach(function (r, i) { + art.appendChild(el("circle", { cx: cx, cy: cy, r: r, "class": "ring" + (i === 2 ? " ring--strong" : "") })); + }); + // beam centre + art.appendChild(el("path", { d: "M" + (cx - 9) + " " + cy + "h18M" + cx + " " + (cy - 9) + "v18", "class": "beam" })); + // spots: denser near the middle, fainter and smaller towards the edge, a few bright ones + for (var i = 0; i < 230; i++) { + var a = rand() * Math.PI * 2; + var r = Math.sqrt(rand()) * 285; + if (r < 25) continue; + var x = cx + r * Math.cos(a), y = cy + r * Math.sin(a); + var fade = 1 - r / 320; + var size = 1.2 + fade * 2.2 * rand() + (rand() > 0.94 ? 2.5 : 0); + var c = el("circle", { cx: x.toFixed(1), cy: y.toFixed(1), r: size.toFixed(1), "class": "spot" }); + c.style.opacity = (0.25 + 0.75 * fade * rand()).toFixed(2); + art.appendChild(c); + } + } + + // ---- "your system": highlight the platform the browser runs on ---------------------------- + var ua = navigator.userAgent || "", platform = navigator.platform || ""; + var os = /Windows/.test(ua) ? "windows" : /Mac/.test(platform) || /Macintosh/.test(ua) ? "macos" : + /Linux|X11/.test(platform + ua) && !/Android/.test(ua) ? "linux" : null; + if (os) { + document.querySelectorAll('.jfj-dl__card[data-platform="' + os + '"]').forEach(function (c) { c.classList.add("is-yours"); }); + var note = document.querySelector("[data-os-note]"); + var names = { windows: "Windows", macos: "macOS", linux: "Linux" }; + if (note) note.textContent = "The " + names[os] + " builds are marked for you."; + } +})(); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 0ab6a4cdc..3b6287ac6 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -254,7 +254,7 @@ function App() { )}, { id: 'documentation', label: 'Documentation', icon: , render: () => ( - + )}, { id: 'changelog', label: 'Changelog', icon: , render: () => ( -- 2.54.0 From e58453a6936579ce15320541e69cd783c6a95a10 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 25 Oct 2026 00:03:05 +0200 Subject: [PATCH 017/122] Refinement restraints: the CCP4 Monomer Library subset embedded in rugnux, read through gemmi's MonLib A restraint dictionary carried in the binary, so refinement reads nothing from disk and needs no CLIBD_MON: the 20 amino acids and MSE, the DNA/RNA nucleotides, ATP/ADP/AMP/GTP/GDP/GMP, DMSO, PEG fragments (PEG, PGE, PG4, 1PE), GOL, EDO, SO4, PO4, ACT, MPD, water and common ions - copied verbatim from the CCP4 Monomer Library (LGPL-3.0) - plus links_and_mods.cif cut down to the links and modifications those compounds can take (peptide, cis-peptide, proline, N-methyl, disulfide, nucleic-acid backbone, termini, metal-Cys/His) and ener_lib.cif cut to its atom-type table. monomers/update_monomers.py holds the compound list and regenerates the subset; CMake embeds every .cif of the directory as string pieces under MSVC's literal limit; EmbeddedMonomerLibrary() parses them from memory into a gemmi::MonLib once per process. About 0.7 MB of text in the binary. gemmi v0.7.5's monlib.cpp, topo.cpp and riding_h.cpp vendored verbatim (prepare_topology). Licence text in licenses/, rows and a note in THIRD_PARTY_NOTICES.md. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit 38034718052c4a300691393b5b817f476c83dfc2) --- .gitignore | 2 + THIRD_PARTY_NOTICES.md | 7 + gemmi_gph/CMakeLists.txt | 4 + gemmi_gph/monlib.cpp | 633 +++ gemmi_gph/riding_h.cpp | 480 ++ gemmi_gph/topo.cpp | 1084 ++++ .../structure_refinement/CMakeLists.txt | 39 +- .../structure_refinement/MonomerLibrary.cpp | 41 + .../structure_refinement/MonomerLibrary.h | 25 + .../structure_refinement/monomers/1PE.cif | 228 + .../structure_refinement/monomers/A.cif | 271 + .../structure_refinement/monomers/ACT.cif | 104 + .../structure_refinement/monomers/ADP.cif | 283 + .../structure_refinement/monomers/ALA.cif | 182 + .../structure_refinement/monomers/AMP.cif | 279 + .../structure_refinement/monomers/ARG.cif | 284 + .../structure_refinement/monomers/ASN.cif | 214 + .../structure_refinement/monomers/ASP.cif | 198 + .../structure_refinement/monomers/ATP.cif | 301 ++ .../structure_refinement/monomers/BR.cif | 30 + .../structure_refinement/monomers/C.cif | 255 + .../structure_refinement/monomers/CA.cif | 30 + .../structure_refinement/monomers/CD.cif | 30 + .../structure_refinement/monomers/CL.cif | 30 + .../structure_refinement/monomers/CO.cif | 30 + .../structure_refinement/monomers/COPYING | 166 + .../structure_refinement/monomers/CU.cif | 30 + .../structure_refinement/monomers/CYS.cif | 188 + .../structure_refinement/monomers/DA.cif | 266 + .../structure_refinement/monomers/DC.cif | 250 + .../structure_refinement/monomers/DG.cif | 271 + .../structure_refinement/monomers/DMS.cif | 117 + .../structure_refinement/monomers/DT.cif | 256 + .../structure_refinement/monomers/EDO.cif | 108 + .../structure_refinement/monomers/FE.cif | 30 + .../structure_refinement/monomers/FE2.cif | 30 + .../structure_refinement/monomers/G.cif | 276 + .../structure_refinement/monomers/GDP.cif | 299 ++ .../structure_refinement/monomers/GLN.cif | 233 + .../structure_refinement/monomers/GLU.cif | 217 + .../structure_refinement/monomers/GLY.cif | 153 + .../structure_refinement/monomers/GMP.cif | 256 + .../structure_refinement/monomers/GOL.cif | 134 + .../structure_refinement/monomers/GTP.cif | 312 ++ .../structure_refinement/monomers/HIS.cif | 247 + .../structure_refinement/monomers/HOH.cif | 79 + .../structure_refinement/monomers/ILE.cif | 240 + .../structure_refinement/monomers/IOD.cif | 30 + .../structure_refinement/monomers/K.cif | 30 + .../structure_refinement/monomers/LEU.cif | 240 + .../structure_refinement/monomers/LYS.cif | 258 + .../structure_refinement/monomers/MET.cif | 226 + .../structure_refinement/monomers/MG.cif | 30 + .../structure_refinement/monomers/MN.cif | 30 + .../structure_refinement/monomers/MPD.cif | 170 + .../structure_refinement/monomers/MSE.cif | 201 + .../structure_refinement/monomers/NA.cif | 30 + .../structure_refinement/monomers/NI.cif | 30 + .../structure_refinement/monomers/PEG.cif | 138 + .../structure_refinement/monomers/PG4.cif | 198 + .../structure_refinement/monomers/PGE.cif | 168 + .../structure_refinement/monomers/PHE.cif | 261 + .../structure_refinement/monomers/PO4.cif | 86 + .../structure_refinement/monomers/PRO.cif | 216 + .../structure_refinement/monomers/SER.cif | 188 + .../structure_refinement/monomers/SO4.cif | 86 + .../structure_refinement/monomers/THR.cif | 208 + .../structure_refinement/monomers/TRP.cif | 301 ++ .../structure_refinement/monomers/TYR.cif | 268 + .../structure_refinement/monomers/U.cif | 248 + .../structure_refinement/monomers/VAL.cif | 221 + .../structure_refinement/monomers/ZN.cif | 30 + .../monomers/ener_lib.cif | 219 + .../monomers/links_and_mods.cif | 4698 +++++++++++++++++ .../monomers/update_monomers.py | 96 + licenses/COLLECT.sh | 1 + licenses/ccp4-monomer-library.txt | 166 + 77 files changed, 18293 insertions(+), 1 deletion(-) create mode 100644 gemmi_gph/monlib.cpp create mode 100644 gemmi_gph/riding_h.cpp create mode 100644 gemmi_gph/topo.cpp create mode 100644 image_analysis/structure_refinement/MonomerLibrary.cpp create mode 100644 image_analysis/structure_refinement/MonomerLibrary.h create mode 100644 image_analysis/structure_refinement/monomers/1PE.cif create mode 100644 image_analysis/structure_refinement/monomers/A.cif create mode 100644 image_analysis/structure_refinement/monomers/ACT.cif create mode 100644 image_analysis/structure_refinement/monomers/ADP.cif create mode 100644 image_analysis/structure_refinement/monomers/ALA.cif create mode 100644 image_analysis/structure_refinement/monomers/AMP.cif create mode 100644 image_analysis/structure_refinement/monomers/ARG.cif create mode 100644 image_analysis/structure_refinement/monomers/ASN.cif create mode 100644 image_analysis/structure_refinement/monomers/ASP.cif create mode 100644 image_analysis/structure_refinement/monomers/ATP.cif create mode 100644 image_analysis/structure_refinement/monomers/BR.cif create mode 100644 image_analysis/structure_refinement/monomers/C.cif create mode 100644 image_analysis/structure_refinement/monomers/CA.cif create mode 100644 image_analysis/structure_refinement/monomers/CD.cif create mode 100644 image_analysis/structure_refinement/monomers/CL.cif create mode 100644 image_analysis/structure_refinement/monomers/CO.cif create mode 100644 image_analysis/structure_refinement/monomers/COPYING create mode 100644 image_analysis/structure_refinement/monomers/CU.cif create mode 100644 image_analysis/structure_refinement/monomers/CYS.cif create mode 100644 image_analysis/structure_refinement/monomers/DA.cif create mode 100644 image_analysis/structure_refinement/monomers/DC.cif create mode 100644 image_analysis/structure_refinement/monomers/DG.cif create mode 100644 image_analysis/structure_refinement/monomers/DMS.cif create mode 100644 image_analysis/structure_refinement/monomers/DT.cif create mode 100644 image_analysis/structure_refinement/monomers/EDO.cif create mode 100644 image_analysis/structure_refinement/monomers/FE.cif create mode 100644 image_analysis/structure_refinement/monomers/FE2.cif create mode 100644 image_analysis/structure_refinement/monomers/G.cif create mode 100644 image_analysis/structure_refinement/monomers/GDP.cif create mode 100644 image_analysis/structure_refinement/monomers/GLN.cif create mode 100644 image_analysis/structure_refinement/monomers/GLU.cif create mode 100644 image_analysis/structure_refinement/monomers/GLY.cif create mode 100644 image_analysis/structure_refinement/monomers/GMP.cif create mode 100644 image_analysis/structure_refinement/monomers/GOL.cif create mode 100644 image_analysis/structure_refinement/monomers/GTP.cif create mode 100644 image_analysis/structure_refinement/monomers/HIS.cif create mode 100644 image_analysis/structure_refinement/monomers/HOH.cif create mode 100644 image_analysis/structure_refinement/monomers/ILE.cif create mode 100644 image_analysis/structure_refinement/monomers/IOD.cif create mode 100644 image_analysis/structure_refinement/monomers/K.cif create mode 100644 image_analysis/structure_refinement/monomers/LEU.cif create mode 100644 image_analysis/structure_refinement/monomers/LYS.cif create mode 100644 image_analysis/structure_refinement/monomers/MET.cif create mode 100644 image_analysis/structure_refinement/monomers/MG.cif create mode 100644 image_analysis/structure_refinement/monomers/MN.cif create mode 100644 image_analysis/structure_refinement/monomers/MPD.cif create mode 100644 image_analysis/structure_refinement/monomers/MSE.cif create mode 100644 image_analysis/structure_refinement/monomers/NA.cif create mode 100644 image_analysis/structure_refinement/monomers/NI.cif create mode 100644 image_analysis/structure_refinement/monomers/PEG.cif create mode 100644 image_analysis/structure_refinement/monomers/PG4.cif create mode 100644 image_analysis/structure_refinement/monomers/PGE.cif create mode 100644 image_analysis/structure_refinement/monomers/PHE.cif create mode 100644 image_analysis/structure_refinement/monomers/PO4.cif create mode 100644 image_analysis/structure_refinement/monomers/PRO.cif create mode 100644 image_analysis/structure_refinement/monomers/SER.cif create mode 100644 image_analysis/structure_refinement/monomers/SO4.cif create mode 100644 image_analysis/structure_refinement/monomers/THR.cif create mode 100644 image_analysis/structure_refinement/monomers/TRP.cif create mode 100644 image_analysis/structure_refinement/monomers/TYR.cif create mode 100644 image_analysis/structure_refinement/monomers/U.cif create mode 100644 image_analysis/structure_refinement/monomers/VAL.cif create mode 100644 image_analysis/structure_refinement/monomers/ZN.cif create mode 100644 image_analysis/structure_refinement/monomers/ener_lib.cif create mode 100644 image_analysis/structure_refinement/monomers/links_and_mods.cif create mode 100644 image_analysis/structure_refinement/monomers/update_monomers.py create mode 100644 licenses/ccp4-monomer-library.txt diff --git a/.gitignore b/.gitignore index 69b687423..3ce9253bb 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,5 @@ __pycache__/ # tools/battery: the local site config (paths of this machine, private manifest); site.example.json is the template tools/battery/site.json +# the restraint dictionary rugnux embeds (image_analysis/structure_refinement/monomers/update_monomers.py) +!image_analysis/structure_refinement/monomers/*.cif diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index 3093e081e..95d52f504 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -61,6 +61,7 @@ These live in the source tree (see the path) rather than being fetched; traccc a | [LZ4](https://github.com/lz4/lz4) | `compression/lz4/` | Yann Collet | BSD-2-Clause | [lz4.txt](licenses/lz4.txt) | | [HLS arbitrary-precision types](https://github.com/Xilinx/HLS_arbitrary_Precision_Types) | `fpga/include/` | Xilinx, Inc. | Apache-2.0 | [xilinx-hls-headers.txt](licenses/xilinx-hls-headers.txt) | | [GEMMI](https://github.com/project-gemmi/gemmi) | `gemmi_gph/` | Global Phasing Ltd. | MPL-2.0 | [gemmi.txt](licenses/gemmi.txt) | +| [CCP4 Monomer Library](https://github.com/MonomerLibrary/monomers) (subset: restraint dictionary data) | `image_analysis/structure_refinement/monomers/` | CCP4 / the Monomer Library authors (Vagin et al.) | LGPL-3.0-only | [ccp4-monomer-library.txt](licenses/ccp4-monomer-library.txt) | | [PEGTL](https://github.com/taocpp/PEGTL) | `gemmi_gph/gemmi/third_party/tao/` | Dr. Colin Hirsch and Daniel Frey | MIT | [pegtl.txt](licenses/pegtl.txt) | | [sajson](https://github.com/chadaustin/sajson) | `gemmi_gph/gemmi/third_party/sajson.h` | Chad Austin | MIT | [sajson.txt](licenses/sajson.txt) | | [fast_float](https://github.com/fastfloat/fast_float) | `gemmi_gph/gemmi/third_party/fast_float.h` | The fast_float authors (Daniel Lemire et al.) | Apache-2.0 OR MIT OR BSL-1.0 | [fast-float.txt](licenses/fast-float.txt) | @@ -131,6 +132,12 @@ served frontend, so the shipped web UI carries its own attribution. * **FFTW** is GPL-2.0-or-later — compatible with, and absorbed by, this project's GPL-3.0 license. * **Apache-2.0** components: where upstream ships a `NOTICE` file, it is reproduced in the corresponding `licenses/` text. +* **CCP4 Monomer Library (LGPL-3.0)** is data, not code: the restraint dictionaries of the compounds + rugnux's refinement restrains, copied unmodified per compound into + `image_analysis/structure_refinement/monomers/` (`links_and_mods.cif` and `ener_lib.cif` cut down to + the entries those compounds use), with the library's own `COPYING`. The build embeds them in the binary + as text, and `monomers/update_monomers.py` regenerates the subset from the upstream library, so the + copy can be replaced by a user with a version of their own. * **Qt (LGPL-3.0)** and **NVIDIA CUDA (EULA)** carry redistribution conditions beyond a copyright notice; see their dedicated notice files. The verbatim LGPL-3.0 and CUDA EULA texts are bundled (`licenses/Qt6-LGPL-3.0.txt`, `licenses/NVIDIA-CUDA-EULA.txt`); the CUDA EULA is the one shipped diff --git a/gemmi_gph/CMakeLists.txt b/gemmi_gph/CMakeLists.txt index c9c129ecf..c2e2b01ed 100644 --- a/gemmi_gph/CMakeLists.txt +++ b/gemmi_gph/CMakeLists.txt @@ -11,11 +11,15 @@ # against the data on disk. to_mmcif.cpp calls use_hetatm() out of to_pdb.cpp, so the two come together. # # assembly.cpp expands a deposited model's strict-NCS operators into the full asymmetric unit. +# +# monlib/topo/riding_h are the restraint side: a monomer library read from memory (MonLib) and the +# topology of a model built from it (prepare_topology), for rugnux's restrained refinement. ADD_LIBRARY(gemmi STATIC symmetry.cpp gz.cpp mtz.cpp sprintf.cpp xds_ascii.cpp pdb.cpp resinfo.cpp polyheur.cpp calculate.cpp eig3.cpp ccp4.cpp read_cif.cpp mmcif.cpp json.cpp mmread_gz.cpp to_mmcif.cpp to_pdb.cpp assembly.cpp + monlib.cpp topo.cpp riding_h.cpp gemmi/cellred.hpp gemmi/symmetry.hpp gemmi/fail.hpp diff --git a/gemmi_gph/monlib.cpp b/gemmi_gph/monlib.cpp new file mode 100644 index 000000000..887529b7f --- /dev/null +++ b/gemmi_gph/monlib.cpp @@ -0,0 +1,633 @@ +// Copyright 2018-2023 Global Phasing Ltd. + +#include +#include // for calculate_chiral_volume +#include // for rename_atom_names +#include // for read_cif_gz +#include // for as_number + +namespace gemmi { + +int ChemLink::calculate_score(const Residue& res1, const Residue* res2, + char alt, char alt2, + const ChemComp::Aliasing* aliasing1, + const ChemComp::Aliasing* aliasing2) const { + int link_score = side1.specificity() + side2.specificity(); + + auto get_from = [&](const Restraints::AtomId& atomid) { + const auto* aliasing = (atomid.comp != 2 || res2 == nullptr) ? aliasing1 : aliasing2; + if (aliasing) + if (const std::string* real_id = aliasing->name_from_alias(atomid.atom)) + return Restraints::AtomId{atomid.comp, *real_id}.get_from(res1, res2, alt, alt2); + return atomid.get_from(res1, res2, alt, alt2); + }; + + // check chirality + for (const Restraints::Chirality& chirality : rt.chirs) + if (chirality.sign != ChiralityType::Both) { + const Atom* a1 = get_from(chirality.id_ctr); + const Atom* a2 = get_from(chirality.id1); + const Atom* a3 = get_from(chirality.id2); + const Atom* a4 = get_from(chirality.id3); + if (a1 && a2 && a3 && a4) { + double vol = calculate_chiral_volume(a1->pos, a2->pos, + a3->pos, a4->pos); + if (chirality.is_wrong(vol)) + link_score -= 10; + } + } + // check fixed torsion angle (_chem_link_tor.period == 0) + for (const Restraints::Torsion& tor : rt.torsions) + if (tor.period == 0) { + const Atom* a1 = get_from(tor.id1); + const Atom* a2 = get_from(tor.id2); + const Atom* a3 = get_from(tor.id3); + const Atom* a4 = get_from(tor.id4); + double z = 10.; + if (a1 && a2 && a3 && a4) + z = angle_z(calculate_dihedral(a1->pos, a2->pos, a3->pos, a4->pos), + tor); + link_score -= (int) z; + } + return link_score; +} + +namespace { + +Restraints read_link_restraints(const cif::Block& block_) { + auto read_aid = [](cif::Table::Row& row, int n) { + return Restraints::AtomId{cif::as_int(row[n]), row.str(n+1)}; + }; + Restraints rt; + cif::Block& block = const_cast(block_); + for (auto row : block.find("_chem_link_bond.", + {"atom_1_comp_id", "atom_id_1", + "atom_2_comp_id", "atom_id_2", + "type", + "value_dist", "value_dist_esd"})) + rt.bonds.push_back({read_aid(row, 0), read_aid(row, 2), + bond_type_from_string(row[4]), false, + cif::as_number(row[5]), cif::as_number(row[6]), + NAN, NAN}); + for (auto row : block.find("_chem_link_angle.", + {"atom_1_comp_id", "atom_id_1", + "atom_2_comp_id", "atom_id_2", + "atom_3_comp_id", "atom_id_3", + "value_angle", "value_angle_esd"})) + rt.angles.push_back({read_aid(row, 0), read_aid(row, 2), read_aid(row, 4), + cif::as_number(row[6]), cif::as_number(row[7])}); + for (auto row : block.find("_chem_link_tor.", + {"id", + "atom_1_comp_id", "atom_id_1", + "atom_2_comp_id", "atom_id_2", + "atom_3_comp_id", "atom_id_3", + "atom_4_comp_id", "atom_id_4", + "value_angle", "value_angle_esd", + "period"})) + rt.torsions.push_back({row.str(0), + read_aid(row, 1), read_aid(row, 3), + read_aid(row, 5), read_aid(row, 7), + cif::as_number(row[9]), cif::as_number(row[10]), + cif::as_int(row[11])}); + for (auto row : block.find("_chem_link_chir.", + {"atom_centre_comp_id", "atom_id_centre", + "atom_1_comp_id", "atom_id_1", + "atom_2_comp_id", "atom_id_2", + "atom_3_comp_id", "atom_id_3", + "volume_sign"})) + if (row[4][0] != 'c') // ignore crossN + rt.chirs.push_back({read_aid(row, 0), read_aid(row, 2), + read_aid(row, 4), read_aid(row, 6), + chirality_from_string(row[8])}); + for (auto row : block.find("_chem_link_plane.", + {"plane_id", "atom_comp_id", "atom_id", + "dist_esd"})) { + Restraints::Plane& plane = rt.get_or_add_plane(row.str(0)); + if (plane.esd == 0.0) + plane.esd = cif::as_number(row[3]); + plane.ids.push_back(read_aid(row, 1)); + } + return rt; +} + +void insert_chemlinks_into(const cif::Document& doc, std::map& links) { + const cif::Block* list_block = doc.find_block("link_list"); + auto use_chem_link = [](const cif::Block& block, ChemLink& link) { + for (auto row : const_cast(block).find("_chem_link.", + {"id", "?name", + "?comp_id_1", "?mod_id_1", "?group_comp_1", + "?comp_id_2", "?mod_id_2", "?group_comp_2"})) { + if (row.str(0) == link.id) { + if (row.has2(1)) + link.name = row.str(1); + if (row.has2(2)) + link.side1.comp = row.str(2); + if (row.has2(3)) + link.side1.mod = row.str(3); + if (row.has2(4)) + link.side1.group = ChemComp::read_group(row[4]); + if (row.has2(5)) + link.side2.comp = row.str(5); + if (row.has2(6)) + link.side2.mod = row.str(6); + link.side2.group = ChemComp::read_group(row[7]); + break; + } + } + }; + for (const cif::Block& block : doc.blocks) + if (starts_with(block.name, "link_") && block.name != "link_list") { + ChemLink link; + link.id = block.name.substr(5); + if (list_block) + use_chem_link(*list_block, link); + use_chem_link(block, link); + link.rt = read_link_restraints(block); + link.block = block; + links.emplace(link.id, link); + } +} + +// Helper function. str is one of "add", "delete", "change". +int chem_mod_type(const std::string& str) { + char c = str[0] | 0x20; + if (c != 'a' && c != 'd' && c != 'c') + fail("Unexpected value of _chem_mod_*.function: " + str); + return c; +} + +Restraints read_restraint_modifications(const cif::Block& block_) { + Restraints rt; + cif::Block& block = const_cast(block_); + for (auto row : block.find("_chem_mod_bond.", + {"function", "atom_id_1", "atom_id_2", + "new_type", + "new_value_dist", "new_value_dist_esd", + "?new_value_dist_nucleus", "?new_value_dist_nucleus_esd"})) + rt.bonds.push_back({Restraints::AtomId{chem_mod_type(row[0]), row.str(1)}, + Restraints::AtomId{1, row.str(2)}, + bond_type_from_string(row[3]), false, + cif::as_number(row[4]), cif::as_number(row[5]), + row.has(6) ? cif::as_number(row[6]) : NAN, + row.has(7) ? cif::as_number(row[7]) : NAN}); + for (auto row : block.find("_chem_mod_angle.", + {"function", "atom_id_1", + "atom_id_2", "atom_id_3", + "new_value_angle", "new_value_angle_esd"})) + rt.angles.push_back({{chem_mod_type(row[0]), row.str(1)}, + {1, row.str(2)}, {1, row.str(3)}, + cif::as_number(row[4]), cif::as_number(row[5])}); + for (auto row : block.find("_chem_mod_tor.", + {"function", "?id", "atom_id_1", + "atom_id_2", "atom_id_3", "atom_id_4", + "new_value_angle", "new_value_angle_esd", + "?new_period"})) + rt.torsions.push_back({row.has(1) ? row.str(1) : "", + {chem_mod_type(row[0]), row.str(2)}, + {1, row.str(3)}, {1, row.str(4)}, {1, row.str(5)}, + cif::as_number(row[6]), cif::as_number(row[7]), + row.has(8) ? cif::as_int(row[8], 0) : -1}); + for (auto row : block.find("_chem_mod_chir.", + {"function", "atom_id_centre", "atom_id_1", + "atom_id_2", "atom_id_3", + "new_volume_sign"})) + rt.chirs.push_back({{1, row.str(1)}, {chem_mod_type(row[0]), row.str(2)}, + {1, row.str(3)}, {1, row.str(4)}, + chirality_from_string(row[5])}); + for (auto row : block.find("_chem_mod_plane_atom.", + {"function", "plane_id", "atom_id" , + "new_dist_esd"})) { + Restraints::Plane& plane = rt.get_or_add_plane(row.str(1)); + if (plane.esd == 0.0) + plane.esd = cif::as_number(row[3]); + plane.ids.push_back({chem_mod_type(row[0]), row.str(2)}); + } + return rt; +} + +void insert_chemmods_into(const cif::Document& doc, std::map& mods) { + const cif::Block* list_block = doc.find_block("mod_list"); + auto use_chem_mod = [](const cif::Block& block, ChemMod& mod) { + for (auto row : const_cast(block).find("_chem_mod.", + {"id", "?name", "?comp_id", "?group_id"})) + if (row.str(0) == mod.id) { + if (row.has2(1)) + mod.name = row.str(1); + if (row.has2(2)) + mod.comp_id = row.str(2); + if (row.has2(3)) + mod.group_id = row.str(3); + break; + } + }; + for (const cif::Block& block : doc.blocks) + if (starts_with(block.name, "mod_") && block.name != "mod_list") { + ChemMod mod; + mod.id = block.name.substr(4); + if (list_block) + use_chem_mod(*list_block, mod); + use_chem_mod(block, mod); + for (auto ra : const_cast(block).find("_chem_mod_atom.", + {"function", "atom_id", "new_atom_id", + "new_type_symbol", "new_type_energy", + "?new_charge", "?new_partial_charge"})) + mod.atom_mods.push_back({chem_mod_type(ra[0]), ra.str(1), ra.str(2), + Element(ra.str(3)), + (float) cif::as_number(ra.one_of(5, 6)), + ra.str(4)}); + mod.rt = read_restraint_modifications(block); + mod.block = block; + mods.emplace(mod.id, mod); + } +} + +} // anonymous namespace + +void ChemMod::apply_to(ChemComp& chemcomp, ChemComp::Group alias_group) const { + auto real = [&chemcomp, alias_group](const std::string& atom_id) -> const std::string& { + if (alias_group != ChemComp::Group::Null) { + const ChemComp::Aliasing& aliasing = chemcomp.get_aliasing(alias_group); + if (const std::string* real_id = aliasing.name_from_alias(atom_id)) + return *real_id; + } + return atom_id; // NOLINT(bugprone-return-const-ref-from-parameter) + }; + cat_to(chemcomp.name, '+', id); + // _chem_mod_atom + for (const AtomMod& mod : atom_mods) { + if (mod.func == 'a') { + if (mod.new_id.empty()) + fail("New atom id is not given"); + if (!chemcomp.has_atom(real(mod.new_id))) + chemcomp.atoms.push_back({mod.new_id, "", mod.el, + std::isnan(mod.charge) ? mod.charge : 0, + mod.chem_type, "", Position()}); + continue; + } + const std::string& old = real(mod.old_id); + auto it = chemcomp.find_atom(old); + switch (mod.func) { + case 'd': + if (it != chemcomp.atoms.end()) { + chemcomp.atoms.erase(it); + // delete restraints containing mod.old_id + vector_remove_if(chemcomp.rt.bonds, [&](const Restraints::Bond& b) { + return b.id1 == old || b.id2 == old; + }); + vector_remove_if(chemcomp.rt.angles, [&](const Restraints::Angle& a) { + return a.id1 == old || a.id2 == old || a.id3 == old; + }); + vector_remove_if(chemcomp.rt.torsions, + [&](const Restraints::Torsion& t) { + return t.id1 == old || t.id2 == old || t.id3 == old || + t.id4 == old; + }); + vector_remove_if(chemcomp.rt.chirs, + [&](const Restraints::Chirality& c) { + return c.id_ctr == old || c.id1 == old || c.id2 == old || + c.id3 == old; + }); + for (Restraints::Plane& plane : chemcomp.rt.planes) + vector_remove_if(plane.ids, [&](const Restraints::AtomId& a) { + return a.atom == old; + }); + } + break; + case 'c': + if (it != chemcomp.atoms.end()) { + // the modification shouldn't change the atom name, so we don't do: + // if (!mod.new_id.empty()) + // it->id = mod.new_id; + if (mod.el != El::X) + it->el = mod.el; + if (!std::isnan(mod.charge)) + it->charge = mod.charge; + if (!mod.chem_type.empty()) + it->chem_type = mod.chem_type; + } + break; + } + } + + // _chem_mod_bond + for (const Restraints::Bond& mod : rt.bonds) { + auto it = chemcomp.rt.find_bond(real(mod.id1.atom), real(mod.id2.atom)); + switch (mod.id1.comp) { + case 'a': + if (it == chemcomp.rt.bonds.end()) { + chemcomp.rt.bonds.push_back(mod); + // id1.comp was temporarily set to 'a', set it back to 1 + chemcomp.rt.bonds.back().id1.comp = 1; + } + break; + case 'd': + if (it != chemcomp.rt.bonds.end()) + chemcomp.rt.bonds.erase(it); + break; + case 'c': + if (it != chemcomp.rt.bonds.end()) { + if (mod.type != BondType::Unspec) + it->type = mod.type; + if (!std::isnan(mod.value)) + it->value = mod.value; + if (!std::isnan(mod.esd)) + it->esd = mod.esd; + if (!std::isnan(mod.value_nucleus)) + it->value_nucleus = mod.value_nucleus; + if (!std::isnan(mod.esd_nucleus)) + it->esd_nucleus = mod.esd_nucleus; + } + break; + } + } + + // _chem_mod_angle + for (const Restraints::Angle& mod : rt.angles) { + auto it = chemcomp.rt.find_angle(real(mod.id1.atom), + real(mod.id2.atom), + real(mod.id3.atom)); + switch (mod.id1.comp) { + case 'a': + if (it == chemcomp.rt.angles.end()) { + chemcomp.rt.angles.push_back(mod); + chemcomp.rt.angles.back().id1.comp = 1; + } + break; + case 'd': + if (it != chemcomp.rt.angles.end()) + chemcomp.rt.angles.erase(it); + break; + case 'c': + if (it != chemcomp.rt.angles.end()) { + if (!std::isnan(mod.value)) + it->value = mod.value; + if (!std::isnan(mod.esd)) + it->esd = mod.esd; + } + break; + } + } + + // _chem_mod_tor + for (const Restraints::Torsion& mod : rt.torsions) { + auto it = chemcomp.rt.find_torsion(real(mod.id1.atom), real(mod.id2.atom), + real(mod.id3.atom), real(mod.id4.atom)); + switch (mod.id1.comp) { + case 'a': + if (it == chemcomp.rt.torsions.end()) { + chemcomp.rt.torsions.push_back(mod); + chemcomp.rt.torsions.back().id1.comp = 1; + } + break; + case 'd': + if (it != chemcomp.rt.torsions.end()) + chemcomp.rt.torsions.erase(it); + break; + case 'c': + if (it != chemcomp.rt.torsions.end()) { + if (!mod.label.empty()) + it->label = mod.label; + if (!std::isnan(mod.value)) + it->value = mod.value; + if (!std::isnan(mod.esd)) + it->esd = mod.esd; + if (mod.period != -1) + it->period = mod.period; + } + break; + } + } + + // _chem_mod_chir + for (const Restraints::Chirality& mod : rt.chirs) { + auto it = chemcomp.rt.find_chir(real(mod.id_ctr.atom), real(mod.id1.atom), + real(mod.id2.atom), real(mod.id3.atom)); + switch (mod.id1.comp) { + case 'a': + if (it == chemcomp.rt.chirs.end()) { + chemcomp.rt.chirs.push_back(mod); + chemcomp.rt.chirs.back().id1.comp = 1; + } + break; + case 'd': + if (it != chemcomp.rt.chirs.end()) + chemcomp.rt.chirs.erase(it); + break; + case 'c': + if (it != chemcomp.rt.chirs.end()) + it->sign = mod.sign; + break; + } + } + + // _chem_mod_plane_atom + for (const Restraints::Plane& mod : rt.planes) + for (const Restraints::AtomId& atom_id : mod.ids) { + const std::string& real_id = real(atom_id.atom); + if (atom_id.comp == 'a') { + Restraints::Plane& plane = chemcomp.rt.get_or_add_plane(mod.label); + if (plane.esd == 0.0 && !std::isnan(mod.esd)) + plane.esd = mod.esd; + auto it = std::find(plane.ids.begin(), plane.ids.end(), real_id); + if (it == plane.ids.end()) + plane.ids.push_back({1, real_id}); + } else if (atom_id.comp == 'd') { + auto it = chemcomp.rt.get_plane(mod.label); + if (it != chemcomp.rt.planes.end()) { + auto item = std::find(it->ids.begin(), it->ids.end(), real_id); + if (item != it->ids.end()) + it->ids.erase(item); + } + } + } +} + +void EnerLib::read(const cif::Document& doc) { + cif::Block& block = const_cast(doc.blocks[0]); + for (const auto& row : block.find("_lib_atom.", + {"type", "hb_type", "vdw_radius", "vdwh_radius", + "ion_radius", "element", "valency", "sp"})) + atoms.emplace(row[0], Atom{Element(row[5]), row[1][0], cif::as_number(row[2]), + cif::as_number(row[3]), cif::as_number(row[4]), + cif::as_int(row[6], -1), cif::as_int(row[7], -1)}); + for (const auto& row : block.find("_lib_bond.", + {"atom_type_1", "atom_type_2", "type", "length", "value_esd"})) + bonds.emplace(row.str(0), Bond{row.str(1), bond_type_from_string(row[2]), + cif::as_number(row[3]), cif::as_number(row[4])}); +} + +std::string MonLib::relative_monomer_path(const std::string& code) { + std::string path; + if (!code.empty()) { + path += lower(code[0]); + path += '/'; // works also on Windows + path += code; + // On Windows several names are reserved (CON, PRN, AUX, ...), see + // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file + // The workaround in CCP4 monomer library is to use CON_CON.cif, etc. + if (code.size() == 3) + switch (ialpha3_id(code.c_str())) { + case ialpha3_id("AUX"): + case ialpha3_id("COM"): + case ialpha3_id("CON"): + case ialpha3_id("LPT"): + case ialpha3_id("PRN"): + path += '_'; + path += code; + } + path += ".cif"; + } + return path; +} + +void MonLib::read_monomer_doc(const cif::Document& doc) { + // ChemComp + if (const cif::Block* block = doc.find_block("comp_list")) + for (auto row : const_cast(block)->find("_chem_comp.", {"id", "group"})) + cc_groups.emplace(row.str(0), ChemComp::read_group(row.str(1))); + for (const cif::Block& block : doc.blocks) + add_monomer_if_present(block); + // ChemLink + insert_chemlinks_into(doc, links); + // ChemMod + insert_chemmods_into(doc, modifications); +} + +namespace { + +const std::string* find_chemtype(const std::map& monomers, + const const_CRA& cra) { + auto cc = monomers.find(cra.residue->name); + if (cc != monomers.end()) { + auto cc_atom = cc->second.find_atom(cra.atom->name); + if (cc_atom != cc->second.atoms.end()) + return &cc_atom->chem_type; + } + return nullptr; +} + +// Searches data from _lib_atom in ener_lib.cif. +double find_radius(const EnerLib& ener_lib, const std::string& chemtype, + EnerLib::RadiusType type) { + double r = 0; + auto it = ener_lib.atoms.find(chemtype); + if (it != ener_lib.atoms.end()) { + if (type == EnerLib::RadiusType::Ion) + r = it->second.ion_radius; + else if (type == EnerLib::RadiusType::Vdw) + r = it->second.vdw_radius; + else if (type == EnerLib::RadiusType::Vdwh) + r = it->second.vdwh_radius; + } + return std::isnan(r) ? 0 : r; +} + +} // anonymous namespace + +void MonLib::read_monomer_cif(const std::string& path_) { + read_monomer_doc(read_cif_gz(path_)); +} + +bool MonLib::read_monomer_lib(const std::string& monomer_dir_, + const std::vector& resnames, + const Logger& logger) { + if (monomer_dir_.empty()) + fail("read_monomer_lib: monomer_dir not specified."); + set_monomer_dir(monomer_dir_); + + // Only recent versions of CCP4 Monomer Library have links_and_mods.cif + try { + read_monomer_cif(monomer_dir + "links_and_mods.cif"); + } catch (std::system_error&) { + read_monomer_cif(monomer_dir + "list/mon_lib_list.cif"); + } + ener_lib.read(read_cif_gz(monomer_dir + "ener_lib.cif")); + + bool ok = true; + for (const std::string& name : resnames) { + if (monomers.find(name) != monomers.end()) + continue; + try { + const cif::Document& doc = read_cif_gz(path(name)); + read_monomer_doc(doc); + } catch (std::system_error& err) { + if (err.code().value() == ENOENT) + logger.mesg("Monomer not in the library: ", name, '.'); + else + logger.mesg("Failed to read ", name, ": ", err.what(), '.'); + ok = false; + } catch (std::runtime_error& err) { + logger.mesg("Failed to read ", name, ": ", err.what(), '.'); + ok = false; + } + } + return ok; +} + + +double MonLib::find_ideal_distance(const const_CRA& cra1, const const_CRA& cra2) const { + std::string types[2] = {cra1.atom->element.uname(), + cra2.atom->element.uname()}; + if (const std::string* tmp = find_chemtype(monomers, cra1)) + types[0] = *tmp; + if (const std::string* tmp = find_chemtype(monomers, cra2)) + types[1] = *tmp; + // if either one is metal, use ion radius + ion radius + if (cra1.atom->element.is_metal() != cra2.atom->element.is_metal()) { + // return if ion radius is found for both of them + double r1 = find_radius(ener_lib, types[0], EnerLib::RadiusType::Ion); + double r2 = find_radius(ener_lib, types[1], EnerLib::RadiusType::Ion); + if (r1 > 0 && r2 > 0) + return r1 + r2; + } + // otherwise, look for defined distance or use average of distances + double r[2] = {0, 0}; + for (int j = 0; j < 2; ++j) { + auto range = ener_lib.bonds.equal_range(types[j]); + for (auto i = range.first; i != range.second; ++i) + if (i->second.atom_type_2 == types[1-j] && !std::isnan(i->second.length)) + return i->second.length; + else if (i->second.atom_type_2.empty() && i->second.type == BondType::Single) + r[j] = i->second.length / 2; + if ((r[j] == 0 || std::isnan(r[j])) && range.first != range.second) + r[j] = range.first->second.length / 2; + if (r[j] == 0 || std::isnan(r[j])) + r[j] = (j==0 ? cra1 : cra2).atom->element.covalent_r(); + } + return r[0] + r[1]; +} + +void MonLib::update_old_atom_names(Structure& st, const Logger& logger) const { + for (const auto& it : monomers) + // monomers should have only monomers needed for this structure. + // Few of them (usually none or one) have old names defined. + if (it.second.has_old_names()) { + const std::string& resname = it.first; + const ChemComp& cc = it.second; + int old_vs_new = 0; + for (const Model& model : st.models) + for (const Chain& chain : model.chains) + for (const Residue& res : chain.residues) + if (res.name == resname) { + for (const Atom& atom : res.atoms) { + if (cc.find_atom(atom.name) == cc.atoms.end()) + ++old_vs_new; + if (cc.find_atom_by_old_name(atom.name) == cc.atoms.end()) + --old_vs_new; + } + } + if (old_vs_new > 0) { + std::string msg = cat("Updating atom names in ", resname, ':'); + std::map mapping; + for (const ChemComp::Atom& a : cc.atoms) + if (!a.old_id.empty() && a.old_id != a.id) { + mapping.emplace(a.old_id, a.id); + cat_to(msg, ' ', a.old_id, "->", a.id); + } + logger.mesg(msg); + rename_atom_names(st, resname, mapping); + } + } +} + +} // namespace gemmi diff --git a/gemmi_gph/riding_h.cpp b/gemmi_gph/riding_h.cpp new file mode 100644 index 000000000..2b2dee439 --- /dev/null +++ b/gemmi_gph/riding_h.cpp @@ -0,0 +1,480 @@ +// Copyright 2018-2022 Global Phasing Ltd. + +#include + +namespace gemmi { + +namespace { + +struct BondedAtom { + Atom* ptr; + Position& pos; // == ptr->pos; + double dist; +}; + +// Calculate position using one angle (theta) and one dihedral angle (tau). +// Returns position of x4 in x1-x2-x3-x4, where dist=|x3-x4| and +// theta is angle(x2, x3, x4). +// Based on section 3.3 of Paciorek et al, Acta Cryst. A52, 349 (1996). +Position position_from_angle_and_torsion(const Position& x1, + const Position& x2, + const Position& x3, + double dist, // |x3-x4| + double theta, // angle x2-x3-x4 + double tau) { // dihedral angle + Vec3 u = x2 - x1; + Vec3 v = x3 - x2; + Vec3 e1 = v.normalized(); + Vec3 e2 = -(u - u.dot(e1) * e1).normalized(); + Vec3 e3 = e1.cross(e2); + Vec3 e23 = std::cos(tau) * e2 + std::sin(tau) * e3; + return x3 + Position(dist * (-std::cos(theta) * e1 + std::sin(theta) * e23)); +} + +// Similar to position_from_angle_and_torsion(), but x1 and tau are not given. +Position arbitrary_position_from_angle(const Position& x2, + const Position& x3, + double dist, // |x3-x4| + double theta) { // angle x2-x3-x4 + Vec3 u(1, 0, 0); + Vec3 v = x3 - x2; + Vec3 e1 = v.normalized(); + Vec3 e2_ = -(u - u.dot(e1) * e1); + if (e2_.length_sq() < 1e-6) { + // u || v, let's take any non-parallel u + u = Vec3(0, 1, 0); + e2_ = -(u - u.dot(e1) * e1); + } + Vec3 e2 = e2_.normalized(); + return x3 + Position(dist * (-std::cos(theta) * e1 + std::sin(theta) * e2)); +} + + +Vec3 get_vector_to_line(const Position& point, + const Position& point_on_the_line, + const Vec3& unit_vector) { + // en.wikipedia.org/wiki/Distance_from_a_point_to_a_line#Vector_formulation + // the component of a - p perpendicular to the line is: (a-p) - ((a-p).n)n + Vec3 ap = point_on_the_line - point; + return ap - ap.dot(unit_vector) * unit_vector; +} + +// If no points satisfy the distances returns a pair of NaNs +std::pair trilaterate(const Position& p1, double r1sq, + const Position& p2, double r2sq, + const Position& p3, double r3sq) { + // It was based on https://en.wikipedia.org/wiki/Trilateration + // but apparently that page has changed in the meantime. + Vec3 ex = (p2 - p1).normalized(); + double i = ex.dot(p3-p1); + Vec3 ey = (Vec3(p3) - p1 - i*ex).normalized(); + Vec3 ez = ex.cross(ey); + double d = (p2-p1).length(); + double j = ey.dot(p3-p1); + double x = (r1sq - r2sq + d*d) / (2*d); + double y = (r1sq - r3sq + i*i + j*j) / (2*j) - x*i/j; + double z2 = r1sq - x*x - y*y; + double z = std::sqrt(z2); // may result in NaN + return std::make_pair(p1 + Position(x*ex + y*ey + z*ez), + p1 + Position(x*ex + y*ey - z*ez)); +} + +// Calculate position using two angles. +// Returns p4. Topology: p1 is bonded to p2, p3 and p4. +std::pair +position_from_two_angles(const Position& p1, + const Position& p2, + const Position& p3, + double dist14, // |p4-p1| + double theta214, // angle p2-p1-p4 + double theta314) { // angle p3-p1-p4 + double d12sq = p1.dist_sq(p2); + double d13sq = p1.dist_sq(p3); + double d14sq = dist14 * dist14; + // the law of cosines + double d24sq = d14sq + d12sq - 2 * std::sqrt(d14sq * d12sq) * cos(theta214); + double d34sq = d14sq + d13sq - 2 * std::sqrt(d14sq * d13sq) * cos(theta314); + return trilaterate(p1, d14sq, p2, d24sq, p3, d34sq); +} + +// Returns angle between hydrogen and the plane of heavy atoms +// in 2H tetrahedral configuration. theta0 is the angle between heavy atoms. +double calculate_tetrahedral_delta(double theta0, double theta1, double theta2) { + // simplified trilateration: + // auto r = trilaterate(Position(0, 0, 0), 1, + // Position(1, 0, 0), 2 - 2 * std::cos(theta1), + // Position(std::cos(theta0), std::sin(theta0), 0), + // 2 - 2 * std::cos(theta2)); + // return std::asin(std::fabs(r.first.z)); + double x = std::cos(theta1); + double y = (std::cos(theta2) - x * std::cos(theta0)) / std::sin(theta0); + double z2 = 1 - x*x - y*y; + double z = std::sqrt(z2); // may result in NaN + return std::asin(z); +} + +double angle_in_triangle(double a, double b, double c) { + return std::acos((a * a + c * c - b * b) / (2 * a * c)); +} + +// Used in rare cases when one angle is missing in 2H-tetrahedral configuration. +// Currently it can happen only with metal sites. +// b c(metal) +// \ / +// atom -- h (possibly two H atoms, symmetric wrt plane abc) +// Angle c-atom-h is missing, b-atom-h is equal alpha, b-atom-c is theta. +// For two H atoms we also need angle h-atom-h. +double missing_angle_2H_tetrahedral(const Topo& topo, const Atom& atom, + const std::vector& hs, + double alpha, double theta) { + if (hs.size() == 1) + return 2 * pi() - alpha - theta; // make it coplanar + if (hs.size() == 2) { + if (const Restraints::Angle* hh = topo.take_angle(hs[0].ptr, &atom, hs[1].ptr)) { + double xh = std::cos(alpha); + double zh = std::sin(0.5 * hh->radians()); + double yh = std::sqrt(1 - xh*xh - zh*zh); + double st = std::sin(theta); + double ct = std::cos(theta); + Vec3 ah = Vec3(xh, -yh * st, zh * st); + double angle = std::acos((ct * ah.x + st * ah.y) / ah.length()); + //printf("missing_angle: %s %g\n", atom.name.c_str(), deg(angle)); + return angle; + } + } + return 0; +} + +[[noreturn]] +void giveup(const std::string& message, const std::vector& hs) { + for (const BondedAtom& bonded_h : hs) { + bonded_h.ptr->occ = 0; + bonded_h.ptr->calc_flag = CalcFlag::Dummy; + } + fail(message); +} + +// known and hs are lists of heavy atoms and hydrogens bonded to atom. +// hs is const, but nevertheless atoms it points to are modified. +void place_hydrogens(const Topo& topo, const Atom& atom, + const std::vector& known, + const std::vector& hs) { + using Angle = Restraints::Angle; + assert(!hs.empty()); + + for (const BondedAtom& bonded_h : hs) + bonded_h.ptr->calc_flag = CalcFlag::Calculated; + + // ==== only hydrogens ==== + if (known.size() == 0) { + // we can only arbitrarily pick directions of atoms + for (const BondedAtom& bonded_h : hs) + bonded_h.ptr->occ = 0; + hs[0].pos = atom.pos + Position(hs[0].dist, 0, 0); + if (hs.size() > 1) { + double theta = pi(); + if (const Angle* ang = topo.take_angle(hs[1].ptr, &atom, hs[0].ptr)) + theta = ang->radians(); + hs[1].pos = atom.pos + Position(hs[1].dist * cos(theta), + hs[1].dist * sin(theta), 0); + } + if (hs.size() > 2) { + const Angle* ang0 = topo.take_angle(hs[2].ptr, &atom, hs[0].ptr); + const Angle* ang1 = topo.take_angle(hs[2].ptr, &atom, hs[1].ptr); + double theta0 = rad(ang0 ? ang0->value : 109.47122); + double theta1 = rad(ang1 ? ang1->value : 109.47122); + auto pos = position_from_two_angles(atom.pos, hs[0].pos, hs[1].pos, + hs[2].dist, theta0, theta1); + hs[2].pos = pos.first; + // 3 hydrogens: for now happens only NH3 (NH2.cif and NH3.cif) + // 4 hydrogens: CH4 (CH2.cif) and NH4 (NH4.cif) + if (hs.size() == 4) + hs[3].pos = pos.second; + } + + // ==== one heavy atom and hydrogens ==== + } else if (known.size() == 1) { + const BondedAtom& h = hs[0]; + const BondedAtom& heavy = known[0]; + const Restraints::Angle* angle = topo.take_angle(h.ptr, &atom, heavy.ptr); + if (!angle) + giveup("No angle restraint for " + h.ptr->name + ".\n", hs); + if (std::abs(angle->value - 180.0) < 0.5) { + Vec3 u = atom.pos - h.pos; + h.pos = atom.pos + Position(u * (h.dist / u.length())); + if (hs.size() > 1) + giveup("Unusual: one of two H atoms has angle restraint 180 deg.", hs); + return; + } + double theta = angle->radians(); + double tau = 0.0; + int period = 0; + const Atom* tau_end = nullptr; + auto plane_range = topo.plane_index.equal_range(&atom); + for (auto i = plane_range.first; i != plane_range.second; ++i) { + const Topo::Plane& plane = *i->second; + // only Topo::Plane with atoms.size() >= 4 is put into planes + if (plane.has(h.ptr) && plane.has(heavy.ptr)) { + for (const Atom* a : plane.atoms) { + if (!a->is_hydrogen() && a != &atom && a != heavy.ptr) { + tau_end = a; + break; + } + } + break; + } + } + Atom* torsion_h = nullptr; + if (!tau_end) { + // Using one dihedral angle. + // We don't check here for which hydrogen the torsion angle is defined. + // If an atom has 2 or 3 hydrogens, the torsion angle may not be given + // for the first one, but only for the 2nd or 3rd (e.g. HD22 in ASN). + auto tor_range = topo.torsion_index.equal_range(&atom); + for (auto i = tor_range.first; i != tor_range.second; ++i) { + const Topo::Torsion& tor = *i->second; + if (tor.atoms[1] == &atom && tor.atoms[2] == heavy.ptr && + tor.atoms[0]->is_hydrogen() && !tor.atoms[3]->is_hydrogen()) { + tau = rad(tor.restr->value); + torsion_h = tor.atoms[0]; + tau_end = tor.atoms[3]; + period = tor.restr->period; + break; + } + if (tor.atoms[2] == &atom && tor.atoms[1] == heavy.ptr && + tor.atoms[3]->is_hydrogen() && !tor.atoms[0]->is_hydrogen()) { + tau = rad(tor.restr->value); + torsion_h = tor.atoms[3]; + tau_end = tor.atoms[0]; + period = tor.restr->period; + break; + } + } + } + + if (tau_end) + h.pos = position_from_angle_and_torsion(tau_end->pos, heavy.pos, atom.pos, + h.dist, theta, tau); + else + h.pos = arbitrary_position_from_angle(heavy.pos, atom.pos, h.dist, theta); + if (std::isnan(h.pos.x)) { + h.pos = Position(0, 0, 0); + giveup("bonded atoms are exactly overlapping (case 1).", hs); + } + if (hs.size() == 2) { + // I think we can assume the two hydrogens are symmetric. + Vec3 axis = (heavy.pos - atom.pos).normalized(); + Vec3 perpendicular = get_vector_to_line(hs[0].pos, atom.pos, axis); + hs[1].pos = hs[0].pos + Position(2 * perpendicular); + } else if (hs.size() == 3) { + // Here we assume the three hydrogens are in the same distance from + // the parent atom and that they make an equilateral triangle. + // First check for which hydrogen was the torsion restraint (if any). + int idx = 0; + for (int i : {1, 2}) + if (torsion_h == hs[i].ptr) { + idx = i; + hs[i].pos = h.pos; + } + // Now get the other positions by rotation + Vec3 axis = (heavy.pos - atom.pos).normalized(); + Vec3 v1 = h.pos - atom.pos; + Vec3 v2 = rotate_about_axis(v1, axis, rad(120)); + Vec3 v3 = rotate_about_axis(v1, axis, rad(-120)); + hs[(idx+1) % 3].pos = atom.pos + Position(v2); + hs[(idx+2) % 3].pos = atom.pos + Position(v3); + } else if (hs.size() >= 4) { + giveup("Unusual: atom bonded to one heavy atoms and 4+ hydrogens.", hs); + } + if (!tau_end || period > (int)hs.size()) + for (const BondedAtom& bonded_h : hs) + bonded_h.ptr->occ = 0; + // ==== two heavy atoms and hydrogens ==== + } else if (known.size() == 2) { + if (hs.size() >= 3) + giveup("Unusual: atom bonded to 2+ heavy atoms and 3+ hydrogens.", hs); + const Angle* ang1 = topo.take_angle(hs[0].ptr, &atom, known[0].ptr); + const Angle* ang2 = topo.take_angle(hs[0].ptr, &atom, known[1].ptr); + const Angle* ang3 = topo.take_angle(known[0].ptr, &atom, known[1].ptr); + + double theta1 = ang1 ? ang1->radians() : 0; + double theta2 = ang2 ? ang2->radians() : 0; + double theta3 = ang3 ? ang3->radians() : 0; + if (!ang3) { + // If ang3 atoms form a bonded triangle (e.g. C11-C12-PT in DVW), + // we can calculate theta3 from the bond lengths. + const Restraints::Bond* aptr = topo.take_bond(&atom, known[1].ptr); + const Restraints::Bond* bptr = topo.take_bond(known[0].ptr, known[1].ptr); + const Restraints::Bond* cptr = topo.take_bond(known[0].ptr, &atom); + if (!aptr || !bptr || !cptr) + giveup(cat("Missing angle restraint ", known[0].ptr->name, '-', atom.name, + '-', known[1].ptr->name, ".\n"), hs); + theta3 = angle_in_triangle(aptr->value, bptr->value, cptr->value); + } + // Some configurations with metals have only distance restraints. + // In such cases, we assume that hydrogens are as far as possible from the metal. + if (!ang1 && ang2 && known[0].ptr->element.is_metal()) + theta1 = missing_angle_2H_tetrahedral(topo, atom, hs, theta2, theta3); + if (!ang2 && ang1 && known[1].ptr->element.is_metal()) + theta2 = missing_angle_2H_tetrahedral(topo, atom, hs, theta1, theta3); + if (theta1 == 0 || theta2 == 0) + giveup(cat("Missing angle restraint ", hs[0].ptr->name, '-', atom.name, + '-', known[theta1 == 0 ? 0 : 1].ptr->name, ".\n"), hs); + + // Co-planar case. The sum of angles should be 360 degrees, + // but in some cif files it differs slightly. + if (theta1 + theta2 + theta3 > rad(360 - 3)) { + Vec3 v12 = known[0].pos - atom.pos; + Vec3 v13 = known[1].pos - atom.pos; + // theta3 is the ideal restraint value, cur_theta3 is the current value + double cur_theta3 = v12.angle(v13); + double ratio = (2 * pi() - cur_theta3) / (theta1 + theta2); + Vec3 axis = v13.cross(v12).normalized(); + Vec3 v14 = rotate_about_axis(v12, axis, theta1 * ratio); + hs[0].pos = atom.pos + Position(hs[0].dist / v14.length() * v14); + if (hs.size() > 1) { + topo.logger.err("Unhandled topology of ", hs.size(), " hydrogens bonded to ", atom.name); + for (size_t i = 1; i < hs.size(); ++i) { + hs[i].ptr->occ = 0; + hs[i].ptr->calc_flag = CalcFlag::Dummy; + } + } + return; + } + + // Tetrahedral or similar configuration. + double hh_half = 0; + if (hs.size() == 2) + if (const Angle* hh = topo.take_angle(hs[0].ptr, &atom, hs[1].ptr)) + hh_half = 0.5 * hh->radians(); + if (hh_half == 0) + hh_half = calculate_tetrahedral_delta(theta3, theta1, theta2); + + // Based on Liebschner et al (2020) doi:10.1016/bs.mie.2020.01.007 + // sec. 2.3. 2H-tetrahedral configuration + double c0 = std::cos(theta3); + double c1 = std::cos(theta1); + double c2 = std::cos(theta2); + double den = 1 / (1 - c0*c0); + double a = den * (c1 - c0 * c2); + double b = den * (c2 - c0 * c1); + // I think the paper defines u10 and u20 in the opposite direction, + // but I had to reverse it somewhere to make it work. + Vec3 u10 = (known[0].pos - atom.pos).normalized(); + Vec3 u20 = (known[1].pos - atom.pos).normalized(); + Vec3 v = u10.cross(u20); + if (std::isnan(v.x)) + giveup("bonded atoms are exactly overlapping (case 2).", hs); + Vec3 d = a * u10 + b * u20; + double dist_sin = hs[0].dist * std::sin(hh_half); + double dist_cos = hs[0].dist * std::cos(hh_half); + Vec3 v0s = v.changed_magnitude(dist_sin); + Vec3 d0c = d.changed_magnitude(dist_cos); + hs[0].pos = atom.pos + Position(d0c + v0s); + Position other_pos = atom.pos + Position(d0c - v0s); + + if (hs.size() == 1) { + const Topo::Chirality* chir = topo.get_chirality(&atom); + if (chir && chir->restr->sign != ChiralityType::Both) { + if (!chir->check()) + hs[0].pos = other_pos; + } else { + hs[0].ptr->occ = 0; + } + } else { // hs.size() == 2 + hs[1].pos = other_pos; + } + + } else { // known.size() >= 3 + if (hs.size() > 1) + giveup("Unusual: atom bonded to 3+ heavy atoms and 2+ hydrogens.", hs); + // Based on Liebschner et al (2020) doi:10.1016/bs.mie.2020.01.007 + // sec. 2.4. 1H-tetrahedral configuration + Vec3 u10 = (known[0].pos - atom.pos).normalized(); + Vec3 u20 = (known[1].pos - atom.pos).normalized(); + Vec3 u30 = (known[2].pos - atom.pos).normalized(); + auto cos_tetrahedral = [&](size_t n) { + const Angle* angle = topo.take_angle(known[n].ptr, &atom, hs[0].ptr); + return angle ? std::cos(angle->radians()) : -1./3.; + }; + SMat33 m{1., 1., 1., u10.dot(u20), u10.dot(u30), u20.dot(u30)}; + Vec3 rhs(cos_tetrahedral(0), cos_tetrahedral(1), cos_tetrahedral(2)); + double det = m.determinant(); + if (std::fabs(det) < 1e-12) + giveup("tetrahedral configuration with four co-planar atoms.", hs); + Vec3 abc = m.inverse_(det).multiply(rhs); + Vec3 h_dir = abc.x * u10 + abc.y * u20 + abc.z * u30; + hs[0].pos = atom.pos + Position(h_dir.changed_magnitude(hs[0].dist)); + } +} + +} // anonymous namespace + +void place_hydrogens_on_all_atoms(Topo& topo) { + std::vector known; + std::vector hs; + auto filter = [](char alt, const std::vector& v) { + std::vector out; + out.reserve(v.size()); + for (const BondedAtom& ba : v) + if (ba.ptr->altloc_matches(alt)) + out.push_back(ba); + return out; + }; + for (Topo::ChainInfo& chain_info : topo.chain_infos) + for (Topo::ResInfo& ri : chain_info.res_infos) { + // If we don't have monomer description from a cif file, + // only ad-hoc restraints, don't try to place hydrogens. + if (ri.orig_chemcomp == nullptr) + continue; + for (Atom& atom : ri.res->atoms) { + if (atom.is_hydrogen()) + continue; + try { + // gather bonded atoms + known.clear(); + hs.clear(); + auto range = topo.bond_index.equal_range(&atom); + for (auto i = range.first; i != range.second; ++i) { + const Topo::Bond* t = i->second; + Atom* other = t->atoms[t->atoms[0] == &atom ? 1 : 0]; + if (other->altloc && atom.altloc) { + // We support links between different altlocs in Topo (e.g. link A-B), + // although these are rare, special cases. + // But if we had bonds between atom 1 (A/B) and atom 2 (A/B/C), + // and we had bonds B-B and B-C, we'd want to use only one of them (B-B). + // Checking atom's name is not robust, but should suffice here. + if (atom.altloc != other->altloc && + in_vector_f([&](const BondedAtom& a) { return a.ptr->name == other->name; }, + known)) + continue; + } + auto& atom_list = other->is_hydrogen() ? hs : known; + atom_list.push_back({other, other->pos, t->restr->value}); + } + if (hs.size() == 0) + continue; + std::string altlocs; + // In a special case: Hs with altlocs on a parent without altloc, + // we need to process conformations one by one. + if (atom.altloc == '\0') + for (const auto& h : hs) { + char alt = h.ptr->altloc; + if (alt && altlocs.find(alt) == std::string::npos) { + altlocs += alt; + place_hydrogens(topo, atom, filter(alt, known), filter(alt, hs)); + } + } + // In all other cases, all bonded atoms are from the same conformation. + if (altlocs.empty()) + place_hydrogens(topo, atom, known, hs); + } catch (const std::runtime_error& e) { + topo.logger.err("Placing of hydrogen bonded to ", + atom_str(chain_info.chain_ref, *ri.res, atom), + " failed:\n ", e.what()); + } + } + } +} + +} // namespace gemmi diff --git a/gemmi_gph/topo.cpp b/gemmi_gph/topo.cpp new file mode 100644 index 000000000..673a487da --- /dev/null +++ b/gemmi_gph/topo.cpp @@ -0,0 +1,1084 @@ +// Copyright 2018-2022 Global Phasing Ltd. + +#include +#include // for sqrt, round +#include // for multimap +#include // for unordered_multimap +#include // for get_or_check_polymer_type, ... +#include // for place_hydrogens_on_all_atoms, ... +#include // for remove_hydrogens + +namespace gemmi { + +std::unique_ptr make_chemcomp_with_restraints(const Residue& res) { + std::unique_ptr cc(new ChemComp()); + cc->name = res.name; + cc->group = ChemComp::Group::Null; + cc->has_coordinates = true; + // add atoms + cc->atoms.reserve(res.atoms.size()); + for (const Atom& a : res.atoms) { + if (a.altloc != '\0' && cc->has_atom(a.name)) + continue; + Element el = a.element; + if (el == El::X) + el = El::N; + if (el == El::D) + el = El::H; + const std::string& chem_type = el.uname(); + cc->atoms.push_back(ChemComp::Atom{a.name, "", el, float(a.charge), chem_type, "", a.pos}); + } + // prepare pairs of atoms + struct Pair { + size_t n1, n2; + double dist; + }; + std::vector pairs; + // first heavy atoms only + for (size_t i = 0; i != res.atoms.size(); ++i) { + const Atom& at1 = res.atoms[i]; + if (at1.is_hydrogen()) + continue; + float r1 = at1.element.covalent_r(); + for (size_t j = i+1; j != res.atoms.size(); ++j) { + const Atom& at2 = res.atoms[j]; + if (at2.is_hydrogen() || !at2.same_conformer(at1)) + continue; + double d2 = at1.pos.dist_sq(at2.pos); + float r2 = at2.element.covalent_r(); + double dmax = std::max(2.0, 1.3 * std::max(r1, r2)); + if (d2 < sq(dmax)) + pairs.push_back(Pair{i, j, std::sqrt(d2)}); + } + } + // now each hydrogen with the nearest heavy atom + for (size_t i = 0; i != res.atoms.size(); ++i) { + const Atom& at1 = res.atoms[i]; + if (at1.is_hydrogen()) { + size_t nearest = (size_t)-1; + double min_d2 = sq(2.5); + for (size_t j = 0; j != res.atoms.size(); ++j) { + const Atom& at2 = res.atoms[j]; + if (!at2.is_hydrogen() && at2.same_conformer(at1)) { + double d2 = at1.pos.dist_sq(at2.pos); + if (d2 < min_d2) { + min_d2 = d2; + nearest = j; + } + } + } + if (nearest != (size_t)-1) { + pairs.push_back(Pair{nearest, i, std::sqrt(min_d2)}); + } + } + } + + // add bonds + // note: duplicated bonds (from different conformations) are not a problem + for (const Pair& p : pairs) { + Restraints::Bond bond; + bond.id1 = Restraints::AtomId{1, res.atoms[p.n1].name}; + bond.id2 = Restraints::AtomId{1, res.atoms[p.n2].name}; + bond.type = BondType::Unspec; + bond.aromatic = false; + double rounded_dist = 0.001 * std::round(1000 * p.dist); + bond.value = bond.value_nucleus = rounded_dist; + bond.esd = bond.esd_nucleus = 0.02; + cc->rt.bonds.push_back(bond); + } + // add angles + struct Triple { + size_t n1, n2, n3; + }; + std::vector triples; + for (size_t i = 0; i != pairs.size(); ++i) + for (size_t j = i+1; j != pairs.size(); ++j) { + if (pairs[i].n1 == pairs[j].n1) + triples.push_back(Triple{pairs[i].n2, pairs[i].n1, pairs[j].n2}); + else if (pairs[i].n1 == pairs[j].n2) + triples.push_back(Triple{pairs[i].n2, pairs[i].n1, pairs[j].n1}); + else if (pairs[i].n2 == pairs[j].n1) + triples.push_back(Triple{pairs[i].n1, pairs[i].n2, pairs[j].n2}); + else if (pairs[i].n2 == pairs[j].n2) + triples.push_back(Triple{pairs[i].n1, pairs[i].n2, pairs[j].n1}); + } + for (const Triple& triple : triples) { + Restraints::Angle angle; + angle.id1 = Restraints::AtomId{1, res.atoms[triple.n1].name}; + angle.id2 = Restraints::AtomId{1, res.atoms[triple.n2].name}; + angle.id3 = Restraints::AtomId{1, res.atoms[triple.n3].name}; + double angle_rad = calculate_angle(res.atoms[triple.n1].pos, + res.atoms[triple.n2].pos, + res.atoms[triple.n3].pos); + angle.value = 0.01 * std::round(100 * deg(angle_rad)); + angle.esd = 3.0; + cc->rt.angles.push_back(angle); + } + return cc; +} + +Topo::ChainInfo::ChainInfo(ResidueSpan& subchain, const Chain& chain, const Entity* ent) + : chain_ref(chain) { + subchain_name = subchain.at(0).subchain; + res_infos.reserve(subchain.size()); + if (ent) { + entity_id = ent->name; + polymer = ent->entity_type == EntityType::Polymer; + polymer_type = get_or_check_polymer_type(ent, subchain); + } else { + polymer = false; + polymer_type = PolymerType::Unknown; + } + for (Residue& res : subchain) + res_infos.emplace_back(&res); +} + +// Add a ChemLink that restraints only bond length. +static +const std::string& add_auto_chemlink(MonLib& monlib, + const std::string& resname1, const std::string& aname1, + const std::string& resname2, const std::string& aname2, + double ideal_dist, double esd) { + ChemLink cl; + cl.side1.comp = resname1; + cl.side2.comp = resname2; + cl.id = resname1 + resname2; + cl.name = "auto-" + cl.id; + cl.rt.bonds.push_back({Restraints::AtomId{1, aname1}, + Restraints::AtomId{2, aname2}, + BondType::Unspec, false, + ideal_dist, esd, + ideal_dist, esd}); + // ensure unique link id + size_t orig_len = cl.id.size(); + for (int n = 0; monlib.get_link(cl.id) != nullptr; ++n) + cl.id.replace(orig_len, cl.id.size(), std::to_string(n)); + + auto it = monlib.links.emplace(cl.id, cl); + return it.first->first; +} + +static const ChemLink* setup_link_if_matches(Topo::Link& link, const MonLib& monlib, + const std::string& atom1, + const std::string& atom2) { + bool invert; + const ChemLink* match = nullptr; + std::tie(match, invert, link.aliasing1, link.aliasing2) = + monlib.match_link(*link.res1, atom1, link.alt1, *link.res2, atom2, link.alt2); + if (match) { + link.link_id = match->id; + if (invert) { + std::swap(link.res1, link.res2); + std::swap(link.alt1, link.alt2); + std::swap(link.atom1_name_id, link.atom2_name_id); + std::swap(link.aliasing1, link.aliasing2); + } + } + return match; +} + +static int atom_name_id(const std::string& s) { + int id = 0; + if (s.size() > 0) // there is '\0' at the end + id = (s[0] << 24 | s[1] << 16); + if (s.size() > 2) + id |= (s[2] << 8 | s[3]); + return id | 0x20202020; +} + +static void add_polymer_links(PolymerType polymer_type, + const Topo::ResInfo& ri1, + Topo::ResInfo& ri2, + MonLib* monlib) { + Topo::Link link; + link.res1 = ri1.res; + link.res2 = ri2.res; + assert(&ri1 - &ri2 == link.res_distance()); + bool groups_ok = (ri1.orig_chemcomp != nullptr && ri2.orig_chemcomp != nullptr); + + if (is_polypeptide(polymer_type)) { + std::string c = "C"; + std::string ca1 = "CA"; + std::string n = "N"; + std::string ca2 = "CA"; + if (ri1.orig_chemcomp && !ChemComp::is_peptide_group(ri1.orig_chemcomp->group)) { + for (const ChemComp::Aliasing& aliasing : ri1.orig_chemcomp->aliases) + if (ChemComp::is_peptide_group(aliasing.group)) { + link.aliasing1 = &aliasing; + if (const std::string* ptr = aliasing.name_from_alias(c)) + c = *ptr; + if (const std::string* ptr = aliasing.name_from_alias(ca1)) + ca1 = *ptr; + break; + } + if (!link.aliasing1) + groups_ok = false; + } + ChemComp::Group n_terminus_group = ri2.orig_chemcomp ? ri2.orig_chemcomp->group + : ChemComp::Group::Null; + if (ri2.orig_chemcomp && !ChemComp::is_peptide_group(ri2.orig_chemcomp->group)) { + for (const ChemComp::Aliasing& aliasing : ri2.orig_chemcomp->aliases) + if (ChemComp::is_peptide_group(aliasing.group)) { + link.aliasing2 = &aliasing; + n_terminus_group = aliasing.group; + if (const std::string* ptr = aliasing.name_from_alias(n)) + n = *ptr; + if (const std::string* ptr = aliasing.name_from_alias(ca2)) + ca2 = *ptr; + break; + } + if (!link.aliasing2) + groups_ok = false; + } + for (const Atom& a1 : ri1.res->atoms) + if (a1.name == c && a1.element == El::C) { + for (const Atom& a2 : ri2.res->atoms) + if (a2.name == n && a2.element == El::N && + (a2.altloc == a1.altloc || a2.altloc == '\0' || a1.altloc == '\0') && + in_peptide_bond_distance(&a1, &a2)) { + // One C-N pair of atoms can create here only one link. + // Ignoring artificial configuration of no-altloc C and N atoms, + // and CA atoms in 2+ conformations making both CIS and TRANS links. + link.alt1 = a1.altloc; + link.alt2 = a2.altloc; + link.atom1_name_id = atom_name_id(a1.name); + link.atom2_name_id = atom_name_id(a2.name); + if (groups_ok) { + // Deciding CIS/TRANS based on omega angle. + char alt = a1.altloc_or(a2.altloc_or('*')); + const Atom* ca1_atom = ri1.res->find_atom(ca1, alt, El::C); + const Atom* ca2_atom = ri2.res->find_atom(ca2, alt, El::C); + link.is_cis = is_peptide_bond_cis(ca1_atom, &a1, &a2, ca2_atom, 60.); + if (n_terminus_group == ChemComp::Group::PPeptide) + link.link_id = link.is_cis ? "PCIS" : "PTRANS"; + else if (n_terminus_group == ChemComp::Group::MPeptide) + link.link_id = link.is_cis ? "NMCIS" : "NMTRANS"; + else + link.link_id = link.is_cis ? "CIS" : "TRANS"; + } else if (monlib) { + if (!setup_link_if_matches(link, *monlib, c, n)) + link.link_id = add_auto_chemlink(*monlib, + ri1.res->name, c, + ri2.res->name, n, + 1.34, 0.04); + } + ri2.prev.push_back(link); + } + } + + } else if (is_polynucleotide(polymer_type)) { + std::string o3p = "O3'"; + std::string p = "P"; + if (ri1.orig_chemcomp && !ChemComp::is_nucleotide_group(ri1.orig_chemcomp->group)) { + for (const ChemComp::Aliasing& aliasing : ri1.orig_chemcomp->aliases) + if (ChemComp::is_nucleotide_group(aliasing.group)) { + link.aliasing1 = &aliasing; + if (const std::string* o3p_ptr = aliasing.name_from_alias(o3p)) + o3p = *o3p_ptr; + break; + } + if (!link.aliasing1) + groups_ok = false; + } + if (ri2.orig_chemcomp && !ChemComp::is_nucleotide_group(ri2.orig_chemcomp->group)) { + for (const ChemComp::Aliasing& aliasing : ri2.orig_chemcomp->aliases) + if (ChemComp::is_nucleotide_group(aliasing.group)) { + link.aliasing2 = &aliasing; + if (const std::string* p_ptr = aliasing.name_from_alias(p)) + p = *p_ptr; + break; + } + if (!link.aliasing2) + groups_ok = false; + } + for (const Atom& a1 : ri1.res->atoms) + if (a1.name == o3p && a1.element == El::O) { + for (const Atom& a2 : ri2.res->atoms) + if (a2.name == p && a2.element == El::P && + (a2.altloc == a1.altloc || a2.altloc == '\0' || a1.altloc == '\0') && + in_nucleotide_bond_distance(&a1, &a2)) { + link.alt1 = a1.altloc; + link.alt2 = a2.altloc; + link.atom1_name_id = atom_name_id(a1.name); + link.atom2_name_id = atom_name_id(a2.name); + if (groups_ok) { + link.link_id = "p"; + } else if (monlib) { + if (!setup_link_if_matches(link, *monlib, o3p, p)) + link.link_id = add_auto_chemlink(*monlib, + ri1.res->name, o3p, + ri2.res->name, p, + 1.606, 0.02); + } + ri2.prev.push_back(link); + } + } + } + + if (ri2.prev.empty()) { + link.link_id = "gap"; + ri2.prev.push_back(link); + } +} + +double Topo::ideal_chiral_abs_volume(const Chirality &ch) const { + const Restraints::Bond* bond_c1 = take_bond(ch.atoms[0], ch.atoms[1]); + const Restraints::Bond* bond_c2 = take_bond(ch.atoms[0], ch.atoms[2]); + const Restraints::Bond* bond_c3 = take_bond(ch.atoms[0], ch.atoms[3]); + const Restraints::Angle* angle_1c2 = take_angle(ch.atoms[1], ch.atoms[0], ch.atoms[2]); + const Restraints::Angle* angle_2c3 = take_angle(ch.atoms[2], ch.atoms[0], ch.atoms[3]); + const Restraints::Angle* angle_3c1 = take_angle(ch.atoms[3], ch.atoms[0], ch.atoms[1]); + if (bond_c1 && bond_c2 && bond_c3 && angle_1c2 && angle_2c3 && angle_3c1) + return chiral_abs_volume(bond_c1->value, bond_c2->value, bond_c3->value, + angle_1c2->value, angle_2c3->value, angle_3c1->value); + return std::numeric_limits::quiet_NaN(); +} + +std::vector Topo::apply_restraints(const Restraints& rt, + Residue& res, Residue* res2, Asu asu, + char altloc1, char altloc2, bool require_alt) { + std::string altlocs; + if (altloc1 == '\0' && altloc2 == '\0') { + add_distinct_altlocs(res, altlocs); + if (res2) + add_distinct_altlocs(*res2, altlocs); + } + if (altlocs.empty()) + altlocs += altloc1 != 0 ? altloc1 : altloc2; + + std::vector rules; + for (const Restraints::Bond& bond : rt.bonds) + for (char alt : altlocs) + if (Atom* at1 = bond.id1.get_from(res, res2, alt, altloc2)) + if (Atom* at2 = bond.id2.get_from(res, res2, alt, altloc2)) { + bool with_alt = at1->altloc || at2->altloc; + if (with_alt || !require_alt) { + rules.push_back({RKind::Bond, bonds.size()}); + bonds.push_back({&bond, {{at1, at2}}, asu}); + } + if (!with_alt) + break; + } + + if (only_bonds) + return rules; + + for (const Restraints::Angle& angle : rt.angles) + for (char alt : altlocs) + if (Atom* at1 = angle.id1.get_from(res, res2, alt, altloc2)) + if (Atom* at2 = angle.id2.get_from(res, res2, alt, altloc2)) + if (Atom* at3 = angle.id3.get_from(res, res2, alt, altloc2)) { + bool with_alt = at1->altloc || at2->altloc || at3->altloc; + if (with_alt || !require_alt) { + rules.push_back({RKind::Angle, angles.size()}); + angles.push_back({&angle, {{at1, at2, at3}}}); + } + if (!with_alt) + break; + } + for (const Restraints::Torsion& tor : rt.torsions) + for (char alt : altlocs) + if (Atom* at1 = tor.id1.get_from(res, res2, alt, altloc2)) + if (Atom* at2 = tor.id2.get_from(res, res2, alt, altloc2)) + if (Atom* at3 = tor.id3.get_from(res, res2, alt, altloc2)) + if (Atom* at4 = tor.id4.get_from(res, res2, alt, altloc2)) { + bool with_alt = at1->altloc || at2->altloc || at3->altloc || at4->altloc; + if (with_alt || !require_alt) { + rules.push_back({RKind::Torsion, torsions.size()}); + torsions.push_back({&tor, {{at1, at2, at3, at4}}}); + } + if (!with_alt) + break; + } + for (const Restraints::Chirality& chir : rt.chirs) + for (char alt : altlocs) + if (Atom* at1 = chir.id_ctr.get_from(res, res2, alt, altloc2)) + if (Atom* at2 = chir.id1.get_from(res, res2, alt, altloc2)) + if (Atom* at3 = chir.id2.get_from(res, res2, alt, altloc2)) + if (Atom* at4 = chir.id3.get_from(res, res2, alt, altloc2)) { + bool with_alt = at1->altloc || at2->altloc || at3->altloc || at4->altloc; + if (with_alt || !require_alt) { + rules.push_back({RKind::Chirality, chirs.size()}); + chirs.push_back({&chir, {{at1, at2, at3, at4}}}); + } + if (!with_alt) + break; + } + for (const Restraints::Plane& plane : rt.planes) + for (char alt : altlocs) { + std::vector atoms; + bool with_alt = false; + for (const Restraints::AtomId& id : plane.ids) + if (Atom* atom = id.get_from(res, res2, alt, altloc2)) { + with_alt = with_alt || atom->altloc; + atoms.push_back(atom); + } + if (atoms.size() >= 4 && (with_alt || !require_alt)) { + rules.push_back({RKind::Plane, planes.size()}); + planes.push_back({&plane, atoms}); + } + if (!with_alt) + break; + } + return rules; +} + +void Topo::apply_restraints_from_link(Link& link, const MonLib& monlib) { + if (link.link_id.empty() || link.link_id == "gap") + return; + const ChemLink* chem_link = monlib.get_link(link.link_id); + if (!chem_link) { + logger.err("ignoring link '", link.link_id, "' as it is not in the monomer library"); + return; + } + const Restraints* rt = &chem_link->rt; + if (link.alt1 && link.alt2 && link.alt1 != link.alt2) + logger.err("LINK between different conformers: ", link.alt1, " (in ", + link.res1->name, ") and ", link.alt2, " (in ", link.res2->name, ")."); + // aliases are a new feature - introduced in 2022 + if (link.aliasing1 || link.aliasing2) { + std::unique_ptr rt_copy(new Restraints(*rt)); + if (link.aliasing1) + for (const auto& p : link.aliasing1->related) + rt_copy->rename_atom(Restraints::AtomId{1, p.second}, p.first); + if (link.aliasing2) + for (const auto& p : link.aliasing2->related) + rt_copy->rename_atom(Restraints::AtomId{2, p.second}, p.first); + rt = rt_copy.get(); + rt_storage.push_back(std::move(rt_copy)); + } + link.link_rules = apply_restraints(*rt, *link.res1, link.res2, link.asu, + link.alt1, link.alt2, false); +} + +// see comments above the declaration +void Topo::initialize_refmac_topology(Structure& st, Model& model0, + MonLib& monlib, bool ignore_unknown_links) { + // initialize chain_infos + for (Chain& chain : model0.chains) + for (ResidueSpan& sub : chain.subchains()) { + // set Residue::group_idx which is used in Restraints::AtomId::get_from() + for (size_t i = 0; i != sub.size(); ++i) { + sub[i].group_idx = 0; + if (i != 0 && sub[i-1].seqid == sub[i].seqid) + sub[i].group_idx = sub[i-1].group_idx + 1; + } + const Entity* ent = st.get_entity_of(sub); + chain_infos.emplace_back(sub, chain, ent); + } + + // add modifications from MODRES records (Refmac's extension) + for (const ModRes& modres : st.mod_residues) + if (!modres.mod_id.empty()) { + for (Topo::ChainInfo& chain_info : chain_infos) + if (chain_info.chain_ref.name == modres.chain_name) { + for (Topo::ResInfo& res_info : chain_info.res_infos) + if (*res_info.res == modres.res_id) + res_info.add_mod(modres.mod_id, nullptr, '\0'); + } + } + + // setup pointers to monomers and links in the polymer + for (ChainInfo& ci : chain_infos) { + for (ResInfo& ri : ci.res_infos) { + auto it = monlib.monomers.find(ri.res->name); + if (it != monlib.monomers.end()) + ri.orig_chemcomp = &it->second; + // orig_chemcomp is left null for missing monomers + } + // setup polymer links + if (ci.polymer && !ci.res_infos.empty()) { + // handling of microheterogeneities makes it more complicated + // and it should be even more complex to handle partial bonding + auto prev_begin = ci.res_infos.begin(); + auto prev_end = ci.group_end(prev_begin); + while (prev_end != ci.res_infos.end()) { + auto group_begin = prev_end; + auto group_end = ci.group_end(group_begin); + for (auto ri = group_begin; ri != group_end; ++ri) + for (auto prev_ri = prev_begin; prev_ri != prev_end; ++prev_ri) { + MonLib* monlib_ptr = ignore_unknown_links ? nullptr : &monlib; + add_polymer_links(ci.polymer_type, *prev_ri, *ri, monlib_ptr); + } + prev_begin = group_begin; + prev_end = group_end; + } + } + } + + // add extra links + for (Connection& conn : st.connections) + if (conn.type != Connection::Hydrog) // ignoring hydrogen bonds + setup_connection(conn, model0, monlib, ignore_unknown_links); + + // Add modifications from standard links. We do it here b/c polymer links + // could be disabled (link_id.clear()) in setup_connection(). + for (ChainInfo& ci : chain_infos) + for (ResInfo& ri : ci.res_infos) + for (Link& prev : ri.prev) + if (const ChemLink* chem_link = monlib.get_link(prev.link_id)) { + ResInfo* ri_prev = &ri + prev.res_distance(); + ri_prev->add_mod(chem_link->side1.mod, prev.aliasing1, prev.alt1); + ri.add_mod(chem_link->side2.mod, prev.aliasing2, prev.alt2); + } + + // Apply modifications to monomer restraints + for (ChainInfo& chain_info : chain_infos) + for (ResInfo& ri : chain_info.res_infos) { + if (ri.orig_chemcomp) { + // The final ChemComp restraints that we'll use are made from + // original (_chem_comp) restraints with modifications (_chem_mod) + // applied. There is a corner case in which different conformations + // of the residue have different modifications applied. + bool has_mod_altlocs = false; + for (const Mod& mod : ri.mods) + if (mod.altloc != '\0') + has_mod_altlocs = true; + std::string altlocs; + if (has_mod_altlocs) + add_distinct_altlocs(*ri.res, altlocs); // cf. apply_restraints + if (altlocs.empty()) + altlocs += '\0'; + for (char altloc : altlocs) { + // key for caching in Topo::cc_cache: ChemComp::name + modifications + std::string key = ri.orig_chemcomp->name; + for (const Mod& mod : ri.mods) + if (!mod.altloc || altloc == mod.altloc) { + key += char(1 + static_cast(mod.alias)); + key += mod.id; + } + auto it = cc_cache.find(key); + if (it != cc_cache.end()) { + ri.chemcomps.push_back({altloc, it->second.get()}); + } else { // it's not in cache yet - we need to add it + std::unique_ptr cc_copy(new ChemComp(*ri.orig_chemcomp)); + // apply modifications + for (const Mod& mod : ri.mods) { + if (!mod.altloc || altloc == mod.altloc) { + if (const ChemMod* chem_mod = monlib.get_mod(mod.id)) { + try { + chem_mod->apply_to(*cc_copy, mod.alias); + } catch(std::runtime_error& e) { + logger.err("failed to apply modification ", chem_mod->id, + " to ", ri.res->name, ": ", e.what()); + } + } else { + logger.err("modification not found: ", mod.id); + } + } + } + ri.chemcomps.push_back({altloc, cc_copy.get()}); + cc_cache.emplace(key, std::move(cc_copy)); + } + } + // Usually the same modifications are applied to all conformers. + // In such case reduce chemcomps to a single value. + if (ri.chemcomps.size() > 0 && + std::all_of(ri.chemcomps.begin() + 1, ri.chemcomps.end(), + [&](const FinalChemComp& f) { return f.cc == ri.chemcomps[0].cc; })) { + ri.chemcomps.resize(1); + ri.chemcomps[0].altloc = '\0'; + } + } else { // orig_chemcomp not set - make ChemComp with ad-hoc restraints + // no cache - ad-hoc restraints are separate for each residue + cc_storage.emplace_back(make_chemcomp_with_restraints(*ri.res)); + ri.chemcomps.push_back({'\0', cc_storage.back().get()}); + } + } +} + +void Topo::apply_all_restraints(const MonLib& monlib) { + bonds.clear(); + angles.clear(); + torsions.clear(); + chirs.clear(); + planes.clear(); + rt_storage.clear(); + for (ChainInfo& chain_info : chain_infos) + for (ResInfo& ri : chain_info.res_infos) { + // link restraints + for (Link& link : ri.prev) + apply_restraints_from_link(link, monlib); + // monomer restraints + auto it = ri.chemcomps.cbegin(); + ri.monomer_rules = apply_restraints(it->cc->rt, *ri.res, nullptr, Asu::Same, + it->altloc, '\0', /*require_alt=*/false); + while (++it != ri.chemcomps.end()) { + auto rules = apply_restraints(it->cc->rt, *ri.res, nullptr, Asu::Same, + it->altloc, '\0', /*require_alt=*/true); + // calling reserve avoids bogus GCC warning -Wstringop-overflow + ri.monomer_rules.reserve(ri.monomer_rules.size() + rules.size()); + vector_move_extend(ri.monomer_rules, std::move(rules)); + } + } + for (Link& link : extras) + apply_restraints_from_link(link, monlib); +} + +void Topo::create_indices() { + bond_index.clear(); + for (Bond& bond : bonds) { + bond_index.emplace(bond.atoms[0], &bond); + if (bond.atoms[1] != bond.atoms[0]) + bond_index.emplace(bond.atoms[1], &bond); + } + angle_index.clear(); + for (Angle& ang : angles) + angle_index.emplace(ang.atoms[1], &ang); + torsion_index.clear(); + for (Torsion& tor : torsions) { + torsion_index.emplace(tor.atoms[1], &tor); + if (tor.atoms[1] != tor.atoms[2]) + torsion_index.emplace(tor.atoms[2], &tor); + } + plane_index.clear(); + for (Plane& plane : planes) + for (Atom* atom : plane.atoms) + plane_index.emplace(atom, &plane); +} + +Topo::Link* Topo::find_polymer_link(const AtomAddress& aa1, const AtomAddress& aa2) { + auto are_bonded = [&](const Link& link, const AtomAddress& a1, const AtomAddress& a2) { + return a1.res_id.matches_noseg(*link.res1) && + a2.res_id.matches_noseg(*link.res2) && + a1.altloc == link.alt1 && + a2.altloc == link.alt2 && + (a1.atom_name.empty() || atom_name_id(a1.atom_name) == link.atom1_name_id) && + (a2.atom_name.empty() || atom_name_id(a2.atom_name) == link.atom2_name_id); + }; + if (aa1.chain_name != aa2.chain_name) + return nullptr; + for (ChainInfo& ci : chain_infos) + if (aa1.chain_name == ci.chain_ref.name) { + for (ResInfo& ri : ci.res_infos) + for (Link& link : ri.prev) { + assert(link.res1 && link.res2); + if (are_bonded(link, aa1, aa2) || are_bonded(link, aa2, aa1)) + return &link; + } + } + return nullptr; +} + +// Tries to construct Topo::Link and append it to extras. +// Side-effects: it may modify conn.link_id and add ChemLink to monlib.links. +void Topo::setup_connection(Connection& conn, Model& model0, MonLib& monlib, + bool ignore_unknown_links) { + if (conn.link_id == "gap") { + if (Link* polymer_link = find_polymer_link(conn.partner1, conn.partner2)) + polymer_link->link_id.clear(); // disable polymer link + return; + } + + Link extra; + CRA cra1 = model0.find_cra(conn.partner1, true); + CRA cra2 = model0.find_cra(conn.partner2, true); + if (!cra1.atom || !cra2.atom) + return; + extra.res1 = cra1.residue; + extra.res2 = cra2.residue; + extra.alt1 = conn.partner1.altloc; + extra.alt2 = conn.partner2.altloc; + extra.asu = conn.asu; + + const ChemLink* match = nullptr; + + // If we have link_id find ChemLink by name (and check if it matches). + if (!conn.link_id.empty()) { + match = monlib.get_link(conn.link_id); + if (!match) { + logger.err("link not found in monomer library: ", conn.link_id); + return; + } + if (match->rt.bonds.empty() || + !monlib.link_side_matches_residue(match->side1, extra.res1->name, &extra.aliasing1) || + !monlib.link_side_matches_residue(match->side2, extra.res2->name, &extra.aliasing2) || + !atom_match_with_alias(match->rt.bonds[0].id1.atom, + conn.partner1.atom_name, extra.aliasing1) || + !atom_match_with_alias(match->rt.bonds[0].id2.atom, + conn.partner2.atom_name, extra.aliasing2)) { + logger.err("link from the monomer library does not match: ", conn.link_id); + return; + } + } else { + // we don't have link_id - use the best matching link (if any) + match = setup_link_if_matches(extra, monlib, + conn.partner1.atom_name, conn.partner2.atom_name); + if (match) + conn.link_id = match->id; + } + + // If a polymer link is also given in LINK/struct_conn, + // use only one of them. If LINK has explicit name (ccp4_link_id), + // or if it matches residue-specific link from monomer library, use it; + // otherwise, LINK is repetition of TRANS/CIS, so ignore LINK. + if (Link* polymer_link = find_polymer_link(conn.partner1, conn.partner2)) { + if (!conn.link_id.empty() || // conn has explicit link name + // polymer link was not really identified + cif::is_null(polymer_link->link_id) || polymer_link->link_id == "gap" || + // conn is residue-specific + (match && !(match->side1.comp.empty() && match->side2.comp.empty()))) + polymer_link->link_id.clear(); // disable polymer link, use conn + else + return; + } + + if (match) { + extra.link_id = match->id; + // add modifications from the link + find_resinfo(extra.res1)->add_mod(match->side1.mod, extra.aliasing1, extra.alt1); + find_resinfo(extra.res2)->add_mod(match->side2.mod, extra.aliasing2, extra.alt2); + } else { + if (ignore_unknown_links) + return; + // create a new ChemLink and add it to the monomer library + double ideal_dist = monlib.find_ideal_distance(cra1, cra2); + extra.link_id = add_auto_chemlink(monlib, + extra.res1->name, conn.partner1.atom_name, + extra.res2->name, conn.partner2.atom_name, + ideal_dist, 0.02); + } + extras.push_back(extra); +} + +void Topo::set_cispeps_in_structure(Structure& st) { + st.cispeps.clear(); + if (chain_infos.empty()) + return; + // model is not stored in Topo, let's determine it from chain_infos[0] + int model_num = 0; + for (const Model& model : st.models) + if (!model.chains.empty() && + &model.chains[0] == &chain_infos[0].chain_ref) + model_num = model.num; + for (ChainInfo& chain_info : chain_infos) + for (ResInfo& res_info : chain_info.res_infos) + for (Link& link : res_info.prev) + if (link.is_cis) { + CisPep cp; + cp.model_num = model_num; + cp.partner_c = AtomAddress(chain_info.chain_ref.name, *link.res1, "", link.alt1); + cp.partner_n = AtomAddress(chain_info.chain_ref.name, *link.res2, "", link.alt2); + cp.only_altloc = link.alt1 ? link.alt1 : link.alt2; + for (const Rule& rule : link.link_rules) + if (rule.rkind == RKind::Torsion) { + const Torsion& tor = torsions[rule.index]; + if (tor.restr->label == "omega") { + cp.reported_angle = tor.calculate(); + break; + } + } + st.cispeps.push_back(cp); + } +} + +namespace { + +void remove_hydrogens_from_atom(Topo::ResInfo* ri, + const std::string& atom_name, char alt) { + if (!ri) + return; + std::vector& atoms = ri->res->atoms; + const Restraints& rt = ri->get_final_chemcomp(alt).rt; + for (auto it = atoms.end(); it-- != atoms.begin(); ) { + if (it->is_hydrogen() && is_same_conformer(it->altloc, alt)) { + const Restraints::AtomId* heavy = rt.first_bonded_atom(it->name); + if (heavy && heavy->atom == atom_name) + atoms.erase(it); + } + } +} + +void set_cis_in_link(Topo::Link& link, bool is_cis) { + if (is_cis) { + if (ends_with(link.link_id, "TRANS")) + link.link_id.replace(link.link_id.size() - 5, 5, "CIS"); + } else { + if (ends_with(link.link_id, "CIS")) + link.link_id.replace(link.link_id.size() - 3, 3, "TRANS"); + } + link.is_cis = is_cis; +} + +void force_cispeps(Topo& topo, bool single_model, const Model& model, + const std::vector& cispeps) { + std::multimap cispep_index; + for (const CisPep& cp : cispeps) { + if (single_model || model.num == cp.model_num) + if (const Residue* res_n = model.find_cra(cp.partner_n).residue) + cispep_index.emplace(res_n, &cp); + } + for (Topo::ChainInfo& chain_info : topo.chain_infos) + for (Topo::ResInfo& res_info : chain_info.res_infos) { + auto range = cispep_index.equal_range(res_info.res); + for (Topo::Link& link : res_info.prev) { + bool is_cis = false; + for (auto i = range.first; i != range.second; ++i) { + const CisPep& cp = *i->second; + if (cp.partner_c.res_id.matches_noseg(*link.res1) && + (cp.only_altloc == '\0' || cp.only_altloc == link.alt1 + || cp.only_altloc == link.alt2)) + is_cis = true; + } + if (is_cis != link.is_cis) { + set_cis_in_link(link, is_cis); + const std::string& ch_name = chain_info.chain_ref.name; + topo.logger.note("link between ", atom_str(ch_name, *link.res1, "", link.alt1), + " and ", atom_str(ch_name, *link.res2, "", link.alt2), + " forced to ", link.link_id); + } + } + } +} + +struct Neigh { + char alt; + float occ; +}; +using NeighMap = std::unordered_multimap; + +// Assumes no hydrogens in the residue. +// Position and serial number are not assigned for new atoms. +void add_hydrogens_without_positions(Topo::ResInfo& ri, const NeighMap& neighbor_altlocs) { + std::vector& atoms = ri.res->atoms; + // Add H atom for each conformation (altloc) of the parent atom and its + // first neighbors. + for (size_t i = 0, size = atoms.size(); i != size; ++i) { + if (atoms[i].calc_flag == CalcFlag::NoHydrogen) + continue; + char parent_alt = atoms[i].altloc; + float parent_occ = atoms[i].occ; + std::map altlocs; // altloc + occupancy + if (parent_alt == '\0') { + // We could have neighbor 1 with altlocs A,B and neighbor 2 with C,D. + // Or A,B and A,B,C. Or, neighbor 1 could have different occupancy + // of altloc A than neighbor 2. We don't want to check for all possible + // weird cases. Only ensure that the added H has total occupancy <= 1. + float occ_sum = 0; + auto range = neighbor_altlocs.equal_range(atoms[i].serial); + for (auto it = range.first; it != range.second; ++it) { + const Neigh& neigh = it->second; + if (altlocs.count(neigh.alt) == 0 && neigh.occ < 1.0f && occ_sum + neigh.occ <= 1.001f) { + occ_sum += neigh.occ; + altlocs.emplace(neigh.alt, neigh.occ); + } + } + if (occ_sum - parent_occ > 0.001f) + for (auto& it : altlocs) + it.second *= parent_occ; + } + if (altlocs.empty()) + altlocs.emplace(parent_alt, parent_occ); + const ChemComp& cc = ri.get_final_chemcomp(parent_alt); + for (const Restraints::Bond& bond : cc.rt.bonds) { + // atoms may get re-allocated, so we can't set parent earlier + const Atom& parent = atoms[i]; + assert(!parent.is_hydrogen()); + const Restraints::AtomId* atom_id = bond.other(parent.name); + if (!atom_id) + continue; + auto it = cc.find_atom(atom_id->atom); + if (it == cc.atoms.end()) + fail("inconsistent _chem_comp " + cc.name); + if (it->is_hydrogen()) { + gemmi::Atom atom; + atom.name = it->id; + atom.element = it->el; + // calc_flag will be changed to Calculated when the position is set + atom.calc_flag = CalcFlag::Dummy; + atom.b_iso = parent.b_iso; + for (auto alt_occ : altlocs) { + atom.altloc = alt_occ.first; + atom.occ = alt_occ.second; + atoms.push_back(atom); + } + } + } + } +} + +NeighMap prepare_neighbor_altlocs(Topo& topo, const MonLib& monlib) { + // disable warnings here, so they are not printed twice + topo.logger.suspend(); + // Prepare bonds. Fills topo.bonds, monomer_rules/link_rules and rt_storage, + // but they are all reset when apply_all_restraints() is called again. + topo.only_bonds = true; + topo.apply_all_restraints(monlib); + topo.only_bonds = false; + topo.logger.resume(); // re-enable warnings + NeighMap neighbors; + for (const Topo::Bond& bond : topo.bonds) { + const Atom* a1 = bond.atoms[0]; + const Atom* a2 = bond.atoms[1]; + if (a2->altloc) + neighbors.emplace(a1->serial, Neigh{a2->altloc, a2->occ}); + if (a1->altloc && a1 != a2) + neighbors.emplace(a2->serial, Neigh{a1->altloc, a1->occ}); + } + return neighbors; +} + +} // anonymous namespace + +std::unique_ptr +prepare_topology(Structure& st, MonLib& monlib, size_t model_index, + HydrogenChange h_change, bool reorder, + const Logger& logger, bool ignore_unknown_links, bool use_cispeps) { + std::unique_ptr topo(new Topo); + topo->logger = logger; + if (model_index >= st.models.size()) + fail("no such model index: " + std::to_string(model_index)); + Model& model = st.models[model_index]; + topo->initialize_refmac_topology(st, model, monlib, ignore_unknown_links); + + if (use_cispeps) + force_cispeps(*topo, st.models.size() == 1, model, st.cispeps); + + // remove hydrogens, or change deuterium to fraction, or nothing + // and then check atom names + for (Topo::ChainInfo& chain_info : topo->chain_infos) + for (Topo::ResInfo& ri : chain_info.res_infos) { + Residue& res = *ri.res; + if (h_change != HydrogenChange::NoChange && h_change != HydrogenChange::Shift + // don't re-add H's if we don't have chemical component description + && (ri.orig_chemcomp != nullptr || h_change == HydrogenChange::Remove)) { + // remove/add hydrogens + remove_hydrogens(res); + } else { + // Special handling of Deuterium - mostly for Refmac. + // Note: if the model has deuterium, it gets modified. + if (replace_deuterium_with_fraction(res)) { + // deuterium names usually differ from the names in dictionary + for (Atom& atom : res.atoms) + if (atom.name[0] == 'D' && atom.fraction != 0) { + const ChemComp& cc = ri.get_final_chemcomp(atom.altloc); + if (cc.find_atom(atom.name) == cc.atoms.end()) + atom.name[0] = 'H'; + } + st.has_d_fraction = true; + } + } + // check atom names + for (Atom& atom : res.atoms) { + const ChemComp& cc = ri.get_final_chemcomp(atom.altloc); + if (!cc.has_atom(atom.name)) { + std::string msg = "definition not found for " + + atom_str(chain_info.chain_ref, *ri.res, atom); + if (ri.orig_chemcomp && ri.orig_chemcomp->has_atom(atom.name)) { + msg += " (linkage should remove this atom)"; + } else { + auto it = cc.find_atom_by_old_name(atom.name); + if (it != cc.atoms.end()) + cat_to(msg, " (replace ", atom.name, " with ", it->id, ')'); + } + topo->logger.err(msg); + } + } + } + + // add hydrogens + if (h_change == HydrogenChange::ReAdd || + h_change == HydrogenChange::ReAddButWater || + h_change == HydrogenChange::ReAddKnown) { + NeighMap neighbor_altlocs = prepare_neighbor_altlocs(*topo, monlib); + for (Topo::ChainInfo& chain_info : topo->chain_infos) + for (Topo::ResInfo& ri : chain_info.res_infos) { + Residue& res = *ri.res; + if (ri.orig_chemcomp != nullptr && + (h_change == HydrogenChange::ReAdd || !res.is_water())) { + add_hydrogens_without_positions(ri, neighbor_altlocs); + + // a special handling of HIS for compatibility with Refmac + if (res.name == "HIS") { + for (gemmi::Atom& atom : ri.res->atoms) + if (atom.name == "HD1" || atom.name == "HE2") + atom.occ = 0; + } + } + } + } + + // sort atoms in residues + for (Topo::ChainInfo& chain_info : topo->chain_infos) + for (Topo::ResInfo& ri : chain_info.res_infos) + if (reorder && ri.orig_chemcomp) { + Residue& res = *ri.res; + const ChemComp& cc = *ri.orig_chemcomp; + for (Atom& atom : res.atoms) { + auto it = cc.find_atom(atom.name); + // If atom.name is not found (b/c it was added in a modification), + // the atom will be put after original atoms. + atom.serial = int(it - cc.atoms.begin()); // temporary, for sorting only + } + std::sort(res.atoms.begin(), res.atoms.end(), [](const Atom& a, const Atom& b) { + return a.serial != b.serial ? a.serial < b.serial + : a.altloc < b.altloc; + }); + // check for missing altloc + for (auto atom = res.atoms.begin(); atom + 1 < res.atoms.end(); ++atom) + if (atom->name == (atom + 1)->name && atom->altloc == '\0') + topo->logger.err("missing altloc in ", atom_str(chain_info.chain_ref, *ri.res, *atom)); + } + + // for atoms with ad-hoc links, for now we don't want hydrogens + if (!ignore_unknown_links && h_change != HydrogenChange::NoChange) { + auto remove_h_from_auto_links = [&](const Topo::Link& link) { + const ChemLink* cl = monlib.get_link(link.link_id); + if (cl && starts_with(cl->name, "auto-")) { + const Restraints::Bond& bond = cl->rt.bonds.at(0); + remove_hydrogens_from_atom(topo->find_resinfo(link.res1), bond.id1.atom, link.alt1); + remove_hydrogens_from_atom(topo->find_resinfo(link.res2), bond.id2.atom, link.alt2); + } + }; + for (const Topo::ChainInfo& chain_info : topo->chain_infos) + for (const Topo::ResInfo& res_info : chain_info.res_infos) + for (const Topo::Link& link : res_info.prev) + remove_h_from_auto_links(link); + for (const Topo::Link& link : topo->extras) + remove_h_from_auto_links(link); + } + + // fill Topo::bonds, angles, ... and ResInfo::monomer_rules, Links::link_rules + topo->apply_all_restraints(monlib); + // fill bond_index, angle_index, etc + topo->create_indices(); + + // the hydrogens added previously have positions not set + if (h_change != HydrogenChange::NoChange) + place_hydrogens_on_all_atoms(*topo); + + if (h_change == HydrogenChange::ReAddKnown) { + // To leave only known hydrogens, we remove Hs with zero occupancy. + // As a side-effect, it removes any H atoms on zero-occupancy parents. + for (Chain& chain : model.chains) + for (Residue& res : chain.residues) + vector_remove_if(res.atoms, [](Atom& a) { return a.is_hydrogen() && a.occ == 0; }); + + // disable warnings here, so they are not printed twice + topo->logger.suspend(); + // re-set restraints and indices + topo->apply_all_restraints(monlib); + topo->create_indices(); + topo->logger.resume(); + } + + assign_serial_numbers(model); + return topo; +} + +std::vector find_missing_atoms(const Topo& topo, bool including_hydrogen) { + std::vector ret; + for (const Topo::ChainInfo& chain_info : topo.chain_infos) + for (const Topo::ResInfo& ri : chain_info.res_infos) { + // check only the first conformation + const Topo::FinalChemComp& fcc = ri.chemcomps.at(0); + char altloc = fcc.altloc != '\0' ? fcc.altloc : '*'; + for (const ChemComp::Atom& at : fcc.cc->atoms) + if ((including_hydrogen || !at.is_hydrogen()) && + ri.res->find_atom(at.id, altloc) == nullptr) + ret.emplace_back(chain_info.chain_ref.name, *ri.res, at.id, fcc.altloc); + } + return ret; +} + +} diff --git a/image_analysis/structure_refinement/CMakeLists.txt b/image_analysis/structure_refinement/CMakeLists.txt index 62ac58f77..1f98395e0 100644 --- a/image_analysis/structure_refinement/CMakeLists.txt +++ b/image_analysis/structure_refinement/CMakeLists.txt @@ -16,7 +16,44 @@ ADD_LIBRARY(JFJochStructureRefinement STATIC $<$:ModelStructureFactorsGPU.cu> ModelStructureFactorsGPU.h ModelStructureFactorsGPUEngine.h $<$:ModelScaleGPU.cu> ModelScaleGPU.h - SigmaA.cpp SigmaA.h) + SigmaA.cpp SigmaA.h + MonomerLibrary.cpp MonomerLibrary.h + ${CMAKE_CURRENT_BINARY_DIR}/MonomerLibraryData.cpp) + +# The subset of the CCP4 Monomer Library that refinement restrains with (monomers/, chosen by +# monomers/update_monomers.py), carried in the binary so that nothing is read from disk: every .cif of the +# directory as a string, cut into pieces of at most 12000 characters - under the 16380 a single literal may +# hold with MSVC - which MonomerLibrary.cpp joins again. A .cif added or edited re-runs the configure. +FILE(GLOB MONOMER_CIFS ${CMAKE_CURRENT_SOURCE_DIR}/monomers/*.cif) +SET_PROPERTY(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${MONOMER_CIFS} ${CMAKE_CURRENT_SOURCE_DIR}/monomers) +SET(monomer_source "// Generated from image_analysis/structure_refinement/monomers by its CMakeLists.txt - do not edit.\n") +STRING(APPEND monomer_source "#include \"MonomerLibrary.h\"\n\n") +SET(monomer_table "") +SET(monomer_count 0) +FOREACH(cif ${MONOMER_CIFS}) + GET_FILENAME_COMPONENT(cif_name ${cif} NAME) + FILE(READ ${cif} text) + STRING(LENGTH "${text}" text_length) + SET(pieces "") + SET(n_pieces 0) + SET(offset 0) + WHILE(offset LESS text_length) + STRING(SUBSTRING "${text}" ${offset} 12000 piece) + STRING(APPEND pieces "R\"MONLIB(${piece})MONLIB\",\n") + MATH(EXPR offset "${offset} + 12000") + MATH(EXPR n_pieces "${n_pieces} + 1") + ENDWHILE() + STRING(APPEND monomer_source "static const char *const file_${monomer_count}[] = {\n${pieces}};\n") + STRING(APPEND monomer_table " {\"${cif_name}\", file_${monomer_count}, ${n_pieces}},\n") + MATH(EXPR monomer_count "${monomer_count} + 1") +ENDFOREACH() +STRING(APPEND monomer_source "\nextern const EmbeddedMonomerFile embedded_monomer_files[] = {\n${monomer_table}};\n") +STRING(APPEND monomer_source "extern const size_t embedded_monomer_file_count = ${monomer_count};\n") +# Written only when it changed, so a configure does not rebuild the library. +FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/MonomerLibraryData.cpp.tmp "${monomer_source}") +CONFIGURE_FILE(${CMAKE_CURRENT_BINARY_DIR}/MonomerLibraryData.cpp.tmp + ${CMAKE_CURRENT_BINARY_DIR}/MonomerLibraryData.cpp COPYONLY) +TARGET_INCLUDE_DIRECTORIES(JFJochStructureRefinement PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}) # JFJochIndexing for CUDAMemHelpers.h and, under CUDA, to put cuFFT (RigidBodyGPU.cu) after these # objects on the link line. diff --git a/image_analysis/structure_refinement/MonomerLibrary.cpp b/image_analysis/structure_refinement/MonomerLibrary.cpp new file mode 100644 index 000000000..df908fdd0 --- /dev/null +++ b/image_analysis/structure_refinement/MonomerLibrary.cpp @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "MonomerLibrary.h" + +#include + +#include "gemmi/read_cif.hpp" // read_cif_from_memory + +// Generated by CMakeLists.txt from monomers/*.cif (MonomerLibraryData.cpp in the build tree). +extern const EmbeddedMonomerFile embedded_monomer_files[]; +extern const size_t embedded_monomer_file_count; + +namespace { + +gemmi::MonLib ReadEmbeddedMonomerLibrary() { + gemmi::MonLib monlib; + for (size_t i = 0; i < embedded_monomer_file_count; i++) { + const EmbeddedMonomerFile &f = embedded_monomer_files[i]; + std::string text; + for (size_t k = 0; k < f.n_pieces; k++) + text += f.pieces[k]; + const gemmi::cif::Document doc = gemmi::read_cif_from_memory(text.data(), text.size(), f.name); + if (std::strcmp(f.name, "ener_lib.cif") == 0) + monlib.ener_lib.read(doc); + else + monlib.read_monomer_doc(doc); + } + return monlib; +} + +} // namespace + +const gemmi::MonLib &EmbeddedMonomerLibrary() { + static const gemmi::MonLib monlib = ReadEmbeddedMonomerLibrary(); + return monlib; +} + +bool InEmbeddedMonomerLibrary(const std::string &code) { + return EmbeddedMonomerLibrary().monomers.count(code) > 0; +} diff --git a/image_analysis/structure_refinement/MonomerLibrary.h b/image_analysis/structure_refinement/MonomerLibrary.h new file mode 100644 index 000000000..1a21fe274 --- /dev/null +++ b/image_analysis/structure_refinement/MonomerLibrary.h @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include + +#include "gemmi/monlib.hpp" + +// The restraint dictionary refinement uses: the subset of the CCP4 Monomer Library (Vagin et al. 2004, +// LGPL-3.0) carried in the binary - the standard amino acids and nucleotides, their links and +// modifications, a few common ligands and additives, water and ions; monomers/update_monomers.py holds +// the list. Parsed from memory once per process; no file is read. +const gemmi::MonLib &EmbeddedMonomerLibrary(); + +// Whether `code` (a residue name) has a description in it. +bool InEmbeddedMonomerLibrary(const std::string &code); + +// One .cif of monomers/, as CMakeLists.txt embeds it: its name and its text in pieces. +struct EmbeddedMonomerFile { + const char *name; + const char *const *pieces; + size_t n_pieces; +}; diff --git a/image_analysis/structure_refinement/monomers/1PE.cif b/image_analysis/structure_refinement/monomers/1PE.cif new file mode 100644 index 000000000..426368f17 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/1PE.cif @@ -0,0 +1,228 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +1PE 1PE "PENTAETHYLENE GLYCOL" NON-POLYMER 38 16 . +# +data_comp_1PE +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +1PE OH2 O OH1 0 21.840 38.426 32.717 +1PE C12 C CH2 0 21.457 39.572 31.984 +1PE C22 C CH2 0 22.615 40.477 31.702 +1PE OH3 O O2 0 22.207 41.540 30.844 +1PE C13 C CH2 0 21.271 43.721 30.536 +1PE C23 C CH2 0 21.666 42.667 31.529 +1PE OH4 O O2 0 22.390 44.073 29.724 +1PE C14 C CH2 0 24.698 44.588 30.044 +1PE C24 C CH2 0 23.288 45.017 30.307 +1PE OH5 O O2 0 24.933 43.322 30.652 +1PE C15 C CH2 0 26.417 41.501 31.086 +1PE C25 C CH2 0 26.288 42.896 30.557 +1PE OH6 O O2 0 26.057 41.474 32.464 +1PE C16 C CH2 0 25.748 40.226 34.478 +1PE C26 C CH2 0 26.168 40.178 33.042 +1PE OH7 O OH1 0 26.621 41.011 35.266 +1PE HO2 H H 0 21.179 37.901 32.781 +1PE H121 H H 0 20.778 40.064 32.492 +1PE H122 H H 0 21.055 39.289 31.136 +1PE H221 H H 0 23.332 39.966 31.269 +1PE H222 H H 0 22.967 40.837 32.546 +1PE H131 H H 0 20.932 44.514 31.009 +1PE H132 H H 0 20.549 43.378 29.966 +1PE H231 H H 0 22.333 43.031 32.150 +1PE H232 H H 0 20.880 42.393 32.049 +1PE H141 H H 0 25.320 45.254 30.410 +1PE H142 H H 0 24.850 44.524 29.076 +1PE H241 H H 0 23.142 45.083 31.276 +1PE H242 H H 0 23.134 45.903 29.913 +1PE H151 H H 0 27.342 41.191 30.979 +1PE H152 H H 0 25.829 40.900 30.579 +1PE H251 H H 0 26.862 43.501 31.075 +1PE H252 H H 0 26.581 42.922 29.619 +1PE H161 H H 0 25.725 39.315 34.837 +1PE H162 H H 0 24.843 40.599 34.536 +1PE H261 H H 0 27.097 39.867 32.979 +1PE H262 H H 0 25.598 39.547 32.551 +1PE HO7 H H 0 26.588 41.816 35.006 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +1PE OH2 C12 SINGLE n 1.414 0.0200 1.414 0.0200 +1PE C12 C22 SINGLE n 1.496 0.0200 1.496 0.0200 +1PE C22 OH3 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE OH3 C23 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE C13 C23 SINGLE n 1.496 0.0200 1.496 0.0200 +1PE C13 OH4 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE OH4 C24 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE C14 C24 SINGLE n 1.496 0.0200 1.496 0.0200 +1PE C14 OH5 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE OH5 C25 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE C15 C25 SINGLE n 1.496 0.0200 1.496 0.0200 +1PE C15 OH6 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE OH6 C26 SINGLE n 1.423 0.0106 1.423 0.0106 +1PE C16 C26 SINGLE n 1.496 0.0200 1.496 0.0200 +1PE C16 OH7 SINGLE n 1.414 0.0200 1.414 0.0200 +1PE OH2 HO2 SINGLE n 0.970 0.0120 0.846 0.0200 +1PE C12 H121 SINGLE n 1.089 0.0100 0.980 0.0144 +1PE C12 H122 SINGLE n 1.089 0.0100 0.980 0.0144 +1PE C22 H221 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C22 H222 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C13 H131 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C13 H132 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C23 H231 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C23 H232 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C14 H141 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C14 H142 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C24 H241 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C24 H242 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C15 H151 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C15 H152 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C25 H251 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C25 H252 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C16 H161 SINGLE n 1.089 0.0100 0.980 0.0144 +1PE C16 H162 SINGLE n 1.089 0.0100 0.980 0.0144 +1PE C26 H261 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE C26 H262 SINGLE n 1.089 0.0100 0.982 0.0175 +1PE OH7 HO7 SINGLE n 0.970 0.0120 0.846 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +1PE C12 OH2 HO2 109.347 1.86 +1PE OH2 C12 C22 112.284 1.56 +1PE OH2 C12 H121 109.012 1.50 +1PE OH2 C12 H122 109.012 1.50 +1PE C22 C12 H121 109.198 1.50 +1PE C22 C12 H122 109.198 1.50 +1PE H121 C12 H122 108.093 1.50 +1PE C12 C22 OH3 109.904 1.68 +1PE C12 C22 H221 109.795 1.50 +1PE C12 C22 H222 109.795 1.50 +1PE OH3 C22 H221 109.691 1.50 +1PE OH3 C22 H222 109.691 1.50 +1PE H221 C22 H222 108.274 1.50 +1PE C22 OH3 C23 112.795 1.50 +1PE C23 C13 OH4 109.613 1.74 +1PE C23 C13 H131 109.729 1.50 +1PE C23 C13 H132 109.729 1.50 +1PE OH4 C13 H131 109.691 1.50 +1PE OH4 C13 H132 109.691 1.50 +1PE H131 C13 H132 108.274 1.50 +1PE OH3 C23 C13 109.613 1.74 +1PE OH3 C23 H231 109.691 1.50 +1PE OH3 C23 H232 109.691 1.50 +1PE C13 C23 H231 109.729 1.50 +1PE C13 C23 H232 109.729 1.50 +1PE H231 C23 H232 108.274 1.50 +1PE C13 OH4 C24 112.795 1.50 +1PE C24 C14 OH5 109.613 1.74 +1PE C24 C14 H141 109.729 1.50 +1PE C24 C14 H142 109.729 1.50 +1PE OH5 C14 H141 109.691 1.50 +1PE OH5 C14 H142 109.691 1.50 +1PE H141 C14 H142 108.274 1.50 +1PE OH4 C24 C14 109.613 1.74 +1PE OH4 C24 H241 109.691 1.50 +1PE OH4 C24 H242 109.691 1.50 +1PE C14 C24 H241 109.729 1.50 +1PE C14 C24 H242 109.729 1.50 +1PE H241 C24 H242 108.274 1.50 +1PE C14 OH5 C25 112.795 1.50 +1PE C25 C15 OH6 109.613 1.74 +1PE C25 C15 H151 109.729 1.50 +1PE C25 C15 H152 109.729 1.50 +1PE OH6 C15 H151 109.691 1.50 +1PE OH6 C15 H152 109.691 1.50 +1PE H151 C15 H152 108.274 1.50 +1PE OH5 C25 C15 109.613 1.74 +1PE OH5 C25 H251 109.691 1.50 +1PE OH5 C25 H252 109.691 1.50 +1PE C15 C25 H251 109.729 1.50 +1PE C15 C25 H252 109.729 1.50 +1PE H251 C25 H252 108.274 1.50 +1PE C15 OH6 C26 112.795 1.50 +1PE C26 C16 OH7 112.284 1.56 +1PE C26 C16 H161 109.198 1.50 +1PE C26 C16 H162 109.198 1.50 +1PE OH7 C16 H161 109.012 1.50 +1PE OH7 C16 H162 109.012 1.50 +1PE H161 C16 H162 108.093 1.50 +1PE OH6 C26 C16 109.904 1.68 +1PE OH6 C26 H261 109.691 1.50 +1PE OH6 C26 H262 109.691 1.50 +1PE C16 C26 H261 109.795 1.50 +1PE C16 C26 H262 109.795 1.50 +1PE H261 C26 H262 108.274 1.50 +1PE C16 OH7 HO7 109.347 1.86 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +1PE sp3_sp3_1 C22 C12 OH2 HO2 180.000 10.0 3 +1PE sp3_sp3_49 OH6 C15 C25 OH5 180.000 10.0 3 +1PE sp3_sp3_58 C25 C15 OH6 C26 180.000 10.0 3 +1PE sp3_sp3_61 C16 C26 OH6 C15 180.000 10.0 3 +1PE sp3_sp3_64 OH7 C16 C26 OH6 180.000 10.0 3 +1PE sp3_sp3_73 C26 C16 OH7 HO7 180.000 10.0 3 +1PE sp3_sp3_4 OH2 C12 C22 OH3 180.000 10.0 3 +1PE sp3_sp3_13 C12 C22 OH3 C23 180.000 10.0 3 +1PE sp3_sp3_16 C13 C23 OH3 C22 180.000 10.0 3 +1PE sp3_sp3_19 OH4 C13 C23 OH3 180.000 10.0 3 +1PE sp3_sp3_28 C23 C13 OH4 C24 180.000 10.0 3 +1PE sp3_sp3_31 C14 C24 OH4 C13 180.000 10.0 3 +1PE sp3_sp3_34 OH5 C14 C24 OH4 180.000 10.0 3 +1PE sp3_sp3_43 C24 C14 OH5 C25 180.000 10.0 3 +1PE sp3_sp3_46 C15 C25 OH5 C14 180.000 10.0 3 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +1PE SMILES ACDLabs 10.04 O(CCO)CCOCCOCCOCCO +1PE SMILES_CANONICAL CACTVS 3.341 OCCOCCOCCOCCOCCO +1PE SMILES CACTVS 3.341 OCCOCCOCCOCCOCCO +1PE SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(COCCOCCOCCOCCO)O +1PE SMILES "OpenEye OEToolkits" 1.5.0 C(COCCOCCOCCOCCO)O +1PE InChI InChI 1.03 InChI=1S/C10H22O6/c11-1-3-13-5-7-15-9-10-16-8-6-14-4-2-12/h11-12H,1-10H2 +1PE InChIKey InChI 1.03 JLFNLZLINWHATN-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +1PE acedrg 243 "dictionary generator" +1PE acedrg_database 11 "data source" +1PE rdkit 2017.03.2 "Chemoinformatics tool" +1PE refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/A.cif b/image_analysis/structure_refinement/monomers/A.cif new file mode 100644 index 000000000..613cc0cea --- /dev/null +++ b/image_analysis/structure_refinement/monomers/A.cif @@ -0,0 +1,271 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +A A "ADENOSINE-5'-MONOPHOSPHATE" RNA 35 23 . +# +data_comp_A +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +A OP3 O OP -1 22.184 9.416 -6.467 +A P P P 0 23.061 10.073 -7.517 +A OP1 O O 0 22.426 10.079 -8.894 +A OP2 O OP -1 24.478 9.532 -7.523 +A "O5'" O O2 0 23.184 11.622 -7.081 +A "C5'" C CH2 0 23.997 12.510 -7.889 +A "C4'" C CH1 0 23.959 13.900 -7.302 +A "O4'" O O2 0 24.489 13.865 -5.952 +A "C3'" C CH1 0 24.795 14.957 -8.033 +A "O3'" O OH1 0 24.040 15.590 -9.060 +A "C2'" C CH1 0 25.162 15.917 -6.899 +A "O2'" O OH1 0 24.142 16.849 -6.609 +A "C1'" C CH1 0 25.367 14.950 -5.735 +A N9 N NR5 0 26.737 14.457 -5.612 +A C8 C CR15 0 27.206 13.184 -5.839 +A N7 N NRD5 0 28.493 13.056 -5.636 +A C5 C CR56 0 28.908 14.321 -5.248 +A C6 C CR6 0 30.172 14.840 -4.890 +A N6 N NH2 0 31.287 14.114 -4.866 +A N1 N NRD6 0 30.240 16.155 -4.553 +A C2 C CR16 0 29.111 16.881 -4.579 +A N3 N NRD6 0 27.874 16.499 -4.898 +A C4 C CR56 0 27.833 15.193 -5.227 +A "H5'" H H 0 23.653 12.531 -8.815 +A "H5''" H H 0 24.931 12.185 -7.909 +A "H4'" H H 0 23.023 14.194 -7.269 +A "H3'" H H 0 25.613 14.544 -8.414 +A "HO3'" H H 0 24.512 16.204 -9.407 +A "H2'" H H 0 26.008 16.394 -7.110 +A "HO2'" H H 0 24.469 17.486 -6.152 +A "H1'" H H 0 25.116 15.407 -4.901 +A H8 H H 0 26.656 12.471 -6.115 +A H61 H H 0 31.972 14.381 -4.386 +A H62 H H 0 31.333 13.371 -5.331 +A H2 H H 0 29.207 17.789 -4.337 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +A OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +A P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +A P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +A P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +A "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +A "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +A "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +A "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +A "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +A "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +A "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +A "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +A "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +A "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +A N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +A N9 C4 SINGLE y 1.374 0.0101 1.374 0.0101 +A C8 N7 DOUBLE y 1.310 0.0100 1.310 0.0100 +A N7 C5 SINGLE y 1.388 0.0100 1.388 0.0100 +A C5 C6 SINGLE y 1.408 0.0100 1.408 0.0100 +A C5 C4 DOUBLE y 1.381 0.0100 1.381 0.0100 +A C6 N6 SINGLE n 1.330 0.0100 1.330 0.0100 +A C6 N1 DOUBLE y 1.354 0.0100 1.354 0.0100 +A N1 C2 SINGLE y 1.339 0.0100 1.339 0.0100 +A C2 N3 DOUBLE y 1.330 0.0100 1.330 0.0100 +A N3 C4 SINGLE y 1.343 0.0100 1.343 0.0100 +A "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +A "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +A "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +A "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +A "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +A "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +A "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +A "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +A C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +A N6 H61 SINGLE n 1.016 0.0100 0.877 0.0200 +A N6 H62 SINGLE n 1.016 0.0100 0.877 0.0200 +A C2 H2 SINGLE n 1.082 0.0130 0.945 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +A OP3 P OP1 112.864 1.69 +A OP3 P OP2 112.864 1.69 +A OP3 P "O5'" 105.808 2.07 +A OP1 P OP2 112.864 1.69 +A OP1 P "O5'" 105.808 2.07 +A OP2 P "O5'" 105.808 2.07 +A P "O5'" "C5'" 118.783 1.50 +A "O5'" "C5'" "C4'" 109.342 1.50 +A "O5'" "C5'" "H5'" 109.845 1.50 +A "O5'" "C5'" "H5''" 109.845 1.50 +A "C4'" "C5'" "H5'" 109.624 1.50 +A "C4'" "C5'" "H5''" 109.624 1.50 +A "H5'" "C5'" "H5''" 108.472 1.50 +A "C5'" "C4'" "O4'" 109.123 1.50 +A "C5'" "C4'" "C3'" 116.008 1.52 +A "C5'" "C4'" "H4'" 108.268 1.50 +A "O4'" "C4'" "C3'" 105.388 1.50 +A "O4'" "C4'" "H4'" 108.947 1.50 +A "C3'" "C4'" "H4'" 109.363 1.86 +A "C4'" "O4'" "C1'" 109.903 1.50 +A "C4'" "C3'" "O3'" 111.281 2.46 +A "C4'" "C3'" "C2'" 102.602 1.50 +A "C4'" "C3'" "H3'" 110.452 2.54 +A "O3'" "C3'" "C2'" 111.581 2.83 +A "O3'" "C3'" "H3'" 110.380 1.67 +A "C2'" "C3'" "H3'" 110.504 1.75 +A "C3'" "O3'" "HO3'" 108.744 3.00 +A "C3'" "C2'" "O2'" 112.782 2.45 +A "C3'" "C2'" "C1'" 101.239 1.50 +A "C3'" "C2'" "H2'" 110.596 1.51 +A "O2'" "C2'" "C1'" 111.715 2.69 +A "O2'" "C2'" "H2'" 110.448 1.97 +A "C1'" "C2'" "H2'" 110.636 1.70 +A "C2'" "O2'" "HO2'" 109.103 2.13 +A "O4'" "C1'" "C2'" 106.047 1.50 +A "O4'" "C1'" N9 108.477 1.50 +A "O4'" "C1'" "H1'" 109.807 1.50 +A "C2'" "C1'" N9 113.824 1.50 +A "C2'" "C1'" "H1'" 109.015 1.50 +A N9 "C1'" "H1'" 109.561 1.50 +A "C1'" N9 C8 126.848 1.91 +A "C1'" N9 C4 127.459 1.80 +A C8 N9 C4 105.693 1.50 +A N9 C8 N7 113.469 1.50 +A N9 C8 H8 123.206 1.50 +A N7 C8 H8 123.326 1.50 +A C8 N7 C5 104.739 1.50 +A N7 C5 C6 132.250 1.50 +A N7 C5 C4 110.483 1.50 +A C6 C5 C4 117.267 1.50 +A C5 C6 N6 123.792 1.50 +A C5 C6 N1 117.409 1.50 +A N6 C6 N1 118.799 1.50 +A C6 N6 H61 119.723 1.50 +A C6 N6 H62 119.723 1.50 +A H61 N6 H62 120.554 1.88 +A C6 N1 C2 118.521 1.50 +A N1 C2 N3 129.332 1.50 +A N1 C2 H2 115.313 1.50 +A N3 C2 H2 115.355 1.50 +A C2 N3 C4 110.982 1.50 +A N9 C4 C5 105.616 1.50 +A N9 C4 N3 127.895 1.50 +A C5 C4 N3 126.489 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +A C2e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +A C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +A C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +A C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +A C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +A C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +A C3e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +A C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +A C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +A C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +A C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +A C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +A alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +A beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +A epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +A gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +A sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.00 3 +A const_14 N7 C8 N9 "C1'" 180.000 10.0 2 +A const_26 C5 C4 N9 "C1'" 180.000 10.0 2 +A const_17 N9 C8 N7 C5 0.000 10.0 2 +A const_20 C6 C5 N7 C8 180.000 10.0 2 +A const_sp2_sp2_4 N7 C5 C6 N6 0.000 5.0 2 +A const_21 N9 C4 C5 N7 0.000 10.0 2 +A sp2_sp2_1 C5 C6 N6 H61 180.000 5.0 2 +A const_sp2_sp2_6 N6 C6 N1 C2 180.000 5.0 2 +A const_sp2_sp2_7 N3 C2 N1 C6 0.000 5.0 2 +A const_sp2_sp2_9 N1 C2 N3 C4 0.000 5.0 2 +A const_12 N9 C4 N3 C2 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +A chir_1 P "O5'" OP3 OP2 both +A chir_2 "C4'" "O4'" "C3'" "C5'" negative +A chir_3 "C3'" "O3'" "C4'" "C2'" positive +A chir_4 "C2'" "O2'" "C1'" "C3'" negative +A chir_5 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +A plan-1 "C1'" 0.020 +A plan-1 C2 0.020 +A plan-1 C4 0.020 +A plan-1 C5 0.020 +A plan-1 C6 0.020 +A plan-1 C8 0.020 +A plan-1 H2 0.020 +A plan-1 H8 0.020 +A plan-1 N1 0.020 +A plan-1 N3 0.020 +A plan-1 N6 0.020 +A plan-1 N7 0.020 +A plan-1 N9 0.020 +A plan-2 C6 0.020 +A plan-2 H61 0.020 +A plan-2 H62 0.020 +A plan-2 N6 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +A SMILES ACDLabs 10.04 O=P(O)(O)OCC3OC(n2cnc1c(ncnc12)N)C(O)C3O +A SMILES_CANONICAL CACTVS 3.341 Nc1ncnc2n(cnc12)[C@@H]3O[C@H](CO[P](O)(O)=O)[C@@H](O)[C@H]3O +A SMILES CACTVS 3.341 Nc1ncnc2n(cnc12)[CH]3O[CH](CO[P](O)(O)=O)[CH](O)[CH]3O +A SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)[C@H]3[C@@H]([C@@H]([C@H](O3)COP(=O)(O)O)O)O)N +A SMILES "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)C3C(C(C(O3)COP(=O)(O)O)O)O)N +A InChI InChI 1.03 InChI=1S/C10H14N5O7P/c11-8-5-9(13-2-12-8)15(3-14-5)10-7(17)6(16)4(22-10)1-21-23(18,19)20/h2-4,6-7,10,16-17H,1H2,(H2,11,12,13)(H2,18,19,20)/t4-,6-,7-,10-/m1/s1 +A InChIKey InChI 1.03 UDMBCSSLTHHNCD-KQYNXXCUSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +A acedrg 243 "dictionary generator" +A acedrg_database 11 "data source" +A rdkit 2017.03.2 "Chemoinformatics tool" +A refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ACT.cif b/image_analysis/structure_refinement/monomers/ACT.cif new file mode 100644 index 000000000..c46c46947 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ACT.cif @@ -0,0 +1,104 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ACT ACT "ACETATE ION" NON-POLYMER 7 4 . +# +data_comp_ACT +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ACT C C C 0 50.652 -7.080 41.537 +ACT O O O 0 50.915 -7.323 42.732 +ACT OXT O OC -1 51.516 -6.945 40.648 +ACT CH3 C CH3 0 49.181 -6.939 41.139 +ACT H1 H H 0 49.117 -6.760 40.187 +ACT H2 H H 0 48.780 -6.205 41.632 +ACT H3 H H 0 48.708 -7.761 41.345 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ACT C O DOUBLE n 1.247 0.0187 1.247 0.0187 +ACT C OXT SINGLE n 1.247 0.0187 1.247 0.0187 +ACT C CH3 SINGLE n 1.530 0.0200 1.530 0.0200 +ACT CH3 H1 SINGLE n 1.089 0.0100 0.971 0.0140 +ACT CH3 H2 SINGLE n 1.089 0.0100 0.971 0.0140 +ACT CH3 H3 SINGLE n 1.089 0.0100 0.971 0.0140 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ACT O C OXT 123.884 1.50 +ACT O C CH3 118.052 1.94 +ACT OXT C CH3 118.052 1.94 +ACT C CH3 H1 109.670 1.50 +ACT C CH3 H2 109.670 1.50 +ACT C CH3 H3 109.670 1.50 +ACT H1 CH3 H2 109.424 1.50 +ACT H1 CH3 H3 109.424 1.50 +ACT H2 CH3 H3 109.424 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ACT sp2_sp3_1 O C CH3 H1 0.000 10.0 6 +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ACT plan-1 C 0.020 +ACT plan-1 CH3 0.020 +ACT plan-1 O 0.020 +ACT plan-1 OXT 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ACT SMILES ACDLabs 10.04 "[O-]C(=O)C" +ACT SMILES_CANONICAL CACTVS 3.341 CC([O-])=O +ACT SMILES CACTVS 3.341 CC([O-])=O +ACT SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CC(=O)[O-] +ACT SMILES "OpenEye OEToolkits" 1.5.0 CC(=O)[O-] +ACT InChI InChI 1.03 InChI=1S/C2H4O2/c1-2(3)4/h1H3,(H,3,4)/p-1 +ACT InChIKey InChI 1.03 QTBSBXVTEAMEQO-UHFFFAOYSA-M +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ACT acedrg 243 "dictionary generator" +ACT acedrg_database 11 "data source" +ACT rdkit 2017.03.2 "Chemoinformatics tool" +ACT refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ADP.cif b/image_analysis/structure_refinement/monomers/ADP.cif new file mode 100644 index 000000000..8dd58c16f --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ADP.cif @@ -0,0 +1,283 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ADP ADP "ADENOSINE-5'-DIPHOSPHATE" NON-POLYMER 39 27 . +# +data_comp_ADP +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ADP PB P P 0 46.212 2.934 41.132 +ADP O1B O O 0 47.352 3.648 41.816 +ADP O2B O OP -1 46.188 3.167 39.642 +ADP O3B O OP -1 46.138 1.471 41.495 +ADP PA P P 0 43.308 3.312 41.426 +ADP O1A O O 0 42.947 3.885 40.095 +ADP O2A O OP -1 43.043 1.862 41.663 +ADP O3A O O2 0 44.860 3.603 41.708 +ADP "O5'" O O2 0 42.611 4.176 42.585 +ADP "C5'" C CH2 0 42.803 5.614 42.612 +ADP "C4'" C CH1 0 41.916 6.217 43.675 +ADP "O4'" O O2 0 42.237 5.618 44.957 +ADP "C3'" C CH1 0 42.060 7.727 43.896 +ADP "O3'" O OH1 0 40.836 8.295 44.347 +ADP "C2'" C CH1 0 43.161 7.787 44.958 +ADP "O2'" O OH1 0 43.139 8.979 45.714 +ADP "C1'" C CH1 0 42.808 6.577 45.819 +ADP N9 N NR5 0 43.956 5.966 46.481 +ADP C8 C CR15 0 45.032 5.373 45.867 +ADP N7 N NRD5 0 45.919 4.902 46.707 +ADP C5 C CR56 0 45.398 5.197 47.958 +ADP C6 C CR6 0 45.872 4.953 49.266 +ADP N6 N NH2 0 47.020 4.334 49.530 +ADP N1 N NRD6 0 45.104 5.379 50.303 +ADP C2 C CR16 0 43.948 6.003 50.029 +ADP N3 N NRD6 0 43.405 6.285 48.844 +ADP C4 C CR56 0 44.184 5.853 47.833 +ADP "H5'1" H H 0 42.575 6.001 41.731 +ADP "H5'2" H H 0 43.749 5.824 42.811 +ADP "H4'" H H 0 40.984 6.008 43.451 +ADP "H3'" H H 0 42.359 8.172 43.061 +ADP "HO3'" H H 0 40.903 9.141 44.325 +ADP "H2'" H H 0 44.053 7.669 44.537 +ADP "HO2'" H H 0 43.755 8.950 46.297 +ADP "H1'" H H 0 42.146 6.850 46.493 +ADP H8 H H 0 45.124 5.315 44.932 +ADP HN61 H H 0 47.233 4.142 50.360 +ADP HN62 H H 0 47.561 4.119 48.873 +ADP H2 H H 0 43.448 6.281 50.782 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ADP PB O1B DOUBLE n 1.509 0.0200 1.509 0.0200 +ADP PB O2B SINGLE n 1.509 0.0200 1.509 0.0200 +ADP PB O3B SINGLE n 1.509 0.0200 1.509 0.0200 +ADP PB O3A SINGLE n 1.614 0.0178 1.614 0.0178 +ADP PA O1A DOUBLE n 1.493 0.0122 1.493 0.0122 +ADP PA O2A SINGLE n 1.493 0.0122 1.493 0.0122 +ADP PA O3A SINGLE n 1.604 0.0133 1.604 0.0133 +ADP PA "O5'" SINGLE n 1.604 0.0133 1.604 0.0133 +ADP "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +ADP "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +ADP "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +ADP "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +ADP "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +ADP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +ADP "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +ADP "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +ADP "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +ADP "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +ADP N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +ADP N9 C4 SINGLE y 1.374 0.0101 1.374 0.0101 +ADP C8 N7 DOUBLE y 1.310 0.0100 1.310 0.0100 +ADP N7 C5 SINGLE y 1.388 0.0100 1.388 0.0100 +ADP C5 C6 SINGLE y 1.408 0.0100 1.408 0.0100 +ADP C5 C4 DOUBLE y 1.381 0.0100 1.381 0.0100 +ADP C6 N6 SINGLE n 1.330 0.0100 1.330 0.0100 +ADP C6 N1 DOUBLE y 1.354 0.0100 1.354 0.0100 +ADP N1 C2 SINGLE y 1.339 0.0100 1.339 0.0100 +ADP C2 N3 DOUBLE y 1.330 0.0100 1.330 0.0100 +ADP N3 C4 SINGLE y 1.343 0.0100 1.343 0.0100 +ADP "C5'" "H5'1" SINGLE n 1.089 0.0100 0.989 0.0200 +ADP "C5'" "H5'2" SINGLE n 1.089 0.0100 0.989 0.0200 +ADP "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +ADP "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +ADP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +ADP "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +ADP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +ADP "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +ADP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +ADP N6 HN61 SINGLE n 1.016 0.0100 0.877 0.0200 +ADP N6 HN62 SINGLE n 1.016 0.0100 0.877 0.0200 +ADP C2 H2 SINGLE n 1.082 0.0130 0.945 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ADP O1B PB O2B 112.716 1.50 +ADP O1B PB O3B 112.716 1.50 +ADP O1B PB O3A 105.965 2.38 +ADP O2B PB O3B 112.716 1.50 +ADP O2B PB O3A 105.965 2.38 +ADP O3B PB O3A 105.965 2.38 +ADP O1A PA O2A 118.411 2.35 +ADP O1A PA O3A 108.816 2.14 +ADP O1A PA "O5'" 109.410 1.50 +ADP O2A PA O3A 108.816 2.14 +ADP O2A PA "O5'" 109.410 1.50 +ADP O3A PA "O5'" 101.065 1.97 +ADP PB O3A PA 132.584 3.00 +ADP PA "O5'" "C5'" 118.553 2.41 +ADP "O5'" "C5'" "C4'" 109.342 1.50 +ADP "O5'" "C5'" "H5'1" 109.845 1.50 +ADP "O5'" "C5'" "H5'2" 109.845 1.50 +ADP "C4'" "C5'" "H5'1" 109.624 1.50 +ADP "C4'" "C5'" "H5'2" 109.624 1.50 +ADP "H5'1" "C5'" "H5'2" 108.472 1.50 +ADP "C5'" "C4'" "O4'" 109.123 1.50 +ADP "C5'" "C4'" "C3'" 116.008 1.52 +ADP "C5'" "C4'" "H4'" 108.268 1.50 +ADP "O4'" "C4'" "C3'" 105.388 1.50 +ADP "O4'" "C4'" "H4'" 108.947 1.50 +ADP "C3'" "C4'" "H4'" 109.363 1.86 +ADP "C4'" "O4'" "C1'" 109.903 1.50 +ADP "C4'" "C3'" "O3'" 111.281 2.46 +ADP "C4'" "C3'" "C2'" 102.602 1.50 +ADP "C4'" "C3'" "H3'" 110.452 2.54 +ADP "O3'" "C3'" "C2'" 111.581 2.83 +ADP "O3'" "C3'" "H3'" 110.380 1.67 +ADP "C2'" "C3'" "H3'" 110.504 1.75 +ADP "C3'" "O3'" "HO3'" 108.744 3.00 +ADP "C3'" "C2'" "O2'" 112.782 2.45 +ADP "C3'" "C2'" "C1'" 101.239 1.50 +ADP "C3'" "C2'" "H2'" 110.596 1.51 +ADP "O2'" "C2'" "C1'" 111.715 2.69 +ADP "O2'" "C2'" "H2'" 110.448 1.97 +ADP "C1'" "C2'" "H2'" 110.636 1.70 +ADP "C2'" "O2'" "HO2'" 109.103 2.13 +ADP "O4'" "C1'" "C2'" 106.047 1.50 +ADP "O4'" "C1'" N9 108.477 1.50 +ADP "O4'" "C1'" "H1'" 109.807 1.50 +ADP "C2'" "C1'" N9 113.824 1.50 +ADP "C2'" "C1'" "H1'" 109.015 1.50 +ADP N9 "C1'" "H1'" 109.561 1.50 +ADP "C1'" N9 C8 126.848 1.91 +ADP "C1'" N9 C4 127.459 1.80 +ADP C8 N9 C4 105.693 1.50 +ADP N9 C8 N7 113.469 1.50 +ADP N9 C8 H8 123.206 1.50 +ADP N7 C8 H8 123.326 1.50 +ADP C8 N7 C5 104.739 1.50 +ADP N7 C5 C6 132.250 1.50 +ADP N7 C5 C4 110.483 1.50 +ADP C6 C5 C4 117.267 1.50 +ADP C5 C6 N6 123.792 1.50 +ADP C5 C6 N1 117.409 1.50 +ADP N6 C6 N1 118.799 1.50 +ADP C6 N6 HN61 119.723 1.50 +ADP C6 N6 HN62 119.723 1.50 +ADP HN61 N6 HN62 120.554 1.88 +ADP C6 N1 C2 118.521 1.50 +ADP N1 C2 N3 129.332 1.50 +ADP N1 C2 H2 115.313 1.50 +ADP N3 C2 H2 115.355 1.50 +ADP C2 N3 C4 110.982 1.50 +ADP N9 C4 C5 105.616 1.50 +ADP N9 C4 N3 127.895 1.50 +ADP C5 C4 N3 126.489 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ADP sp3_sp3_27 PA O3A PB O1B 60.000 10.0 3 +ADP sp3_sp3_2 "C5'" "C4'" "O4'" "C1'" -60.000 10.0 3 +ADP sp3_sp3_50 "O3'" "C3'" "C4'" "C5'" 180.000 10.0 3 +ADP sp3_sp3_4 "C2'" "C1'" "O4'" "C4'" -60.000 10.0 3 +ADP sp3_sp3_55 "C4'" "C3'" "O3'" "HO3'" 180.000 10.0 3 +ADP sp3_sp3_20 "O2'" "C2'" "C3'" "O3'" -60.000 10.0 3 +ADP sp3_sp3_58 "C3'" "C2'" "O2'" "HO2'" 180.000 10.0 3 +ADP sp3_sp3_8 "O4'" "C1'" "C2'" "O2'" 180.000 10.0 3 +ADP sp2_sp3_1 C8 N9 "C1'" "O4'" 150.000 10.0 6 +ADP const_14 N7 C8 N9 "C1'" 180.000 10.0 2 +ADP const_26 C5 C4 N9 "C1'" 180.000 10.0 2 +ADP const_17 N9 C8 N7 C5 0.000 10.0 2 +ADP const_20 C6 C5 N7 C8 180.000 10.0 2 +ADP const_sp2_sp2_4 N7 C5 C6 N6 0.000 5.0 2 +ADP const_21 N9 C4 C5 N7 0.000 10.0 2 +ADP sp2_sp2_1 C5 C6 N6 HN61 180.000 5.0 2 +ADP const_sp2_sp2_6 N6 C6 N1 C2 180.000 5.0 2 +ADP const_sp2_sp2_7 N3 C2 N1 C6 0.000 5.0 2 +ADP const_sp2_sp2_9 N1 C2 N3 C4 0.000 5.0 2 +ADP const_12 N9 C4 N3 C2 180.000 10.0 2 +ADP sp3_sp3_30 PB O3A PA O1A 60.000 10.0 3 +ADP sp3_sp3_33 "C5'" "O5'" PA O1A 60.000 10.0 3 +ADP sp3_sp3_34 "C4'" "C5'" "O5'" PA 180.000 10.0 3 +ADP sp3_sp3_37 "O4'" "C4'" "C5'" "O5'" 180.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ADP chir_1 PB O3A O2B O3B both +ADP chir_2 PA O3A "O5'" O2A both +ADP chir_3 "C4'" "O4'" "C3'" "C5'" negative +ADP chir_4 "C3'" "O3'" "C4'" "C2'" positive +ADP chir_5 "C2'" "O2'" "C1'" "C3'" negative +ADP chir_6 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ADP plan-1 "C1'" 0.020 +ADP plan-1 C2 0.020 +ADP plan-1 C4 0.020 +ADP plan-1 C5 0.020 +ADP plan-1 C6 0.020 +ADP plan-1 C8 0.020 +ADP plan-1 H2 0.020 +ADP plan-1 H8 0.020 +ADP plan-1 N1 0.020 +ADP plan-1 N3 0.020 +ADP plan-1 N6 0.020 +ADP plan-1 N7 0.020 +ADP plan-1 N9 0.020 +ADP plan-2 C6 0.020 +ADP plan-2 HN61 0.020 +ADP plan-2 HN62 0.020 +ADP plan-2 N6 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ADP SMILES ACDLabs 10.04 O=P(O)(O)OP(=O)(O)OCC3OC(n2cnc1c(ncnc12)N)C(O)C3O +ADP SMILES_CANONICAL CACTVS 3.341 Nc1ncnc2n(cnc12)[C@@H]3O[C@H](CO[P@@](O)(=O)O[P](O)(O)=O)[C@@H](O)[C@H]3O +ADP SMILES CACTVS 3.341 Nc1ncnc2n(cnc12)[CH]3O[CH](CO[P](O)(=O)O[P](O)(O)=O)[CH](O)[CH]3O +ADP SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)[C@H]3[C@@H]([C@@H]([C@H](O3)CO[P@](=O)(O)OP(=O)(O)O)O)O)N +ADP SMILES "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)C3C(C(C(O3)COP(=O)(O)OP(=O)(O)O)O)O)N +ADP InChI InChI 1.03 InChI=1S/C10H15N5O10P2/c11-8-5-9(13-2-12-8)15(3-14-5)10-7(17)6(16)4(24-10)1-23-27(21,22)25-26(18,19)20/h2-4,6-7,10,16-17H,1H2,(H,21,22)(H2,11,12,13)(H2,18,19,20)/t4-,6-,7-,10-/m1/s1 +ADP InChIKey InChI 1.03 XTWYTFMLZFPYCI-KQYNXXCUSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ADP acedrg 243 "dictionary generator" +ADP acedrg_database 11 "data source" +ADP rdkit 2017.03.2 "Chemoinformatics tool" +ADP refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ALA.cif b/image_analysis/structure_refinement/monomers/ALA.cif new file mode 100644 index 000000000..be45c4253 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ALA.cif @@ -0,0 +1,182 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ALA ALA ALANINE peptide 13 6 . + +data_comp_ALA +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ALA N N NT3 1 2.474 26.375 12.879 +ALA CA C CH1 0 1.190 26.935 13.368 +ALA C C C 0 1.429 28.314 13.990 +ALA O O O 0 2.253 28.383 14.929 +ALA CB C CH3 0 0.557 25.983 14.359 +ALA OXT O OC -1 0.782 29.274 13.516 +ALA H H H 0 3.050 26.285 13.567 +ALA H2 H H 0 2.832 26.925 12.260 +ALA H3 H H 0 2.330 25.565 12.507 +ALA HA H H 0 0.581 27.046 12.587 +ALA HB3 H H 0 -0.324 26.308 14.608 +ALA HB2 H H 0 1.113 25.921 15.155 +ALA HB1 H H 0 0.472 25.102 13.958 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ALA N n/a CA START +ALA H N . . +ALA H2 N . . +ALA H3 N . . +ALA CA N C . +ALA HA CA . . +ALA CB CA HB3 . +ALA HB1 CB . . +ALA HB2 CB . . +ALA HB3 CB . . +ALA C CA . END +ALA O C . . +ALA OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +ALA N N(CCCH)(H)3 +ALA CA C(CH3)(NH3)(COO)(H) +ALA C C(CCHN)(O)2 +ALA O O(CCO) +ALA CB C(CCHN)(H)3 +ALA OXT O(CCO) +ALA H H(NCHH) +ALA H2 H(NCHH) +ALA H3 H(NCHH) +ALA HA H(CCCN) +ALA HB3 H(CCHH) +ALA HB2 H(CCHH) +ALA HB1 H(CCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ALA N CA SINGLE n 1.483 0.0100 1.483 0.0100 +ALA CA C SINGLE n 1.531 0.0100 1.531 0.0100 +ALA CA CB SINGLE n 1.513 0.0158 1.513 0.0158 +ALA C O DOUBLE n 1.251 0.0183 1.251 0.0183 +ALA C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +ALA N H SINGLE n 1.018 0.0520 0.902 0.0102 +ALA N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +ALA N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +ALA CA HA SINGLE n 1.092 0.0100 0.997 0.0200 +ALA CB HB3 SINGLE n 1.092 0.0100 0.972 0.0148 +ALA CB HB2 SINGLE n 1.092 0.0100 0.972 0.0148 +ALA CB HB1 SINGLE n 1.092 0.0100 0.972 0.0148 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ALA CA N H 109.611 2.03 +ALA CA N H2 109.611 2.03 +ALA CA N H3 109.611 2.03 +ALA H N H2 109.032 3.00 +ALA H N H3 109.032 3.00 +ALA H2 N H3 109.032 3.00 +ALA N CA C 109.720 1.50 +ALA N CA CB 109.927 1.50 +ALA N CA HA 108.247 1.50 +ALA C CA CB 111.515 1.50 +ALA C CA HA 108.267 1.50 +ALA CB CA HA 109.172 1.57 +ALA CA C O 117.191 2.33 +ALA CA C OXT 117.191 2.33 +ALA O C OXT 125.618 1.50 +ALA CA CB HB3 109.742 1.50 +ALA CA CB HB2 109.742 1.50 +ALA CA CB HB1 109.742 1.50 +ALA HB3 CB HB2 109.365 1.60 +ALA HB3 CB HB1 109.365 1.60 +ALA HB2 CB HB1 109.365 1.60 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ALA hh1 N CA CB HB3 180.000 10.0 3 +ALA sp3_sp3_1 C CA N H 180.000 10.0 3 +ALA sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ALA chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ALA plan-1 C 0.020 +ALA plan-1 CA 0.020 +ALA plan-1 O 0.020 +ALA plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ALA SMILES ACDLabs 10.04 O=C(O)C(N)C +ALA SMILES_CANONICAL CACTVS 3.341 C[C@H](N)C(O)=O +ALA SMILES CACTVS 3.341 C[CH](N)C(O)=O +ALA SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C[C@@H](C(=O)O)N +ALA SMILES "OpenEye OEToolkits" 1.5.0 CC(C(=O)O)N +ALA InChI InChI 1.03 InChI=1S/C3H7NO2/c1-2(4)3(5)6/h2H,4H2,1H3,(H,5,6)/t2-/m0/s1 +ALA InChIKey InChI 1.03 QNAYBMKLOCPYGJ-REOHCLBHSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ALA acedrg 278 "dictionary generator" +ALA acedrg_database 12 "data source" +ALA rdkit 2019.09.1 "Chemoinformatics tool" +ALA refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/AMP.cif b/image_analysis/structure_refinement/monomers/AMP.cif new file mode 100644 index 000000000..af979b28b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/AMP.cif @@ -0,0 +1,279 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +AMP AMP "ADENOSINE MONOPHOSPHATE" NON-POLYMER 35 23 . + +data_comp_AMP +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +AMP P P P 0 7.785 40.217 19.087 +AMP O1P O O 0 7.126 41.546 19.404 +AMP O2P O OP -1 6.783 39.104 18.848 +AMP O3P O OP -1 8.858 39.838 20.091 +AMP "O5'" O O2 0 8.550 40.429 17.682 +AMP "C5'" C CH2 0 9.613 41.413 17.608 +AMP "C4'" C CH1 0 10.179 41.441 16.209 +AMP "O4'" O O2 0 10.693 40.125 15.878 +AMP "C3'" C CH1 0 9.188 41.799 15.089 +AMP "O3'" O OH1 0 9.786 42.675 14.141 +AMP "C2'" C CH1 0 8.844 40.434 14.483 +AMP "O2'" O OH1 0 8.453 40.504 13.128 +AMP "C1'" C CH1 0 10.173 39.703 14.640 +AMP N9 N NR5 0 10.056 38.248 14.658 +AMP C8 C CR15 0 9.355 37.497 15.568 +AMP N7 N NRD5 0 9.424 36.209 15.347 +AMP C5 C CR56 0 10.226 36.096 14.221 +AMP C6 C CR6 0 10.678 34.979 13.484 +AMP N6 N NH2 0 10.371 33.721 13.791 +AMP N1 N NRD6 0 11.469 35.215 12.406 +AMP C2 C CR16 0 11.775 36.486 12.102 +AMP N3 N NRD6 0 11.408 37.609 12.720 +AMP C4 C CR56 0 10.625 37.349 13.785 +AMP "H5'1" H H 0 10.329 41.183 18.250 +AMP "H5'2" H H 0 9.260 42.307 17.841 +AMP "H4'" H H 0 10.923 42.081 16.196 +AMP "H3'" H H 0 8.376 42.217 15.476 +AMP "HO3'" H H 0 9.174 43.023 13.667 +AMP "H2'" H H 0 8.135 39.989 15.017 +AMP "HO2'" H H 0 8.294 39.721 12.844 +AMP "H1'" H H 0 10.777 39.979 13.915 +AMP H8 H H 0 8.867 37.874 16.281 +AMP HN61 H H 0 10.832 33.060 13.441 +AMP HN62 H H 0 9.709 33.556 14.343 +AMP H2 H H 0 12.327 36.601 11.344 + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +AMP P O1P DOUBLE n 1.517 0.0192 1.517 0.0192 +AMP P O2P SINGLE n 1.517 0.0192 1.517 0.0192 +AMP P O3P SINGLE n 1.517 0.0192 1.517 0.0192 +AMP P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +AMP "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +AMP "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +AMP "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +AMP "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +AMP "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +AMP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +AMP "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +AMP "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +AMP "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +AMP "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +AMP N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +AMP N9 C4 SINGLE y 1.374 0.0101 1.374 0.0101 +AMP C8 N7 DOUBLE y 1.310 0.0100 1.310 0.0100 +AMP N7 C5 SINGLE y 1.388 0.0100 1.388 0.0100 +AMP C5 C6 SINGLE y 1.408 0.0100 1.408 0.0100 +AMP C5 C4 DOUBLE y 1.381 0.0100 1.381 0.0100 +AMP C6 N6 SINGLE n 1.330 0.0100 1.330 0.0100 +AMP C6 N1 DOUBLE y 1.354 0.0100 1.354 0.0100 +AMP N1 C2 SINGLE y 1.339 0.0100 1.339 0.0100 +AMP C2 N3 DOUBLE y 1.330 0.0100 1.330 0.0100 +AMP N3 C4 SINGLE y 1.343 0.0100 1.343 0.0100 +AMP "C5'" "H5'1" SINGLE n 1.089 0.0100 0.989 0.0200 +AMP "C5'" "H5'2" SINGLE n 1.089 0.0100 0.989 0.0200 +AMP "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +AMP "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +AMP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +AMP "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +AMP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +AMP "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +AMP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +AMP N6 HN61 SINGLE n 1.016 0.0100 0.877 0.0200 +AMP N6 HN62 SINGLE n 1.016 0.0100 0.877 0.0200 +AMP C2 H2 SINGLE n 1.082 0.0130 0.945 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +AMP O1P P O2P 112.864 1.69 +AMP O1P P O3P 112.864 1.69 +AMP O1P P "O5'" 105.808 2.07 +AMP O2P P O3P 112.864 1.69 +AMP O2P P "O5'" 105.808 2.07 +AMP O3P P "O5'" 105.808 2.07 +AMP P "O5'" "C5'" 118.783 1.50 +AMP "O5'" "C5'" "C4'" 109.342 1.50 +AMP "O5'" "C5'" "H5'1" 109.845 1.50 +AMP "O5'" "C5'" "H5'2" 109.845 1.50 +AMP "C4'" "C5'" "H5'1" 109.624 1.50 +AMP "C4'" "C5'" "H5'2" 109.624 1.50 +AMP "H5'1" "C5'" "H5'2" 108.472 1.50 +AMP "C5'" "C4'" "O4'" 109.123 1.50 +AMP "C5'" "C4'" "C3'" 116.008 1.52 +AMP "C5'" "C4'" "H4'" 108.268 1.50 +AMP "O4'" "C4'" "C3'" 105.388 1.50 +AMP "O4'" "C4'" "H4'" 108.947 1.50 +AMP "C3'" "C4'" "H4'" 109.363 1.86 +AMP "C4'" "O4'" "C1'" 109.903 1.50 +AMP "C4'" "C3'" "O3'" 111.281 2.46 +AMP "C4'" "C3'" "C2'" 102.602 1.50 +AMP "C4'" "C3'" "H3'" 110.452 2.54 +AMP "O3'" "C3'" "C2'" 111.581 2.83 +AMP "O3'" "C3'" "H3'" 110.380 1.67 +AMP "C2'" "C3'" "H3'" 110.504 1.75 +AMP "C3'" "O3'" "HO3'" 108.744 3.00 +AMP "C3'" "C2'" "O2'" 112.782 2.45 +AMP "C3'" "C2'" "C1'" 101.239 1.50 +AMP "C3'" "C2'" "H2'" 110.596 1.51 +AMP "O2'" "C2'" "C1'" 111.715 2.69 +AMP "O2'" "C2'" "H2'" 110.448 1.97 +AMP "C1'" "C2'" "H2'" 110.636 1.70 +AMP "C2'" "O2'" "HO2'" 109.103 2.13 +AMP "O4'" "C1'" "C2'" 106.047 1.50 +AMP "O4'" "C1'" N9 108.477 1.50 +AMP "O4'" "C1'" "H1'" 109.807 1.50 +AMP "C2'" "C1'" N9 113.824 1.50 +AMP "C2'" "C1'" "H1'" 109.015 1.50 +AMP N9 "C1'" "H1'" 109.561 1.50 +AMP "C1'" N9 C8 126.848 1.91 +AMP "C1'" N9 C4 127.459 1.80 +AMP C8 N9 C4 105.693 1.50 +AMP N9 C8 N7 113.469 1.50 +AMP N9 C8 H8 123.206 1.50 +AMP N7 C8 H8 123.326 1.50 +AMP C8 N7 C5 104.739 1.50 +AMP N7 C5 C6 132.250 1.50 +AMP N7 C5 C4 110.483 1.50 +AMP C6 C5 C4 117.267 1.50 +AMP C5 C6 N6 123.792 1.50 +AMP C5 C6 N1 117.409 1.50 +AMP N6 C6 N1 118.799 1.50 +AMP C6 N6 HN61 119.723 1.50 +AMP C6 N6 HN62 119.723 1.50 +AMP HN61 N6 HN62 120.554 1.88 +AMP C6 N1 C2 118.521 1.50 +AMP N1 C2 N3 129.332 1.50 +AMP N1 C2 H2 115.313 1.50 +AMP N3 C2 H2 115.355 1.50 +AMP C2 N3 C4 110.982 1.50 +AMP N9 C4 C5 105.616 1.50 +AMP N9 C4 N3 127.895 1.50 +AMP C5 C4 N3 126.489 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +AMP sp3_sp3_27 "C5'" "O5'" P O1P 60.000 10.0 3 +AMP sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.0 3 +AMP sp3_sp3_8 "O4'" "C1'" "C2'" "O2'" 180.000 10.0 3 +AMP sp2_sp3_1 C8 N9 "C1'" "O4'" 150.000 10.0 6 +AMP const_14 N7 C8 N9 "C1'" 180.000 10.0 2 +AMP const_26 C5 C4 N9 "C1'" 180.000 10.0 2 +AMP const_17 N9 C8 N7 C5 0.000 10.0 2 +AMP const_20 C6 C5 N7 C8 180.000 10.0 2 +AMP const_sp2_sp2_4 N7 C5 C6 N6 0.000 5.0 2 +AMP const_21 N9 C4 C5 N7 0.000 10.0 2 +AMP sp2_sp2_1 C5 C6 N6 HN61 180.000 5.0 2 +AMP const_sp2_sp2_6 N6 C6 N1 C2 180.000 5.0 2 +AMP const_sp2_sp2_7 N3 C2 N1 C6 0.000 5.0 2 +AMP const_sp2_sp2_9 N1 C2 N3 C4 0.000 5.0 2 +AMP const_12 N9 C4 N3 C2 180.000 10.0 2 +AMP sp3_sp3_28 "C4'" "C5'" "O5'" P 180.000 10.0 3 +AMP sp3_sp3_31 "O4'" "C4'" "C5'" "O5'" 180.000 10.0 3 +AMP sp3_sp3_2 "C5'" "C4'" "O4'" "C1'" -60.000 10.0 3 +AMP sp3_sp3_44 "O3'" "C3'" "C4'" "C5'" 180.000 10.0 3 +AMP sp3_sp3_4 "C2'" "C1'" "O4'" "C4'" -60.000 10.0 3 +AMP sp3_sp3_20 "O2'" "C2'" "C3'" "O3'" -60.000 10.0 3 +AMP sp3_sp3_49 "C4'" "C3'" "O3'" "HO3'" 180.000 10.0 3 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +AMP chir_1 P "O5'" O2P O3P both +AMP chir_2 "C4'" "O4'" "C3'" "C5'" negative +AMP chir_3 "C3'" "O3'" "C4'" "C2'" positive +AMP chir_4 "C2'" "O2'" "C1'" "C3'" negative +AMP chir_5 "C1'" "O4'" N9 "C2'" negative + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +AMP plan-1 "C1'" 0.020 +AMP plan-1 C2 0.020 +AMP plan-1 C4 0.020 +AMP plan-1 C5 0.020 +AMP plan-1 C6 0.020 +AMP plan-1 C8 0.020 +AMP plan-1 H2 0.020 +AMP plan-1 H8 0.020 +AMP plan-1 N1 0.020 +AMP plan-1 N3 0.020 +AMP plan-1 N6 0.020 +AMP plan-1 N7 0.020 +AMP plan-1 N9 0.020 +AMP plan-2 C6 0.020 +AMP plan-2 HN61 0.020 +AMP plan-2 HN62 0.020 +AMP plan-2 N6 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +AMP SMILES ACDLabs 12.01 O=P(O)(O)OCC3OC(n2cnc1c(ncnc12)N)C(O)C3O +AMP InChI InChI 1.03 InChI=1S/C10H14N5O7P/c11-8-5-9(13-2-12-8)15(3-14-5)10-7(17)6(16)4(22-10)1-21-23(18,19)20/h2-4,6-7,10,16-17H,1H2,(H2,11,12,13)(H2,18,19,20)/t4-,6-,7-,10-/m1/s1 +AMP InChIKey InChI 1.03 UDMBCSSLTHHNCD-KQYNXXCUSA-N +AMP SMILES_CANONICAL CACTVS 3.370 Nc1ncnc2n(cnc12)[C@@H]3O[C@H](CO[P](O)(O)=O)[C@@H](O)[C@H]3O +AMP SMILES CACTVS 3.370 Nc1ncnc2n(cnc12)[CH]3O[CH](CO[P](O)(O)=O)[CH](O)[CH]3O +AMP SMILES_CANONICAL "OpenEye OEToolkits" 1.7.6 c1nc(c2c(n1)n(cn2)[C@H]3[C@@H]([C@@H]([C@H](O3)COP(=O)(O)O)O)O)N +AMP SMILES "OpenEye OEToolkits" 1.7.6 c1nc(c2c(n1)n(cn2)C3C(C(C(O3)COP(=O)(O)O)O)O)N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +AMP acedrg 243 "dictionary generator" +AMP acedrg_database 11 "data source" +AMP rdkit 2017.03.2 "Chemoinformatics tool" +AMP refmac5 5.8.0238 "optimization tool" + +loop_ +_chem_comp_alias.comp_id +_chem_comp_alias.group +_chem_comp_alias.atom_id +_chem_comp_alias.atom_id_standard +AMP DNA/RNA O2P OP2 +AMP DNA/RNA O1P OP1 +AMP DNA/RNA O3P OP3 diff --git a/image_analysis/structure_refinement/monomers/ARG.cif b/image_analysis/structure_refinement/monomers/ARG.cif new file mode 100644 index 000000000..f92a52e96 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ARG.cif @@ -0,0 +1,284 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ARG ARG ARGININE peptide 27 12 . + +data_comp_ARG +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ARG N N NT3 1 70.130 14.992 90.045 +ARG CA C CH1 0 70.443 14.368 91.360 +ARG C C C 0 71.906 13.892 91.367 +ARG O O O 0 72.245 13.075 90.483 +ARG CB C CH2 0 69.504 13.191 91.652 +ARG CG C CH2 0 68.033 13.562 91.785 +ARG CD C CH2 0 67.166 12.373 92.178 +ARG NE N NC1 0 67.123 11.321 91.154 +ARG CZ C C 0 66.488 10.157 91.270 +ARG NH1 N NC2 0 65.818 9.861 92.371 +ARG NH2 N NC2 1 66.525 9.285 90.278 +ARG OXT O OC -1 72.653 14.357 92.256 +ARG H H H 0 70.064 14.355 89.409 +ARG H2 H H 0 70.776 15.575 89.808 +ARG H3 H H 0 69.349 15.441 90.092 +ARG HA H H 0 70.328 15.054 92.065 +ARG HB3 H H 0 69.794 12.761 92.485 +ARG HB2 H H 0 69.597 12.533 90.931 +ARG HG3 H H 0 67.712 13.922 90.930 +ARG HG2 H H 0 67.938 14.265 92.464 +ARG HD3 H H 0 66.255 12.690 92.348 +ARG HD2 H H 0 67.510 11.993 93.012 +ARG HE H H 0 67.542 11.468 90.404 +ARG HH11 H H 0 66.247 9.797 93.142 +ARG HH12 H H 0 64.945 9.729 92.332 +ARG HH21 H H 0 66.438 9.566 89.444 +ARG HH22 H H 0 66.637 8.426 90.452 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ARG N n/a CA START +ARG H N . . +ARG H2 N . . +ARG H3 N . . +ARG CA N C . +ARG HA CA . . +ARG CB CA CG . +ARG HB3 CB . . +ARG HB2 CB . . +ARG CG CB CD . +ARG HG3 CG . . +ARG HG2 CG . . +ARG CD CG NE . +ARG HD3 CD . . +ARG HD2 CD . . +ARG NE CD CZ . +ARG HE NE . . +ARG CZ NE NH2 . +ARG NH1 CZ HH12 . +ARG HH11 NH1 . . +ARG HH12 NH1 . . +ARG NH2 CZ HH22 . +ARG HH21 NH2 . . +ARG HH22 NH2 . . +ARG C CA . END +ARG O C . . +ARG OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +ARG N N(CCCH)(H)3 +ARG CA C(CCHH)(NH3)(COO)(H) +ARG C C(CCHN)(O)2 +ARG O O(CCO) +ARG CB C(CCHH)(CCHN)(H)2 +ARG CG C(CCHH)(CHHN)(H)2 +ARG CD C(CCHH)(NCH)(H)2 +ARG NE N(CCHH)(CNN)(H) +ARG CZ C(NCH)(NHH)2 +ARG NH1 N(CNN)(H)2 +ARG NH2 N(CNN)(H)2 +ARG OXT O(CCO) +ARG H H(NCHH) +ARG H2 H(NCHH) +ARG H3 H(NCHH) +ARG HA H(CCCN) +ARG HB3 H(CCCH) +ARG HB2 H(CCCH) +ARG HG3 H(CCCH) +ARG HG2 H(CCCH) +ARG HD3 H(CCHN) +ARG HD2 H(CCHN) +ARG HE H(NCC) +ARG HH11 H(NCH) +ARG HH12 H(NCH) +ARG HH21 H(NCH) +ARG HH22 H(NCH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ARG N CA SINGLE n 1.487 0.0100 1.487 0.0100 +ARG CA C SINGLE n 1.538 0.0113 1.538 0.0113 +ARG CA CB SINGLE n 1.533 0.0100 1.533 0.0100 +ARG C O DOUBLE n 1.251 0.0183 1.251 0.0183 +ARG C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +ARG CB CG SINGLE n 1.522 0.0100 1.522 0.0100 +ARG CG CD SINGLE n 1.521 0.0200 1.521 0.0200 +ARG CD NE SINGLE n 1.467 0.0100 1.467 0.0100 +ARG NE CZ SINGLE n 1.327 0.0153 1.327 0.0153 +ARG CZ NH1 SINGLE n 1.321 0.0134 1.321 0.0134 +ARG CZ NH2 DOUBLE n 1.321 0.0134 1.321 0.0134 +ARG N H SINGLE n 1.018 0.0520 0.902 0.0102 +ARG N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +ARG N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +ARG CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +ARG CB HB3 SINGLE n 1.092 0.0100 0.981 0.0141 +ARG CB HB2 SINGLE n 1.092 0.0100 0.981 0.0141 +ARG CG HG3 SINGLE n 1.092 0.0100 0.982 0.0161 +ARG CG HG2 SINGLE n 1.092 0.0100 0.982 0.0161 +ARG CD HD3 SINGLE n 1.092 0.0100 0.979 0.0175 +ARG CD HD2 SINGLE n 1.092 0.0100 0.979 0.0175 +ARG NE HE SINGLE n 1.013 0.0120 0.871 0.0200 +ARG NH1 HH11 SINGLE n 1.013 0.0120 0.884 0.0200 +ARG NH1 HH12 SINGLE n 1.013 0.0120 0.884 0.0200 +ARG NH2 HH21 SINGLE n 1.013 0.0120 0.884 0.0200 +ARG NH2 HH22 SINGLE n 1.013 0.0120 0.884 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ARG CA N H 109.990 3.00 +ARG CA N H2 109.990 3.00 +ARG CA N H3 109.990 3.00 +ARG H N H2 109.032 3.00 +ARG H N H3 109.032 3.00 +ARG H2 N H3 109.032 3.00 +ARG N CA C 109.258 1.50 +ARG N CA CB 110.440 2.46 +ARG N CA HA 108.387 1.58 +ARG C CA CB 111.059 3.00 +ARG C CA HA 108.774 1.79 +ARG CB CA HA 109.080 2.33 +ARG CA C O 117.148 1.60 +ARG CA C OXT 117.148 1.60 +ARG O C OXT 125.704 1.50 +ARG CA CB CG 114.160 3.00 +ARG CA CB HB3 108.677 1.74 +ARG CA CB HB2 108.677 1.74 +ARG CG CB HB3 108.721 1.50 +ARG CG CB HB2 108.721 1.50 +ARG HB3 CB HB2 107.655 1.50 +ARG CB CG CD 112.025 3.00 +ARG CB CG HG3 109.216 1.64 +ARG CB CG HG2 109.216 1.64 +ARG CD CG HG3 108.991 1.50 +ARG CD CG HG2 108.991 1.50 +ARG HG3 CG HG2 107.958 2.23 +ARG CG CD NE 112.275 3.00 +ARG CG CD HD3 109.172 2.35 +ARG CG CD HD2 109.172 2.35 +ARG NE CD HD3 109.193 1.50 +ARG NE CD HD2 109.193 1.50 +ARG HD3 CD HD2 107.932 1.94 +ARG CD NE CZ 124.614 2.32 +ARG CD NE HE 117.935 2.37 +ARG CZ NE HE 117.451 2.77 +ARG NE CZ NH1 120.032 1.90 +ARG NE CZ NH2 120.032 1.90 +ARG NH1 CZ NH2 119.937 1.95 +ARG CZ NH1 HH11 119.775 3.00 +ARG CZ NH1 HH12 119.775 3.00 +ARG HH11 NH1 HH12 120.450 3.00 +ARG CZ NH2 HH21 119.775 3.00 +ARG CZ NH2 HH22 119.775 3.00 +ARG HH21 NH2 HH22 120.450 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ARG chi1 N CA CB CG -60.000 10.0 3 +ARG chi2 CA CB CG CD 180.000 10.0 3 +ARG chi3 CB CG CD NE 60.000 10.0 3 +ARG chi4 CG CD NE CZ 180.000 10.0 6 +ARG chi5 CD NE CZ NH2 0.000 5.0 2 +ARG hh1 NE CZ NH1 HH12 0.000 5.0 2 +ARG hh2 NE CZ NH2 HH22 0.000 5.0 2 +ARG sp3_sp3_1 C CA N H 180.000 10.0 3 +ARG sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ARG chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ARG plan-1 C 0.020 +ARG plan-1 CA 0.020 +ARG plan-1 O 0.020 +ARG plan-1 OXT 0.020 +ARG plan-2 CD 0.020 +ARG plan-2 CZ 0.020 +ARG plan-2 HE 0.020 +ARG plan-2 NE 0.020 +ARG plan-3 CZ 0.020 +ARG plan-3 NE 0.020 +ARG plan-3 NH1 0.020 +ARG plan-3 NH2 0.020 +ARG plan-4 CZ 0.020 +ARG plan-4 HH11 0.020 +ARG plan-4 HH12 0.020 +ARG plan-4 NH1 0.020 +ARG plan-5 CZ 0.020 +ARG plan-5 HH21 0.020 +ARG plan-5 HH22 0.020 +ARG plan-5 NH2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ARG SMILES ACDLabs 10.04 O=C(O)C(N)CCCN\C(=[NH2+])N +ARG SMILES_CANONICAL CACTVS 3.341 N[C@@H](CCCNC(N)=[NH2+])C(O)=O +ARG SMILES CACTVS 3.341 N[CH](CCCNC(N)=[NH2+])C(O)=O +ARG SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(C[C@@H](C(=O)O)N)CNC(=[NH2+])N +ARG SMILES "OpenEye OEToolkits" 1.5.0 C(CC(C(=O)O)N)CNC(=[NH2+])N +ARG InChI InChI 1.03 InChI=1S/C6H14N4O2/c7-4(5(11)12)2-1-3-10-6(8)9/h4H,1-3,7H2,(H,11,12)(H4,8,9,10)/p+1/t4-/m0/s1 +ARG InChIKey InChI 1.03 ODKSFYDXXFIFQN-BYPYZUCNSA-O + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ARG acedrg 278 "dictionary generator" +ARG acedrg_database 12 "data source" +ARG rdkit 2019.09.1 "Chemoinformatics tool" +ARG refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ASN.cif b/image_analysis/structure_refinement/monomers/ASN.cif new file mode 100644 index 000000000..50e7df06f --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ASN.cif @@ -0,0 +1,214 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ASN ASN ASPARAGINE peptide 17 9 . + +data_comp_ASN +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ASN N N NT3 1 14.911 16.808 19.868 +ASN CA C CH1 0 15.816 17.894 20.345 +ASN C C C 0 15.155 18.638 21.512 +ASN O O O 0 15.771 18.659 22.602 +ASN CB C CH2 0 16.178 18.868 19.226 +ASN CG C C 0 16.898 18.214 18.068 +ASN OD1 O O 0 17.108 16.995 18.059 +ASN ND2 N NH2 0 17.282 19.004 17.075 +ASN OXT O OC -1 14.046 19.172 21.292 +ASN H H H 0 14.283 17.146 19.316 +ASN H2 H H 0 14.499 16.402 20.561 +ASN H3 H H 0 15.385 16.183 19.422 +ASN HA H H 0 16.651 17.482 20.665 +ASN HB3 H H 0 16.746 19.574 19.593 +ASN HB2 H H 0 15.359 19.286 18.893 +ASN HD21 H H 0 16.894 19.794 16.957 +ASN HD22 H H 0 17.928 18.741 16.527 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ASN N n/a CA START +ASN H N . . +ASN H2 N . . +ASN H3 N . . +ASN CA N C . +ASN HA CA . . +ASN CB CA CG . +ASN HB3 CB . . +ASN HB2 CB . . +ASN CG CB ND2 . +ASN OD1 CG . . +ASN ND2 CG HD22 . +ASN HD21 ND2 . . +ASN HD22 ND2 . . +ASN C CA . END +ASN O C . . +ASN OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +ASN N N(CCCH)(H)3 +ASN CA C(CCHH)(NH3)(COO)(H) +ASN C C(CCHN)(O)2 +ASN O O(CCO) +ASN CB C(CCHN)(CNO)(H)2 +ASN CG C(CCHH)(NHH)(O) +ASN OD1 O(CCN) +ASN ND2 N(CCO)(H)2 +ASN OXT O(CCO) +ASN H H(NCHH) +ASN H2 H(NCHH) +ASN H3 H(NCHH) +ASN HA H(CCCN) +ASN HB3 H(CCCH) +ASN HB2 H(CCCH) +ASN HD21 H(NCH) +ASN HD22 H(NCH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ASN N CA SINGLE n 1.490 0.0100 1.490 0.0100 +ASN CA C SINGLE n 1.533 0.0100 1.533 0.0100 +ASN CA CB SINGLE n 1.525 0.0100 1.525 0.0100 +ASN C O DOUBLE n 1.251 0.0183 1.251 0.0183 +ASN C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +ASN CB CG SINGLE n 1.510 0.0100 1.510 0.0100 +ASN CG OD1 DOUBLE n 1.236 0.0100 1.236 0.0100 +ASN CG ND2 SINGLE n 1.325 0.0100 1.325 0.0100 +ASN N H SINGLE n 1.018 0.0520 0.902 0.0102 +ASN N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +ASN N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +ASN CA HA SINGLE n 1.092 0.0100 0.984 0.0200 +ASN CB HB3 SINGLE n 1.092 0.0100 0.978 0.0143 +ASN CB HB2 SINGLE n 1.092 0.0100 0.978 0.0143 +ASN ND2 HD21 SINGLE n 1.013 0.0120 0.887 0.0200 +ASN ND2 HD22 SINGLE n 1.013 0.0120 0.887 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ASN CA N H 109.990 3.00 +ASN CA N H2 109.990 3.00 +ASN CA N H3 109.990 3.00 +ASN H N H2 109.032 3.00 +ASN H N H3 109.032 3.00 +ASN H2 N H3 109.032 3.00 +ASN N CA C 109.258 1.50 +ASN N CA CB 111.558 1.50 +ASN N CA HA 108.387 1.58 +ASN C CA CB 111.904 3.00 +ASN C CA HA 108.774 1.79 +ASN CB CA HA 107.748 1.50 +ASN CA C O 117.148 1.60 +ASN CA C OXT 117.148 1.60 +ASN O C OXT 125.704 1.50 +ASN CA CB CG 112.193 1.50 +ASN CA CB HB3 109.177 1.50 +ASN CA CB HB2 109.177 1.50 +ASN CG CB HB3 109.132 1.50 +ASN CG CB HB2 109.132 1.50 +ASN HB3 CB HB2 108.039 1.50 +ASN CB CG OD1 120.239 1.50 +ASN CB CG ND2 117.180 1.62 +ASN OD1 CG ND2 122.581 1.50 +ASN CG ND2 HD21 119.917 2.87 +ASN CG ND2 HD22 119.917 2.87 +ASN HD21 ND2 HD22 120.165 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ASN chi1 N CA CB CG -60.000 10.0 3 +ASN chi2 CA CB CG ND2 180.000 10.0 6 +ASN hh1 CB CG ND2 HD22 180.000 5.0 2 +ASN sp3_sp3_1 C CA N H 180.000 10.0 3 +ASN sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ASN chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ASN plan-1 C 0.020 +ASN plan-1 CA 0.020 +ASN plan-1 O 0.020 +ASN plan-1 OXT 0.020 +ASN plan-2 CB 0.020 +ASN plan-2 CG 0.020 +ASN plan-2 ND2 0.020 +ASN plan-2 OD1 0.020 +ASN plan-3 CG 0.020 +ASN plan-3 HD21 0.020 +ASN plan-3 HD22 0.020 +ASN plan-3 ND2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ASN SMILES ACDLabs 12.01 O=C(N)CC(N)C(=O)O +ASN InChI InChI 1.03 InChI=1S/C4H8N2O3/c5-2(4(8)9)1-3(6)7/h2H,1,5H2,(H2,6,7)(H,8,9)/t2-/m0/s1 +ASN InChIKey InChI 1.03 DCXYFEDJOCDNAF-REOHCLBHSA-N +ASN SMILES_CANONICAL CACTVS 3.370 N[C@@H](CC(N)=O)C(O)=O +ASN SMILES CACTVS 3.370 N[CH](CC(N)=O)C(O)=O +ASN SMILES_CANONICAL "OpenEye OEToolkits" 1.7.2 C([C@@H](C(=O)O)N)C(=O)N +ASN SMILES "OpenEye OEToolkits" 1.7.2 C(C(C(=O)O)N)C(=O)N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ASN acedrg 278 "dictionary generator" +ASN acedrg_database 12 "data source" +ASN rdkit 2019.09.1 "Chemoinformatics tool" +ASN refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ASP.cif b/image_analysis/structure_refinement/monomers/ASP.cif new file mode 100644 index 000000000..08958a6f6 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ASP.cif @@ -0,0 +1,198 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ASP ASP "ASPARTIC ACID" peptide 15 9 . + +data_comp_ASP +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ASP N N NT3 1 33.542 17.835 39.145 +ASP CA C CH1 0 34.991 17.614 38.867 +ASP C C C 0 35.178 17.161 37.413 +ASP O O O 0 36.268 17.442 36.867 +ASP CB C CH2 0 35.617 16.650 39.866 +ASP CG C C 0 34.932 15.299 40.037 +ASP OD1 O O 0 35.515 14.435 40.725 +ASP OD2 O OC -1 33.817 15.122 39.501 +ASP OXT O OC -1 34.232 16.542 36.875 +ASP H H H 0 33.408 17.940 40.031 +ASP H2 H H 0 33.045 17.139 38.857 +ASP H3 H H 0 33.263 18.581 38.722 +ASP HA H H 0 35.453 18.476 38.978 +ASP HB3 H H 0 35.641 17.087 40.742 +ASP HB2 H H 0 36.543 16.483 39.592 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ASP N n/a CA START +ASP H N . . +ASP H2 N . . +ASP H3 N . . +ASP CA N C . +ASP HA CA . . +ASP CB CA CG . +ASP HB3 CB . . +ASP HB2 CB . . +ASP CG CB OD2 . +ASP OD1 CG . . +ASP OD2 CG . . +ASP C CA . END +ASP O C . . +ASP OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +ASP N N(CCCH)(H)3 +ASP CA C(CCHH)(NH3)(COO)(H) +ASP C C(CCHN)(O)2 +ASP O O(CCO) +ASP CB C(CCHN)(COO)(H)2 +ASP CG C(CCHH)(O)2 +ASP OD1 O(CCO) +ASP OD2 O(CCO) +ASP OXT O(CCO) +ASP H H(NCHH) +ASP H2 H(NCHH) +ASP H3 H(NCHH) +ASP HA H(CCCN) +ASP HB3 H(CCCH) +ASP HB2 H(CCCH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ASP N CA SINGLE n 1.490 0.0100 1.490 0.0100 +ASP CA C SINGLE n 1.533 0.0100 1.533 0.0100 +ASP CA CB SINGLE n 1.521 0.0100 1.521 0.0100 +ASP C O DOUBLE n 1.251 0.0183 1.251 0.0183 +ASP C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +ASP CB CG SINGLE n 1.522 0.0100 1.522 0.0100 +ASP CG OD1 DOUBLE n 1.249 0.0161 1.249 0.0161 +ASP CG OD2 SINGLE n 1.249 0.0161 1.249 0.0161 +ASP N H SINGLE n 1.018 0.0520 0.902 0.0102 +ASP N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +ASP N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +ASP CA HA SINGLE n 1.092 0.0100 0.984 0.0200 +ASP CB HB3 SINGLE n 1.092 0.0100 0.980 0.0165 +ASP CB HB2 SINGLE n 1.092 0.0100 0.980 0.0165 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ASP CA N H 109.990 3.00 +ASP CA N H2 109.990 3.00 +ASP CA N H3 109.990 3.00 +ASP H N H2 109.032 3.00 +ASP H N H3 109.032 3.00 +ASP H2 N H3 109.032 3.00 +ASP N CA C 109.258 1.50 +ASP N CA CB 111.400 1.50 +ASP N CA HA 108.387 1.58 +ASP C CA CB 112.421 3.00 +ASP C CA HA 108.774 1.79 +ASP CB CA HA 108.472 2.65 +ASP CA C O 117.148 1.60 +ASP CA C OXT 117.148 1.60 +ASP O C OXT 125.704 1.50 +ASP CA CB CG 115.436 1.50 +ASP CA CB HB3 108.799 3.00 +ASP CA CB HB2 108.799 3.00 +ASP CG CB HB3 108.242 2.79 +ASP CG CB HB2 108.242 2.79 +ASP HB3 CB HB2 107.976 2.66 +ASP CB CG OD1 117.985 1.50 +ASP CB CG OD2 117.985 1.50 +ASP OD1 CG OD2 124.031 1.82 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ASP chi1 N CA CB CG -60.000 10.0 3 +ASP chi2 CA CB CG OD1 180.000 10.0 6 +ASP sp3_sp3_1 C CA N H 180.000 10.0 3 +ASP sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ASP chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ASP plan-1 C 0.020 +ASP plan-1 CA 0.020 +ASP plan-1 O 0.020 +ASP plan-1 OXT 0.020 +ASP plan-2 CB 0.020 +ASP plan-2 CG 0.020 +ASP plan-2 OD1 0.020 +ASP plan-2 OD2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ASP SMILES ACDLabs 12.01 O=C(O)CC(N)C(=O)O +ASP SMILES_CANONICAL CACTVS 3.370 N[C@@H](CC(O)=O)C(O)=O +ASP SMILES CACTVS 3.370 N[CH](CC(O)=O)C(O)=O +ASP SMILES_CANONICAL "OpenEye OEToolkits" 1.7.0 C([C@@H](C(=O)O)N)C(=O)O +ASP SMILES "OpenEye OEToolkits" 1.7.0 C(C(C(=O)O)N)C(=O)O +ASP InChI InChI 1.03 InChI=1S/C4H7NO4/c5-2(4(8)9)1-3(6)7/h2H,1,5H2,(H,6,7)(H,8,9)/t2-/m0/s1 +ASP InChIKey InChI 1.03 CKLJMWTZIZZHCS-REOHCLBHSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ASP acedrg 278 "dictionary generator" +ASP acedrg_database 12 "data source" +ASP rdkit 2019.09.1 "Chemoinformatics tool" +ASP refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ATP.cif b/image_analysis/structure_refinement/monomers/ATP.cif new file mode 100644 index 000000000..d59d901cc --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ATP.cif @@ -0,0 +1,301 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ATP ATP "ADENOSINE-5'-TRIPHOSPHATE" NON-POLYMER 43 31 . +# +data_comp_ATP +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ATP PG P P 0 44.662 45.077 58.117 +ATP O1G O O 0 43.261 45.625 58.004 +ATP O2G O OP -1 45.679 45.923 57.392 +ATP O3G O OP -1 45.059 44.781 59.542 +ATP PB P P 0 44.268 43.226 55.860 +ATP O1B O O 0 44.078 41.746 55.818 +ATP O2B O OP -1 43.182 44.124 55.365 +ATP O3B O O2 0 44.645 43.653 57.356 +ATP PA P P 0 46.020 43.596 53.536 +ATP O1A O O 0 47.423 44.087 53.400 +ATP O2A O OP -1 44.948 44.301 52.771 +ATP O3A O O2 0 45.624 43.591 55.090 +ATP "O5'" O O2 0 45.968 42.029 53.199 +ATP "C5'" C CH2 0 46.946 41.148 53.808 +ATP "C4'" C CH1 0 46.681 39.728 53.369 +ATP "O4'" O O2 0 46.924 39.620 51.943 +ATP "C3'" C CH1 0 47.567 38.650 54.004 +ATP "O3'" O OH1 0 46.881 37.406 54.075 +ATP "C2'" C CH1 0 48.756 38.611 53.041 +ATP "O2'" O OH1 0 49.451 37.383 53.067 +ATP "C1'" C CH1 0 48.066 38.829 51.697 +ATP N9 N NT 0 48.916 39.514 50.718 +ATP C8 C CR15 0 48.960 40.860 50.413 +ATP N7 N NRD5 0 49.847 41.139 49.485 +ATP C5 C CR56 0 50.421 39.915 49.166 +ATP C6 C CR6 0 51.429 39.540 48.250 +ATP N6 N NH2 0 52.063 40.400 47.457 +ATP N1 N NRD6 0 51.760 38.223 48.186 +ATP C2 C CR16 0 51.117 37.359 48.990 +ATP N3 N NRD6 0 50.158 37.599 49.885 +ATP C4 C CR56 0 49.852 38.909 49.924 +ATP "H5'1" H H 0 46.885 41.207 54.794 +ATP "H5'2" H H 0 47.858 41.415 53.533 +ATP "H4'" H H 0 45.738 39.523 53.548 +ATP "H3'" H H 0 47.862 38.933 54.908 +ATP "HO3'" H H 0 47.400 36.827 54.416 +ATP "H2'" H H 0 49.382 39.360 53.233 +ATP "HO2'" H H 0 50.094 37.416 52.513 +ATP "H1'" H H 0 47.793 37.957 51.333 +ATP H8 H H 0 48.417 41.517 50.815 +ATP HN61 H H 0 52.825 40.173 47.086 +ATP HN62 H H 0 51.716 41.193 47.308 +ATP H2 H H 0 51.382 36.456 48.909 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ATP PG O1G DOUBLE n 1.509 0.0200 1.509 0.0200 +ATP PG O2G SINGLE n 1.509 0.0200 1.509 0.0200 +ATP PG O3G SINGLE n 1.509 0.0200 1.509 0.0200 +ATP PG O3B SINGLE n 1.614 0.0178 1.614 0.0178 +ATP PB O1B DOUBLE n 1.493 0.0157 1.493 0.0157 +ATP PB O2B SINGLE n 1.493 0.0157 1.493 0.0157 +ATP PB O3B SINGLE n 1.601 0.0114 1.601 0.0114 +ATP PB O3A SINGLE n 1.601 0.0114 1.601 0.0114 +ATP PA O1A DOUBLE n 1.493 0.0122 1.493 0.0122 +ATP PA O2A SINGLE n 1.493 0.0122 1.493 0.0122 +ATP PA O3A SINGLE n 1.604 0.0133 1.604 0.0133 +ATP PA "O5'" SINGLE n 1.604 0.0133 1.604 0.0133 +ATP "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +ATP "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +ATP "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +ATP "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +ATP "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +ATP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +ATP "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +ATP "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +ATP "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +ATP "C1'" N9 SINGLE n 1.458 0.0200 1.458 0.0200 +ATP N9 C8 SINGLE y 1.372 0.0200 1.372 0.0200 +ATP N9 C4 SINGLE y 1.372 0.0100 1.372 0.0100 +ATP C8 N7 DOUBLE y 1.310 0.0100 1.310 0.0100 +ATP N7 C5 SINGLE y 1.388 0.0100 1.388 0.0100 +ATP C5 C6 SINGLE y 1.408 0.0100 1.408 0.0100 +ATP C5 C4 DOUBLE y 1.381 0.0100 1.381 0.0100 +ATP C6 N6 SINGLE n 1.330 0.0100 1.330 0.0100 +ATP C6 N1 DOUBLE y 1.354 0.0100 1.354 0.0100 +ATP N1 C2 SINGLE y 1.339 0.0100 1.339 0.0100 +ATP C2 N3 DOUBLE y 1.330 0.0100 1.330 0.0100 +ATP N3 C4 SINGLE y 1.343 0.0100 1.343 0.0100 +ATP "C5'" "H5'1" SINGLE n 1.089 0.0100 0.989 0.0200 +ATP "C5'" "H5'2" SINGLE n 1.089 0.0100 0.989 0.0200 +ATP "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +ATP "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +ATP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +ATP "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +ATP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +ATP "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +ATP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +ATP N6 HN61 SINGLE n 1.016 0.0100 0.877 0.0200 +ATP N6 HN62 SINGLE n 1.016 0.0100 0.877 0.0200 +ATP C2 H2 SINGLE n 1.082 0.0130 0.945 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ATP O1G PG O2G 112.716 1.50 +ATP O1G PG O3G 112.716 1.50 +ATP O1G PG O3B 105.965 2.38 +ATP O2G PG O3G 112.716 1.50 +ATP O2G PG O3B 105.965 2.38 +ATP O3G PG O3B 105.965 2.38 +ATP O1B PB O2B 119.630 1.50 +ATP O1B PB O3B 108.678 2.29 +ATP O1B PB O3A 108.678 2.29 +ATP O2B PB O3B 108.678 2.29 +ATP O2B PB O3A 108.678 2.29 +ATP O3B PB O3A 100.890 2.10 +ATP PG O3B PB 132.584 3.00 +ATP O1A PA O2A 118.411 2.35 +ATP O1A PA O3A 108.816 2.14 +ATP O1A PA "O5'" 109.410 1.50 +ATP O2A PA O3A 108.816 2.14 +ATP O2A PA "O5'" 109.410 1.50 +ATP O3A PA "O5'" 101.065 1.97 +ATP PB O3A PA 132.542 3.00 +ATP PA "O5'" "C5'" 118.553 2.41 +ATP "O5'" "C5'" "C4'" 109.342 1.50 +ATP "O5'" "C5'" "H5'1" 109.845 1.50 +ATP "O5'" "C5'" "H5'2" 109.845 1.50 +ATP "C4'" "C5'" "H5'1" 109.624 1.50 +ATP "C4'" "C5'" "H5'2" 109.624 1.50 +ATP "H5'1" "C5'" "H5'2" 108.472 1.50 +ATP "C5'" "C4'" "O4'" 109.123 1.50 +ATP "C5'" "C4'" "C3'" 116.008 1.52 +ATP "C5'" "C4'" "H4'" 108.268 1.50 +ATP "O4'" "C4'" "C3'" 105.388 1.50 +ATP "O4'" "C4'" "H4'" 108.947 1.50 +ATP "C3'" "C4'" "H4'" 109.363 1.86 +ATP "C4'" "O4'" "C1'" 109.903 1.50 +ATP "C4'" "C3'" "O3'" 111.281 2.46 +ATP "C4'" "C3'" "C2'" 102.602 1.50 +ATP "C4'" "C3'" "H3'" 110.452 2.54 +ATP "O3'" "C3'" "C2'" 111.581 2.83 +ATP "O3'" "C3'" "H3'" 110.380 1.67 +ATP "C2'" "C3'" "H3'" 110.504 1.75 +ATP "C3'" "O3'" "HO3'" 108.744 3.00 +ATP "C3'" "C2'" "O2'" 112.782 2.45 +ATP "C3'" "C2'" "C1'" 101.239 1.50 +ATP "C3'" "C2'" "H2'" 110.596 1.51 +ATP "O2'" "C2'" "C1'" 111.715 2.69 +ATP "O2'" "C2'" "H2'" 110.448 1.97 +ATP "C1'" "C2'" "H2'" 110.636 1.70 +ATP "C2'" "O2'" "HO2'" 109.103 2.13 +ATP "O4'" "C1'" "C2'" 106.047 1.50 +ATP "O4'" "C1'" N9 108.167 1.51 +ATP "O4'" "C1'" "H1'" 109.807 1.50 +ATP "C2'" "C1'" N9 113.752 2.20 +ATP "C2'" "C1'" "H1'" 109.015 1.50 +ATP N9 "C1'" "H1'" 109.246 1.50 +ATP "C1'" N9 C8 126.078 2.46 +ATP "C1'" N9 C4 125.158 1.54 +ATP C8 N9 C4 107.594 1.50 +ATP N9 C8 N7 112.130 1.94 +ATP N9 C8 H8 124.701 2.19 +ATP N7 C8 H8 123.170 1.50 +ATP C8 N7 C5 103.927 1.50 +ATP N7 C5 C6 132.145 1.50 +ATP N7 C5 C4 110.588 1.50 +ATP C6 C5 C4 117.267 1.50 +ATP C5 C6 N6 123.792 1.50 +ATP C5 C6 N1 117.409 1.50 +ATP N6 C6 N1 118.799 1.50 +ATP C6 N6 HN61 119.723 1.50 +ATP C6 N6 HN62 119.723 1.50 +ATP HN61 N6 HN62 120.554 1.88 +ATP C6 N1 C2 118.521 1.50 +ATP N1 C2 N3 129.332 1.50 +ATP N1 C2 H2 115.313 1.50 +ATP N3 C2 H2 115.355 1.50 +ATP C2 N3 C4 110.982 1.50 +ATP N9 C4 C5 107.666 1.69 +ATP N9 C4 N3 125.845 1.50 +ATP C5 C4 N3 126.489 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ATP sp3_sp3_27 PB O3B PG O1G 60.000 10.0 3 +ATP sp3_sp3_40 "C4'" "C5'" "O5'" PA 180.000 10.0 3 +ATP sp3_sp3_43 "O4'" "C4'" "C5'" "O5'" 180.000 10.0 3 +ATP sp3_sp3_2 "C5'" "C4'" "O4'" "C1'" -60.000 10.0 3 +ATP sp3_sp3_56 "O3'" "C3'" "C4'" "C5'" 180.000 10.0 3 +ATP sp3_sp3_4 "C2'" "C1'" "O4'" "C4'" -60.000 10.0 3 +ATP sp3_sp3_61 "C4'" "C3'" "O3'" "HO3'" 180.000 10.0 3 +ATP sp3_sp3_20 "O2'" "C2'" "C3'" "O3'" -60.000 10.0 3 +ATP sp3_sp3_64 "C3'" "C2'" "O2'" "HO2'" 180.000 10.0 3 +ATP sp3_sp3_8 "O4'" "C1'" "C2'" "O2'" 180.000 10.0 3 +ATP sp2_sp3_1 C8 N9 "C1'" "O4'" 150.000 10.0 6 +ATP const_14 N7 C8 N9 "C1'" 180.000 10.0 2 +ATP const_26 C5 C4 N9 "C1'" 180.000 10.0 2 +ATP const_17 N9 C8 N7 C5 0.000 10.0 2 +ATP const_20 C6 C5 N7 C8 180.000 10.0 2 +ATP const_sp2_sp2_4 N7 C5 C6 N6 0.000 5.0 2 +ATP const_21 N9 C4 C5 N7 0.000 10.0 2 +ATP sp2_sp2_1 C5 C6 N6 HN61 180.000 5.0 2 +ATP const_sp2_sp2_6 N6 C6 N1 C2 180.000 5.0 2 +ATP const_sp2_sp2_7 N3 C2 N1 C6 0.000 5.0 2 +ATP const_sp2_sp2_9 N1 C2 N3 C4 0.000 5.0 2 +ATP const_12 N9 C4 N3 C2 180.000 10.0 2 +ATP sp3_sp3_33 PA O3A PB O1B 60.000 10.0 3 +ATP sp3_sp3_30 PG O3B PB O1B 60.000 10.0 3 +ATP sp3_sp3_36 PB O3A PA O1A 60.000 10.0 3 +ATP sp3_sp3_39 "C5'" "O5'" PA O1A 60.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ATP chir_1 PG O3B O2G O3G both +ATP chir_2 PB O3A O3B O2B both +ATP chir_3 PA O3A "O5'" O2A both +ATP chir_4 "C4'" "O4'" "C3'" "C5'" negative +ATP chir_5 "C3'" "O3'" "C4'" "C2'" positive +ATP chir_6 "C2'" "O2'" "C1'" "C3'" negative +ATP chir_7 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ATP plan-1 "C1'" 0.020 +ATP plan-1 C2 0.020 +ATP plan-1 C4 0.020 +ATP plan-1 C5 0.020 +ATP plan-1 C6 0.020 +ATP plan-1 C8 0.020 +ATP plan-1 H2 0.020 +ATP plan-1 H8 0.020 +ATP plan-1 N1 0.020 +ATP plan-1 N3 0.020 +ATP plan-1 N6 0.020 +ATP plan-1 N7 0.020 +ATP plan-1 N9 0.020 +ATP plan-2 C6 0.020 +ATP plan-2 HN61 0.020 +ATP plan-2 HN62 0.020 +ATP plan-2 N6 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ATP SMILES ACDLabs 10.04 O=P(O)(O)OP(=O)(O)OP(=O)(O)OCC3OC(n2cnc1c(ncnc12)N)C(O)C3O +ATP SMILES_CANONICAL CACTVS 3.341 Nc1ncnc2n(cnc12)[C@@H]3O[C@H](CO[P@](O)(=O)O[P@@](O)(=O)O[P](O)(O)=O)[C@@H](O)[C@H]3O +ATP SMILES CACTVS 3.341 Nc1ncnc2n(cnc12)[CH]3O[CH](CO[P](O)(=O)O[P](O)(=O)O[P](O)(O)=O)[CH](O)[CH]3O +ATP SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)[C@H]3[C@@H]([C@@H]([C@H](O3)CO[P@@](=O)(O)O[P@](=O)(O)OP(=O)(O)O)O)O)N +ATP SMILES "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)C3C(C(C(O3)COP(=O)(O)OP(=O)(O)OP(=O)(O)O)O)O)N +ATP InChI InChI 1.03 InChI=1S/C10H16N5O13P3/c11-8-5-9(13-2-12-8)15(3-14-5)10-7(17)6(16)4(26-10)1-25-30(21,22)28-31(23,24)27-29(18,19)20/h2-4,6-7,10,16-17H,1H2,(H,21,22)(H,23,24)(H2,11,12,13)(H2,18,19,20)/t4-,6-,7-,10-/m1/s1 +ATP InChIKey InChI 1.03 ZKHQWZAMYRWXGA-KQYNXXCUSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ATP acedrg 243 "dictionary generator" +ATP acedrg_database 11 "data source" +ATP rdkit 2017.03.2 "Chemoinformatics tool" +ATP refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/BR.cif b/image_analysis/structure_refinement/monomers/BR.cif new file mode 100644 index 000000000..64698cd70 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/BR.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +BR BR 'BROMIDE ION ' NON-POLYMER 1 1 . + +data_comp_BR +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +BR BR BR BR -1.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +BR BR n/a . END diff --git a/image_analysis/structure_refinement/monomers/C.cif b/image_analysis/structure_refinement/monomers/C.cif new file mode 100644 index 000000000..0d0c89011 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/C.cif @@ -0,0 +1,255 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +C C "CYTIDINE-5'-MONOPHOSPHATE" RNA 33 21 . +# +data_comp_C +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +C OP3 O OP -1 26.264 21.286 -11.211 +C P P P 0 27.065 20.768 -12.391 +C OP1 O O 0 26.731 21.481 -13.688 +C OP2 O OP -1 27.015 19.258 -12.520 +C "O5'" O O2 0 28.604 21.132 -12.071 +C "C5'" C CH2 0 28.962 22.520 -11.845 +C "C4'" C CH1 0 30.463 22.648 -11.735 +C "O4'" O O2 0 30.967 21.749 -10.719 +C "C3'" C CH1 0 31.273 22.268 -12.980 +C "O3'" O OH1 0 31.285 23.333 -13.923 +C "C2'" C CH1 0 32.660 21.973 -12.387 +C "O2'" O OH1 0 33.494 23.113 -12.311 +C "C1'" C CH1 0 32.329 21.476 -10.970 +C N1 N NR6 0 32.565 20.011 -10.805 +C C2 C CR6 0 33.589 19.539 -9.963 +C O2 O O 0 34.302 20.347 -9.344 +C N3 N NRD6 0 33.778 18.197 -9.840 +C C4 C CR6 0 33.005 17.329 -10.512 +C N4 N NH2 0 33.237 16.032 -10.352 +C C5 C CR16 0 31.965 17.787 -11.373 +C C6 C CR16 0 31.786 19.115 -11.490 +C "H5'" H H 0 28.541 22.842 -11.010 +C "H5''" H H 0 28.636 23.077 -12.594 +C "H4'" H H 0 30.676 23.570 -11.475 +C "H3'" H H 0 30.904 21.447 -13.396 +C "HO3'" H H 0 31.819 23.134 -14.553 +C "H2'" H H 0 33.101 21.267 -12.901 +C "HO2'" H H 0 33.087 23.744 -11.913 +C "H1'" H H 0 32.871 21.976 -10.317 +C H41 H H 0 33.920 15.764 -9.869 +C H42 H H 0 32.707 15.443 -10.731 +C H5 H H 0 31.420 17.183 -11.847 +C H6 H H 0 31.112 19.446 -12.046 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +C OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +C P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +C P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +C P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +C "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +C "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +C "C4'" "O4'" SINGLE n 1.451 0.0111 1.451 0.0111 +C "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +C "O4'" "C1'" SINGLE n 1.411 0.0100 1.411 0.0100 +C "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +C "C3'" "C2'" SINGLE n 1.533 0.0109 1.533 0.0109 +C "C2'" "O2'" SINGLE n 1.412 0.0100 1.412 0.0100 +C "C2'" "C1'" SINGLE n 1.532 0.0100 1.532 0.0100 +C "C1'" N1 SINGLE n 1.487 0.0100 1.487 0.0100 +C N1 C2 SINGLE y 1.397 0.0100 1.397 0.0100 +C N1 C6 SINGLE y 1.364 0.0108 1.364 0.0108 +C C2 O2 DOUBLE n 1.241 0.0100 1.241 0.0100 +C C2 N3 SINGLE y 1.355 0.0119 1.355 0.0119 +C N3 C4 DOUBLE y 1.339 0.0110 1.339 0.0110 +C C4 N4 SINGLE n 1.325 0.0109 1.325 0.0109 +C C4 C5 SINGLE y 1.422 0.0123 1.422 0.0123 +C C5 C6 DOUBLE y 1.342 0.0100 1.342 0.0100 +C "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +C "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +C "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +C "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +C "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +C "C2'" "H2'" SINGLE n 1.089 0.0100 0.978 0.0200 +C "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +C "C1'" "H1'" SINGLE n 1.089 0.0100 0.985 0.0100 +C N4 H41 SINGLE n 1.016 0.0100 0.877 0.0200 +C N4 H42 SINGLE n 1.016 0.0100 0.877 0.0200 +C C5 H5 SINGLE n 1.082 0.0130 0.941 0.0174 +C C6 H6 SINGLE n 1.082 0.0130 0.935 0.0143 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +C OP3 P OP1 112.864 1.69 +C OP3 P OP2 112.864 1.69 +C OP3 P "O5'" 105.808 2.07 +C OP1 P OP2 112.864 1.69 +C OP1 P "O5'" 105.808 2.07 +C OP2 P "O5'" 105.808 2.07 +C P "O5'" "C5'" 118.783 1.50 +C "O5'" "C5'" "C4'" 109.342 1.50 +C "O5'" "C5'" "H5'" 109.845 1.50 +C "O5'" "C5'" "H5''" 109.845 1.50 +C "C4'" "C5'" "H5'" 109.624 1.50 +C "C4'" "C5'" "H5''" 109.624 1.50 +C "H5'" "C5'" "H5''" 108.472 1.50 +C "C5'" "C4'" "O4'" 109.615 1.50 +C "C5'" "C4'" "C3'" 116.008 1.52 +C "C5'" "C4'" "H4'" 108.268 1.50 +C "O4'" "C4'" "C3'" 104.439 1.50 +C "O4'" "C4'" "H4'" 108.698 1.50 +C "C3'" "C4'" "H4'" 109.363 1.86 +C "C4'" "O4'" "C1'" 109.578 1.50 +C "C4'" "C3'" "O3'" 111.281 2.46 +C "C4'" "C3'" "C2'" 102.071 1.50 +C "C4'" "C3'" "H3'" 110.452 2.54 +C "O3'" "C3'" "C2'" 111.993 3.00 +C "O3'" "C3'" "H3'" 110.380 1.67 +C "C2'" "C3'" "H3'" 110.108 1.66 +C "C3'" "O3'" "HO3'" 108.744 3.00 +C "C3'" "C2'" "O2'" 112.861 2.52 +C "C3'" "C2'" "C1'" 101.269 1.50 +C "C3'" "C2'" "H2'" 110.799 1.82 +C "O2'" "C2'" "C1'" 109.476 3.00 +C "O2'" "C2'" "H2'" 111.022 1.77 +C "C1'" "C2'" "H2'" 110.760 1.63 +C "C2'" "O2'" "HO2'" 109.449 1.85 +C "O4'" "C1'" "C2'" 106.825 1.50 +C "O4'" "C1'" N1 108.667 1.50 +C "O4'" "C1'" "H1'" 109.327 1.50 +C "C2'" "C1'" N1 112.859 1.50 +C "C2'" "C1'" "H1'" 109.776 1.83 +C N1 "C1'" "H1'" 109.166 1.50 +C "C1'" N1 C2 118.189 2.26 +C "C1'" N1 C6 121.301 1.52 +C C2 N1 C6 120.510 1.50 +C N1 C2 O2 118.710 1.50 +C N1 C2 N3 118.927 1.50 +C O2 C2 N3 122.370 1.50 +C C2 N3 C4 120.266 1.50 +C N3 C4 N4 117.855 1.50 +C N3 C4 C5 121.269 1.50 +C N4 C4 C5 120.876 1.50 +C C4 N4 H41 119.818 1.59 +C C4 N4 H42 119.818 1.59 +C H41 N4 H42 120.363 1.85 +C C4 C5 C6 117.808 1.50 +C C4 C5 H5 121.350 1.50 +C C6 C5 H5 120.848 1.50 +C N1 C6 C5 121.215 1.50 +C N1 C6 H6 118.510 1.50 +C C5 C6 H6 120.275 1.75 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +C C2e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +C C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +C C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +C C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +C C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +C C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +C C3e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +C C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +C C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +C C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +C C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +C C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +C alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +C beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +C epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +C gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +C sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.00 3 +C const_sp2_sp2_4 O2 C2 N1 "C1'" 0.000 5.0 2 +C const_18 C5 C6 N1 "C1'" 180.000 10.0 2 +C const_sp2_sp2_6 O2 C2 N3 C4 180.000 5.0 2 +C const_sp2_sp2_8 N4 C4 N3 C2 180.000 5.0 2 +C sp2_sp2_3 N3 C4 N4 H41 0.000 5.0 2 +C const_11 N4 C4 C5 C6 180.000 10.0 2 +C const_13 C4 C5 C6 N1 0.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +C chir_1 P "O5'" OP3 OP2 both +C chir_2 "C4'" "O4'" "C3'" "C5'" negative +C chir_3 "C3'" "O3'" "C4'" "C2'" positive +C chir_4 "C2'" "O2'" "C1'" "C3'" negative +C chir_5 "C1'" "O4'" N1 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +C plan-1 "C1'" 0.020 +C plan-1 C2 0.020 +C plan-1 C4 0.020 +C plan-1 C5 0.020 +C plan-1 C6 0.020 +C plan-1 H5 0.020 +C plan-1 H6 0.020 +C plan-1 N1 0.020 +C plan-1 N3 0.020 +C plan-1 N4 0.020 +C plan-1 O2 0.020 +C plan-2 C4 0.020 +C plan-2 H41 0.020 +C plan-2 H42 0.020 +C plan-2 N4 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +C SMILES ACDLabs 10.04 O=C1N=C(N)C=CN1C2OC(C(O)C2O)COP(=O)(O)O +C SMILES_CANONICAL CACTVS 3.341 NC1=NC(=O)N(C=C1)[C@@H]2O[C@H](CO[P](O)(O)=O)[C@@H](O)[C@H]2O +C SMILES CACTVS 3.341 NC1=NC(=O)N(C=C1)[CH]2O[CH](CO[P](O)(O)=O)[CH](O)[CH]2O +C SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C1=CN(C(=O)N=C1N)[C@H]2[C@@H]([C@@H]([C@H](O2)COP(=O)(O)O)O)O +C SMILES "OpenEye OEToolkits" 1.5.0 C1=CN(C(=O)N=C1N)C2C(C(C(O2)COP(=O)(O)O)O)O +C InChI InChI 1.03 InChI=1S/C9H14N3O8P/c10-5-1-2-12(9(15)11-5)8-7(14)6(13)4(20-8)3-19-21(16,17)18/h1-2,4,6-8,13-14H,3H2,(H2,10,11,15)(H2,16,17,18)/t4-,6-,7-,8-/m1/s1 +C InChIKey InChI 1.03 IERHLVCPSMICTF-XVFCMESISA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +C acedrg 243 "dictionary generator" +C acedrg_database 11 "data source" +C rdkit 2017.03.2 "Chemoinformatics tool" +C refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/CA.cif b/image_analysis/structure_refinement/monomers/CA.cif new file mode 100644 index 000000000..d1cacc170 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CA.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CA CA 'CALCIUM ION ' NON-POLYMER 1 1 . + +data_comp_CA +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CA CA CA CA 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CA CA n/a . END diff --git a/image_analysis/structure_refinement/monomers/CD.cif b/image_analysis/structure_refinement/monomers/CD.cif new file mode 100644 index 000000000..fbdd3d2de --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CD.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CD CD 'CADMIUM ION ' NON-POLYMER 1 1 . + +data_comp_CD +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CD CD CD CD 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CD CD n/a . END diff --git a/image_analysis/structure_refinement/monomers/CL.cif b/image_analysis/structure_refinement/monomers/CL.cif new file mode 100644 index 000000000..0d614ea71 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CL.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CL CL 'CHLORIDE ION ' NON-POLYMER 1 1 . + +data_comp_CL +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CL CL CL CL -1.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CL CL n/a . END diff --git a/image_analysis/structure_refinement/monomers/CO.cif b/image_analysis/structure_refinement/monomers/CO.cif new file mode 100644 index 000000000..6942e5689 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CO.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CO CO 'COBALT (II) ION ' NON-POLYMER 1 1 . + +data_comp_CO +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CO CO CO CO 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CO CO n/a . END diff --git a/image_analysis/structure_refinement/monomers/COPYING b/image_analysis/structure_refinement/monomers/COPYING new file mode 100644 index 000000000..3f7b8b1e5 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/COPYING @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + diff --git a/image_analysis/structure_refinement/monomers/CU.cif b/image_analysis/structure_refinement/monomers/CU.cif new file mode 100644 index 000000000..138b89fac --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CU.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CU CU 'COPPER (II) ION ' NON-POLYMER 1 1 . + +data_comp_CU +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CU CU CU CU 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CU CU n/a . END diff --git a/image_analysis/structure_refinement/monomers/CYS.cif b/image_analysis/structure_refinement/monomers/CYS.cif new file mode 100644 index 000000000..190d34acf --- /dev/null +++ b/image_analysis/structure_refinement/monomers/CYS.cif @@ -0,0 +1,188 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +CYS CYS CYSTEINE peptide 14 7 . + +data_comp_CYS +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +CYS N N NT3 1 22.713 13.517 37.695 +CYS CA C CH1 0 22.373 13.685 39.137 +CYS C C C 0 22.022 15.153 39.440 +CYS O O O 0 22.838 16.024 39.065 +CYS CB C CH2 0 23.514 13.225 40.038 +CYS SG S SH1 0 25.070 14.106 39.742 +CYS OXT O OC -1 20.945 15.370 40.038 +CYS H H H 0 23.605 13.433 37.588 +CYS H2 H H 0 22.430 14.227 37.214 +CYS H3 H H 0 22.308 12.777 37.375 +CYS HA H H 0 21.577 13.127 39.328 +CYS HB3 H H 0 23.668 12.265 39.898 +CYS HB2 H H 0 23.255 13.357 40.977 +CYS HG H HSH1 0 25.737 13.537 40.579 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +CYS N n/a CA START +CYS H N . . +CYS H2 N . . +CYS H3 N . . +CYS CA N C . +CYS HA CA . . +CYS CB CA SG . +CYS HB3 CB . . +CYS HB2 CB . . +CYS SG CB . . +CYS HG SG . . +CYS C CA . END +CYS O C . . +CYS OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +CYS N N(CCCH)(H)3 +CYS CA C(CHHS)(NH3)(COO)(H) +CYS C C(CCHN)(O)2 +CYS O O(CCO) +CYS CB C(CCHN)(SH)(H)2 +CYS SG S(CCHH)(H) +CYS OXT O(CCO) +CYS H H(NCHH) +CYS H2 H(NCHH) +CYS H3 H(NCHH) +CYS HA H(CCCN) +CYS HB3 H(CCHS) +CYS HB2 H(CCHS) +CYS HG H(SC) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +CYS N CA SINGLE n 1.487 0.0100 1.487 0.0100 +CYS CA C SINGLE n 1.538 0.0113 1.538 0.0113 +CYS CA CB SINGLE n 1.524 0.0100 1.524 0.0100 +CYS C O DOUBLE n 1.251 0.0183 1.251 0.0183 +CYS C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +CYS CB SG SINGLE n 1.812 0.0101 1.812 0.0101 +CYS N H SINGLE n 1.018 0.0520 0.902 0.0102 +CYS N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +CYS N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +CYS CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +CYS CB HB3 SINGLE n 1.092 0.0100 0.983 0.0131 +CYS CB HB2 SINGLE n 1.092 0.0100 0.983 0.0131 +CYS SG HG SINGLE n 1.338 0.0100 1.212 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +CYS CA N H 109.684 2.12 +CYS CA N H2 109.684 2.12 +CYS CA N H3 109.684 2.12 +CYS H N H2 109.032 3.00 +CYS H N H3 109.032 3.00 +CYS H2 N H3 109.032 3.00 +CYS N CA C 109.504 1.50 +CYS N CA CB 110.927 1.50 +CYS N CA HA 107.886 1.50 +CYS C CA CB 110.126 3.00 +CYS C CA HA 108.362 1.50 +CYS CB CA HA 108.525 2.42 +CYS CA C O 117.126 1.50 +CYS CA C OXT 117.126 1.50 +CYS O C OXT 125.747 1.50 +CYS CA CB SG 113.492 1.50 +CYS CA CB HB3 109.109 1.50 +CYS CA CB HB2 109.109 1.50 +CYS SG CB HB3 108.513 1.50 +CYS SG CB HB2 108.513 1.50 +CYS HB3 CB HB2 107.963 1.50 +CYS CB SG HG 97.543 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +CYS chi1 N CA CB SG -60.000 10.0 3 +CYS chi2 CA CB SG HG 180.000 10.0 3 +CYS sp3_sp3_1 C CA N H 180.000 10.0 3 +CYS sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +CYS chir_1 CA N CB C negative + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +CYS plan-1 C 0.020 +CYS plan-1 CA 0.020 +CYS plan-1 O 0.020 +CYS plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +CYS SMILES ACDLabs 10.04 O=C(O)C(N)CS +CYS SMILES_CANONICAL CACTVS 3.341 N[C@@H](CS)C(O)=O +CYS SMILES CACTVS 3.341 N[CH](CS)C(O)=O +CYS SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C([C@@H](C(=O)O)N)S +CYS SMILES "OpenEye OEToolkits" 1.5.0 C(C(C(=O)O)N)S +CYS InChI InChI 1.03 InChI=1S/C3H7NO2S/c4-2(1-7)3(5)6/h2,7H,1,4H2,(H,5,6)/t2-/m0/s1 +CYS InChIKey InChI 1.03 XUJNEKJLAYXESH-REOHCLBHSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +CYS acedrg 278 "dictionary generator" +CYS acedrg_database 12 "data source" +CYS rdkit 2019.09.1 "Chemoinformatics tool" +CYS refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/DA.cif b/image_analysis/structure_refinement/monomers/DA.cif new file mode 100644 index 000000000..268788579 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/DA.cif @@ -0,0 +1,266 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +DA DA "2'-DEOXYADENOSINE-5'-MONOPHOSPHATE" DNA 34 22 . +# +data_comp_DA +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +DA OP3 O OP -1 -6.497 8.522 9.951 +DA P P P 0 -5.346 9.062 9.122 +DA OP1 O O 0 -4.898 10.441 9.565 +DA OP2 O OP -1 -5.605 8.977 7.630 +DA "O5'" O O2 0 -4.097 8.080 9.408 +DA "C5'" C CH2 0 -3.640 7.912 10.774 +DA "C4'" C CH1 0 -2.470 6.958 10.801 +DA "O4'" O O2 0 -2.888 5.686 10.260 +DA "C3'" C CH1 0 -1.251 7.408 9.993 +DA "O3'" O OH1 0 -0.049 7.159 10.716 +DA "C2'" C CH2 0 -1.324 6.542 8.739 +DA "C1'" C CH1 0 -1.962 5.267 9.263 +DA N9 N NR5 0 -2.687 4.489 8.258 +DA C8 C CR15 0 -3.753 4.911 7.501 +DA N7 N NRD5 0 -4.206 3.997 6.680 +DA C5 C CR56 0 -3.393 2.896 6.907 +DA C6 C CR6 0 -3.368 1.602 6.342 +DA N6 N NH2 0 -4.214 1.192 5.400 +DA N1 N NRD6 0 -2.423 0.736 6.793 +DA C2 C CR16 0 -1.573 1.156 7.744 +DA N3 N NRD6 0 -1.504 2.345 8.344 +DA C4 C CR56 0 -2.450 3.184 7.880 +DA "H5'" H H 0 -4.373 7.554 11.332 +DA "H5''" H H 0 -3.363 8.786 11.145 +DA "H4'" H H 0 -2.203 6.829 11.743 +DA "H3'" H H 0 -1.322 8.365 9.759 +DA "HO3'" H H 0 0.583 7.601 10.361 +DA "H2'" H H 0 -0.433 6.369 8.376 +DA "H2''" H H 0 -1.875 6.962 8.051 +DA "H1'" H H 0 -1.264 4.700 9.685 +DA H8 H H 0 -4.120 5.776 7.565 +DA H61 H H 0 -4.304 0.334 5.236 +DA H62 H H 0 -4.679 1.782 4.946 +DA H2 H H 0 -0.933 0.520 8.026 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +DA OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +DA P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +DA P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +DA P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +DA "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +DA "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +DA "C4'" "O4'" SINGLE n 1.442 0.0100 1.442 0.0100 +DA "C4'" "C3'" SINGLE n 1.526 0.0115 1.526 0.0115 +DA "O4'" "C1'" SINGLE n 1.425 0.0100 1.425 0.0100 +DA "C3'" "O3'" SINGLE n 1.424 0.0100 1.424 0.0100 +DA "C3'" "C2'" SINGLE n 1.526 0.0101 1.526 0.0101 +DA "C2'" "C1'" SINGLE n 1.521 0.0118 1.521 0.0118 +DA "C1'" N9 SINGLE n 1.462 0.0111 1.462 0.0111 +DA N9 C8 SINGLE y 1.373 0.0100 1.373 0.0100 +DA N9 C4 SINGLE y 1.377 0.0100 1.377 0.0100 +DA C8 N7 DOUBLE y 1.310 0.0100 1.310 0.0100 +DA N7 C5 SINGLE y 1.388 0.0100 1.388 0.0100 +DA C5 C6 SINGLE y 1.408 0.0100 1.408 0.0100 +DA C5 C4 DOUBLE y 1.381 0.0100 1.381 0.0100 +DA C6 N6 SINGLE n 1.330 0.0100 1.330 0.0100 +DA C6 N1 DOUBLE y 1.354 0.0100 1.354 0.0100 +DA N1 C2 SINGLE y 1.339 0.0100 1.339 0.0100 +DA C2 N3 DOUBLE y 1.330 0.0100 1.330 0.0100 +DA N3 C4 SINGLE y 1.343 0.0100 1.343 0.0100 +DA "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +DA "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +DA "C4'" "H4'" SINGLE n 1.089 0.0100 0.987 0.0170 +DA "C3'" "H3'" SINGLE n 1.089 0.0100 0.988 0.0189 +DA "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +DA "C2'" "H2'" SINGLE n 1.089 0.0100 0.977 0.0113 +DA "C2'" "H2''" SINGLE n 1.089 0.0100 0.977 0.0113 +DA "C1'" "H1'" SINGLE n 1.089 0.0100 0.993 0.0101 +DA C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +DA N6 H61 SINGLE n 1.016 0.0100 0.877 0.0200 +DA N6 H62 SINGLE n 1.016 0.0100 0.877 0.0200 +DA C2 H2 SINGLE n 1.082 0.0130 0.945 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +DA OP3 P OP1 112.864 1.69 +DA OP3 P OP2 112.864 1.69 +DA OP3 P "O5'" 105.808 2.07 +DA OP1 P OP2 112.864 1.69 +DA OP1 P "O5'" 105.808 2.07 +DA OP2 P "O5'" 105.808 2.07 +DA P "O5'" "C5'" 118.783 1.50 +DA "O5'" "C5'" "C4'" 109.342 1.50 +DA "O5'" "C5'" "H5'" 109.845 1.50 +DA "O5'" "C5'" "H5''" 109.845 1.50 +DA "C4'" "C5'" "H5'" 109.624 1.50 +DA "C4'" "C5'" "H5''" 109.624 1.50 +DA "H5'" "C5'" "H5''" 108.472 1.50 +DA "C5'" "C4'" "O4'" 109.123 1.50 +DA "C5'" "C4'" "C3'" 114.866 1.63 +DA "C5'" "C4'" "H4'" 108.268 1.50 +DA "O4'" "C4'" "C3'" 105.506 1.50 +DA "O4'" "C4'" "H4'" 108.947 1.50 +DA "C3'" "C4'" "H4'" 109.069 1.50 +DA "C4'" "O4'" "C1'" 108.795 1.50 +DA "C4'" "C3'" "O3'" 110.527 2.37 +DA "C4'" "C3'" "C2'" 102.433 1.50 +DA "C4'" "C3'" "H3'" 110.775 1.50 +DA "O3'" "C3'" "C2'" 111.424 1.96 +DA "O3'" "C3'" "H3'" 110.713 1.50 +DA "C2'" "C3'" "H3'" 110.846 1.50 +DA "C3'" "O3'" "HO3'" 109.026 2.38 +DA "C3'" "C2'" "C1'" 102.663 1.50 +DA "C3'" "C2'" "H2'" 111.194 1.50 +DA "C3'" "C2'" "H2''" 111.194 1.50 +DA "C1'" "C2'" "H2'" 111.213 1.50 +DA "C1'" "C2'" "H2''" 111.213 1.50 +DA "H2'" "C2'" "H2''" 109.148 1.50 +DA "O4'" "C1'" "C2'" 106.035 1.50 +DA "O4'" "C1'" N9 108.236 1.50 +DA "O4'" "C1'" "H1'" 109.059 1.50 +DA "C2'" "C1'" N9 114.190 1.67 +DA "C2'" "C1'" "H1'" 109.272 1.50 +DA N9 "C1'" "H1'" 109.282 1.50 +DA "C1'" N9 C8 127.636 2.81 +DA "C1'" N9 C4 126.671 2.93 +DA C8 N9 C4 105.693 1.50 +DA N9 C8 N7 113.469 1.50 +DA N9 C8 H8 123.206 1.50 +DA N7 C8 H8 123.326 1.50 +DA C8 N7 C5 104.739 1.50 +DA N7 C5 C6 132.250 1.50 +DA N7 C5 C4 110.483 1.50 +DA C6 C5 C4 117.267 1.50 +DA C5 C6 N6 123.792 1.50 +DA C5 C6 N1 117.409 1.50 +DA N6 C6 N1 118.799 1.50 +DA C6 N6 H61 119.723 1.50 +DA C6 N6 H62 119.723 1.50 +DA H61 N6 H62 120.554 1.88 +DA C6 N1 C2 118.521 1.50 +DA N1 C2 N3 129.332 1.50 +DA N1 C2 H2 115.313 1.50 +DA N3 C2 H2 115.355 1.50 +DA C2 N3 C4 110.982 1.50 +DA N9 C4 C5 105.616 1.50 +DA N9 C4 N3 127.895 1.50 +DA C5 C4 N3 126.489 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +DA C2e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +DA C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +DA C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +DA C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +DA C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +DA C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +DA C3e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +DA C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +DA C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +DA C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +DA C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +DA C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +DA alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +DA beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +DA epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +DA gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +DA const_14 N7 C8 N9 "C1'" 180.000 10.0 2 +DA const_26 C5 C4 N9 "C1'" 180.000 10.0 2 +DA const_17 N9 C8 N7 C5 0.000 10.0 2 +DA const_20 C6 C5 N7 C8 180.000 10.0 2 +DA const_sp2_sp2_4 N7 C5 C6 N6 0.000 5.0 2 +DA const_21 N9 C4 C5 N7 0.000 10.0 2 +DA sp2_sp2_1 C5 C6 N6 H61 180.000 5.0 2 +DA const_sp2_sp2_6 N6 C6 N1 C2 180.000 5.0 2 +DA const_sp2_sp2_7 N3 C2 N1 C6 0.000 5.0 2 +DA const_sp2_sp2_9 N1 C2 N3 C4 0.000 5.0 2 +DA const_12 N9 C4 N3 C2 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +DA chir_1 P "O5'" OP3 OP2 both +DA chir_2 "C4'" "O4'" "C3'" "C5'" negative +DA chir_3 "C3'" "O3'" "C4'" "C2'" positive +DA chir_4 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +DA plan-1 "C1'" 0.020 +DA plan-1 C2 0.020 +DA plan-1 C4 0.020 +DA plan-1 C5 0.020 +DA plan-1 C6 0.020 +DA plan-1 C8 0.020 +DA plan-1 H2 0.020 +DA plan-1 H8 0.020 +DA plan-1 N1 0.020 +DA plan-1 N3 0.020 +DA plan-1 N6 0.020 +DA plan-1 N7 0.020 +DA plan-1 N9 0.020 +DA plan-2 C6 0.020 +DA plan-2 H61 0.020 +DA plan-2 H62 0.020 +DA plan-2 N6 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +DA SMILES ACDLabs 10.04 O=P(O)(O)OCC3OC(n2cnc1c(ncnc12)N)CC3O +DA SMILES_CANONICAL CACTVS 3.341 Nc1ncnc2n(cnc12)[C@H]3C[C@H](O)[C@@H](CO[P](O)(O)=O)O3 +DA SMILES CACTVS 3.341 Nc1ncnc2n(cnc12)[CH]3C[CH](O)[CH](CO[P](O)(O)=O)O3 +DA SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)[C@H]3C[C@@H]([C@H](O3)COP(=O)(O)O)O)N +DA SMILES "OpenEye OEToolkits" 1.5.0 c1nc(c2c(n1)n(cn2)C3CC(C(O3)COP(=O)(O)O)O)N +DA InChI InChI 1.03 InChI=1S/C10H14N5O6P/c11-9-8-10(13-3-12-9)15(4-14-8)7-1-5(16)6(21-7)2-20-22(17,18)19/h3-7,16H,1-2H2,(H2,11,12,13)(H2,17,18,19)/t5-,6+,7+/m0/s1 +DA InChIKey InChI 1.03 KHWCHTKSEGGWEX-RRKCRQDMSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +DA acedrg 243 "dictionary generator" +DA acedrg_database 11 "data source" +DA rdkit 2017.03.2 "Chemoinformatics tool" +DA refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/DC.cif b/image_analysis/structure_refinement/monomers/DC.cif new file mode 100644 index 000000000..f0373996c --- /dev/null +++ b/image_analysis/structure_refinement/monomers/DC.cif @@ -0,0 +1,250 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +DC DC "2'-DEOXYCYTIDINE-5'-MONOPHOSPHATE" DNA 32 20 . +# +data_comp_DC +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +DC OP3 O OP -1 4.759 -6.216 1.740 +DC P P P 0 5.427 -6.783 0.501 +DC OP1 O O 0 5.450 -8.300 0.487 +DC OP2 O OP -1 6.788 -6.171 0.232 +DC "O5'" O O2 0 4.494 -6.346 -0.742 +DC "C5'" C CH2 0 3.097 -6.734 -0.736 +DC "C4'" C CH1 0 2.438 -6.261 -2.009 +DC "O4'" O O2 0 2.537 -4.821 -2.097 +DC "C3'" C CH1 0 3.044 -6.825 -3.297 +DC "O3'" O OH1 0 2.035 -7.363 -4.147 +DC "C2'" C CH2 0 3.705 -5.618 -3.951 +DC "C1'" C CH1 0 2.890 -4.454 -3.414 +DC N1 N NR6 0 3.622 -3.158 -3.358 +DC C2 C CR6 0 3.233 -2.087 -4.185 +DC O2 O O 0 2.273 -2.221 -4.961 +DC N3 N NRD6 0 3.923 -0.917 -4.114 +DC C4 C CR6 0 4.961 -0.779 -3.274 +DC N4 N NH2 0 5.596 0.387 -3.250 +DC C5 C CR16 0 5.371 -1.854 -2.432 +DC C6 C CR16 0 4.683 -3.007 -2.507 +DC "H5'" H H 0 2.640 -6.331 0.044 +DC "H5''" H H 0 3.022 -7.718 -0.669 +DC "H4'" H H 0 1.482 -6.507 -1.967 +DC "H3'" H H 0 3.719 -7.516 -3.087 +DC "HO3'" H H 0 1.460 -6.765 -4.330 +DC "H2'" H H 0 3.647 -5.668 -4.930 +DC "H2''" H H 0 4.648 -5.546 -3.691 +DC "H1'" H H 0 2.063 -4.358 -3.951 +DC H41 H H 0 5.385 1.014 -3.827 +DC H42 H H 0 6.226 0.528 -2.656 +DC H5 H H 0 6.097 -1.763 -1.841 +DC H6 H H 0 4.929 -3.731 -1.969 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +DC OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +DC P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +DC P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +DC P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +DC "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +DC "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +DC "C4'" "O4'" SINGLE n 1.445 0.0100 1.445 0.0100 +DC "C4'" "C3'" SINGLE n 1.526 0.0115 1.526 0.0115 +DC "O4'" "C1'" SINGLE n 1.413 0.0100 1.413 0.0100 +DC "C3'" "O3'" SINGLE n 1.424 0.0100 1.424 0.0100 +DC "C3'" "C2'" SINGLE n 1.522 0.0100 1.522 0.0100 +DC "C2'" "C1'" SINGLE n 1.520 0.0100 1.520 0.0100 +DC "C1'" N1 SINGLE n 1.480 0.0115 1.480 0.0115 +DC N1 C2 SINGLE y 1.397 0.0100 1.397 0.0100 +DC N1 C6 SINGLE y 1.360 0.0118 1.360 0.0118 +DC C2 O2 DOUBLE n 1.241 0.0100 1.241 0.0100 +DC C2 N3 SINGLE y 1.355 0.0119 1.355 0.0119 +DC N3 C4 DOUBLE y 1.339 0.0110 1.339 0.0110 +DC C4 N4 SINGLE n 1.325 0.0109 1.325 0.0109 +DC C4 C5 SINGLE y 1.422 0.0123 1.422 0.0123 +DC C5 C6 DOUBLE y 1.342 0.0100 1.342 0.0100 +DC "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +DC "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +DC "C4'" "H4'" SINGLE n 1.089 0.0100 0.987 0.0170 +DC "C3'" "H3'" SINGLE n 1.089 0.0100 0.988 0.0189 +DC "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +DC "C2'" "H2'" SINGLE n 1.089 0.0100 0.982 0.0200 +DC "C2'" "H2''" SINGLE n 1.089 0.0100 0.982 0.0200 +DC "C1'" "H1'" SINGLE n 1.089 0.0100 0.991 0.0103 +DC N4 H41 SINGLE n 1.016 0.0100 0.877 0.0200 +DC N4 H42 SINGLE n 1.016 0.0100 0.877 0.0200 +DC C5 H5 SINGLE n 1.082 0.0130 0.941 0.0174 +DC C6 H6 SINGLE n 1.082 0.0130 0.935 0.0143 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +DC OP3 P OP1 112.864 1.69 +DC OP3 P OP2 112.864 1.69 +DC OP3 P "O5'" 105.808 2.07 +DC OP1 P OP2 112.864 1.69 +DC OP1 P "O5'" 105.808 2.07 +DC OP2 P "O5'" 105.808 2.07 +DC P "O5'" "C5'" 118.783 1.50 +DC "O5'" "C5'" "C4'" 109.342 1.50 +DC "O5'" "C5'" "H5'" 109.845 1.50 +DC "O5'" "C5'" "H5''" 109.845 1.50 +DC "C4'" "C5'" "H5'" 109.624 1.50 +DC "C4'" "C5'" "H5''" 109.624 1.50 +DC "H5'" "C5'" "H5''" 108.472 1.50 +DC "C5'" "C4'" "O4'" 109.615 1.50 +DC "C5'" "C4'" "C3'" 114.866 1.63 +DC "C5'" "C4'" "H4'" 108.268 1.50 +DC "O4'" "C4'" "C3'" 105.770 1.50 +DC "O4'" "C4'" "H4'" 108.698 1.50 +DC "C3'" "C4'" "H4'" 109.069 1.50 +DC "C4'" "O4'" "C1'" 109.692 1.50 +DC "C4'" "C3'" "O3'" 110.527 2.37 +DC "C4'" "C3'" "C2'" 102.800 1.50 +DC "C4'" "C3'" "H3'" 110.775 1.50 +DC "O3'" "C3'" "C2'" 110.636 2.59 +DC "O3'" "C3'" "H3'" 110.713 1.50 +DC "C2'" "C3'" "H3'" 110.862 1.50 +DC "C3'" "O3'" "HO3'" 109.026 2.38 +DC "C3'" "C2'" "C1'" 102.834 1.50 +DC "C3'" "C2'" "H2'" 111.310 1.50 +DC "C3'" "C2'" "H2''" 111.310 1.50 +DC "C1'" "C2'" "H2'" 111.187 1.50 +DC "C1'" "C2'" "H2''" 111.187 1.50 +DC "H2'" "C2'" "H2''" 108.952 1.50 +DC "O4'" "C1'" "C2'" 106.308 1.50 +DC "O4'" "C1'" N1 107.584 1.50 +DC "O4'" "C1'" "H1'" 109.550 1.50 +DC "C2'" "C1'" N1 114.268 1.50 +DC "C2'" "C1'" "H1'" 109.741 1.50 +DC N1 "C1'" "H1'" 109.342 1.50 +DC "C1'" N1 C2 118.777 1.50 +DC "C1'" N1 C6 120.713 1.50 +DC C2 N1 C6 120.510 1.50 +DC N1 C2 O2 118.710 1.50 +DC N1 C2 N3 118.927 1.50 +DC O2 C2 N3 122.370 1.50 +DC C2 N3 C4 120.266 1.50 +DC N3 C4 N4 117.855 1.50 +DC N3 C4 C5 121.269 1.50 +DC N4 C4 C5 120.876 1.50 +DC C4 N4 H41 119.818 1.59 +DC C4 N4 H42 119.818 1.59 +DC H41 N4 H42 120.363 1.85 +DC C4 C5 C6 117.808 1.50 +DC C4 C5 H5 121.350 1.50 +DC C6 C5 H5 120.848 1.50 +DC N1 C6 C5 121.215 1.50 +DC N1 C6 H6 118.510 1.50 +DC C5 C6 H6 120.275 1.75 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +DC C2e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +DC C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +DC C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +DC C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +DC C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +DC C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +DC C3e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +DC C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +DC C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +DC C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +DC C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +DC C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +DC alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +DC beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +DC epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +DC gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +DC const_sp2_sp2_4 O2 C2 N1 "C1'" 0.000 5.0 2 +DC const_18 C5 C6 N1 "C1'" 180.000 10.0 2 +DC const_sp2_sp2_6 O2 C2 N3 C4 180.000 5.0 2 +DC const_sp2_sp2_8 N4 C4 N3 C2 180.000 5.0 2 +DC sp2_sp2_3 N3 C4 N4 H41 0.000 5.0 2 +DC const_11 N4 C4 C5 C6 180.000 10.0 2 +DC const_13 C4 C5 C6 N1 0.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +DC chir_1 P "O5'" OP3 OP2 both +DC chir_2 "C4'" "O4'" "C3'" "C5'" negative +DC chir_3 "C3'" "O3'" "C4'" "C2'" positive +DC chir_4 "C1'" "O4'" N1 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +DC plan-1 "C1'" 0.020 +DC plan-1 C2 0.020 +DC plan-1 C4 0.020 +DC plan-1 C5 0.020 +DC plan-1 C6 0.020 +DC plan-1 H5 0.020 +DC plan-1 H6 0.020 +DC plan-1 N1 0.020 +DC plan-1 N3 0.020 +DC plan-1 N4 0.020 +DC plan-1 O2 0.020 +DC plan-2 C4 0.020 +DC plan-2 H41 0.020 +DC plan-2 H42 0.020 +DC plan-2 N4 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +DC SMILES ACDLabs 10.04 O=C1N=C(N)C=CN1C2OC(C(O)C2)COP(=O)(O)O +DC SMILES_CANONICAL CACTVS 3.341 NC1=NC(=O)N(C=C1)[C@H]2C[C@H](O)[C@@H](CO[P](O)(O)=O)O2 +DC SMILES CACTVS 3.341 NC1=NC(=O)N(C=C1)[CH]2C[CH](O)[CH](CO[P](O)(O)=O)O2 +DC SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C1[C@@H]([C@H](O[C@H]1N2C=CC(=NC2=O)N)COP(=O)(O)O)O +DC SMILES "OpenEye OEToolkits" 1.5.0 C1C(C(OC1N2C=CC(=NC2=O)N)COP(=O)(O)O)O +DC InChI InChI 1.03 InChI=1S/C9H14N3O7P/c10-7-1-2-12(9(14)11-7)8-3-5(13)6(19-8)4-18-20(15,16)17/h1-2,5-6,8,13H,3-4H2,(H2,10,11,14)(H2,15,16,17)/t5-,6+,8+/m0/s1 +DC InChIKey InChI 1.03 NCMVOABPESMRCP-SHYZEUOFSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +DC acedrg 243 "dictionary generator" +DC acedrg_database 11 "data source" +DC rdkit 2017.03.2 "Chemoinformatics tool" +DC refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/DG.cif b/image_analysis/structure_refinement/monomers/DG.cif new file mode 100644 index 000000000..1073727b3 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/DG.cif @@ -0,0 +1,271 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +DG DG "2'-DEOXYGUANOSINE-5'-MONOPHOSPHATE" DNA 35 23 . +# +data_comp_DG +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +DG OP3 O OP -1 0.424 -8.734 -9.816 +DG P P P 0 0.296 -8.811 -11.326 +DG OP1 O O 0 -0.898 -9.631 -11.775 +DG OP2 O OP -1 1.587 -9.229 -12.005 +DG "O5'" O O2 0 0.007 -7.303 -11.822 +DG "C5'" C CH2 0 -1.170 -6.617 -11.324 +DG "C4'" C CH1 0 -1.206 -5.213 -11.876 +DG "O4'" O O2 0 -0.018 -4.512 -11.450 +DG "C3'" C CH1 0 -1.259 -5.123 -13.404 +DG "O3'" O OH1 0 -2.248 -4.188 -13.827 +DG "C2'" C CH2 0 0.144 -4.654 -13.783 +DG "C1'" C CH1 0 0.565 -3.849 -12.566 +DG N9 N NR5 0 2.012 -3.775 -12.354 +DG C8 C CR15 0 2.857 -4.830 -12.111 +DG N7 N NRD5 0 4.108 -4.471 -11.958 +DG C5 C CR56 0 4.088 -3.091 -12.106 +DG C6 C CR6 0 5.150 -2.149 -12.042 +DG O6 O O 0 6.352 -2.369 -11.834 +DG N1 N NR16 0 4.698 -0.841 -12.249 +DG C2 C CR6 0 3.388 -0.485 -12.487 +DG N2 N NH2 0 3.138 0.820 -12.662 +DG N3 N NRD6 0 2.387 -1.368 -12.548 +DG C4 C CR56 0 2.803 -2.647 -12.350 +DG "H5'" H H 0 -1.147 -6.585 -10.336 +DG "H5''" H H 0 -1.985 -7.104 -11.602 +DG "H4'" H H 0 -1.996 -4.756 -11.498 +DG "H3'" H H 0 -1.441 -6.012 -13.795 +DG "HO3'" H H 0 -2.096 -3.427 -13.481 +DG "H2'" H H 0 0.125 -4.097 -14.586 +DG "H2''" H H 0 0.741 -5.412 -13.932 +DG "H1'" H H 0 0.190 -2.932 -12.632 +DG H8 H H 0 2.565 -5.725 -12.063 +DG H1 H H 0 5.314 -0.188 -12.222 +DG H21 H H 0 2.584 1.078 -13.291 +DG H22 H H 0 3.528 1.412 -12.146 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +DG OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +DG P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +DG P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +DG P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +DG "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +DG "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +DG "C4'" "O4'" SINGLE n 1.442 0.0100 1.442 0.0100 +DG "C4'" "C3'" SINGLE n 1.526 0.0115 1.526 0.0115 +DG "O4'" "C1'" SINGLE n 1.425 0.0100 1.425 0.0100 +DG "C3'" "O3'" SINGLE n 1.424 0.0100 1.424 0.0100 +DG "C3'" "C2'" SINGLE n 1.526 0.0101 1.526 0.0101 +DG "C2'" "C1'" SINGLE n 1.521 0.0118 1.521 0.0118 +DG "C1'" N9 SINGLE n 1.462 0.0111 1.462 0.0111 +DG N9 C8 SINGLE y 1.373 0.0100 1.373 0.0100 +DG N9 C4 SINGLE y 1.375 0.0100 1.375 0.0100 +DG C8 N7 DOUBLE y 1.312 0.0100 1.312 0.0100 +DG N7 C5 SINGLE y 1.390 0.0100 1.390 0.0100 +DG C5 C6 SINGLE y 1.417 0.0103 1.417 0.0103 +DG C5 C4 DOUBLE y 1.377 0.0100 1.377 0.0100 +DG C6 O6 DOUBLE n 1.239 0.0100 1.239 0.0100 +DG C6 N1 SINGLE y 1.396 0.0107 1.396 0.0107 +DG N1 C2 SINGLE y 1.374 0.0100 1.374 0.0100 +DG C2 N2 SINGLE n 1.340 0.0101 1.340 0.0101 +DG C2 N3 DOUBLE y 1.333 0.0104 1.333 0.0104 +DG N3 C4 SINGLE y 1.355 0.0100 1.355 0.0100 +DG "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +DG "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +DG "C4'" "H4'" SINGLE n 1.089 0.0100 0.987 0.0170 +DG "C3'" "H3'" SINGLE n 1.089 0.0100 0.988 0.0189 +DG "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +DG "C2'" "H2'" SINGLE n 1.089 0.0100 0.977 0.0113 +DG "C2'" "H2''" SINGLE n 1.089 0.0100 0.977 0.0113 +DG "C1'" "H1'" SINGLE n 1.089 0.0100 0.993 0.0101 +DG C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +DG N1 H1 SINGLE n 1.016 0.0100 0.897 0.0200 +DG N2 H21 SINGLE n 1.016 0.0100 0.877 0.0200 +DG N2 H22 SINGLE n 1.016 0.0100 0.877 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +DG OP3 P OP1 112.864 1.69 +DG OP3 P OP2 112.864 1.69 +DG OP3 P "O5'" 105.808 2.07 +DG OP1 P OP2 112.864 1.69 +DG OP1 P "O5'" 105.808 2.07 +DG OP2 P "O5'" 105.808 2.07 +DG P "O5'" "C5'" 118.783 1.50 +DG "O5'" "C5'" "C4'" 109.342 1.50 +DG "O5'" "C5'" "H5'" 109.845 1.50 +DG "O5'" "C5'" "H5''" 109.845 1.50 +DG "C4'" "C5'" "H5'" 109.624 1.50 +DG "C4'" "C5'" "H5''" 109.624 1.50 +DG "H5'" "C5'" "H5''" 108.472 1.50 +DG "C5'" "C4'" "O4'" 109.123 1.50 +DG "C5'" "C4'" "C3'" 114.866 1.63 +DG "C5'" "C4'" "H4'" 108.268 1.50 +DG "O4'" "C4'" "C3'" 105.506 1.50 +DG "O4'" "C4'" "H4'" 108.947 1.50 +DG "C3'" "C4'" "H4'" 109.069 1.50 +DG "C4'" "O4'" "C1'" 108.795 1.50 +DG "C4'" "C3'" "O3'" 110.527 2.37 +DG "C4'" "C3'" "C2'" 102.433 1.50 +DG "C4'" "C3'" "H3'" 110.775 1.50 +DG "O3'" "C3'" "C2'" 111.424 1.96 +DG "O3'" "C3'" "H3'" 110.713 1.50 +DG "C2'" "C3'" "H3'" 110.846 1.50 +DG "C3'" "O3'" "HO3'" 109.026 2.38 +DG "C3'" "C2'" "C1'" 102.663 1.50 +DG "C3'" "C2'" "H2'" 111.194 1.50 +DG "C3'" "C2'" "H2''" 111.194 1.50 +DG "C1'" "C2'" "H2'" 111.213 1.50 +DG "C1'" "C2'" "H2''" 111.213 1.50 +DG "H2'" "C2'" "H2''" 109.148 1.50 +DG "O4'" "C1'" "C2'" 106.035 1.50 +DG "O4'" "C1'" N9 108.236 1.50 +DG "O4'" "C1'" "H1'" 109.059 1.50 +DG "C2'" "C1'" N9 114.190 1.67 +DG "C2'" "C1'" "H1'" 109.272 1.50 +DG N9 "C1'" "H1'" 109.282 1.50 +DG "C1'" N9 C8 127.617 2.81 +DG "C1'" N9 C4 126.652 2.93 +DG C8 N9 C4 105.731 1.50 +DG N9 C8 N7 113.507 1.50 +DG N9 C8 H8 123.187 1.50 +DG N7 C8 H8 123.307 1.50 +DG C8 N7 C5 104.778 1.50 +DG N7 C5 C6 130.030 1.50 +DG N7 C5 C4 110.574 1.50 +DG C6 C5 C4 119.397 1.50 +DG C5 C6 O6 128.244 1.50 +DG C5 C6 N1 111.367 1.50 +DG O6 C6 N1 120.389 1.50 +DG C6 N1 C2 125.351 1.50 +DG C6 N1 H1 116.978 2.44 +DG C2 N1 H1 117.677 2.71 +DG N1 C2 N2 116.576 1.50 +DG N1 C2 N3 123.602 1.50 +DG N2 C2 N3 119.821 1.50 +DG C2 N2 H21 119.868 1.50 +DG C2 N2 H22 119.868 1.50 +DG H21 N2 H22 120.263 1.96 +DG C2 N3 C4 112.066 1.50 +DG N9 C4 C5 105.411 1.50 +DG N9 C4 N3 126.378 1.50 +DG C5 C4 N3 128.211 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +DG C2e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +DG C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +DG C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +DG C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +DG C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +DG C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +DG C3e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +DG C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +DG C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +DG C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +DG C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +DG C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +DG alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +DG beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +DG epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +DG gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +DG const_18 N7 C8 N9 "C1'" 180.000 10.0 2 +DG const_30 C5 C4 N9 "C1'" 180.000 10.0 2 +DG const_21 N9 C8 N7 C5 0.000 10.0 2 +DG const_24 C6 C5 N7 C8 180.000 10.0 2 +DG const_sp2_sp2_4 N7 C5 C6 O6 0.000 5.0 2 +DG const_25 N9 C4 C5 N7 0.000 10.0 2 +DG const_sp2_sp2_7 O6 C6 N1 C2 180.000 5.0 2 +DG const_11 N2 C2 N1 C6 180.000 10.0 2 +DG sp2_sp2_1 N1 C2 N2 H21 180.000 5.0 2 +DG const_14 N2 C2 N3 C4 180.000 10.0 2 +DG const_16 N9 C4 N3 C2 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +DG chir_1 P "O5'" OP3 OP2 both +DG chir_2 "C4'" "O4'" "C3'" "C5'" negative +DG chir_3 "C3'" "O3'" "C4'" "C2'" positive +DG chir_4 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +DG plan-1 "C1'" 0.020 +DG plan-1 C2 0.020 +DG plan-1 C4 0.020 +DG plan-1 C5 0.020 +DG plan-1 C6 0.020 +DG plan-1 C8 0.020 +DG plan-1 H1 0.020 +DG plan-1 H8 0.020 +DG plan-1 N1 0.020 +DG plan-1 N2 0.020 +DG plan-1 N3 0.020 +DG plan-1 N7 0.020 +DG plan-1 N9 0.020 +DG plan-1 O6 0.020 +DG plan-2 C2 0.020 +DG plan-2 H21 0.020 +DG plan-2 H22 0.020 +DG plan-2 N2 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +DG SMILES ACDLabs 10.04 O=C1c2ncn(c2N=C(N)N1)C3OC(C(O)C3)COP(=O)(O)O +DG SMILES_CANONICAL CACTVS 3.341 NC1=Nc2n(cnc2C(=O)N1)[C@H]3C[C@H](O)[C@@H](CO[P](O)(O)=O)O3 +DG SMILES CACTVS 3.341 NC1=Nc2n(cnc2C(=O)N1)[CH]3C[CH](O)[CH](CO[P](O)(O)=O)O3 +DG SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc2c(n1[C@H]3C[C@@H]([C@H](O3)COP(=O)(O)O)O)N=C(NC2=O)N +DG SMILES "OpenEye OEToolkits" 1.5.0 c1nc2c(n1C3CC(C(O3)COP(=O)(O)O)O)N=C(NC2=O)N +DG InChI InChI 1.03 InChI=1S/C10H14N5O7P/c11-10-13-8-7(9(17)14-10)12-3-15(8)6-1-4(16)5(22-6)2-21-23(18,19)20/h3-6,16H,1-2H2,(H2,18,19,20)(H3,11,13,14,17)/t4-,5+,6+/m0/s1 +DG InChIKey InChI 1.03 LTFMZDNNPPEQNG-KVQBGUIXSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +DG acedrg 243 "dictionary generator" +DG acedrg_database 11 "data source" +DG rdkit 2017.03.2 "Chemoinformatics tool" +DG refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/DMS.cif b/image_analysis/structure_refinement/monomers/DMS.cif new file mode 100644 index 000000000..209672234 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/DMS.cif @@ -0,0 +1,117 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +DMS DMS "DIMETHYL SULFOXIDE" NON-POLYMER 10 4 . +# +data_comp_DMS +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +DMS S S S3 0 63.218 46.394 -11.587 +DMS O O O 0 63.732 46.133 -12.975 +DMS C1 C CH3 0 64.619 46.928 -10.638 +DMS C2 C CH3 0 63.010 44.801 -10.834 +DMS H11 H H 0 64.347 47.082 -9.723 +DMS H12 H H 0 64.967 47.748 -11.014 +DMS H13 H H 0 65.302 46.245 -10.662 +DMS H21 H H 0 63.858 44.337 -10.825 +DMS H22 H H 0 62.366 44.288 -11.340 +DMS H23 H H 0 62.693 44.913 -9.927 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +DMS S O DOUBLE n 1.503 0.0200 1.503 0.0200 +DMS S C1 SINGLE n 1.774 0.0176 1.774 0.0176 +DMS S C2 SINGLE n 1.774 0.0176 1.774 0.0176 +DMS C1 H11 SINGLE n 1.089 0.0100 0.967 0.0136 +DMS C1 H12 SINGLE n 1.089 0.0100 0.967 0.0136 +DMS C1 H13 SINGLE n 1.089 0.0100 0.967 0.0136 +DMS C2 H21 SINGLE n 1.089 0.0100 0.967 0.0136 +DMS C2 H22 SINGLE n 1.089 0.0100 0.967 0.0136 +DMS C2 H23 SINGLE n 1.089 0.0100 0.967 0.0136 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +DMS O S C1 106.047 1.50 +DMS O S C2 106.047 1.50 +DMS C1 S C2 97.789 1.50 +DMS S C1 H11 109.408 1.50 +DMS S C1 H12 109.408 1.50 +DMS S C1 H13 109.408 1.50 +DMS H11 C1 H12 109.545 1.50 +DMS H11 C1 H13 109.545 1.50 +DMS H12 C1 H13 109.545 1.50 +DMS S C2 H21 109.408 1.50 +DMS S C2 H22 109.408 1.50 +DMS S C2 H23 109.408 1.50 +DMS H21 C2 H22 109.545 1.50 +DMS H21 C2 H23 109.545 1.50 +DMS H22 C2 H23 109.545 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +DMS sp3_sp3_1 H11 C1 S O 180.000 10.0 3 +DMS sp3_sp3_8 H21 C2 S O -60.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +DMS chir_1 S O C1 C2 both +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +DMS SMILES ACDLabs 10.04 sulfinyldimethane +DMS SMILES_CANONICAL CACTVS 3.341 C[S](C)=O +DMS SMILES CACTVS 3.341 C[S](C)=O +DMS SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CS(=O)C +DMS SMILES "OpenEye OEToolkits" 1.5.0 CS(=O)C +DMS InChI InChI 1.03 InChI=1S/C2H6OS/c1-4(2)3/h1-2H3 +DMS InChIKey InChI 1.03 IAZDPXIOMUYVGZ-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +DMS acedrg 243 "dictionary generator" +DMS acedrg_database 11 "data source" +DMS rdkit 2017.03.2 "Chemoinformatics tool" +DMS refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/DT.cif b/image_analysis/structure_refinement/monomers/DT.cif new file mode 100644 index 000000000..affc26c5a --- /dev/null +++ b/image_analysis/structure_refinement/monomers/DT.cif @@ -0,0 +1,256 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +DT DT "THYMIDINE-5'-MONOPHOSPHATE" DNA 34 21 . +# +data_comp_DT +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +DT OP3 O OP -1 -9.033 1.811 3.710 +DT P P P 0 -8.813 3.246 4.151 +DT OP1 O O 0 -9.790 3.689 5.223 +DT OP2 O OP -1 -8.738 4.214 2.986 +DT "O5'" O O2 0 -7.356 3.277 4.843 +DT "C5'" C CH2 0 -7.098 2.397 5.967 +DT "C4'" C CH1 0 -5.688 2.610 6.462 +DT "O4'" O O2 0 -4.754 2.345 5.391 +DT "C3'" C CH1 0 -5.391 4.024 6.970 +DT "O3'" O OH1 0 -4.766 3.989 8.251 +DT "C2'" C CH2 0 -4.437 4.599 5.930 +DT "C1'" C CH1 0 -3.760 3.359 5.367 +DT N1 N NR6 0 -3.270 3.502 3.966 +DT C2 C CR6 0 -1.905 3.474 3.713 +DT O2 O O 0 -1.053 3.332 4.583 +DT N3 N NR16 0 -1.559 3.618 2.388 +DT C4 C CR6 0 -2.414 3.786 1.310 +DT O4 O O 0 -1.948 3.903 0.172 +DT C5 C CR6 0 -3.824 3.809 1.640 +DT C7 C CH3 0 -4.824 3.988 0.535 +DT C6 C CR16 0 -4.178 3.669 2.932 +DT "H5'" H H 0 -7.213 1.455 5.689 +DT "H5''" H H 0 -7.738 2.588 6.696 +DT "H4'" H H 0 -5.520 1.964 7.190 +DT "H3'" H H 0 -6.221 4.559 7.010 +DT "HO3'" H H 0 -4.051 3.531 8.213 +DT "H2'" H H 0 -3.782 5.203 6.342 +DT "H2''" H H 0 -4.926 5.088 5.233 +DT "H1'" H H 0 -3.014 3.092 5.967 +DT H3 H H 0 -0.682 3.600 2.215 +DT H71 H H 0 -5.705 3.724 0.845 +DT H72 H H 0 -4.574 3.437 -0.224 +DT H73 H H 0 -4.846 4.920 0.263 +DT H6 H H 0 -5.103 3.686 3.152 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +DT OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +DT P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +DT P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +DT P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +DT "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +DT "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +DT "C4'" "O4'" SINGLE n 1.445 0.0100 1.445 0.0100 +DT "C4'" "C3'" SINGLE n 1.526 0.0115 1.526 0.0115 +DT "O4'" "C1'" SINGLE n 1.422 0.0100 1.422 0.0100 +DT "C3'" "O3'" SINGLE n 1.424 0.0100 1.424 0.0100 +DT "C3'" "C2'" SINGLE n 1.522 0.0100 1.522 0.0100 +DT "C2'" "C1'" SINGLE n 1.523 0.0130 1.523 0.0130 +DT "C1'" N1 SINGLE n 1.477 0.0139 1.477 0.0139 +DT N1 C2 SINGLE y 1.379 0.0100 1.379 0.0100 +DT N1 C6 SINGLE y 1.380 0.0107 1.380 0.0107 +DT C2 O2 DOUBLE n 1.224 0.0111 1.224 0.0111 +DT C2 N3 SINGLE y 1.373 0.0100 1.373 0.0100 +DT N3 C4 SINGLE y 1.383 0.0100 1.383 0.0100 +DT C4 O4 DOUBLE n 1.234 0.0141 1.234 0.0141 +DT C4 C5 SINGLE y 1.446 0.0100 1.446 0.0100 +DT C5 C7 SINGLE n 1.500 0.0100 1.500 0.0100 +DT C5 C6 DOUBLE y 1.343 0.0112 1.343 0.0112 +DT "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +DT "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +DT "C4'" "H4'" SINGLE n 1.089 0.0100 0.987 0.0170 +DT "C3'" "H3'" SINGLE n 1.089 0.0100 0.988 0.0189 +DT "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +DT "C2'" "H2'" SINGLE n 1.089 0.0100 0.982 0.0200 +DT "C2'" "H2''" SINGLE n 1.089 0.0100 0.982 0.0200 +DT "C1'" "H1'" SINGLE n 1.089 0.0100 0.996 0.0200 +DT N3 H3 SINGLE n 1.016 0.0100 0.893 0.0200 +DT C7 H71 SINGLE n 1.089 0.0100 0.971 0.0135 +DT C7 H72 SINGLE n 1.089 0.0100 0.971 0.0135 +DT C7 H73 SINGLE n 1.089 0.0100 0.971 0.0135 +DT C6 H6 SINGLE n 1.082 0.0130 0.951 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +DT OP3 P OP1 112.864 1.69 +DT OP3 P OP2 112.864 1.69 +DT OP3 P "O5'" 105.808 2.07 +DT OP1 P OP2 112.864 1.69 +DT OP1 P "O5'" 105.808 2.07 +DT OP2 P "O5'" 105.808 2.07 +DT P "O5'" "C5'" 118.783 1.50 +DT "O5'" "C5'" "C4'" 109.342 1.50 +DT "O5'" "C5'" "H5'" 109.845 1.50 +DT "O5'" "C5'" "H5''" 109.845 1.50 +DT "C4'" "C5'" "H5'" 109.624 1.50 +DT "C4'" "C5'" "H5''" 109.624 1.50 +DT "H5'" "C5'" "H5''" 108.472 1.50 +DT "C5'" "C4'" "O4'" 109.615 1.50 +DT "C5'" "C4'" "C3'" 114.866 1.63 +DT "C5'" "C4'" "H4'" 108.268 1.50 +DT "O4'" "C4'" "C3'" 105.770 1.50 +DT "O4'" "C4'" "H4'" 108.698 1.50 +DT "C3'" "C4'" "H4'" 109.069 1.50 +DT "C4'" "O4'" "C1'" 109.692 1.50 +DT "C4'" "C3'" "O3'" 110.527 2.37 +DT "C4'" "C3'" "C2'" 102.800 1.50 +DT "C4'" "C3'" "H3'" 110.775 1.50 +DT "O3'" "C3'" "C2'" 110.636 2.59 +DT "O3'" "C3'" "H3'" 110.713 1.50 +DT "C2'" "C3'" "H3'" 110.862 1.50 +DT "C3'" "O3'" "HO3'" 109.026 2.38 +DT "C3'" "C2'" "C1'" 102.834 1.50 +DT "C3'" "C2'" "H2'" 111.310 1.50 +DT "C3'" "C2'" "H2''" 111.310 1.50 +DT "C1'" "C2'" "H2'" 111.187 1.50 +DT "C1'" "C2'" "H2''" 111.187 1.50 +DT "H2'" "C2'" "H2''" 108.952 1.50 +DT "O4'" "C1'" "C2'" 106.308 1.50 +DT "O4'" "C1'" N1 107.584 1.50 +DT "O4'" "C1'" "H1'" 109.550 1.50 +DT "C2'" "C1'" N1 114.268 1.50 +DT "C2'" "C1'" "H1'" 109.741 1.50 +DT N1 "C1'" "H1'" 109.342 1.50 +DT "C1'" N1 C2 118.265 1.50 +DT "C1'" N1 C6 120.492 1.50 +DT C2 N1 C6 121.243 1.50 +DT N1 C2 O2 122.872 1.50 +DT N1 C2 N3 114.786 1.50 +DT O2 C2 N3 122.342 1.50 +DT C2 N3 C4 127.106 1.50 +DT C2 N3 H3 115.584 1.79 +DT C4 N3 H3 117.311 1.81 +DT N3 C4 O4 119.787 1.50 +DT N3 C4 C5 115.265 1.50 +DT O4 C4 C5 124.948 1.50 +DT C4 C5 C7 118.650 1.50 +DT C4 C5 C6 118.305 1.50 +DT C7 C5 C6 123.045 1.50 +DT C5 C7 H71 109.652 1.50 +DT C5 C7 H72 109.652 1.50 +DT C5 C7 H73 109.652 1.50 +DT H71 C7 H72 109.348 1.50 +DT H71 C7 H73 109.348 1.50 +DT H72 C7 H73 109.348 1.50 +DT N1 C6 C5 123.296 1.50 +DT N1 C6 H6 117.926 1.56 +DT C5 C6 H6 118.779 1.68 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +DT C2e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +DT C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +DT C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +DT C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +DT C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +DT C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +DT C3e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +DT C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +DT C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +DT C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +DT C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +DT C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +DT alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +DT beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +DT epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +DT gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +DT const_sp2_sp2_4 O2 C2 N1 "C1'" 0.000 5.0 2 +DT const_22 C5 C6 N1 "C1'" 180.000 10.0 2 +DT const_sp2_sp2_7 O2 C2 N3 C4 180.000 5.0 2 +DT const_11 O4 C4 N3 C2 180.000 10.0 2 +DT const_16 O4 C4 C5 C7 0.000 10.0 2 +DT sp2_sp3_7 C4 C5 C7 H71 150.000 10.0 6 +DT const_19 C7 C5 C6 N1 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +DT chir_1 P "O5'" OP3 OP2 both +DT chir_2 "C4'" "O4'" "C3'" "C5'" negative +DT chir_3 "C3'" "O3'" "C4'" "C2'" positive +DT chir_4 "C1'" "O4'" N1 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +DT plan-1 "C1'" 0.020 +DT plan-1 C2 0.020 +DT plan-1 C4 0.020 +DT plan-1 C5 0.020 +DT plan-1 C6 0.020 +DT plan-1 C7 0.020 +DT plan-1 H3 0.020 +DT plan-1 H6 0.020 +DT plan-1 N1 0.020 +DT plan-1 N3 0.020 +DT plan-1 O2 0.020 +DT plan-1 O4 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +DT SMILES ACDLabs 10.04 O=C1NC(=O)N(C=C1C)C2OC(C(O)C2)COP(=O)(O)O +DT SMILES_CANONICAL CACTVS 3.341 CC1=CN([C@H]2C[C@H](O)[C@@H](CO[P](O)(O)=O)O2)C(=O)NC1=O +DT SMILES CACTVS 3.341 CC1=CN([CH]2C[CH](O)[CH](CO[P](O)(O)=O)O2)C(=O)NC1=O +DT SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CC1=CN(C(=O)NC1=O)[C@H]2C[C@@H]([C@H](O2)COP(=O)(O)O)O +DT SMILES "OpenEye OEToolkits" 1.5.0 CC1=CN(C(=O)NC1=O)C2CC(C(O2)COP(=O)(O)O)O +DT InChI InChI 1.03 InChI=1S/C10H15N2O8P/c1-5-3-12(10(15)11-9(5)14)8-2-6(13)7(20-8)4-19-21(16,17)18/h3,6-8,13H,2,4H2,1H3,(H,11,14,15)(H2,16,17,18)/t6-,7+,8+/m0/s1 +DT InChIKey InChI 1.03 GYOZYWVXFNDGLU-XLPZGREQSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +DT acedrg 243 "dictionary generator" +DT acedrg_database 11 "data source" +DT rdkit 2017.03.2 "Chemoinformatics tool" +DT refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/EDO.cif b/image_analysis/structure_refinement/monomers/EDO.cif new file mode 100644 index 000000000..9d74e7fbe --- /dev/null +++ b/image_analysis/structure_refinement/monomers/EDO.cif @@ -0,0 +1,108 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +EDO EDO 1,2-ETHANEDIOL NON-POLYMER 10 4 . +# +data_comp_EDO +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +EDO C1 C CH2 0 5.160 28.149 5.379 +EDO O1 O OH1 0 6.106 28.471 4.378 +EDO C2 C CH2 0 3.762 28.430 4.968 +EDO O2 O OH1 0 3.416 27.839 3.730 +EDO H11 H H 0 5.362 28.666 6.186 +EDO H12 H H 0 5.240 27.198 5.599 +EDO HO1 H H 0 6.871 28.201 4.619 +EDO H21 H H 0 3.642 29.401 4.901 +EDO H22 H H 0 3.156 28.097 5.661 +EDO HO2 H H 0 3.485 26.998 3.790 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +EDO C1 O1 SINGLE n 1.414 0.0200 1.414 0.0200 +EDO C1 C2 SINGLE n 1.483 0.0200 1.483 0.0200 +EDO C2 O2 SINGLE n 1.414 0.0200 1.414 0.0200 +EDO C1 H11 SINGLE n 1.089 0.0100 0.980 0.0144 +EDO C1 H12 SINGLE n 1.089 0.0100 0.980 0.0144 +EDO O1 HO1 SINGLE n 0.970 0.0120 0.846 0.0200 +EDO C2 H21 SINGLE n 1.089 0.0100 0.980 0.0144 +EDO C2 H22 SINGLE n 1.089 0.0100 0.980 0.0144 +EDO O2 HO2 SINGLE n 0.970 0.0120 0.846 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +EDO O1 C1 C2 113.236 3.00 +EDO O1 C1 H11 109.012 1.50 +EDO O1 C1 H12 109.012 1.50 +EDO C2 C1 H11 108.881 1.50 +EDO C2 C1 H12 108.881 1.50 +EDO H11 C1 H12 108.093 1.50 +EDO C1 O1 HO1 109.347 1.86 +EDO C1 C2 O2 113.236 3.00 +EDO C1 C2 H21 108.881 1.50 +EDO C1 C2 H22 108.881 1.50 +EDO O2 C2 H21 109.012 1.50 +EDO O2 C2 H22 109.012 1.50 +EDO H21 C2 H22 108.093 1.50 +EDO C2 O2 HO2 109.347 1.86 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +EDO sp3_sp3_1 C2 C1 O1 HO1 180.000 10.0 3 +EDO sp3_sp3_4 O1 C1 C2 O2 180.000 10.0 3 +EDO sp3_sp3_13 C1 C2 O2 HO2 180.000 10.0 3 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +EDO SMILES ACDLabs 10.04 OCCO +EDO SMILES_CANONICAL CACTVS 3.341 OCCO +EDO SMILES CACTVS 3.341 OCCO +EDO SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(CO)O +EDO SMILES "OpenEye OEToolkits" 1.5.0 C(CO)O +EDO InChI InChI 1.03 InChI=1S/C2H6O2/c3-1-2-4/h3-4H,1-2H2 +EDO InChIKey InChI 1.03 LYCAIKOWRPUZTN-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +EDO acedrg 243 "dictionary generator" +EDO acedrg_database 11 "data source" +EDO rdkit 2017.03.2 "Chemoinformatics tool" +EDO refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/FE.cif b/image_analysis/structure_refinement/monomers/FE.cif new file mode 100644 index 000000000..eabe098cd --- /dev/null +++ b/image_analysis/structure_refinement/monomers/FE.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +FE FE 'FE (III) ION ' NON-POLYMER 1 1 . + +data_comp_FE +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +FE FE FE FE 3.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +FE FE n/a . END diff --git a/image_analysis/structure_refinement/monomers/FE2.cif b/image_analysis/structure_refinement/monomers/FE2.cif new file mode 100644 index 000000000..fb5535321 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/FE2.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +FE2 FE2 'FE (II) ION ' NON-POLYMER 1 1 . + +data_comp_FE2 +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +FE2 FE FE FE 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +FE2 FE n/a . END diff --git a/image_analysis/structure_refinement/monomers/G.cif b/image_analysis/structure_refinement/monomers/G.cif new file mode 100644 index 000000000..a948bdc2c --- /dev/null +++ b/image_analysis/structure_refinement/monomers/G.cif @@ -0,0 +1,276 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +G G "GUANOSINE-5'-MONOPHOSPHATE" RNA 36 24 . +# +data_comp_G +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +G OP3 O OP -1 34.040 3.415 -1.077 +G P P P 0 34.210 4.003 0.312 +G OP1 O O 0 34.487 5.494 0.290 +G OP2 O OP -1 35.203 3.231 1.161 +G "O5'" O O2 0 32.781 3.831 1.041 +G "C5'" C CH2 0 32.260 2.493 1.252 +G "C4'" C CH1 0 30.851 2.571 1.788 +G "O4'" O O2 0 30.831 3.382 2.990 +G "C3'" C CH1 0 29.808 3.223 0.875 +G "O3'" O OH1 0 29.289 2.285 -0.060 +G "C2'" C CH1 0 28.754 3.698 1.881 +G "O2'" O OH1 0 27.799 2.707 2.202 +G "C1'" C CH1 0 29.604 4.073 3.097 +G N9 N NR5 0 29.861 5.508 3.212 +G C8 C CR15 0 31.057 6.172 3.071 +G N7 N NRD5 0 30.958 7.468 3.239 +G C5 C CR56 0 29.612 7.676 3.509 +G C6 C CR6 0 28.906 8.880 3.777 +G O6 O O 0 29.357 10.033 3.827 +G N1 N NR16 0 27.544 8.645 3.999 +G C2 C CR6 0 26.939 7.407 3.968 +G N2 N NH2 0 25.620 7.371 4.205 +G N3 N NRD6 0 27.601 6.273 3.716 +G C4 C CR56 0 28.926 6.478 3.499 +G "H5'" H H 0 32.833 2.008 1.895 +G "H5''" H H 0 32.261 1.995 0.397 +G "H4'" H H 0 30.559 1.662 2.015 +G "H3'" H H 0 30.200 3.999 0.398 +G "HO3'" H H 0 28.659 2.653 -0.495 +G "H2'" H H 0 28.286 4.500 1.527 +G "HO2'" H H 0 28.188 2.026 2.527 +G "H1'" H H 0 29.136 3.771 3.909 +G H8 H H 0 31.870 5.740 2.872 +G H1 H H 0 27.031 9.361 4.176 +G H21 H H 0 25.105 6.850 3.723 +G H22 H H 0 25.277 7.868 4.840 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +G OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +G P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +G P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +G P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +G "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +G "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +G "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +G "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +G "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +G "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +G "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +G "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +G "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +G "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +G N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +G N9 C4 SINGLE y 1.375 0.0100 1.375 0.0100 +G C8 N7 DOUBLE y 1.312 0.0100 1.312 0.0100 +G N7 C5 SINGLE y 1.390 0.0100 1.390 0.0100 +G C5 C6 SINGLE y 1.417 0.0103 1.417 0.0103 +G C5 C4 DOUBLE y 1.377 0.0100 1.377 0.0100 +G C6 O6 DOUBLE n 1.239 0.0100 1.239 0.0100 +G C6 N1 SINGLE y 1.396 0.0107 1.396 0.0107 +G N1 C2 SINGLE y 1.374 0.0100 1.374 0.0100 +G C2 N2 SINGLE n 1.340 0.0101 1.340 0.0101 +G C2 N3 DOUBLE y 1.333 0.0104 1.333 0.0104 +G N3 C4 SINGLE y 1.355 0.0100 1.355 0.0100 +G "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +G "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +G "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +G "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +G "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +G "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +G "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +G "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +G C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +G N1 H1 SINGLE n 1.016 0.0100 0.897 0.0200 +G N2 H21 SINGLE n 1.016 0.0100 0.877 0.0200 +G N2 H22 SINGLE n 1.016 0.0100 0.877 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +G OP3 P OP1 112.864 1.69 +G OP3 P OP2 112.864 1.69 +G OP3 P "O5'" 105.808 2.07 +G OP1 P OP2 112.864 1.69 +G OP1 P "O5'" 105.808 2.07 +G OP2 P "O5'" 105.808 2.07 +G P "O5'" "C5'" 118.783 1.50 +G "O5'" "C5'" "C4'" 109.342 1.50 +G "O5'" "C5'" "H5'" 109.845 1.50 +G "O5'" "C5'" "H5''" 109.845 1.50 +G "C4'" "C5'" "H5'" 109.624 1.50 +G "C4'" "C5'" "H5''" 109.624 1.50 +G "H5'" "C5'" "H5''" 108.472 1.50 +G "C5'" "C4'" "O4'" 109.123 1.50 +G "C5'" "C4'" "C3'" 116.008 1.52 +G "C5'" "C4'" "H4'" 108.268 1.50 +G "O4'" "C4'" "C3'" 105.388 1.50 +G "O4'" "C4'" "H4'" 108.947 1.50 +G "C3'" "C4'" "H4'" 109.363 1.86 +G "C4'" "O4'" "C1'" 109.903 1.50 +G "C4'" "C3'" "O3'" 111.281 2.46 +G "C4'" "C3'" "C2'" 102.602 1.50 +G "C4'" "C3'" "H3'" 110.452 2.54 +G "O3'" "C3'" "C2'" 111.581 2.83 +G "O3'" "C3'" "H3'" 110.380 1.67 +G "C2'" "C3'" "H3'" 110.504 1.75 +G "C3'" "O3'" "HO3'" 108.744 3.00 +G "C3'" "C2'" "O2'" 112.782 2.45 +G "C3'" "C2'" "C1'" 101.239 1.50 +G "C3'" "C2'" "H2'" 110.596 1.51 +G "O2'" "C2'" "C1'" 111.715 2.69 +G "O2'" "C2'" "H2'" 110.448 1.97 +G "C1'" "C2'" "H2'" 110.636 1.70 +G "C2'" "O2'" "HO2'" 109.103 2.13 +G "O4'" "C1'" "C2'" 106.047 1.50 +G "O4'" "C1'" N9 108.477 1.50 +G "O4'" "C1'" "H1'" 109.807 1.50 +G "C2'" "C1'" N9 113.824 1.50 +G "C2'" "C1'" "H1'" 109.015 1.50 +G N9 "C1'" "H1'" 109.561 1.50 +G "C1'" N9 C8 126.829 1.91 +G "C1'" N9 C4 127.440 1.80 +G C8 N9 C4 105.731 1.50 +G N9 C8 N7 113.507 1.50 +G N9 C8 H8 123.187 1.50 +G N7 C8 H8 123.307 1.50 +G C8 N7 C5 104.778 1.50 +G N7 C5 C6 130.030 1.50 +G N7 C5 C4 110.574 1.50 +G C6 C5 C4 119.397 1.50 +G C5 C6 O6 128.244 1.50 +G C5 C6 N1 111.367 1.50 +G O6 C6 N1 120.389 1.50 +G C6 N1 C2 125.351 1.50 +G C6 N1 H1 116.978 2.44 +G C2 N1 H1 117.677 2.71 +G N1 C2 N2 116.576 1.50 +G N1 C2 N3 123.602 1.50 +G N2 C2 N3 119.821 1.50 +G C2 N2 H21 119.868 1.50 +G C2 N2 H22 119.868 1.50 +G H21 N2 H22 120.263 1.96 +G C2 N3 C4 112.066 1.50 +G N9 C4 C5 105.411 1.50 +G N9 C4 N3 126.378 1.50 +G C5 C4 N3 128.211 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +G C2e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +G C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +G C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +G C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +G C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +G C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +G C3e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +G C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +G C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +G C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +G C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +G C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +G alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +G beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +G epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +G gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +G sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.00 3 +G const_18 N7 C8 N9 "C1'" 180.000 10.0 2 +G const_30 C5 C4 N9 "C1'" 180.000 10.0 2 +G const_21 N9 C8 N7 C5 0.000 10.0 2 +G const_24 C6 C5 N7 C8 180.000 10.0 2 +G const_sp2_sp2_4 N7 C5 C6 O6 0.000 5.0 2 +G const_25 N9 C4 C5 N7 0.000 10.0 2 +G const_sp2_sp2_7 O6 C6 N1 C2 180.000 5.0 2 +G const_11 N2 C2 N1 C6 180.000 10.0 2 +G sp2_sp2_1 N1 C2 N2 H21 180.000 5.0 2 +G const_14 N2 C2 N3 C4 180.000 10.0 2 +G const_16 N9 C4 N3 C2 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +G chir_1 P "O5'" OP3 OP2 both +G chir_2 "C4'" "O4'" "C3'" "C5'" negative +G chir_3 "C3'" "O3'" "C4'" "C2'" positive +G chir_4 "C2'" "O2'" "C1'" "C3'" negative +G chir_5 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +G plan-1 "C1'" 0.020 +G plan-1 C2 0.020 +G plan-1 C4 0.020 +G plan-1 C5 0.020 +G plan-1 C6 0.020 +G plan-1 C8 0.020 +G plan-1 H1 0.020 +G plan-1 H8 0.020 +G plan-1 N1 0.020 +G plan-1 N2 0.020 +G plan-1 N3 0.020 +G plan-1 N7 0.020 +G plan-1 N9 0.020 +G plan-1 O6 0.020 +G plan-2 C2 0.020 +G plan-2 H21 0.020 +G plan-2 H22 0.020 +G plan-2 N2 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +G SMILES ACDLabs 10.04 O=C1c2ncn(c2N=C(N)N1)C3OC(C(O)C3O)COP(=O)(O)O +G SMILES_CANONICAL CACTVS 3.341 NC1=Nc2n(cnc2C(=O)N1)[C@@H]3O[C@H](CO[P](O)(O)=O)[C@@H](O)[C@H]3O +G SMILES CACTVS 3.341 NC1=Nc2n(cnc2C(=O)N1)[CH]3O[CH](CO[P](O)(O)=O)[CH](O)[CH]3O +G SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1nc2c(n1[C@H]3[C@@H]([C@@H]([C@H](O3)COP(=O)(O)O)O)O)N=C(NC2=O)N +G SMILES "OpenEye OEToolkits" 1.5.0 c1nc2c(n1C3C(C(C(O3)COP(=O)(O)O)O)O)N=C(NC2=O)N +G InChI InChI 1.03 InChI=1S/C10H14N5O8P/c11-10-13-7-4(8(18)14-10)12-2-15(7)9-6(17)5(16)3(23-9)1-22-24(19,20)21/h2-3,5-6,9,16-17H,1H2,(H2,19,20,21)(H3,11,13,14,18)/t3-,5-,6-,9-/m1/s1 +G InChIKey InChI 1.03 RQFCJASXJCIDSX-UUOKFMHZSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +G acedrg 243 "dictionary generator" +G acedrg_database 11 "data source" +G rdkit 2017.03.2 "Chemoinformatics tool" +G refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GDP.cif b/image_analysis/structure_refinement/monomers/GDP.cif new file mode 100644 index 000000000..833d710c0 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GDP.cif @@ -0,0 +1,299 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GDP GDP "GUANOSINE-5'-DIPHOSPHATE" NON-POLYMER 40 28 . + +data_comp_GDP +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GDP PB P P 0 13.504 16.639 28.649 +GDP O1B O O 0 13.923 17.830 29.476 +GDP O2B O OP -1 14.420 15.453 28.828 +GDP O3B O OP -1 12.049 16.284 28.833 +GDP O3A O O2 0 13.659 17.092 27.107 +GDP PA P P 0 12.620 17.691 26.043 +GDP O1A O O 0 11.548 16.681 25.800 +GDP O2A O OP -1 12.214 19.058 26.485 +GDP "O5'" O O2 0 13.547 17.806 24.737 +GDP "C5'" C CH2 0 14.774 18.580 24.803 +GDP "C4'" C CH1 0 15.248 18.905 23.407 +GDP "O4'" O O2 0 15.427 17.678 22.656 +GDP "C3'" C CH1 0 14.302 19.747 22.544 +GDP "O3'" O OH1 0 14.480 21.136 22.797 +GDP "C2'" C CH1 0 14.722 19.349 21.125 +GDP "O2'" O OH1 0 15.810 20.102 20.630 +GDP "C1'" C CH1 0 15.090 17.873 21.298 +GDP N9 N NR5 0 14.017 16.952 20.924 +GDP C8 C CR15 0 13.290 16.120 21.742 +GDP N7 N NRD5 0 12.395 15.408 21.100 +GDP C5 C CR56 0 12.541 15.792 19.774 +GDP C6 C CR6 0 11.843 15.360 18.614 +GDP O6 O O 0 10.930 14.526 18.539 +GDP N1 N NR6 0 12.305 16.006 17.460 +GDP C2 C CR6 0 13.311 16.946 17.429 +GDP N2 N NH2 0 13.623 17.460 16.231 +GDP N3 N NRD6 0 13.969 17.354 18.519 +GDP C4 C CR56 0 13.538 16.739 19.651 +GDP "H5'" H H 0 15.470 18.062 25.277 +GDP "H5''" H H 0 14.616 19.420 25.301 +GDP "H4'" H H 0 16.113 19.362 23.477 +GDP "H3'" H H 0 13.359 19.490 22.706 +GDP "HO3'" H H 0 14.000 21.576 22.253 +GDP "H2'" H H 0 13.951 19.442 20.505 +GDP "HO2'" H H 0 16.487 19.998 21.132 +GDP "H1'" H H 0 15.878 17.683 20.741 +GDP H8 H H 0 13.418 16.065 22.673 +GDP HN1 H H 0 11.910 15.784 16.684 +GDP HN21 H H 0 13.778 18.320 16.152 +GDP HN22 H H 0 13.671 16.936 15.530 + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GDP PB O1B DOUBLE n 1.509 0.0200 1.509 0.0200 +GDP PB O2B SINGLE n 1.509 0.0200 1.509 0.0200 +GDP PB O3B SINGLE n 1.509 0.0200 1.509 0.0200 +GDP PB O3A SINGLE n 1.614 0.0178 1.614 0.0178 +GDP O3A PA SINGLE n 1.604 0.0133 1.604 0.0133 +GDP PA O1A DOUBLE n 1.493 0.0122 1.493 0.0122 +GDP PA O2A SINGLE n 1.493 0.0122 1.493 0.0122 +GDP PA "O5'" SINGLE n 1.604 0.0133 1.604 0.0133 +GDP "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +GDP "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +GDP "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +GDP "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +GDP "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +GDP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +GDP "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +GDP "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +GDP "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +GDP "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +GDP N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +GDP N9 C4 SINGLE y 1.375 0.0100 1.375 0.0100 +GDP C8 N7 DOUBLE y 1.312 0.0100 1.312 0.0100 +GDP N7 C5 SINGLE y 1.390 0.0100 1.390 0.0100 +GDP C5 C6 SINGLE y 1.417 0.0103 1.417 0.0103 +GDP C5 C4 DOUBLE y 1.377 0.0100 1.377 0.0100 +GDP C6 O6 DOUBLE n 1.239 0.0100 1.239 0.0100 +GDP C6 N1 SINGLE y 1.396 0.0107 1.396 0.0107 +GDP N1 C2 SINGLE y 1.374 0.0100 1.374 0.0100 +GDP C2 N2 SINGLE n 1.340 0.0101 1.340 0.0101 +GDP C2 N3 DOUBLE y 1.333 0.0104 1.333 0.0104 +GDP N3 C4 SINGLE y 1.355 0.0100 1.355 0.0100 +GDP "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +GDP "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +GDP "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +GDP "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +GDP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +GDP "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +GDP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +GDP "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +GDP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +GDP N1 HN1 SINGLE n 1.016 0.0100 0.897 0.0200 +GDP N2 HN21 SINGLE n 1.016 0.0100 0.877 0.0200 +GDP N2 HN22 SINGLE n 1.016 0.0100 0.877 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GDP O1B PB O2B 112.716 1.50 +GDP O1B PB O3B 112.716 1.50 +GDP O1B PB O3A 105.965 2.38 +GDP O2B PB O3B 112.716 1.50 +GDP O2B PB O3A 105.965 2.38 +GDP O3B PB O3A 105.965 2.38 +GDP PB O3A PA 132.584 3.00 +GDP O3A PA O1A 108.816 2.14 +GDP O3A PA O2A 108.816 2.14 +GDP O3A PA "O5'" 101.065 1.97 +GDP O1A PA O2A 118.411 2.35 +GDP O1A PA "O5'" 109.410 1.50 +GDP O2A PA "O5'" 109.410 1.50 +GDP PA "O5'" "C5'" 118.553 2.41 +GDP "O5'" "C5'" "C4'" 109.342 1.50 +GDP "O5'" "C5'" "H5'" 109.845 1.50 +GDP "O5'" "C5'" "H5''" 109.845 1.50 +GDP "C4'" "C5'" "H5'" 109.624 1.50 +GDP "C4'" "C5'" "H5''" 109.624 1.50 +GDP "H5'" "C5'" "H5''" 108.472 1.50 +GDP "C5'" "C4'" "O4'" 109.123 1.50 +GDP "C5'" "C4'" "C3'" 116.008 1.52 +GDP "C5'" "C4'" "H4'" 108.268 1.50 +GDP "O4'" "C4'" "C3'" 105.388 1.50 +GDP "O4'" "C4'" "H4'" 108.947 1.50 +GDP "C3'" "C4'" "H4'" 109.363 1.86 +GDP "C4'" "O4'" "C1'" 109.903 1.50 +GDP "C4'" "C3'" "O3'" 111.281 2.46 +GDP "C4'" "C3'" "C2'" 102.602 1.50 +GDP "C4'" "C3'" "H3'" 110.452 2.54 +GDP "O3'" "C3'" "C2'" 111.581 2.83 +GDP "O3'" "C3'" "H3'" 110.380 1.67 +GDP "C2'" "C3'" "H3'" 110.504 1.75 +GDP "C3'" "O3'" "HO3'" 108.744 3.00 +GDP "C3'" "C2'" "O2'" 112.782 2.45 +GDP "C3'" "C2'" "C1'" 101.239 1.50 +GDP "C3'" "C2'" "H2'" 110.596 1.51 +GDP "O2'" "C2'" "C1'" 111.715 2.69 +GDP "O2'" "C2'" "H2'" 110.448 1.97 +GDP "C1'" "C2'" "H2'" 110.636 1.70 +GDP "C2'" "O2'" "HO2'" 109.103 2.13 +GDP "O4'" "C1'" "C2'" 106.047 1.50 +GDP "O4'" "C1'" N9 108.477 1.50 +GDP "O4'" "C1'" "H1'" 109.807 1.50 +GDP "C2'" "C1'" N9 113.824 1.50 +GDP "C2'" "C1'" "H1'" 109.015 1.50 +GDP N9 "C1'" "H1'" 109.561 1.50 +GDP "C1'" N9 C8 126.829 1.91 +GDP "C1'" N9 C4 127.440 1.80 +GDP C8 N9 C4 105.731 1.50 +GDP N9 C8 N7 113.507 1.50 +GDP N9 C8 H8 123.187 1.50 +GDP N7 C8 H8 123.307 1.50 +GDP C8 N7 C5 104.778 1.50 +GDP N7 C5 C6 130.030 1.50 +GDP N7 C5 C4 110.574 1.50 +GDP C6 C5 C4 119.397 1.50 +GDP C5 C6 O6 128.244 1.50 +GDP C5 C6 N1 111.367 1.50 +GDP O6 C6 N1 120.389 1.50 +GDP C6 N1 C2 125.351 1.50 +GDP C6 N1 HN1 116.978 2.44 +GDP C2 N1 HN1 117.677 2.71 +GDP N1 C2 N2 116.576 1.50 +GDP N1 C2 N3 123.602 1.50 +GDP N2 C2 N3 119.821 1.50 +GDP C2 N2 HN21 119.868 1.50 +GDP C2 N2 HN22 119.868 1.50 +GDP HN21 N2 HN22 120.263 1.96 +GDP C2 N3 C4 112.066 1.50 +GDP N9 C4 C5 105.411 1.50 +GDP N9 C4 N3 126.378 1.50 +GDP C5 C4 N3 128.211 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GDP C2e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +GDP C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +GDP C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +GDP C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +GDP C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +GDP C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +GDP C3e-chi "O4'" "C1'" N9 C4 210.000 10.000 6 +GDP C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +GDP C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +GDP C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +GDP C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +GDP C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +GDP epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +GDP gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +GDP sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.00 3 +GDP sp3_sp3_27 PA O3A PB O1B 60.000 10.0 3 +GDP const_18 N7 C8 N9 "C1'" 180.000 10.0 2 +GDP const_30 C5 C4 N9 "C1'" 180.000 10.0 2 +GDP const_21 N9 C8 N7 C5 0.000 10.0 2 +GDP const_24 C6 C5 N7 C8 180.000 10.0 2 +GDP const_sp2_sp2_4 N7 C5 C6 O6 0.000 5.0 2 +GDP const_25 N9 C4 C5 N7 0.000 10.0 2 +GDP const_sp2_sp2_7 O6 C6 N1 C2 180.000 5.0 2 +GDP const_11 N2 C2 N1 C6 180.000 10.0 2 +GDP sp2_sp2_1 N1 C2 N2 HN21 180.000 5.0 2 +GDP const_14 N2 C2 N3 C4 180.000 10.0 2 +GDP const_16 N9 C4 N3 C2 180.000 10.0 2 +GDP sp3_sp3_30 PB O3A PA O1A 60.000 10.0 3 +GDP sp3_sp3_31 "C5'" "O5'" PA O3A 180.000 10.0 3 +GDP sp3_sp3_34 "C4'" "C5'" "O5'" PA 180.000 10.0 3 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GDP chir_1 PB O3A O2B O3B both +GDP chir_2 PA O3A "O5'" O2A both +GDP chir_3 "C4'" "O4'" "C3'" "C5'" negative +GDP chir_4 "C3'" "O3'" "C4'" "C2'" positive +GDP chir_5 "C2'" "O2'" "C1'" "C3'" negative +GDP chir_6 "C1'" "O4'" N9 "C2'" negative + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GDP plan-1 "C1'" 0.020 +GDP plan-1 C2 0.020 +GDP plan-1 C4 0.020 +GDP plan-1 C5 0.020 +GDP plan-1 C6 0.020 +GDP plan-1 C8 0.020 +GDP plan-1 H8 0.020 +GDP plan-1 HN1 0.020 +GDP plan-1 N1 0.020 +GDP plan-1 N2 0.020 +GDP plan-1 N3 0.020 +GDP plan-1 N7 0.020 +GDP plan-1 N9 0.020 +GDP plan-1 O6 0.020 +GDP plan-2 C2 0.020 +GDP plan-2 HN21 0.020 +GDP plan-2 HN22 0.020 +GDP plan-2 N2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GDP SMILES ACDLabs 12.01 O=P(O)(O)OP(=O)(O)OCC3OC(n2cnc1c2N=C(N)NC1=O)C(O)C3O +GDP InChI InChI 1.03 InChI=1S/C10H15N5O11P2/c11-10-13-7-4(8(18)14-10)12-2-15(7)9-6(17)5(16)3(25-9)1-24-28(22,23)26-27(19,20)21/h2-3,5-6,9,16-17H,1H2,(H,22,23)(H2,19,20,21)(H3,11,13,14,18)/t3-,5-,6-,9-/m1/s1 +GDP InChIKey InChI 1.03 QGWNDRXFNXRZMB-UUOKFMHZSA-N +GDP SMILES_CANONICAL CACTVS 3.385 NC1=Nc2n(cnc2C(=O)N1)[C@@H]3O[C@H](CO[P](O)(=O)O[P](O)(O)=O)[C@@H](O)[C@H]3O +GDP SMILES CACTVS 3.385 NC1=Nc2n(cnc2C(=O)N1)[CH]3O[CH](CO[P](O)(=O)O[P](O)(O)=O)[CH](O)[CH]3O +GDP SMILES_CANONICAL "OpenEye OEToolkits" 1.7.6 c1nc2c(n1[C@H]3[C@@H]([C@@H]([C@H](O3)CO[P@](=O)(O)OP(=O)(O)O)O)O)N=C(NC2=O)N +GDP SMILES "OpenEye OEToolkits" 1.7.6 c1nc2c(n1C3C(C(C(O3)COP(=O)(O)OP(=O)(O)O)O)O)N=C(NC2=O)N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GDP acedrg 243 "dictionary generator" +GDP acedrg_database 11 "data source" +GDP rdkit 2017.03.2 "Chemoinformatics tool" +GDP refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GLN.cif b/image_analysis/structure_refinement/monomers/GLN.cif new file mode 100644 index 000000000..ab85e9d2d --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GLN.cif @@ -0,0 +1,233 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GLN GLN GLUTAMINE peptide 20 10 . + +data_comp_GLN +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GLN N N NT3 1 -13.189 34.859 120.921 +GLN CA C CH1 0 -12.155 35.335 119.962 +GLN C C C 0 -10.823 35.547 120.705 +GLN O O O 0 -9.774 35.259 120.087 +GLN CB C CH2 0 -12.610 36.599 119.226 +GLN CG C CH2 0 -12.991 37.771 120.127 +GLN CD C C 0 -13.453 38.985 119.351 +GLN OE1 O O 0 -14.437 38.935 118.605 +GLN NE2 N NH2 0 -12.747 40.094 119.519 +GLN OXT O OC -1 -10.882 35.991 121.873 +GLN H H H 0 -14.005 34.886 120.536 +GLN H2 H H 0 -13.202 35.368 121.666 +GLN H3 H H 0 -13.012 34.007 121.158 +GLN HA H H 0 -12.019 34.624 119.285 +GLN HB3 H H 0 -13.381 36.370 118.666 +GLN HB2 H H 0 -11.887 36.885 118.629 +GLN HG3 H H 0 -12.221 38.023 120.680 +GLN HG2 H H 0 -13.713 37.495 120.731 +GLN HE21 H H 0 -11.862 40.066 119.472 +GLN HE22 H H 0 -13.160 40.862 119.679 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +GLN N n/a CA START +GLN H N . . +GLN H2 N . . +GLN H3 N . . +GLN CA N C . +GLN HA CA . . +GLN CB CA CG . +GLN HB3 CB . . +GLN HB2 CB . . +GLN CG CB CD . +GLN HG3 CG . . +GLN HG2 CG . . +GLN CD CG NE2 . +GLN OE1 CD . . +GLN NE2 CD HE22 . +GLN HE21 NE2 . . +GLN HE22 NE2 . . +GLN C CA . END +GLN O C . . +GLN OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +GLN N N(CCCH)(H)3 +GLN CA C(CCHH)(NH3)(COO)(H) +GLN C C(CCHN)(O)2 +GLN O O(CCO) +GLN CB C(CCHH)(CCHN)(H)2 +GLN CG C(CCHH)(CNO)(H)2 +GLN CD C(CCHH)(NHH)(O) +GLN OE1 O(CCN) +GLN NE2 N(CCO)(H)2 +GLN OXT O(CCO) +GLN H H(NCHH) +GLN H2 H(NCHH) +GLN H3 H(NCHH) +GLN HA H(CCCN) +GLN HB3 H(CCCH) +GLN HB2 H(CCCH) +GLN HG3 H(CCCH) +GLN HG2 H(CCCH) +GLN HE21 H(NCH) +GLN HE22 H(NCH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GLN N CA SINGLE n 1.487 0.0100 1.487 0.0100 +GLN CA C SINGLE n 1.538 0.0113 1.538 0.0113 +GLN CA CB SINGLE n 1.529 0.0100 1.529 0.0100 +GLN C O DOUBLE n 1.251 0.0183 1.251 0.0183 +GLN C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +GLN CB CG SINGLE n 1.525 0.0100 1.525 0.0100 +GLN CG CD SINGLE n 1.513 0.0100 1.513 0.0100 +GLN CD OE1 DOUBLE n 1.236 0.0100 1.236 0.0100 +GLN CD NE2 SINGLE n 1.325 0.0100 1.325 0.0100 +GLN N H SINGLE n 1.018 0.0520 0.902 0.0102 +GLN N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +GLN N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +GLN CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +GLN CB HB3 SINGLE n 1.092 0.0100 0.980 0.0168 +GLN CB HB2 SINGLE n 1.092 0.0100 0.980 0.0168 +GLN CG HG3 SINGLE n 1.092 0.0100 0.981 0.0172 +GLN CG HG2 SINGLE n 1.092 0.0100 0.981 0.0172 +GLN NE2 HE21 SINGLE n 1.013 0.0120 0.887 0.0200 +GLN NE2 HE22 SINGLE n 1.013 0.0120 0.887 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GLN CA N H 109.990 3.00 +GLN CA N H2 109.990 3.00 +GLN CA N H3 109.990 3.00 +GLN H N H2 109.032 3.00 +GLN H N H3 109.032 3.00 +GLN H2 N H3 109.032 3.00 +GLN N CA C 109.258 1.50 +GLN N CA CB 110.440 2.46 +GLN N CA HA 108.387 1.58 +GLN C CA CB 111.059 3.00 +GLN C CA HA 108.774 1.79 +GLN CB CA HA 109.080 2.33 +GLN CA C O 117.148 1.60 +GLN CA C OXT 117.148 1.60 +GLN O C OXT 125.704 1.50 +GLN CA CB CG 113.998 1.50 +GLN CA CB HB3 108.677 1.74 +GLN CA CB HB2 108.677 1.74 +GLN CG CB HB3 108.907 1.50 +GLN CG CB HB2 108.907 1.50 +GLN HB3 CB HB2 107.655 1.50 +GLN CB CG CD 113.265 1.50 +GLN CB CG HG3 109.355 1.50 +GLN CB CG HG2 109.355 1.50 +GLN CD CG HG3 108.958 1.89 +GLN CD CG HG2 108.958 1.89 +GLN HG3 CG HG2 107.827 1.56 +GLN CG CD OE1 121.487 1.50 +GLN CG CD NE2 116.074 1.76 +GLN OE1 CD NE2 122.439 1.50 +GLN CD NE2 HE21 119.917 2.87 +GLN CD NE2 HE22 119.917 2.87 +GLN HE21 NE2 HE22 120.165 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GLN chi1 N CA CB CG -60.000 10.0 3 +GLN chi2 CA CB CG CD 180.000 10.0 3 +GLN chi3 CB CG CD NE2 180.000 10.0 6 +GLN hh1 CG CD NE2 HE22 180.000 5.0 2 +GLN sp3_sp3_1 C CA N H 180.000 10.0 3 +GLN sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GLN chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GLN plan-1 C 0.020 +GLN plan-1 CA 0.020 +GLN plan-1 O 0.020 +GLN plan-1 OXT 0.020 +GLN plan-2 CD 0.020 +GLN plan-2 CG 0.020 +GLN plan-2 NE2 0.020 +GLN plan-2 OE1 0.020 +GLN plan-3 CD 0.020 +GLN plan-3 HE21 0.020 +GLN plan-3 HE22 0.020 +GLN plan-3 NE2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GLN SMILES ACDLabs 10.04 O=C(N)CCC(N)C(=O)O +GLN SMILES_CANONICAL CACTVS 3.341 N[C@@H](CCC(N)=O)C(O)=O +GLN SMILES CACTVS 3.341 N[CH](CCC(N)=O)C(O)=O +GLN SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(CC(=O)N)[C@@H](C(=O)O)N +GLN SMILES "OpenEye OEToolkits" 1.5.0 C(CC(=O)N)C(C(=O)O)N +GLN InChI InChI 1.03 InChI=1S/C5H10N2O3/c6-3(5(9)10)1-2-4(7)8/h3H,1-2,6H2,(H2,7,8)(H,9,10)/t3-/m0/s1 +GLN InChIKey InChI 1.03 ZDXPYRJPNDTMRX-VKHMYHEASA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GLN acedrg 278 "dictionary generator" +GLN acedrg_database 12 "data source" +GLN rdkit 2019.09.1 "Chemoinformatics tool" +GLN refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GLU.cif b/image_analysis/structure_refinement/monomers/GLU.cif new file mode 100644 index 000000000..1eefa693b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GLU.cif @@ -0,0 +1,217 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GLU GLU "GLUTAMIC ACID" peptide 18 10 . + +data_comp_GLU +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GLU N N NT3 1 88.319 -7.751 -10.089 +GLU CA C CH1 0 87.677 -7.162 -11.296 +GLU C C C 0 88.359 -5.826 -11.640 +GLU O O O 0 88.389 -4.954 -10.744 +GLU CB C CH2 0 86.177 -6.950 -11.080 +GLU CG C CH2 0 85.390 -8.247 -10.908 +GLU CD C C 0 83.891 -8.048 -10.773 +GLU OE1 O O 0 83.281 -7.495 -11.711 +GLU OE2 O OC -1 83.334 -8.447 -9.728 +GLU OXT O OC -1 88.836 -5.708 -12.790 +GLU H H H 0 88.066 -7.298 -9.352 +GLU H2 H H 0 89.218 -7.717 -10.158 +GLU H3 H H 0 88.077 -8.615 -9.999 +GLU HA H H 0 87.806 -7.788 -12.054 +GLU HB3 H H 0 85.814 -6.460 -11.847 +GLU HB2 H H 0 86.049 -6.394 -10.284 +GLU HG3 H H 0 85.714 -8.714 -10.110 +GLU HG2 H H 0 85.559 -8.827 -11.681 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +GLU N n/a CA START +GLU H N . . +GLU H2 N . . +GLU H3 N . . +GLU CA N C . +GLU HA CA . . +GLU CB CA CG . +GLU HB3 CB . . +GLU HB2 CB . . +GLU CG CB CD . +GLU HG3 CG . . +GLU HG2 CG . . +GLU CD CG OE2 . +GLU OE1 CD . . +GLU OE2 CD . . +GLU C CA . END +GLU O C . . +GLU OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +GLU N N(CCCH)(H)3 +GLU CA C(CCHH)(NH3)(COO)(H) +GLU C C(CCHN)(O)2 +GLU O O(CCO) +GLU CB C(CCHH)(CCHN)(H)2 +GLU CG C(CCHH)(COO)(H)2 +GLU CD C(CCHH)(O)2 +GLU OE1 O(CCO) +GLU OE2 O(CCO) +GLU OXT O(CCO) +GLU H H(NCHH) +GLU H2 H(NCHH) +GLU H3 H(NCHH) +GLU HA H(CCCN) +GLU HB3 H(CCCH) +GLU HB2 H(CCCH) +GLU HG3 H(CCCH) +GLU HG2 H(CCCH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GLU N CA SINGLE n 1.487 0.0100 1.487 0.0100 +GLU CA C SINGLE n 1.538 0.0113 1.538 0.0113 +GLU CA CB SINGLE n 1.529 0.0100 1.529 0.0100 +GLU C O DOUBLE n 1.251 0.0183 1.251 0.0183 +GLU C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +GLU CB CG SINGLE n 1.526 0.0100 1.526 0.0100 +GLU CG CD SINGLE n 1.518 0.0135 1.518 0.0135 +GLU CD OE1 DOUBLE n 1.249 0.0161 1.249 0.0161 +GLU CD OE2 SINGLE n 1.249 0.0161 1.249 0.0161 +GLU N H SINGLE n 1.018 0.0520 0.902 0.0102 +GLU N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +GLU N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +GLU CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +GLU CB HB3 SINGLE n 1.092 0.0100 0.980 0.0168 +GLU CB HB2 SINGLE n 1.092 0.0100 0.980 0.0168 +GLU CG HG3 SINGLE n 1.092 0.0100 0.981 0.0172 +GLU CG HG2 SINGLE n 1.092 0.0100 0.981 0.0172 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GLU CA N H 109.990 3.00 +GLU CA N H2 109.990 3.00 +GLU CA N H3 109.990 3.00 +GLU H N H2 109.032 3.00 +GLU H N H3 109.032 3.00 +GLU H2 N H3 109.032 3.00 +GLU N CA C 109.258 1.50 +GLU N CA CB 110.440 2.46 +GLU N CA HA 108.387 1.58 +GLU C CA CB 111.059 3.00 +GLU C CA HA 108.774 1.79 +GLU CB CA HA 109.080 2.33 +GLU CA C O 117.148 1.60 +GLU CA C OXT 117.148 1.60 +GLU O C OXT 125.704 1.50 +GLU CA CB CG 113.294 1.61 +GLU CA CB HB3 108.677 1.74 +GLU CA CB HB2 108.677 1.74 +GLU CG CB HB3 108.696 2.80 +GLU CG CB HB2 108.696 2.80 +GLU HB3 CB HB2 107.655 1.50 +GLU CB CG CD 114.140 3.00 +GLU CB CG HG3 108.968 1.50 +GLU CB CG HG2 108.968 1.50 +GLU CD CG HG3 108.472 1.50 +GLU CD CG HG2 108.472 1.50 +GLU HG3 CG HG2 107.541 1.92 +GLU CG CD OE1 118.251 3.00 +GLU CG CD OE2 118.251 3.00 +GLU OE1 CD OE2 123.498 1.82 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GLU chi1 N CA CB CG -60.000 10.0 3 +GLU chi2 CA CB CG CD 180.000 10.0 3 +GLU chi3 CB CG CD OE1 180.000 10.0 6 +GLU sp3_sp3_1 C CA N H 180.000 10.0 3 +GLU sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GLU chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GLU plan-1 C 0.020 +GLU plan-1 CA 0.020 +GLU plan-1 O 0.020 +GLU plan-1 OXT 0.020 +GLU plan-2 CD 0.020 +GLU plan-2 CG 0.020 +GLU plan-2 OE1 0.020 +GLU plan-2 OE2 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GLU SMILES ACDLabs 12.01 O=C(O)C(N)CCC(=O)O +GLU SMILES_CANONICAL CACTVS 3.370 N[C@@H](CCC(O)=O)C(O)=O +GLU SMILES CACTVS 3.370 N[CH](CCC(O)=O)C(O)=O +GLU SMILES_CANONICAL "OpenEye OEToolkits" 1.7.0 C(CC(=O)O)[C@@H](C(=O)O)N +GLU SMILES "OpenEye OEToolkits" 1.7.0 C(CC(=O)O)C(C(=O)O)N +GLU InChI InChI 1.03 InChI=1S/C5H9NO4/c6-3(5(9)10)1-2-4(7)8/h3H,1-2,6H2,(H,7,8)(H,9,10)/t3-/m0/s1 +GLU InChIKey InChI 1.03 WHUUTDBJXJRKMK-VKHMYHEASA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GLU acedrg 278 "dictionary generator" +GLU acedrg_database 12 "data source" +GLU rdkit 2019.09.1 "Chemoinformatics tool" +GLU refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GLY.cif b/image_analysis/structure_refinement/monomers/GLY.cif new file mode 100644 index 000000000..1eab291b6 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GLY.cif @@ -0,0 +1,153 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GLY GLY GLYCINE peptide 10 5 . + +data_comp_GLY +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GLY N N NT3 1 25.320 35.545 47.014 +GLY CA C CH2 0 25.532 37.001 46.897 +GLY C C C 0 26.039 37.376 45.517 +GLY O O O 0 27.114 36.860 45.146 +GLY OXT O OC -1 25.343 38.172 44.853 +GLY H H H 0 26.098 35.105 46.869 +GLY H2 H H 0 24.710 35.270 46.405 +GLY H3 H H 0 25.019 35.342 47.843 +GLY HA3 H H 0 26.185 37.288 47.578 +GLY HA2 H H 0 24.682 37.467 47.075 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +GLY N n/a CA START +GLY H N . . +GLY H2 N . . +GLY H3 N . . +GLY CA N C . +GLY HA3 CA . . +GLY HA2 CA . . +GLY C CA . END +GLY O C . . +GLY OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +GLY N N(CCHH)(H)3 +GLY CA C(NH3)(COO)(H)2 +GLY C C(CHHN)(O)2 +GLY O O(CCO) +GLY OXT O(CCO) +GLY H H(NCHH) +GLY H2 H(NCHH) +GLY H3 H(NCHH) +GLY HA3 H(CCHN) +GLY HA2 H(CCHN) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GLY N CA SINGLE n 1.476 0.0106 1.476 0.0106 +GLY CA C SINGLE n 1.517 0.0121 1.517 0.0121 +GLY C O DOUBLE n 1.249 0.0161 1.249 0.0161 +GLY C OXT SINGLE n 1.249 0.0161 1.249 0.0161 +GLY N H SINGLE n 1.018 0.0520 0.905 0.0200 +GLY N H2 SINGLE n 1.018 0.0520 0.905 0.0200 +GLY N H3 SINGLE n 1.018 0.0520 0.905 0.0200 +GLY CA HA3 SINGLE n 1.092 0.0100 0.986 0.0200 +GLY CA HA2 SINGLE n 1.092 0.0100 0.986 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GLY CA N H 110.151 2.94 +GLY CA N H2 110.151 2.94 +GLY CA N H3 110.151 2.94 +GLY H N H2 109.089 3.00 +GLY H N H3 109.089 3.00 +GLY H2 N H3 109.089 3.00 +GLY N CA C 111.292 1.50 +GLY N CA HA3 109.172 1.50 +GLY N CA HA2 109.172 1.50 +GLY C CA HA3 109.620 1.50 +GLY C CA HA2 109.620 1.50 +GLY HA3 CA HA2 108.054 1.50 +GLY CA C O 117.080 1.50 +GLY CA C OXT 117.080 1.50 +GLY O C OXT 125.839 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GLY sp3_sp3_1 C CA N H 180.000 10.0 3 +GLY sp2_sp3_1 O C CA HA3 0.000 10.0 6 + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GLY plan-1 C 0.020 +GLY plan-1 CA 0.020 +GLY plan-1 O 0.020 +GLY plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GLY SMILES ACDLabs 10.04 O=C(O)CN +GLY SMILES_CANONICAL CACTVS 3.341 NCC(O)=O +GLY SMILES CACTVS 3.341 NCC(O)=O +GLY SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(C(=O)O)N +GLY SMILES "OpenEye OEToolkits" 1.5.0 C(C(=O)O)N +GLY InChI InChI 1.03 InChI=1S/C2H5NO2/c3-1-2(4)5/h1,3H2,(H,4,5) +GLY InChIKey InChI 1.03 DHMQDGOQFOQNFH-UHFFFAOYSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GLY acedrg 278 "dictionary generator" +GLY acedrg_database 12 "data source" +GLY rdkit 2019.09.1 "Chemoinformatics tool" +GLY refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GMP.cif b/image_analysis/structure_refinement/monomers/GMP.cif new file mode 100644 index 000000000..8c4b2aa55 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GMP.cif @@ -0,0 +1,256 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GMP GMP GUANOSINE NON-POLYMER 33 20 . +# +data_comp_GMP +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GMP "O5'" O OH1 0 31.023 62.348 13.095 +GMP "C5'" C CH2 0 30.880 60.990 13.491 +GMP "C4'" C CH1 0 32.039 60.141 13.016 +GMP "O4'" O O2 0 32.223 60.322 11.591 +GMP "C3'" C CH1 0 33.402 60.499 13.617 +GMP "O3'" O OH1 0 33.583 59.871 14.880 +GMP "C2'" C CH1 0 34.373 59.978 12.551 +GMP "O2'" O OH1 0 34.741 58.628 12.744 +GMP "C1'" C CH1 0 33.583 60.160 11.252 +GMP N9 N NR5 0 33.999 61.321 10.471 +GMP C8 C CR15 0 33.932 62.634 10.866 +GMP N7 N NRD5 0 34.376 63.473 9.962 +GMP C5 C CR56 0 34.763 62.661 8.903 +GMP C6 C CR6 0 35.321 63.006 7.643 +GMP O6 O O 0 35.589 64.136 7.210 +GMP N1 N NR6 0 35.569 61.874 6.857 +GMP C2 C CR6 0 35.310 60.575 7.237 +GMP N2 N NH2 0 35.612 59.614 6.354 +GMP N3 N NRD6 0 34.785 60.248 8.422 +GMP C4 C CR56 0 34.537 61.332 9.203 +GMP "HO5'" H H 0 30.412 62.808 13.461 +GMP "H5'1" H H 0 30.045 60.632 13.121 +GMP "H5'2" H H 0 30.824 60.943 14.469 +GMP "H4'" H H 0 31.840 59.197 13.196 +GMP "H3'" H H 0 33.489 61.482 13.709 +GMP "HO3'" H H 0 34.374 60.022 15.150 +GMP "H2'" H H 0 35.192 60.542 12.533 +GMP "HO2'" H H 0 34.046 58.141 12.763 +GMP "H1'" H H 0 33.686 59.348 10.707 +GMP H8 H H 0 33.598 62.904 11.704 +GMP HN1 H H 0 35.923 62.012 6.043 +GMP HN21 H H 0 35.993 58.873 6.627 +GMP HN22 H H 0 35.427 59.728 5.504 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GMP "O5'" "C5'" SINGLE n 1.421 0.0131 1.421 0.0131 +GMP "C5'" "C4'" SINGLE n 1.511 0.0177 1.511 0.0177 +GMP "C4'" "O4'" SINGLE n 1.451 0.0100 1.451 0.0100 +GMP "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +GMP "O4'" "C1'" SINGLE n 1.409 0.0100 1.409 0.0100 +GMP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +GMP "C3'" "C2'" SINGLE n 1.531 0.0100 1.531 0.0100 +GMP "C2'" "O2'" SINGLE n 1.411 0.0100 1.411 0.0100 +GMP "C2'" "C1'" SINGLE n 1.525 0.0100 1.525 0.0100 +GMP "C1'" N9 SINGLE n 1.458 0.0100 1.458 0.0100 +GMP N9 C8 SINGLE y 1.372 0.0100 1.372 0.0100 +GMP N9 C4 SINGLE y 1.375 0.0100 1.375 0.0100 +GMP C8 N7 DOUBLE y 1.312 0.0100 1.312 0.0100 +GMP N7 C5 SINGLE y 1.390 0.0100 1.390 0.0100 +GMP C5 C6 SINGLE y 1.417 0.0103 1.417 0.0103 +GMP C5 C4 DOUBLE y 1.377 0.0100 1.377 0.0100 +GMP C6 O6 DOUBLE n 1.239 0.0100 1.239 0.0100 +GMP C6 N1 SINGLE y 1.396 0.0107 1.396 0.0107 +GMP N1 C2 SINGLE y 1.374 0.0100 1.374 0.0100 +GMP C2 N2 SINGLE n 1.340 0.0101 1.340 0.0101 +GMP C2 N3 DOUBLE y 1.333 0.0104 1.333 0.0104 +GMP N3 C4 SINGLE y 1.355 0.0100 1.355 0.0100 +GMP "O5'" "HO5'" SINGLE n 0.970 0.0120 0.848 0.0200 +GMP "C5'" "H5'1" SINGLE n 1.089 0.0100 0.981 0.0200 +GMP "C5'" "H5'2" SINGLE n 1.089 0.0100 0.981 0.0200 +GMP "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +GMP "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +GMP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +GMP "C2'" "H2'" SINGLE n 1.089 0.0100 0.994 0.0200 +GMP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +GMP "C1'" "H1'" SINGLE n 1.089 0.0100 0.984 0.0200 +GMP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0170 +GMP N1 HN1 SINGLE n 1.016 0.0100 0.897 0.0200 +GMP N2 HN21 SINGLE n 1.016 0.0100 0.877 0.0200 +GMP N2 HN22 SINGLE n 1.016 0.0100 0.877 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GMP "C5'" "O5'" "HO5'" 109.007 3.00 +GMP "O5'" "C5'" "C4'" 111.279 1.98 +GMP "O5'" "C5'" "H5'1" 109.280 1.50 +GMP "O5'" "C5'" "H5'2" 109.280 1.50 +GMP "C4'" "C5'" "H5'1" 109.326 2.00 +GMP "C4'" "C5'" "H5'2" 109.326 2.00 +GMP "H5'1" "C5'" "H5'2" 108.248 2.26 +GMP "C5'" "C4'" "O4'" 109.170 1.50 +GMP "C5'" "C4'" "C3'" 114.598 1.97 +GMP "C5'" "C4'" "H4'" 109.037 1.87 +GMP "O4'" "C4'" "C3'" 105.388 1.50 +GMP "O4'" "C4'" "H4'" 108.947 1.50 +GMP "C3'" "C4'" "H4'" 109.363 1.86 +GMP "C4'" "O4'" "C1'" 109.903 1.50 +GMP "C4'" "C3'" "O3'" 111.281 2.46 +GMP "C4'" "C3'" "C2'" 102.602 1.50 +GMP "C4'" "C3'" "H3'" 110.452 2.54 +GMP "O3'" "C3'" "C2'" 111.581 2.83 +GMP "O3'" "C3'" "H3'" 110.380 1.67 +GMP "C2'" "C3'" "H3'" 110.504 1.75 +GMP "C3'" "O3'" "HO3'" 108.744 3.00 +GMP "C3'" "C2'" "O2'" 112.782 2.45 +GMP "C3'" "C2'" "C1'" 101.239 1.50 +GMP "C3'" "C2'" "H2'" 110.596 1.51 +GMP "O2'" "C2'" "C1'" 111.715 2.69 +GMP "O2'" "C2'" "H2'" 110.448 1.97 +GMP "C1'" "C2'" "H2'" 110.636 1.70 +GMP "C2'" "O2'" "HO2'" 109.103 2.13 +GMP "O4'" "C1'" "C2'" 106.047 1.50 +GMP "O4'" "C1'" N9 108.477 1.50 +GMP "O4'" "C1'" "H1'" 109.807 1.50 +GMP "C2'" "C1'" N9 113.824 1.50 +GMP "C2'" "C1'" "H1'" 109.015 1.50 +GMP N9 "C1'" "H1'" 109.561 1.50 +GMP "C1'" N9 C8 126.829 1.91 +GMP "C1'" N9 C4 127.440 1.80 +GMP C8 N9 C4 105.731 1.50 +GMP N9 C8 N7 113.507 1.50 +GMP N9 C8 H8 123.187 1.50 +GMP N7 C8 H8 123.307 1.50 +GMP C8 N7 C5 104.778 1.50 +GMP N7 C5 C6 130.030 1.50 +GMP N7 C5 C4 110.574 1.50 +GMP C6 C5 C4 119.397 1.50 +GMP C5 C6 O6 128.244 1.50 +GMP C5 C6 N1 111.367 1.50 +GMP O6 C6 N1 120.389 1.50 +GMP C6 N1 C2 125.351 1.50 +GMP C6 N1 HN1 116.978 2.44 +GMP C2 N1 HN1 117.677 2.71 +GMP N1 C2 N2 116.576 1.50 +GMP N1 C2 N3 123.602 1.50 +GMP N2 C2 N3 119.821 1.50 +GMP C2 N2 HN21 119.868 1.50 +GMP C2 N2 HN22 119.868 1.50 +GMP HN21 N2 HN22 120.263 1.96 +GMP C2 N3 C4 112.066 1.50 +GMP N9 C4 C5 105.411 1.50 +GMP N9 C4 N3 126.378 1.50 +GMP C5 C4 N3 128.211 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GMP sp3_sp3_25 "C4'" "C5'" "O5'" "HO5'" 180.000 10.0 3 +GMP const_21 N9 C8 N7 C5 0.000 10.0 2 +GMP const_24 C6 C5 N7 C8 180.000 10.0 2 +GMP const_sp2_sp2_4 N7 C5 C6 O6 0.000 5.0 2 +GMP const_25 N9 C4 C5 N7 0.000 10.0 2 +GMP const_sp2_sp2_7 O6 C6 N1 C2 180.000 5.0 2 +GMP const_11 N2 C2 N1 C6 180.000 10.0 2 +GMP sp2_sp2_1 N1 C2 N2 HN21 180.000 5.0 2 +GMP const_14 N2 C2 N3 C4 180.000 10.0 2 +GMP const_16 N9 C4 N3 C2 180.000 10.0 2 +GMP sp3_sp3_28 "O4'" "C4'" "C5'" "O5'" 180.000 10.0 3 +GMP sp3_sp3_2 "C5'" "C4'" "O4'" "C1'" -60.000 10.0 3 +GMP sp3_sp3_41 "O3'" "C3'" "C4'" "C5'" 180.000 10.0 3 +GMP sp3_sp3_4 "C2'" "C1'" "O4'" "C4'" -60.000 10.0 3 +GMP sp3_sp3_46 "C4'" "C3'" "O3'" "HO3'" 180.000 10.0 3 +GMP sp3_sp3_20 "O2'" "C2'" "C3'" "O3'" -60.000 10.0 3 +GMP sp3_sp3_49 "C3'" "C2'" "O2'" "HO2'" 180.000 10.0 3 +GMP sp3_sp3_8 "O4'" "C1'" "C2'" "O2'" 180.000 10.0 3 +GMP sp2_sp3_1 C8 N9 "C1'" "O4'" 150.000 10.0 6 +GMP const_18 N7 C8 N9 "C1'" 180.000 10.0 2 +GMP const_30 C5 C4 N9 "C1'" 180.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GMP chir_1 "C4'" "O4'" "C3'" "C5'" negative +GMP chir_2 "C3'" "O3'" "C4'" "C2'" positive +GMP chir_3 "C2'" "O2'" "C1'" "C3'" negative +GMP chir_4 "C1'" "O4'" N9 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GMP plan-1 "C1'" 0.020 +GMP plan-1 C2 0.020 +GMP plan-1 C4 0.020 +GMP plan-1 C5 0.020 +GMP plan-1 C6 0.020 +GMP plan-1 C8 0.020 +GMP plan-1 H8 0.020 +GMP plan-1 HN1 0.020 +GMP plan-1 N1 0.020 +GMP plan-1 N2 0.020 +GMP plan-1 N3 0.020 +GMP plan-1 N7 0.020 +GMP plan-1 N9 0.020 +GMP plan-1 O6 0.020 +GMP plan-2 C2 0.020 +GMP plan-2 HN21 0.020 +GMP plan-2 HN22 0.020 +GMP plan-2 N2 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GMP SMILES ACDLabs 10.04 O=C1c2ncn(c2N=C(N)N1)C3OC(C(O)C3O)CO +GMP InChI InChI 1.03 InChI=1S/C10H13N5O5/c11-10-13-7-4(8(19)14-10)12-2-15(7)9-6(18)5(17)3(1-16)20-9/h2-3,5-6,9,16-18H,1H2,(H3,11,13,14,19)/t3-,5-,6-,9-/m1/s1 +GMP InChIKey InChI 1.03 NYHBQMYGNKIUIF-UUOKFMHZSA-N +GMP SMILES_CANONICAL CACTVS 3.385 NC1=Nc2n(cnc2C(=O)N1)[C@@H]3O[C@H](CO)[C@@H](O)[C@H]3O +GMP SMILES CACTVS 3.385 NC1=Nc2n(cnc2C(=O)N1)[CH]3O[CH](CO)[CH](O)[CH]3O +GMP SMILES_CANONICAL "OpenEye OEToolkits" 1.7.5 c1nc2c(n1[C@H]3[C@@H]([C@@H]([C@H](O3)CO)O)O)N=C(NC2=O)N +GMP SMILES "OpenEye OEToolkits" 1.7.5 c1nc2c(n1C3C(C(C(O3)CO)O)O)N=C(NC2=O)N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GMP acedrg 243 "dictionary generator" +GMP acedrg_database 11 "data source" +GMP rdkit 2017.03.2 "Chemoinformatics tool" +GMP refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GOL.cif b/image_analysis/structure_refinement/monomers/GOL.cif new file mode 100644 index 000000000..f4a3e10af --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GOL.cif @@ -0,0 +1,134 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GOL GOL GLYCEROL NON-POLYMER 14 6 . +# +data_comp_GOL +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GOL C1 C CH2 0 29.630 3.832 30.945 +GOL O1 O OH1 0 28.425 3.137 31.257 +GOL C2 C CH1 0 30.401 3.142 29.840 +GOL O2 O OH1 0 31.484 3.970 29.416 +GOL C3 C CH2 0 30.919 1.777 30.241 +GOL O3 O OH1 0 31.679 1.174 29.197 +GOL H11 H H 0 30.196 3.882 31.753 +GOL H12 H H 0 29.411 4.753 30.662 +GOL HO1 H H 0 28.030 3.557 31.876 +GOL H2 H H 0 29.790 3.020 29.074 +GOL HO2 H H 0 32.019 4.078 30.068 +GOL H31 H H 0 30.155 1.193 30.467 +GOL H32 H H 0 31.486 1.869 31.045 +GOL HO3 H H 0 31.160 1.020 28.546 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GOL C1 O1 SINGLE n 1.425 0.0100 1.425 0.0100 +GOL C1 C2 SINGLE n 1.514 0.0105 1.514 0.0105 +GOL C2 O2 SINGLE n 1.427 0.0100 1.427 0.0100 +GOL C2 C3 SINGLE n 1.514 0.0105 1.514 0.0105 +GOL C3 O3 SINGLE n 1.425 0.0100 1.425 0.0100 +GOL C1 H11 SINGLE n 1.089 0.0100 0.988 0.0200 +GOL C1 H12 SINGLE n 1.089 0.0100 0.988 0.0200 +GOL O1 HO1 SINGLE n 0.970 0.0120 0.846 0.0200 +GOL C2 H2 SINGLE n 1.089 0.0100 0.987 0.0186 +GOL O2 HO2 SINGLE n 0.970 0.0120 0.848 0.0200 +GOL C3 H31 SINGLE n 1.089 0.0100 0.988 0.0200 +GOL C3 H32 SINGLE n 1.089 0.0100 0.988 0.0200 +GOL O3 HO3 SINGLE n 0.970 0.0120 0.846 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GOL O1 C1 C2 111.586 1.51 +GOL O1 C1 H11 109.268 1.50 +GOL O1 C1 H12 109.268 1.50 +GOL C2 C1 H11 109.193 1.50 +GOL C2 C1 H12 109.193 1.50 +GOL H11 C1 H12 108.313 1.50 +GOL C1 O1 HO1 108.280 3.00 +GOL C1 C2 O2 110.247 1.72 +GOL C1 C2 C3 113.504 1.50 +GOL C1 C2 H2 108.441 1.50 +GOL O2 C2 C3 110.247 1.72 +GOL O2 C2 H2 108.721 1.50 +GOL C3 C2 H2 108.441 1.50 +GOL C2 O2 HO2 107.936 3.00 +GOL C2 C3 O3 111.586 1.51 +GOL C2 C3 H31 109.193 1.50 +GOL C2 C3 H32 109.193 1.50 +GOL O3 C3 H31 109.268 1.50 +GOL O3 C3 H32 109.268 1.50 +GOL H31 C3 H32 108.313 1.50 +GOL C3 O3 HO3 108.280 3.00 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GOL sp3_sp3_1 C2 C1 O1 HO1 180.000 10.0 3 +GOL sp3_sp3_4 O1 C1 C2 O2 180.000 10.0 3 +GOL sp3_sp3_14 C1 C2 O2 HO2 60.000 10.0 3 +GOL sp3_sp3_16 C1 C2 C3 O3 180.000 10.0 3 +GOL sp3_sp3_25 C2 C3 O3 HO3 180.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GOL chir_1 C2 O2 C1 C3 both +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GOL SMILES ACDLabs 12.01 OCC(O)CO +GOL SMILES_CANONICAL CACTVS 3.370 OCC(O)CO +GOL SMILES CACTVS 3.370 OCC(O)CO +GOL SMILES_CANONICAL "OpenEye OEToolkits" 1.7.0 C(C(CO)O)O +GOL SMILES "OpenEye OEToolkits" 1.7.0 C(C(CO)O)O +GOL InChI InChI 1.03 InChI=1S/C3H8O3/c4-1-3(6)2-5/h3-6H,1-2H2 +GOL InChIKey InChI 1.03 PEDCQBHIVMGVHV-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GOL acedrg 243 "dictionary generator" +GOL acedrg_database 11 "data source" +GOL rdkit 2017.03.2 "Chemoinformatics tool" +GOL refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/GTP.cif b/image_analysis/structure_refinement/monomers/GTP.cif new file mode 100644 index 000000000..53fdeff81 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/GTP.cif @@ -0,0 +1,312 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +GTP GTP "GUANOSINE-5'-TRIPHOSPHATE" NON-POLYMER 44 32 . +# +data_comp_GTP +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +GTP PG P P 0 4.560 31.688 21.477 +GTP O1G O O 0 4.404 32.256 22.874 +GTP O2G O OP -1 4.031 32.621 20.405 +GTP O3G O OP -1 4.007 30.282 21.352 +GTP O3B O O2 0 6.154 31.567 21.217 +GTP PB P P 0 7.014 30.840 20.078 +GTP O1B O O 0 7.367 29.484 20.548 +GTP O2B O OP -1 6.320 31.011 18.784 +GTP O3A O O2 0 8.339 31.740 20.070 +GTP PA P P 0 8.640 33.246 19.616 +GTP O1A O O 0 8.465 33.336 18.144 +GTP O2A O OP -1 7.853 34.171 20.471 +GTP "O5'" O O2 0 10.195 33.377 19.964 +GTP "C5'" C CH2 0 10.583 33.182 21.348 +GTP "C4'" C CH1 0 12.036 33.553 21.524 +GTP "O4'" O O2 0 12.846 32.727 20.657 +GTP "C3'" C CH1 0 12.389 35.007 21.180 +GTP "O3'" O OH1 0 13.296 35.538 22.138 +GTP "C2'" C CH1 0 13.016 34.892 19.786 +GTP "O2'" O OH1 0 13.937 35.921 19.490 +GTP "C1'" C CH1 0 13.732 33.549 19.908 +GTP N9 N NR5 0 14.014 32.895 18.629 +GTP C8 C CR15 0 13.089 32.464 17.714 +GTP N7 N NRD5 0 13.617 31.910 16.650 +GTP C5 C CR56 0 14.986 31.978 16.880 +GTP C6 C CR6 0 16.070 31.533 16.074 +GTP O6 O O 0 16.021 30.976 14.968 +GTP N1 N NR16 0 17.307 31.793 16.676 +GTP C2 C CR6 0 17.480 32.406 17.902 +GTP N2 N NH2 0 18.744 32.578 18.332 +GTP N3 N NRD6 0 16.461 32.825 18.660 +GTP C4 C CR56 0 15.250 32.581 18.093 +GTP "H5'" H H 0 10.452 32.234 21.605 +GTP "H5''" H H 0 10.026 33.747 21.941 +GTP "H4'" H H 0 12.287 33.371 22.464 +GTP "H3'" H H 0 11.567 35.560 21.142 +GTP "HO3'" H H 0 14.015 35.710 21.778 +GTP "H2'" H H 0 12.311 34.844 19.092 +GTP "HO2'" H H 0 14.731 35.591 19.468 +GTP "H1'" H H 0 14.596 33.678 20.425 +GTP H8 H H 0 12.160 32.561 17.840 +GTP HN1 H H 0 18.034 31.538 16.221 +GTP HN21 H H 0 18.891 32.964 19.107 +GTP HN22 H H 0 19.424 32.310 17.847 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +GTP PG O1G DOUBLE n 1.516 0.0200 1.516 0.0200 +GTP PG O2G SINGLE n 1.516 0.0200 1.516 0.0200 +GTP PG O3G SINGLE n 1.516 0.0200 1.516 0.0200 +GTP PG O3B SINGLE n 1.620 0.0143 1.620 0.0143 +GTP O3B PB SINGLE n 1.601 0.0108 1.601 0.0108 +GTP PB O1B DOUBLE n 1.478 0.0100 1.478 0.0100 +GTP PB O2B SINGLE n 1.478 0.0100 1.478 0.0100 +GTP PB O3A SINGLE n 1.602 0.0126 1.602 0.0126 +GTP O3A PA SINGLE n 1.600 0.0185 1.600 0.0185 +GTP PA O1A DOUBLE n 1.485 0.0100 1.485 0.0100 +GTP PA O2A SINGLE n 1.485 0.0100 1.485 0.0100 +GTP PA "O5'" SINGLE n 1.598 0.0100 1.598 0.0100 +GTP "O5'" "C5'" SINGLE n 1.445 0.0200 1.445 0.0200 +GTP "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +GTP "C4'" "O4'" SINGLE n 1.444 0.0100 1.444 0.0100 +GTP "C4'" "C3'" SINGLE n 1.532 0.0100 1.532 0.0100 +GTP "O4'" "C1'" SINGLE n 1.423 0.0100 1.423 0.0100 +GTP "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +GTP "C3'" "C2'" SINGLE n 1.532 0.0103 1.532 0.0103 +GTP "C2'" "O2'" SINGLE n 1.412 0.0100 1.412 0.0100 +GTP "C2'" "C1'" SINGLE n 1.528 0.0100 1.528 0.0100 +GTP "C1'" N9 SINGLE n 1.462 0.0102 1.462 0.0102 +GTP N9 C8 SINGLE y 1.371 0.0100 1.371 0.0100 +GTP N9 C4 SINGLE y 1.383 0.0114 1.383 0.0114 +GTP C8 N7 DOUBLE y 1.311 0.0104 1.311 0.0104 +GTP N7 C5 SINGLE y 1.390 0.0100 1.390 0.0100 +GTP C5 C6 SINGLE y 1.418 0.0111 1.418 0.0111 +GTP C5 C4 DOUBLE y 1.377 0.0100 1.377 0.0100 +GTP C6 O6 DOUBLE n 1.240 0.0104 1.240 0.0104 +GTP C6 N1 SINGLE y 1.394 0.0120 1.394 0.0120 +GTP N1 C2 SINGLE y 1.374 0.0124 1.374 0.0124 +GTP C2 N2 SINGLE n 1.341 0.0143 1.341 0.0143 +GTP C2 N3 DOUBLE y 1.331 0.0119 1.331 0.0119 +GTP N3 C4 SINGLE y 1.355 0.0100 1.355 0.0100 +GTP "C5'" "H5'" SINGLE n 1.089 0.0100 0.991 0.0200 +GTP "C5'" "H5''" SINGLE n 1.089 0.0100 0.991 0.0200 +GTP "C4'" "H4'" SINGLE n 1.089 0.0100 0.990 0.0200 +GTP "C3'" "H3'" SINGLE n 1.089 0.0100 0.991 0.0200 +GTP "O3'" "HO3'" SINGLE n 0.970 0.0120 0.839 0.0200 +GTP "C2'" "H2'" SINGLE n 1.089 0.0100 0.991 0.0200 +GTP "O2'" "HO2'" SINGLE n 0.970 0.0120 0.839 0.0200 +GTP "C1'" "H1'" SINGLE n 1.089 0.0100 1.016 0.0200 +GTP C8 H8 SINGLE n 1.082 0.0130 0.942 0.0168 +GTP N1 HN1 SINGLE n 1.016 0.0100 0.894 0.0200 +GTP N2 HN21 SINGLE n 1.016 0.0100 0.877 0.0200 +GTP N2 HN22 SINGLE n 1.016 0.0100 0.877 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +GTP O1G PG O2G 112.609 3.00 +GTP O1G PG O3G 112.609 3.00 +GTP O1G PG O3B 106.004 3.00 +GTP O2G PG O3G 112.609 3.00 +GTP O2G PG O3B 106.004 3.00 +GTP O3G PG O3B 106.004 3.00 +GTP PG O3B PB 132.613 3.00 +GTP O3B PB O1B 108.634 3.00 +GTP O3B PB O2B 108.634 3.00 +GTP O3B PB O3A 100.990 3.00 +GTP O1B PB O2B 119.776 1.50 +GTP O1B PB O3A 108.634 3.00 +GTP O2B PB O3A 108.634 3.00 +GTP PB O3A PA 133.108 3.00 +GTP O3A PA O1A 109.053 3.00 +GTP O3A PA O2A 109.053 3.00 +GTP O3A PA "O5'" 100.137 3.00 +GTP O1A PA O2A 118.805 3.00 +GTP O1A PA "O5'" 109.340 2.31 +GTP O2A PA "O5'" 109.340 2.31 +GTP PA "O5'" "C5'" 116.362 1.50 +GTP "O5'" "C5'" "C4'" 109.454 1.61 +GTP "O5'" "C5'" "H5'" 109.882 1.50 +GTP "O5'" "C5'" "H5''" 109.882 1.50 +GTP "C4'" "C5'" "H5'" 109.589 1.50 +GTP "C4'" "C5'" "H5''" 109.589 1.50 +GTP "H5'" "C5'" "H5''" 108.471 1.50 +GTP "C5'" "C4'" "O4'" 109.154 1.50 +GTP "C5'" "C4'" "C3'" 115.288 1.50 +GTP "C5'" "C4'" "H4'" 108.351 1.59 +GTP "O4'" "C4'" "C3'" 105.318 1.50 +GTP "O4'" "C4'" "H4'" 109.120 1.50 +GTP "C3'" "C4'" "H4'" 109.322 2.54 +GTP "C4'" "O4'" "C1'" 109.502 2.85 +GTP "C4'" "C3'" "O3'" 110.713 3.00 +GTP "C4'" "C3'" "C2'" 102.593 1.50 +GTP "C4'" "C3'" "H3'" 110.577 3.00 +GTP "O3'" "C3'" "C2'" 111.671 3.00 +GTP "O3'" "C3'" "H3'" 110.541 2.08 +GTP "C2'" "C3'" "H3'" 110.454 1.85 +GTP "C3'" "O3'" "HO3'" 109.389 3.00 +GTP "C3'" "C2'" "O2'" 112.677 3.00 +GTP "C3'" "C2'" "C1'" 101.406 1.50 +GTP "C3'" "C2'" "H2'" 110.788 1.91 +GTP "O2'" "C2'" "C1'" 110.814 3.00 +GTP "O2'" "C2'" "H2'" 110.904 1.50 +GTP "C1'" "C2'" "H2'" 110.342 1.91 +GTP "C2'" "O2'" "HO2'" 109.217 3.00 +GTP "O4'" "C1'" "C2'" 106.114 1.65 +GTP "O4'" "C1'" N9 108.577 1.50 +GTP "O4'" "C1'" "H1'" 109.833 2.53 +GTP "C2'" "C1'" N9 113.380 2.77 +GTP "C2'" "C1'" "H1'" 109.222 1.50 +GTP N9 "C1'" "H1'" 109.411 1.50 +GTP "C1'" N9 C8 127.058 3.00 +GTP "C1'" N9 C4 126.955 2.94 +GTP C8 N9 C4 105.987 1.50 +GTP N9 C8 N7 113.721 1.50 +GTP N9 C8 H8 122.935 1.50 +GTP N7 C8 H8 123.345 1.50 +GTP C8 N7 C5 103.926 1.50 +GTP N7 C5 C6 129.926 1.50 +GTP N7 C5 C4 110.770 1.50 +GTP C6 C5 C4 119.304 1.50 +GTP C5 C6 O6 128.237 1.50 +GTP C5 C6 N1 111.514 1.50 +GTP O6 C6 N1 120.248 1.50 +GTP C6 N1 C2 125.452 1.50 +GTP C6 N1 HN1 117.160 2.45 +GTP C2 N1 HN1 117.387 2.97 +GTP N1 C2 N2 116.657 1.50 +GTP N1 C2 N3 123.538 1.50 +GTP N2 C2 N3 119.805 1.50 +GTP C2 N2 HN21 119.712 3.00 +GTP C2 N2 HN22 119.712 3.00 +GTP HN21 N2 HN22 120.576 3.00 +GTP C2 N3 C4 111.926 1.50 +GTP N9 C4 C5 105.596 1.50 +GTP N9 C4 N3 126.138 1.50 +GTP C5 C4 N3 128.265 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +GTP sp3_sp3_27 PB O3B PG O1G 60.000 10.0 3 +GTP sp3_sp3_40 "C4'" "C5'" "O5'" PA 180.000 10.0 3 +GTP sp3_sp3_43 "O4'" "C4'" "C5'" "O5'" 180.000 10.0 3 +GTP sp3_sp3_2 "C5'" "C4'" "O4'" "C1'" -60.000 10.0 3 +GTP sp3_sp3_56 "O3'" "C3'" "C4'" "C5'" 180.000 10.0 3 +GTP sp3_sp3_4 "C2'" "C1'" "O4'" "C4'" -60.000 10.0 3 +GTP sp3_sp3_61 "C4'" "C3'" "O3'" "HO3'" 180.000 10.0 3 +GTP sp3_sp3_20 "O2'" "C2'" "C3'" "O3'" -60.000 10.0 3 +GTP sp3_sp3_64 "C3'" "C2'" "O2'" "HO2'" 180.000 10.0 3 +GTP sp3_sp3_8 "O4'" "C1'" "C2'" "O2'" 180.000 10.0 3 +GTP sp2_sp3_1 C8 N9 "C1'" "O4'" 150.000 10.0 6 +GTP const_18 N7 C8 N9 "C1'" 180.000 0.0 2 +GTP const_30 C5 C4 N9 "C1'" 180.000 0.0 2 +GTP const_21 N9 C8 N7 C5 0.000 0.0 2 +GTP const_24 C6 C5 N7 C8 180.000 0.0 2 +GTP const_sp2_sp2_4 N7 C5 C6 O6 0.000 0.0 2 +GTP const_25 N9 C4 C5 N7 0.000 0.0 2 +GTP const_sp2_sp2_7 O6 C6 N1 C2 180.000 0.0 2 +GTP const_11 N2 C2 N1 C6 180.000 0.0 2 +GTP sp2_sp2_33 N1 C2 N2 HN21 180.000 5.0 2 +GTP const_14 N2 C2 N3 C4 180.000 0.0 2 +GTP const_16 N9 C4 N3 C2 180.000 0.0 2 +GTP sp3_sp3_30 PG O3B PB O1B 60.000 10.0 3 +GTP sp3_sp3_32 PA O3A PB O3B -60.000 10.0 3 +GTP sp3_sp3_36 PB O3A PA O1A 60.000 10.0 3 +GTP sp3_sp3_37 "C5'" "O5'" PA O3A 180.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +GTP chir_1 PB O3A O3B O2B both +GTP chir_2 PA O3A "O5'" O2A both +GTP chir_3 "C4'" "O4'" "C3'" "C5'" negative +GTP chir_4 "C3'" "O3'" "C4'" "C2'" positive +GTP chir_5 "C2'" "O2'" "C1'" "C3'" negative +GTP chir_6 "C1'" "O4'" N9 "C2'" negative +GTP chir_7 PG O3B O2G O3G both +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +GTP plan-1 "C1'" 0.020 +GTP plan-1 C4 0.020 +GTP plan-1 C5 0.020 +GTP plan-1 C6 0.020 +GTP plan-1 C8 0.020 +GTP plan-1 H8 0.020 +GTP plan-1 N3 0.020 +GTP plan-1 N7 0.020 +GTP plan-1 N9 0.020 +GTP plan-2 C2 0.020 +GTP plan-2 C4 0.020 +GTP plan-2 C5 0.020 +GTP plan-2 C6 0.020 +GTP plan-2 HN1 0.020 +GTP plan-2 N1 0.020 +GTP plan-2 N2 0.020 +GTP plan-2 N3 0.020 +GTP plan-2 N7 0.020 +GTP plan-2 N9 0.020 +GTP plan-2 O6 0.020 +GTP plan-3 C2 0.020 +GTP plan-3 HN21 0.020 +GTP plan-3 HN22 0.020 +GTP plan-3 N2 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +GTP SMILES ACDLabs 12.01 "O=P(O)(O)OP(=O)(O)OP(=O)(O)OCC3OC(n2cnc1c2N=C(N)NC1=O)C(O)C3O" +GTP InChI InChI 1.03 "InChI=1S/C10H16N5O14P3/c11-10-13-7-4(8(18)14-10)12-2-15(7)9-6(17)5(16)3(27-9)1-26-31(22,23)29-32(24,25)28-30(19,20)21/h2-3,5-6,9,16-17H,1H2,(H,22,23)(H,24,25)(H2,19,20,21)(H3,11,13,14,18)/t3-,5-,6-,9-/m1/s1" +GTP InChIKey InChI 1.03 XKMLYUALXHKNFT-UUOKFMHZSA-N +GTP SMILES_CANONICAL CACTVS 3.370 "NC1=Nc2n(cnc2C(=O)N1)[C@@H]3O[C@H](CO[P](O)(=O)O[P](O)(=O)O[P](O)(O)=O)[C@@H](O)[C@H]3O" +GTP SMILES CACTVS 3.370 "NC1=Nc2n(cnc2C(=O)N1)[CH]3O[CH](CO[P](O)(=O)O[P](O)(=O)O[P](O)(O)=O)[CH](O)[CH]3O" +GTP SMILES_CANONICAL "OpenEye OEToolkits" 1.7.6 "c1nc2c(n1[C@H]3[C@@H]([C@@H]([C@H](O3)CO[P@](=O)(O)O[P@](=O)(O)OP(=O)(O)O)O)O)N=C(NC2=O)N" +GTP SMILES "OpenEye OEToolkits" 1.7.6 "c1nc2c(n1C3C(C(C(O3)COP(=O)(O)OP(=O)(O)OP(=O)(O)O)O)O)N=C(NC2=O)N" +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +GTP acedrg 271 "dictionary generator" +GTP acedrg_database 12 "data source" +GTP rdkit 2019.09.1 "Chemoinformatics tool" +GTP refmac5 5.8.0405 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/HIS.cif b/image_analysis/structure_refinement/monomers/HIS.cif new file mode 100644 index 000000000..9aa774d8a --- /dev/null +++ b/image_analysis/structure_refinement/monomers/HIS.cif @@ -0,0 +1,247 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +HIS HIS HISTIDINE peptide 21 11 . + +data_comp_HIS +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +HIS N N NT3 1 33.660 42.779 -4.734 +HIS CA C CH1 0 33.418 41.805 -5.835 +HIS C C C 0 33.362 42.558 -7.170 +HIS O O O 0 32.473 43.428 -7.296 +HIS CB C CH2 0 32.141 40.999 -5.566 +HIS CG C CR5 0 31.907 39.881 -6.528 +HIS ND1 N NR15 1 32.388 38.605 -6.324 +HIS CD2 C CR15 0 31.249 39.846 -7.694 +HIS CE1 C CR15 0 32.025 37.834 -7.339 +HIS NE2 N NR15 0 31.332 38.567 -8.183 +HIS OXT O OC -1 34.210 42.245 -8.036 +HIS H H H 0 32.989 43.381 -4.702 +HIS H2 H H 0 34.439 43.213 -4.870 +HIS H3 H H 0 33.701 42.345 -3.944 +HIS HA H H 0 34.186 41.182 -5.863 +HIS HB3 H H 0 31.373 41.610 -5.597 +HIS HB2 H H 0 32.189 40.630 -4.657 +HIS HD1 H H 0 32.878 38.369 -5.655 +HIS HD2 H H 0 30.808 40.561 -8.109 +HIS HE1 H H 0 32.229 36.920 -7.437 +HIS HE2 H H 0 30.960 38.279 -8.940 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +HIS N n/a CA START +HIS H N . . +HIS H2 N . . +HIS H3 N . . +HIS CA N C . +HIS HA CA . . +HIS CB CA CG . +HIS HB3 CB . . +HIS HB2 CB . . +HIS CG CB ND1 . +HIS ND1 CG CE1 . +HIS HD1 ND1 . . +HIS CE1 ND1 NE2 . +HIS HE1 CE1 . . +HIS NE2 CE1 CD2 . +HIS HE2 NE2 . . +HIS CD2 NE2 HD2 . +HIS HD2 CD2 . . +HIS C CA . END +HIS O C . . +HIS OXT C . . +HIS CD2 CG . ADD + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +HIS N N(CCCH)(H)3 +HIS CA C(CC[5]HH)(NH3)(COO)(H) +HIS C C(CCHN)(O)2 +HIS O O(CCO) +HIS CB C(C[5]C[5]N[5])(CCHN)(H)2 +HIS CG C[5](C[5]N[5]H)(N[5]C[5]H)(CCHH){2|H<1>} +HIS ND1 N[5](C[5]C[5]C)(C[5]N[5]H)(H){2|H<1>} +HIS CD2 C[5](C[5]N[5]C)(N[5]C[5]H)(H){2|H<1>} +HIS CE1 C[5](N[5]C[5]H)2(H){1|C<4>,1|H<1>} +HIS NE2 N[5](C[5]C[5]H)(C[5]N[5]H)(H){1|C<4>,1|H<1>} +HIS OXT O(CCO) +HIS H H(NCHH) +HIS H2 H(NCHH) +HIS H3 H(NCHH) +HIS HA H(CCCN) +HIS HB3 H(CC[5]CH) +HIS HB2 H(CC[5]CH) +HIS HD1 H(N[5]C[5]2) +HIS HD2 H(C[5]C[5]N[5]) +HIS HE1 H(C[5]N[5]2) +HIS HE2 H(N[5]C[5]2) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +HIS N CA SINGLE n 1.489 0.0100 1.489 0.0100 +HIS CA C SINGLE n 1.533 0.0100 1.533 0.0100 +HIS CA CB SINGLE n 1.533 0.0104 1.533 0.0104 +HIS C O DOUBLE n 1.251 0.0183 1.251 0.0183 +HIS C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +HIS CB CG SINGLE n 1.493 0.0146 1.493 0.0146 +HIS CG ND1 SINGLE y 1.378 0.0100 1.378 0.0100 +HIS CG CD2 DOUBLE y 1.338 0.0174 1.338 0.0174 +HIS ND1 CE1 DOUBLE y 1.326 0.0133 1.326 0.0133 +HIS CD2 NE2 SINGLE y 1.371 0.0154 1.371 0.0154 +HIS CE1 NE2 SINGLE y 1.316 0.0157 1.316 0.0157 +HIS N H SINGLE n 1.018 0.0520 0.902 0.0102 +HIS N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +HIS N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +HIS CA HA SINGLE n 1.092 0.0100 0.989 0.0200 +HIS CB HB3 SINGLE n 1.092 0.0100 0.982 0.0176 +HIS CB HB2 SINGLE n 1.092 0.0100 0.982 0.0176 +HIS ND1 HD1 SINGLE n 1.013 0.0120 0.881 0.0200 +HIS CD2 HD2 SINGLE n 1.085 0.0150 0.937 0.0104 +HIS CE1 HE1 SINGLE n 1.085 0.0150 0.942 0.0200 +HIS NE2 HE2 SINGLE n 1.013 0.0120 0.877 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +HIS CA N H 109.992 2.14 +HIS CA N H2 109.992 2.14 +HIS CA N H3 109.992 2.14 +HIS H N H2 109.032 3.00 +HIS H N H3 109.032 3.00 +HIS H2 N H3 109.032 3.00 +HIS N CA C 109.292 1.55 +HIS N CA CB 110.573 1.50 +HIS N CA HA 108.019 2.27 +HIS C CA CB 111.874 3.00 +HIS C CA HA 108.290 1.50 +HIS CB CA HA 108.890 2.34 +HIS CA C O 117.058 3.00 +HIS CA C OXT 117.058 3.00 +HIS O C OXT 125.883 1.50 +HIS CA CB CG 113.931 1.83 +HIS CA CB HB3 108.697 1.50 +HIS CA CB HB2 108.697 1.50 +HIS CG CB HB3 108.948 1.50 +HIS CG CB HB2 108.948 1.50 +HIS HB3 CB HB2 107.846 2.68 +HIS CB CG ND1 122.940 3.00 +HIS CB CG CD2 131.173 3.00 +HIS ND1 CG CD2 105.887 1.50 +HIS CG ND1 CE1 109.313 1.50 +HIS CG ND1 HD1 125.337 2.60 +HIS CE1 ND1 HD1 125.350 3.00 +HIS CG CD2 NE2 107.589 1.50 +HIS CG CD2 HD2 126.688 3.00 +HIS NE2 CD2 HD2 125.723 3.00 +HIS ND1 CE1 NE2 108.287 1.50 +HIS ND1 CE1 HE1 125.729 2.42 +HIS NE2 CE1 HE1 125.984 1.51 +HIS CD2 NE2 CE1 108.930 1.50 +HIS CD2 NE2 HE2 125.575 3.00 +HIS CE1 NE2 HE2 125.489 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +HIS chi1 N CA CB CG -60.000 10.0 3 +HIS chi2 CA CB CG CD2 90.000 10.0 6 +HIS sp3_sp3_1 C CA N H 180.000 10.0 3 +HIS const_17 NE2 CD2 CG ND1 0.000 0.0 1 +HIS const_13 CG CD2 NE2 CE1 0.000 0.0 1 +HIS const_sp2_sp2_5 NE2 CE1 ND1 CG 0.000 0.0 1 +HIS const_sp2_sp2_9 ND1 CE1 NE2 CD2 0.000 0.0 1 +HIS const_sp2_sp2_1 CD2 CG ND1 CE1 0.000 0.0 1 +HIS sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +HIS chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +HIS plan-1 CB 0.020 +HIS plan-1 CD2 0.020 +HIS plan-1 CE1 0.020 +HIS plan-1 CG 0.020 +HIS plan-1 HD1 0.020 +HIS plan-1 HD2 0.020 +HIS plan-1 HE1 0.020 +HIS plan-1 HE2 0.020 +HIS plan-1 ND1 0.020 +HIS plan-1 NE2 0.020 +HIS plan-2 C 0.020 +HIS plan-2 CA 0.020 +HIS plan-2 O 0.020 +HIS plan-2 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +HIS SMILES ACDLabs 10.04 "O=C(O)C(N)Cc1cnc[nH+]1" +HIS SMILES_CANONICAL CACTVS 3.341 "N[C@@H](Cc1c[nH]c[nH+]1)C(O)=O" +HIS SMILES CACTVS 3.341 "N[CH](Cc1c[nH]c[nH+]1)C(O)=O" +HIS SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "c1c([nH+]c[nH]1)C[C@@H](C(=O)O)N" +HIS SMILES "OpenEye OEToolkits" 1.5.0 "c1c([nH+]c[nH]1)CC(C(=O)O)N" +HIS InChI InChI 1.03 "InChI=1S/C6H9N3O2/c7-5(6(10)11)1-4-2-8-3-9-4/h2-3,5H,1,7H2,(H,8,9)(H,10,11)/p+1/t5-/m0/s1" +HIS InChIKey InChI 1.03 HNDVDQJCIGZPNO-YFKPBYRVSA-O + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +HIS acedrg 278 "dictionary generator" +HIS acedrg_database 12 "data source" +HIS rdkit 2019.09.1 "Chemoinformatics tool" +HIS refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/HOH.cif b/image_analysis/structure_refinement/monomers/HOH.cif new file mode 100644 index 000000000..9b16b4d26 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/HOH.cif @@ -0,0 +1,79 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +HOH HOH WATER NON-POLYMER 3 1 . + +data_comp_HOH +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.alt_atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +HOH O O O OH2 0 -23.107 18.382 -21.639 +HOH H1 H1 H H 0 -22.244 18.382 -21.639 +HOH H2 H2 H H 0 -23.365 19.206 -21.639 + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +HOH O O(H)2 +HOH H1 H(OH) +HOH H2 H(OH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.value_order +_chem_comp_bond.pdbx_aromatic_flag +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +HOH O H1 SINGLE n 0.972 0.0180 0.863 0.0200 +HOH O H2 SINGLE n 0.972 0.0180 0.863 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +HOH H1 O H2 107.391 3.00 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +HOH SMILES ACDLabs 10.04 O +HOH SMILES_CANONICAL CACTVS 3.341 O +HOH SMILES CACTVS 3.341 O +HOH SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 O +HOH SMILES "OpenEye OEToolkits" 1.5.0 O +HOH InChI InChI 1.03 InChI=1S/H2O/h1H2 +HOH InChIKey InChI 1.03 XLYOFNOQVPJJNP-UHFFFAOYSA-N + +loop_ +_acedrg_chem_comp_descriptor.comp_id +_acedrg_chem_comp_descriptor.program_name +_acedrg_chem_comp_descriptor.program_version +_acedrg_chem_comp_descriptor.type +HOH acedrg 285 "dictionary generator" +HOH acedrg_database 12 "data source" +HOH rdkit 2019.09.1 "Chemoinformatics tool" +HOH servalcat 0.4.57 'optimization tool' diff --git a/image_analysis/structure_refinement/monomers/ILE.cif b/image_analysis/structure_refinement/monomers/ILE.cif new file mode 100644 index 000000000..5a1718d9b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ILE.cif @@ -0,0 +1,240 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ILE ILE ISOLEUCINE peptide 22 9 . + +data_comp_ILE +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ILE N N NT3 1 52.911 76.465 68.493 +ILE CA C CH1 0 53.201 77.811 67.902 +ILE C C C 0 51.886 78.441 67.404 +ILE O O O 0 51.005 77.667 66.962 +ILE CB C CH1 0 54.273 77.728 66.792 +ILE CG1 C CH2 0 54.806 79.117 66.415 +ILE CG2 C CH3 0 53.775 76.967 65.560 +ILE CD1 C CH3 0 55.991 79.094 65.464 +ILE OXT O OC -1 51.789 79.686 67.476 +ILE H H H 0 53.671 75.992 68.596 +ILE H2 H H 0 52.344 75.994 67.973 +ILE H3 H H 0 52.530 76.571 69.304 +ILE HA H H 0 53.554 78.378 68.615 +ILE HB H H 0 55.027 77.224 67.158 +ILE HG12 H H 0 55.071 79.584 67.234 +ILE HG13 H H 0 54.084 79.629 65.999 +ILE HG21 H H 0 53.180 76.249 65.830 +ILE HG22 H H 0 54.534 76.591 65.082 +ILE HG23 H H 0 53.296 77.576 64.972 +ILE HD11 H H 0 56.404 78.209 65.466 +ILE HD12 H H 0 56.648 79.757 65.749 +ILE HD13 H H 0 55.687 79.307 64.562 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ILE N n/a CA START +ILE H N . . +ILE H2 N . . +ILE H3 N . . +ILE CA N C . +ILE HA CA . . +ILE CB CA CG2 . +ILE HB CB . . +ILE CG1 CB CD1 . +ILE HG13 CG1 . . +ILE HG12 CG1 . . +ILE CD1 CG1 HD13 . +ILE HD11 CD1 . . +ILE HD12 CD1 . . +ILE HD13 CD1 . . +ILE CG2 CB HG23 . +ILE HG21 CG2 . . +ILE HG22 CG2 . . +ILE HG23 CG2 . . +ILE C CA . END +ILE O C . . +ILE OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +ILE N N(CCCH)(H)3 +ILE CA C(CCCH)(NH3)(COO)(H) +ILE C C(CCHN)(O)2 +ILE O O(CCO) +ILE CB C(CCHH)(CCHN)(CH3)(H) +ILE CG1 C(CCCH)(CH3)(H)2 +ILE CG2 C(CCCH)(H)3 +ILE CD1 C(CCHH)(H)3 +ILE OXT O(CCO) +ILE H H(NCHH) +ILE H2 H(NCHH) +ILE H3 H(NCHH) +ILE HA H(CCCN) +ILE HB H(CC3) +ILE HG12 H(CCCH) +ILE HG13 H(CCCH) +ILE HG21 H(CCHH) +ILE HG22 H(CCHH) +ILE HG23 H(CCHH) +ILE HD11 H(CCHH) +ILE HD12 H(CCHH) +ILE HD13 H(CCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +ILE N CA SINGLE n 1.495 0.0100 1.495 0.0100 +ILE CA C SINGLE n 1.538 0.0100 1.538 0.0100 +ILE CA CB SINGLE n 1.540 0.0102 1.540 0.0102 +ILE C O DOUBLE n 1.251 0.0183 1.251 0.0183 +ILE C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +ILE CB CG1 SINGLE n 1.529 0.0200 1.529 0.0200 +ILE CB CG2 SINGLE n 1.529 0.0119 1.529 0.0119 +ILE CG1 CD1 SINGLE n 1.518 0.0129 1.518 0.0129 +ILE N H SINGLE n 1.018 0.0520 0.902 0.0102 +ILE N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +ILE N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +ILE CA HA SINGLE n 1.092 0.0100 0.977 0.0200 +ILE CB HB SINGLE n 1.092 0.0100 0.978 0.0189 +ILE CG1 HG12 SINGLE n 1.092 0.0100 0.979 0.0127 +ILE CG1 HG13 SINGLE n 1.092 0.0100 0.979 0.0127 +ILE CG2 HG21 SINGLE n 1.092 0.0100 0.972 0.0156 +ILE CG2 HG22 SINGLE n 1.092 0.0100 0.972 0.0156 +ILE CG2 HG23 SINGLE n 1.092 0.0100 0.972 0.0156 +ILE CD1 HD11 SINGLE n 1.092 0.0100 0.976 0.0140 +ILE CD1 HD12 SINGLE n 1.092 0.0100 0.976 0.0140 +ILE CD1 HD13 SINGLE n 1.092 0.0100 0.976 0.0140 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +ILE CA N H 109.990 2.80 +ILE CA N H2 109.990 2.80 +ILE CA N H3 109.990 2.80 +ILE H N H2 109.032 3.00 +ILE H N H3 109.032 3.00 +ILE H2 N H3 109.032 3.00 +ILE N CA C 108.738 1.50 +ILE N CA CB 110.837 1.50 +ILE N CA HA 108.328 1.50 +ILE C CA CB 111.703 1.50 +ILE C CA HA 108.550 1.50 +ILE CB CA HA 108.373 1.50 +ILE CA C O 117.155 1.50 +ILE CA C OXT 117.155 1.50 +ILE O C OXT 125.690 1.50 +ILE CA CB CG1 111.638 1.50 +ILE CA CB CG2 110.951 1.50 +ILE CA CB HB 107.422 1.50 +ILE CG1 CB CG2 111.728 1.50 +ILE CG1 CB HB 107.389 1.50 +ILE CG2 CB HB 107.597 1.50 +ILE CB CG1 CD1 114.066 1.50 +ILE CB CG1 HG12 108.686 1.50 +ILE CB CG1 HG13 108.686 1.50 +ILE CD1 CG1 HG12 108.722 1.50 +ILE CD1 CG1 HG13 108.722 1.50 +ILE HG12 CG1 HG13 107.774 1.50 +ILE CB CG2 HG21 109.633 1.50 +ILE CB CG2 HG22 109.633 1.50 +ILE CB CG2 HG23 109.633 1.50 +ILE HG21 CG2 HG22 109.390 1.50 +ILE HG21 CG2 HG23 109.390 1.50 +ILE HG22 CG2 HG23 109.390 1.50 +ILE CG1 CD1 HD11 109.644 2.81 +ILE CG1 CD1 HD12 109.644 2.81 +ILE CG1 CD1 HD13 109.644 2.81 +ILE HD11 CD1 HD12 109.381 1.50 +ILE HD11 CD1 HD13 109.381 1.50 +ILE HD12 CD1 HD13 109.381 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +ILE chi1 N CA CB CG2 -60.000 10.0 3 +ILE chi2 CA CB CG1 CD1 180.000 10.0 3 +ILE hh1 CA CB CG2 HG23 -60.000 10.0 3 +ILE hh2 CB CG1 CD1 HD13 60.000 10.0 3 +ILE sp3_sp3_1 C CA N H 180.000 10.0 3 +ILE sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +ILE chir_1 CA N C CB positive +ILE chir_2 CB CA CG1 CG2 positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +ILE plan-1 C 0.020 +ILE plan-1 CA 0.020 +ILE plan-1 O 0.020 +ILE plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +ILE SMILES ACDLabs 10.04 O=C(O)C(N)C(C)CC +ILE SMILES_CANONICAL CACTVS 3.341 CC[C@H](C)[C@H](N)C(O)=O +ILE SMILES CACTVS 3.341 CC[CH](C)[CH](N)C(O)=O +ILE SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CC[C@H](C)[C@@H](C(=O)O)N +ILE SMILES "OpenEye OEToolkits" 1.5.0 CCC(C)C(C(=O)O)N +ILE InChI InChI 1.03 InChI=1S/C6H13NO2/c1-3-4(2)5(7)6(8)9/h4-5H,3,7H2,1-2H3,(H,8,9)/t4-,5-/m0/s1 +ILE InChIKey InChI 1.03 AGPKZVBTJJNPAG-WHFBIAKZSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +ILE acedrg 278 "dictionary generator" +ILE acedrg_database 12 "data source" +ILE rdkit 2019.09.1 "Chemoinformatics tool" +ILE refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/IOD.cif b/image_analysis/structure_refinement/monomers/IOD.cif new file mode 100644 index 000000000..fe8d1dcfc --- /dev/null +++ b/image_analysis/structure_refinement/monomers/IOD.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +IOD IOD 'IODIDE ION ' NON-POLYMER 1 1 . + +data_comp_IOD +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +IOD I I I -1.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +IOD I n/a . END diff --git a/image_analysis/structure_refinement/monomers/K.cif b/image_analysis/structure_refinement/monomers/K.cif new file mode 100644 index 000000000..656dfa7f1 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/K.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +K K 'POTASSIUM ION ' NON-POLYMER 1 1 . + +data_comp_K +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +K K K K 1.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +K K n/a . END diff --git a/image_analysis/structure_refinement/monomers/LEU.cif b/image_analysis/structure_refinement/monomers/LEU.cif new file mode 100644 index 000000000..d7a7bc7e4 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/LEU.cif @@ -0,0 +1,240 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +LEU LEU LEUCINE peptide 22 9 . + +data_comp_LEU +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +LEU N N NT3 1 16.397 16.089 52.368 +LEU CA C CH1 0 15.211 16.954 52.118 +LEU C C C 0 13.931 16.126 52.332 +LEU O O O 0 13.023 16.642 53.022 +LEU CB C CH2 0 15.230 17.562 50.712 +LEU CG C CH1 0 16.388 18.503 50.342 +LEU CD1 C CH3 0 16.596 19.599 51.384 +LEU CD2 C CH3 0 17.703 17.774 50.057 +LEU OXT O OC -1 13.888 14.994 51.800 +LEU H H H 0 16.605 15.616 51.628 +LEU H2 H H 0 16.242 15.512 53.045 +LEU H3 H H 0 17.102 16.600 52.600 +LEU HA H H 0 15.218 17.683 52.788 +LEU HB3 H H 0 14.387 18.055 50.587 +LEU HB2 H H 0 15.214 16.822 50.062 +LEU HG H H 0 16.133 18.961 49.500 +LEU HD11 H H 0 15.741 20.011 51.596 +LEU HD12 H H 0 17.200 20.273 51.030 +LEU HD13 H H 0 16.978 19.215 52.192 +LEU HD21 H H 0 17.517 16.879 49.726 +LEU HD22 H H 0 18.230 17.713 50.871 +LEU HD23 H H 0 18.205 18.266 49.386 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +LEU N n/a CA START +LEU H N . . +LEU H2 N . . +LEU H3 N . . +LEU CA N C . +LEU HA CA . . +LEU CB CA CG . +LEU HB3 CB . . +LEU HB2 CB . . +LEU CG CB CD2 . +LEU HG CG . . +LEU CD1 CG HD13 . +LEU HD11 CD1 . . +LEU HD12 CD1 . . +LEU HD13 CD1 . . +LEU CD2 CG HD23 . +LEU HD21 CD2 . . +LEU HD22 CD2 . . +LEU HD23 CD2 . . +LEU C CA . END +LEU O C . . +LEU OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +LEU N N(CCCH)(H)3 +LEU CA C(CCHH)(NH3)(COO)(H) +LEU C C(CCHN)(O)2 +LEU O O(CCO) +LEU CB C(CCCH)(CCHN)(H)2 +LEU CG C(CCHH)(CH3)2(H) +LEU CD1 C(CCCH)(H)3 +LEU CD2 C(CCCH)(H)3 +LEU OXT O(CCO) +LEU H H(NCHH) +LEU H2 H(NCHH) +LEU H3 H(NCHH) +LEU HA H(CCCN) +LEU HB3 H(CCCH) +LEU HB2 H(CCCH) +LEU HG H(CC3) +LEU HD11 H(CCHH) +LEU HD12 H(CCHH) +LEU HD13 H(CCHH) +LEU HD21 H(CCHH) +LEU HD22 H(CCHH) +LEU HD23 H(CCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +LEU N CA SINGLE n 1.487 0.0100 1.487 0.0100 +LEU CA C SINGLE n 1.538 0.0113 1.538 0.0113 +LEU CA CB SINGLE n 1.528 0.0100 1.528 0.0100 +LEU C O DOUBLE n 1.251 0.0183 1.251 0.0183 +LEU C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +LEU CB CG SINGLE n 1.532 0.0100 1.532 0.0100 +LEU CG CD1 SINGLE n 1.519 0.0200 1.519 0.0200 +LEU CG CD2 SINGLE n 1.519 0.0200 1.519 0.0200 +LEU N H SINGLE n 1.018 0.0520 0.902 0.0102 +LEU N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +LEU N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +LEU CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +LEU CB HB3 SINGLE n 1.092 0.0100 0.985 0.0129 +LEU CB HB2 SINGLE n 1.092 0.0100 0.985 0.0129 +LEU CG HG SINGLE n 1.092 0.0100 0.992 0.0164 +LEU CD1 HD11 SINGLE n 1.092 0.0100 0.972 0.0156 +LEU CD1 HD12 SINGLE n 1.092 0.0100 0.972 0.0156 +LEU CD1 HD13 SINGLE n 1.092 0.0100 0.972 0.0156 +LEU CD2 HD21 SINGLE n 1.092 0.0100 0.972 0.0156 +LEU CD2 HD22 SINGLE n 1.092 0.0100 0.972 0.0156 +LEU CD2 HD23 SINGLE n 1.092 0.0100 0.972 0.0156 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +LEU CA N H 109.990 3.00 +LEU CA N H2 109.990 3.00 +LEU CA N H3 109.990 3.00 +LEU H N H2 109.032 3.00 +LEU H N H3 109.032 3.00 +LEU H2 N H3 109.032 3.00 +LEU N CA C 109.258 1.50 +LEU N CA CB 109.859 2.63 +LEU N CA HA 108.387 1.58 +LEU C CA CB 111.627 1.50 +LEU C CA HA 108.774 1.79 +LEU CB CA HA 109.261 1.50 +LEU CA C O 117.148 1.60 +LEU CA C OXT 117.148 1.60 +LEU O C OXT 125.704 1.50 +LEU CA CB CG 115.973 1.50 +LEU CA CB HB3 108.172 1.50 +LEU CA CB HB2 108.172 1.50 +LEU CG CB HB3 108.390 1.50 +LEU CG CB HB2 108.390 1.50 +LEU HB3 CB HB2 107.673 3.00 +LEU CB CG CD1 110.898 3.00 +LEU CB CG CD2 110.898 3.00 +LEU CB CG HG 108.090 1.50 +LEU CD1 CG CD2 110.647 1.82 +LEU CD1 CG HG 107.962 1.81 +LEU CD2 CG HG 107.962 1.81 +LEU CG CD1 HD11 109.527 1.50 +LEU CG CD1 HD12 109.527 1.50 +LEU CG CD1 HD13 109.527 1.50 +LEU HD11 CD1 HD12 109.390 1.50 +LEU HD11 CD1 HD13 109.390 1.50 +LEU HD12 CD1 HD13 109.390 1.50 +LEU CG CD2 HD21 109.527 1.50 +LEU CG CD2 HD22 109.527 1.50 +LEU CG CD2 HD23 109.527 1.50 +LEU HD21 CD2 HD22 109.390 1.50 +LEU HD21 CD2 HD23 109.390 1.50 +LEU HD22 CD2 HD23 109.390 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +LEU chi1 N CA CB CG -60.000 10.0 3 +LEU chi2 CA CB CG CD1 180.000 10.0 3 +LEU hh1 CB CG CD1 HD13 60.000 10.0 3 +LEU hh2 CB CG CD2 HD23 180.000 10.0 3 +LEU sp3_sp3_1 C CA N H 180.000 10.0 3 +LEU sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +LEU chir_1 CA N C CB positive +LEU chir_2 CG CB CD1 CD2 both + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +LEU plan-1 C 0.020 +LEU plan-1 CA 0.020 +LEU plan-1 O 0.020 +LEU plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +LEU SMILES ACDLabs 10.04 O=C(O)C(N)CC(C)C +LEU SMILES_CANONICAL CACTVS 3.341 CC(C)C[C@H](N)C(O)=O +LEU SMILES CACTVS 3.341 CC(C)C[CH](N)C(O)=O +LEU SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CC(C)C[C@@H](C(=O)O)N +LEU SMILES "OpenEye OEToolkits" 1.5.0 CC(C)CC(C(=O)O)N +LEU InChI InChI 1.03 InChI=1S/C6H13NO2/c1-4(2)3-5(7)6(8)9/h4-5H,3,7H2,1-2H3,(H,8,9)/t5-/m0/s1 +LEU InChIKey InChI 1.03 ROHFNLRQFUQHCH-YFKPBYRVSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +LEU acedrg 278 "dictionary generator" +LEU acedrg_database 12 "data source" +LEU rdkit 2019.09.1 "Chemoinformatics tool" +LEU refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/LYS.cif b/image_analysis/structure_refinement/monomers/LYS.cif new file mode 100644 index 000000000..edcceab06 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/LYS.cif @@ -0,0 +1,258 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +LYS LYS LYSINE peptide 25 10 . + +data_comp_LYS +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +LYS N N NT3 1 38.447 40.683 -3.403 +LYS CA C CH1 0 39.289 39.686 -4.119 +LYS C C C 0 38.638 39.335 -5.470 +LYS O O O 0 37.393 39.207 -5.493 +LYS CB C CH2 0 39.527 38.438 -3.257 +LYS CG C CH2 0 38.287 37.697 -2.761 +LYS CD C CH2 0 38.607 36.502 -1.871 +LYS CE C CH2 0 37.387 35.753 -1.425 +LYS NZ N NT3 1 36.499 36.554 -0.576 +LYS OXT O OC -1 39.402 39.203 -6.452 +LYS H H H 0 38.746 40.791 -2.559 +LYS H2 H H 0 37.585 40.417 -3.374 +LYS H3 H H 0 38.489 41.477 -3.829 +LYS HA H H 0 40.169 40.104 -4.300 +LYS HB3 H H 0 40.055 38.704 -2.474 +LYS HB2 H H 0 40.071 37.807 -3.775 +LYS HG3 H H 0 37.773 37.386 -3.537 +LYS HG2 H H 0 37.724 38.326 -2.260 +LYS HD3 H H 0 39.096 36.816 -1.080 +LYS HD2 H H 0 39.195 35.888 -2.363 +LYS HE3 H H 0 37.662 34.961 -0.931 +LYS HE2 H H 0 36.889 35.459 -2.208 +LYS HZ1 H H 0 36.983 37.027 0.027 +LYS HZ2 H H 0 35.931 36.006 -0.132 +LYS HZ3 H H 0 36.017 37.126 -1.086 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +LYS N n/a CA START +LYS H N . . +LYS H2 N . . +LYS H3 N . . +LYS CA N C . +LYS HA CA . . +LYS CB CA CG . +LYS HB3 CB . . +LYS HB2 CB . . +LYS CG CB CD . +LYS HG3 CG . . +LYS HG2 CG . . +LYS CD CG CE . +LYS HD3 CD . . +LYS HD2 CD . . +LYS CE CD NZ . +LYS HE3 CE . . +LYS HE2 CE . . +LYS NZ CE HZ3 . +LYS HZ1 NZ . . +LYS HZ2 NZ . . +LYS HZ3 NZ . . +LYS C CA . END +LYS O C . . +LYS OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +LYS N N(CCCH)(H)3 +LYS CA C(CCHH)(NH3)(COO)(H) +LYS C C(CCHN)(O)2 +LYS O O(CCO) +LYS CB C(CCHH)(CCHN)(H)2 +LYS CG C(CCHH)2(H)2 +LYS CD C(CCHH)(CHHN)(H)2 +LYS CE C(CCHH)(NH3)(H)2 +LYS NZ N(CCHH)(H)3 +LYS OXT O(CCO) +LYS H H(NCHH) +LYS H2 H(NCHH) +LYS H3 H(NCHH) +LYS HA H(CCCN) +LYS HB3 H(CCCH) +LYS HB2 H(CCCH) +LYS HG3 H(CCCH) +LYS HG2 H(CCCH) +LYS HD3 H(CCCH) +LYS HD2 H(CCCH) +LYS HE3 H(CCHN) +LYS HE2 H(CCHN) +LYS HZ1 H(NCHH) +LYS HZ2 H(NCHH) +LYS HZ3 H(NCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +LYS N CA SINGLE n 1.487 0.0100 1.487 0.0100 +LYS CA C SINGLE n 1.538 0.0113 1.538 0.0113 +LYS CA CB SINGLE n 1.533 0.0100 1.533 0.0100 +LYS C O DOUBLE n 1.251 0.0183 1.251 0.0183 +LYS C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +LYS CB CG SINGLE n 1.523 0.0189 1.523 0.0189 +LYS CG CD SINGLE n 1.524 0.0122 1.524 0.0122 +LYS CD CE SINGLE n 1.496 0.0200 1.496 0.0200 +LYS CE NZ SINGLE n 1.465 0.0130 1.465 0.0130 +LYS N H SINGLE n 1.018 0.0520 0.902 0.0102 +LYS N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +LYS N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +LYS CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +LYS CB HB3 SINGLE n 1.092 0.0100 0.981 0.0141 +LYS CB HB2 SINGLE n 1.092 0.0100 0.981 0.0141 +LYS CG HG3 SINGLE n 1.092 0.0100 0.982 0.0163 +LYS CG HG2 SINGLE n 1.092 0.0100 0.982 0.0163 +LYS CD HD3 SINGLE n 1.092 0.0100 0.982 0.0163 +LYS CD HD2 SINGLE n 1.092 0.0100 0.982 0.0163 +LYS CE HE3 SINGLE n 1.092 0.0100 0.974 0.0147 +LYS CE HE2 SINGLE n 1.092 0.0100 0.974 0.0147 +LYS NZ HZ1 SINGLE n 1.018 0.0520 0.906 0.0200 +LYS NZ HZ2 SINGLE n 1.018 0.0520 0.906 0.0200 +LYS NZ HZ3 SINGLE n 1.018 0.0520 0.906 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +LYS CA N H 109.990 3.00 +LYS CA N H2 109.990 3.00 +LYS CA N H3 109.990 3.00 +LYS H N H2 109.032 3.00 +LYS H N H3 109.032 3.00 +LYS H2 N H3 109.032 3.00 +LYS N CA C 109.258 1.50 +LYS N CA CB 110.440 2.46 +LYS N CA HA 108.387 1.58 +LYS C CA CB 111.059 3.00 +LYS C CA HA 108.774 1.79 +LYS CB CA HA 109.080 2.33 +LYS CA C O 117.148 1.60 +LYS CA C OXT 117.148 1.60 +LYS O C OXT 125.704 1.50 +LYS CA CB CG 115.148 2.35 +LYS CA CB HB3 108.677 1.74 +LYS CA CB HB2 108.677 1.74 +LYS CG CB HB3 108.413 1.50 +LYS CG CB HB2 108.413 1.50 +LYS HB3 CB HB2 107.655 1.50 +LYS CB CG CD 113.403 3.00 +LYS CB CG HG3 108.381 1.50 +LYS CB CG HG2 108.381 1.50 +LYS CD CG HG3 108.819 1.50 +LYS CD CG HG2 108.819 1.50 +LYS HG3 CG HG2 107.566 1.82 +LYS CG CD CE 112.541 3.00 +LYS CG CD HD3 108.993 1.92 +LYS CG CD HD2 108.993 1.92 +LYS CE CD HD3 109.016 1.50 +LYS CE CD HD2 109.016 1.50 +LYS HD3 CD HD2 107.958 2.23 +LYS CD CE NZ 111.716 3.00 +LYS CD CE HE3 109.468 2.65 +LYS CD CE HE2 109.468 2.65 +LYS NZ CE HE3 108.972 2.23 +LYS NZ CE HE2 108.972 2.23 +LYS HE3 CE HE2 108.144 2.57 +LYS CE NZ HZ1 109.659 3.00 +LYS CE NZ HZ2 109.659 3.00 +LYS CE NZ HZ3 109.659 3.00 +LYS HZ1 NZ HZ2 109.089 3.00 +LYS HZ1 NZ HZ3 109.089 3.00 +LYS HZ2 NZ HZ3 109.089 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +LYS chi1 N CA CB CG -60.000 10.0 3 +LYS chi2 CA CB CG CD 180.000 10.0 3 +LYS chi3 CB CG CD CE 180.000 10.0 3 +LYS chi4 CG CD CE NZ 180.000 10.0 3 +LYS hh1 CD CE NZ HZ3 180.000 10.0 3 +LYS sp3_sp3_1 C CA N H 180.000 10.0 3 +LYS sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +LYS chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +LYS plan-1 C 0.020 +LYS plan-1 CA 0.020 +LYS plan-1 O 0.020 +LYS plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +LYS SMILES ACDLabs 10.04 O=C(O)C(N)CCCC[NH3+] +LYS SMILES_CANONICAL CACTVS 3.341 N[C@@H](CCCC[NH3+])C(O)=O +LYS SMILES CACTVS 3.341 N[CH](CCCC[NH3+])C(O)=O +LYS SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(CC[NH3+])C[C@@H](C(=O)O)N +LYS SMILES "OpenEye OEToolkits" 1.5.0 C(CC[NH3+])CC(C(=O)O)N +LYS InChI InChI 1.03 InChI=1S/C6H14N2O2/c7-4-2-1-3-5(8)6(9)10/h5H,1-4,7-8H2,(H,9,10)/p+1/t5-/m0/s1 +LYS InChIKey InChI 1.03 KDXKERNSBIXSRK-YFKPBYRVSA-O + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +LYS acedrg 278 "dictionary generator" +LYS acedrg_database 12 "data source" +LYS rdkit 2019.09.1 "Chemoinformatics tool" +LYS refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/MET.cif b/image_analysis/structure_refinement/monomers/MET.cif new file mode 100644 index 000000000..28a95f5e7 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/MET.cif @@ -0,0 +1,226 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +MET MET METHIONINE peptide 20 9 . + +data_comp_MET +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +MET N N NT3 1 16.235 16.083 52.229 +MET CA C CH1 0 15.074 16.893 51.770 +MET C C C 0 13.874 15.966 51.506 +MET O O O 0 12.749 16.368 51.879 +MET CB C CH2 0 15.401 17.671 50.489 +MET CG C CH2 0 16.529 18.680 50.635 +MET SD S S2 0 18.171 17.933 50.684 +MET CE C CH3 0 18.367 17.396 48.979 +MET OXT O OC -1 14.108 14.877 50.937 +MET H H H 0 16.577 15.615 51.537 +MET H2 H H 0 15.985 15.507 52.876 +MET H3 H H 0 16.877 16.622 52.563 +MET HA H H 0 14.833 17.529 52.491 +MET HB3 H H 0 14.592 18.143 50.197 +MET HB2 H H 0 15.638 17.028 49.787 +MET HG3 H H 0 16.395 19.191 51.458 +MET HG2 H H 0 16.495 19.307 49.886 +MET HE3 H H 0 18.130 18.128 48.379 +MET HE2 H H 0 17.783 16.634 48.809 +MET HE1 H H 0 19.294 17.136 48.825 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +MET N n/a CA START +MET H N . . +MET H2 N . . +MET H3 N . . +MET CA N C . +MET HA CA . . +MET CB CA CG . +MET HB3 CB . . +MET HB2 CB . . +MET CG CB SD . +MET HG3 CG . . +MET HG2 CG . . +MET SD CG CE . +MET CE SD HE3 . +MET HE1 CE . . +MET HE2 CE . . +MET HE3 CE . . +MET C CA . END +MET O C . . +MET OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +MET N N(CCCH)(H)3 +MET CA C(CCHH)(NH3)(COO)(H) +MET C C(CCHN)(O)2 +MET O O(CCO) +MET CB C(CCHN)(CHHS)(H)2 +MET CG C(CCHH)(SC)(H)2 +MET SD S(CCHH)(CH3) +MET CE C(SC)(H)3 +MET OXT O(CCO) +MET H H(NCHH) +MET H2 H(NCHH) +MET H3 H(NCHH) +MET HA H(CCCN) +MET HB3 H(CCCH) +MET HB2 H(CCCH) +MET HG3 H(CCHS) +MET HG2 H(CCHS) +MET HE3 H(CHHS) +MET HE2 H(CHHS) +MET HE1 H(CHHS) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +MET N CA SINGLE n 1.487 0.0100 1.487 0.0100 +MET CA C SINGLE n 1.538 0.0113 1.538 0.0113 +MET CA CB SINGLE n 1.533 0.0100 1.533 0.0100 +MET C O DOUBLE n 1.251 0.0183 1.251 0.0183 +MET C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +MET CB CG SINGLE n 1.517 0.0186 1.517 0.0186 +MET CG SD SINGLE n 1.804 0.0100 1.804 0.0100 +MET SD CE SINGLE n 1.798 0.0100 1.798 0.0100 +MET N H SINGLE n 1.018 0.0520 0.902 0.0102 +MET N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +MET N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +MET CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +MET CB HB3 SINGLE n 1.092 0.0100 0.981 0.0141 +MET CB HB2 SINGLE n 1.092 0.0100 0.981 0.0141 +MET CG HG3 SINGLE n 1.092 0.0100 0.978 0.0200 +MET CG HG2 SINGLE n 1.092 0.0100 0.978 0.0200 +MET CE HE3 SINGLE n 1.092 0.0100 0.975 0.0110 +MET CE HE2 SINGLE n 1.092 0.0100 0.975 0.0110 +MET CE HE1 SINGLE n 1.092 0.0100 0.975 0.0110 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +MET CA N H 109.990 3.00 +MET CA N H2 109.990 3.00 +MET CA N H3 109.990 3.00 +MET H N H2 109.032 3.00 +MET H N H3 109.032 3.00 +MET H2 N H3 109.032 3.00 +MET N CA C 109.258 1.50 +MET N CA CB 110.970 1.50 +MET N CA HA 108.387 1.58 +MET C CA CB 109.608 2.17 +MET C CA HA 108.774 1.79 +MET CB CA HA 109.550 1.56 +MET CA C O 117.148 1.60 +MET CA C OXT 117.148 1.60 +MET O C OXT 125.704 1.50 +MET CA CB CG 113.978 1.60 +MET CA CB HB3 108.606 1.50 +MET CA CB HB2 108.606 1.50 +MET CG CB HB3 108.930 1.50 +MET CG CB HB2 108.930 1.50 +MET HB3 CB HB2 107.726 1.50 +MET CB CG SD 112.846 3.00 +MET CB CG HG3 109.287 1.50 +MET CB CG HG2 109.287 1.50 +MET SD CG HG3 108.733 1.50 +MET SD CG HG2 108.733 1.50 +MET HG3 CG HG2 107.881 1.50 +MET CG SD CE 100.693 3.00 +MET SD CE HE3 109.472 1.50 +MET SD CE HE2 109.472 1.50 +MET SD CE HE1 109.472 1.50 +MET HE3 CE HE2 109.569 2.44 +MET HE3 CE HE1 109.569 2.44 +MET HE2 CE HE1 109.569 2.44 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +MET chi1 N CA CB CG -60.000 10.0 3 +MET chi2 CA CB CG SD 180.000 10.0 3 +MET chi3 CB CG SD CE 180.000 10.0 3 +MET hh1 CG SD CE HE3 60.000 10.0 3 +MET sp3_sp3_1 C CA N H 180.000 10.0 3 +MET sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +MET chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +MET plan-1 C 0.020 +MET plan-1 CA 0.020 +MET plan-1 O 0.020 +MET plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +MET SMILES ACDLabs 10.04 O=C(O)C(N)CCSC +MET SMILES_CANONICAL CACTVS 3.341 CSCC[C@H](N)C(O)=O +MET SMILES CACTVS 3.341 CSCC[CH](N)C(O)=O +MET SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CSCC[C@@H](C(=O)O)N +MET SMILES "OpenEye OEToolkits" 1.5.0 CSCCC(C(=O)O)N +MET InChI InChI 1.03 InChI=1S/C5H11NO2S/c1-9-3-2-4(6)5(7)8/h4H,2-3,6H2,1H3,(H,7,8)/t4-/m0/s1 +MET InChIKey InChI 1.03 FFEARJCKVFRZRR-BYPYZUCNSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +MET acedrg 278 "dictionary generator" +MET acedrg_database 12 "data source" +MET rdkit 2019.09.1 "Chemoinformatics tool" +MET refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/MG.cif b/image_analysis/structure_refinement/monomers/MG.cif new file mode 100644 index 000000000..1b723799b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/MG.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +MG MG 'MAGNESIUM ION ' NON-POLYMER 1 1 . + +data_comp_MG +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +MG MG MG MG 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +MG MG n/a . END diff --git a/image_analysis/structure_refinement/monomers/MN.cif b/image_analysis/structure_refinement/monomers/MN.cif new file mode 100644 index 000000000..ee5537884 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/MN.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +MN MN 'MANGANESE (II) ION ' NON-POLYMER 1 1 . + +data_comp_MN +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +MN MN MN MN 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +MN MN n/a . END diff --git a/image_analysis/structure_refinement/monomers/MPD.cif b/image_analysis/structure_refinement/monomers/MPD.cif new file mode 100644 index 000000000..bc29cd330 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/MPD.cif @@ -0,0 +1,170 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +MPD MPD (4S)-2-METHYL-2,4-PENTANEDIOL NON-POLYMER 22 8 . +# +data_comp_MPD +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +MPD C1 C CH3 0 -2.742 -3.513 8.489 +MPD C2 C CT 0 -3.104 -4.028 9.879 +MPD O2 O OH1 0 -3.051 -5.468 9.845 +MPD CM C CH3 0 -4.531 -3.659 10.262 +MPD C3 C CH2 0 -2.100 -3.522 10.924 +MPD C4 C CH1 0 -2.174 -4.161 12.300 +MPD O4 O OH1 0 -1.753 -5.524 12.217 +MPD C5 C CH3 0 -1.373 -3.434 13.348 +MPD H11 H H 0 -2.205 -2.707 8.574 +MPD H12 H H 0 -3.550 -3.311 7.989 +MPD H13 H H 0 -2.231 -4.191 8.014 +MPD HO2 H H 0 -2.246 -5.731 9.774 +MPD HM1 H H 0 -4.554 -2.734 10.562 +MPD HM2 H H 0 -4.831 -4.241 10.980 +MPD HM3 H H 0 -5.116 -3.767 9.494 +MPD H31 H H 0 -2.230 -2.555 11.026 +MPD H32 H H 0 -1.197 -3.662 10.569 +MPD H4 H H 0 -3.118 -4.168 12.600 +MPD HO4 H H 0 -0.938 -5.565 11.984 +MPD H51 H H 0 -0.836 -4.069 13.855 +MPD H52 H H 0 -1.976 -2.969 13.955 +MPD H53 H H 0 -0.783 -2.784 12.924 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +MPD C1 C2 SINGLE n 1.520 0.0101 1.520 0.0101 +MPD C2 O2 SINGLE n 1.437 0.0141 1.437 0.0141 +MPD C2 CM SINGLE n 1.520 0.0101 1.520 0.0101 +MPD C2 C3 SINGLE n 1.531 0.0100 1.531 0.0100 +MPD C3 C4 SINGLE n 1.506 0.0200 1.506 0.0200 +MPD C4 O4 SINGLE n 1.424 0.0199 1.424 0.0199 +MPD C4 C5 SINGLE n 1.501 0.0160 1.501 0.0160 +MPD C1 H11 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD C1 H12 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD C1 H13 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD O2 HO2 SINGLE n 0.970 0.0120 0.848 0.0200 +MPD CM HM1 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD CM HM2 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD CM HM3 SINGLE n 1.089 0.0100 0.972 0.0148 +MPD C3 H31 SINGLE n 1.089 0.0100 0.981 0.0160 +MPD C3 H32 SINGLE n 1.089 0.0100 0.981 0.0160 +MPD C4 H4 SINGLE n 1.089 0.0100 0.992 0.0184 +MPD O4 HO4 SINGLE n 0.970 0.0120 0.848 0.0200 +MPD C5 H51 SINGLE n 1.089 0.0100 0.974 0.0145 +MPD C5 H52 SINGLE n 1.089 0.0100 0.974 0.0145 +MPD C5 H53 SINGLE n 1.089 0.0100 0.974 0.0145 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +MPD C2 C1 H11 109.123 1.50 +MPD C2 C1 H12 109.123 1.50 +MPD C2 C1 H13 109.123 1.50 +MPD H11 C1 H12 109.441 1.50 +MPD H11 C1 H13 109.441 1.50 +MPD H12 C1 H13 109.441 1.50 +MPD C1 C2 O2 107.291 2.44 +MPD C1 C2 CM 110.915 1.50 +MPD C1 C2 C3 111.119 1.58 +MPD O2 C2 CM 107.291 2.44 +MPD O2 C2 C3 107.760 2.12 +MPD CM C2 C3 111.119 1.58 +MPD C2 O2 HO2 109.561 1.92 +MPD C2 CM HM1 109.123 1.50 +MPD C2 CM HM2 109.123 1.50 +MPD C2 CM HM3 109.123 1.50 +MPD HM1 CM HM2 109.441 1.50 +MPD HM1 CM HM3 109.441 1.50 +MPD HM2 CM HM3 109.441 1.50 +MPD C2 C3 C4 111.094 2.85 +MPD C2 C3 H31 108.201 1.50 +MPD C2 C3 H32 108.201 1.50 +MPD C4 C3 H31 108.468 1.50 +MPD C4 C3 H32 108.468 1.50 +MPD H31 C3 H32 107.715 1.50 +MPD C3 C4 O4 109.024 2.32 +MPD C3 C4 C5 113.468 3.00 +MPD C3 C4 H4 108.603 1.50 +MPD O4 C4 C5 109.534 2.02 +MPD O4 C4 H4 107.545 2.92 +MPD C5 C4 H4 108.620 2.54 +MPD C4 O4 HO4 109.880 2.07 +MPD C4 C5 H51 109.852 1.50 +MPD C4 C5 H52 109.852 1.50 +MPD C4 C5 H53 109.852 1.50 +MPD H51 C5 H52 109.425 1.50 +MPD H51 C5 H53 109.425 1.50 +MPD H52 C5 H53 109.425 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +MPD sp3_sp3_2 H11 C1 C2 O2 -60.000 10.0 3 +MPD sp3_sp3_10 C1 C2 O2 HO2 180.000 10.0 3 +MPD sp3_sp3_19 C1 C2 CM HM1 -60.000 10.0 3 +MPD sp3_sp3_25 C1 C2 C3 C4 60.000 10.0 3 +MPD sp3_sp3_31 C2 C3 C4 O4 180.000 10.0 3 +MPD sp3_sp3_40 C3 C4 O4 HO4 180.000 10.0 3 +MPD sp3_sp3_43 C3 C4 C5 H51 180.000 10.0 3 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +MPD chir_1 C2 O2 C3 C1 both +MPD chir_2 C4 O4 C3 C5 positive +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +MPD SMILES ACDLabs 11.02 OC(C)CC(O)(C)C +MPD SMILES_CANONICAL CACTVS 3.352 C[C@H](O)CC(C)(C)O +MPD SMILES CACTVS 3.352 C[CH](O)CC(C)(C)O +MPD SMILES_CANONICAL "OpenEye OEToolkits" 1.7.0 C[C@@H](CC(C)(C)O)O +MPD SMILES "OpenEye OEToolkits" 1.7.0 CC(CC(C)(C)O)O +MPD InChI InChI 1.03 InChI=1S/C6H14O2/c1-5(7)4-6(2,3)8/h5,7-8H,4H2,1-3H3/t5-/m0/s1 +MPD InChIKey InChI 1.03 SVTBMSDMJJWYQN-YFKPBYRVSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +MPD acedrg 243 "dictionary generator" +MPD acedrg_database 11 "data source" +MPD rdkit 2017.03.2 "Chemoinformatics tool" +MPD refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/MSE.cif b/image_analysis/structure_refinement/monomers/MSE.cif new file mode 100644 index 000000000..d73f9f68b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/MSE.cif @@ -0,0 +1,201 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +MSE MSE SELENOMETHIONINE peptide 20 9 . + +data_comp_MSE +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +MSE N N NT3 1 10.980 -7.344 20.020 +MSE CA C CH1 0 10.215 -8.538 19.563 +MSE C C C 0 8.775 -8.458 20.089 +MSE O O O 0 8.605 -7.967 21.223 +MSE OXT O OC -1 7.876 -8.895 19.344 +MSE CB C CH2 0 10.896 -9.824 20.043 +MSE CG C CH2 0 12.189 -10.151 19.325 +MSE SE SE SE 0 12.850 -11.935 19.808 +MSE CE C CH3 0 13.628 -11.498 21.557 +MSE H H H 0 11.808 -7.339 19.642 +MSE H2 H H 0 11.069 -7.358 20.927 +MSE H3 H H 0 10.544 -6.581 19.779 +MSE HA H H 0 10.192 -8.533 18.579 +MSE HB2 H H 0 10.295 -10.556 19.923 +MSE HB3 H H 0 11.082 -9.746 20.975 +MSE HG2 H H 0 12.870 -9.483 19.555 +MSE HG3 H H 0 12.044 -10.114 18.355 +MSE HE1 H H 0 14.013 -12.298 21.947 +MSE HE2 H H 0 12.935 -11.153 22.141 +MSE HE3 H H 0 14.320 -10.828 21.443 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +MSE N n/a CA START +MSE H N . . +MSE H2 N . . +MSE H3 N . . +MSE CA N C . +MSE HA CA . . +MSE CB CA CG . +MSE HB2 CB . . +MSE HB3 CB . . +MSE CG CB SE . +MSE HG2 CG . . +MSE HG3 CG . . +MSE SE CG CE . +MSE CE SE HE1 . +MSE HE3 CE . . +MSE HE2 CE . . +MSE HE1 CE . . +MSE C CA . END +MSE O C . . +MSE OXT C . . + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +MSE N CA SINGLE n 1.488 0.0100 1.488 0.0100 +MSE CA C SINGLE n 1.533 0.0100 1.533 0.0100 +MSE CA CB SINGLE n 1.532 0.0100 1.532 0.0100 +MSE C O DOUBLE n 1.247 0.0187 1.247 0.0187 +MSE C OXT SINGLE n 1.247 0.0187 1.247 0.0187 +MSE CB CG SINGLE n 1.514 0.0200 1.514 0.0200 +MSE CG SE SINGLE n 1.963 0.0200 1.963 0.0200 +MSE SE CE SINGLE n 1.963 0.0200 1.963 0.0200 +MSE N H SINGLE n 1.036 0.0160 0.911 0.0200 +MSE N H2 SINGLE n 1.036 0.0160 0.911 0.0200 +MSE N H3 SINGLE n 1.036 0.0160 0.911 0.0200 +MSE CA HA SINGLE n 1.089 0.0100 0.985 0.0200 +MSE CB HB2 SINGLE n 1.089 0.0100 0.954 0.0200 +MSE CB HB3 SINGLE n 1.089 0.0100 0.954 0.0200 +MSE CG HG2 SINGLE n 1.089 0.0100 0.981 0.0167 +MSE CG HG3 SINGLE n 1.089 0.0100 0.981 0.0167 +MSE CE HE1 SINGLE n 1.089 0.0100 0.970 0.0162 +MSE CE HE2 SINGLE n 1.089 0.0100 0.970 0.0162 +MSE CE HE3 SINGLE n 1.089 0.0100 0.970 0.0162 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +MSE CA N H 110.062 1.93 +MSE CA N H2 110.062 1.93 +MSE CA N H3 110.062 1.93 +MSE H N H2 109.028 2.41 +MSE H N H3 109.028 2.41 +MSE H2 N H3 109.028 2.41 +MSE N CA C 109.241 1.50 +MSE N CA CB 110.245 1.51 +MSE N CA HA 108.487 1.50 +MSE C CA CB 110.728 2.07 +MSE C CA HA 108.824 1.50 +MSE CB CA HA 109.207 1.50 +MSE CA C O 117.124 1.50 +MSE CA C OXT 117.124 1.50 +MSE O C OXT 125.752 1.50 +MSE CA CB CG 113.897 1.50 +MSE CA CB HB2 108.567 1.50 +MSE CA CB HB3 108.567 1.50 +MSE CG CB HB2 108.056 1.50 +MSE CG CB HB3 108.056 1.50 +MSE HB2 CB HB3 107.715 1.50 +MSE CB CG SE 111.593 3.00 +MSE CB CG HG2 109.535 1.63 +MSE CB CG HG3 109.535 1.63 +MSE SE CG HG2 109.134 1.50 +MSE SE CG HG3 109.134 1.50 +MSE HG2 CG HG3 108.011 1.50 +MSE CG SE CE 98.689 1.50 +MSE SE CE HE1 109.134 1.50 +MSE SE CE HE2 109.134 1.50 +MSE SE CE HE3 109.134 1.50 +MSE HE1 CE HE2 109.290 1.50 +MSE HE1 CE HE3 109.290 1.50 +MSE HE2 CE HE3 109.290 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +MSE sp3_sp3_1 C CA N H 180.000 10.0 3 +MSE sp2_sp3_1 O C CA N 0.000 10.0 6 +MSE sp3_sp3_10 N CA CB CG 180.000 10.0 3 +MSE sp3_sp3_19 CA CB CG SE 180.000 10.0 3 +MSE sp3_sp3_28 CB CG SE CE 180.000 10.0 3 +MSE sp3_sp3_31 HE1 CE SE CG 180.000 10.0 3 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +MSE chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +MSE plan-1 C 0.020 +MSE plan-1 CA 0.020 +MSE plan-1 O 0.020 +MSE plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +MSE SMILES ACDLabs 10.04 O=C(O)C(N)CC[Se]C +MSE SMILES_CANONICAL CACTVS 3.341 C[Se]CC[C@H](N)C(O)=O +MSE SMILES CACTVS 3.341 C[Se]CC[CH](N)C(O)=O +MSE SMILES_CANONICAL ""OpenEye OEToolkits" 1.5.0 C[Se]CC[C@@H](C(=O)O)N +MSE SMILES ""OpenEye OEToolkits" 1.5.0 C[Se]CCC(C(=O)O)N +MSE InChI InChI 1.03 InChI=1S/C5H11NO2Se/c1-9-3-2-4(6)5(7)8/h4H,2-3,6H2,1H3,(H,7,8)/t4-/m0/s1 +MSE InChIKey InChI 1.03 RJFAYQIBOAGBLC-BYPYZUCNSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +MSE acedrg 243 ""dictionary generator" +MSE acedrg_database 11 ""data source" +MSE rdkit 2017.03.2 ""Chemoinformatics tool" +MSE refmac5 5.8.0238 ""optimization tool" diff --git a/image_analysis/structure_refinement/monomers/NA.cif b/image_analysis/structure_refinement/monomers/NA.cif new file mode 100644 index 000000000..e9d8ecd98 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/NA.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +NA NA 'SODIUM ION ' NON-POLYMER 1 1 . + +data_comp_NA +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +NA NA NA NA 1.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +NA NA n/a . END diff --git a/image_analysis/structure_refinement/monomers/NI.cif b/image_analysis/structure_refinement/monomers/NI.cif new file mode 100644 index 000000000..fb5249865 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/NI.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +NI NI 'NICKEL (II) ION ' NON-POLYMER 1 1 . + +data_comp_NI +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +NI NI NI NI 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +NI NI n/a . END diff --git a/image_analysis/structure_refinement/monomers/PEG.cif b/image_analysis/structure_refinement/monomers/PEG.cif new file mode 100644 index 000000000..08009cba8 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PEG.cif @@ -0,0 +1,138 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PEG PEG DI(HYDROXYETHYL)ETHER NON-POLYMER 17 7 . +# +data_comp_PEG +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PEG C1 C CH2 0 41.561 37.152 47.063 +PEG O1 O OH1 0 41.065 36.188 46.155 +PEG C2 C CH2 0 42.802 36.690 47.759 +PEG O2 O O2 0 42.505 35.564 48.578 +PEG C3 C CH2 0 43.645 35.062 49.268 +PEG C4 C CH2 0 43.253 33.888 50.109 +PEG O4 O OH1 0 44.370 33.256 50.702 +PEG H11 H H 0 40.870 37.346 47.731 +PEG H12 H H 0 41.754 37.980 46.576 +PEG HO1 H H 0 40.396 36.506 45.747 +PEG H21 H H 0 43.160 37.417 48.314 +PEG H22 H H 0 43.482 36.446 47.095 +PEG H31 H H 0 44.023 35.766 49.839 +PEG H32 H H 0 44.330 34.791 48.620 +PEG H41 H H 0 42.777 33.237 49.552 +PEG H42 H H 0 42.643 34.187 50.815 +PEG HO4 H H 0 44.736 33.789 51.248 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PEG C1 O1 SINGLE n 1.414 0.0200 1.414 0.0200 +PEG C1 C2 SINGLE n 1.496 0.0200 1.496 0.0200 +PEG C2 O2 SINGLE n 1.423 0.0106 1.423 0.0106 +PEG O2 C3 SINGLE n 1.423 0.0106 1.423 0.0106 +PEG C3 C4 SINGLE n 1.496 0.0200 1.496 0.0200 +PEG C4 O4 SINGLE n 1.414 0.0200 1.414 0.0200 +PEG C1 H11 SINGLE n 1.089 0.0100 0.980 0.0144 +PEG C1 H12 SINGLE n 1.089 0.0100 0.980 0.0144 +PEG O1 HO1 SINGLE n 0.970 0.0120 0.846 0.0200 +PEG C2 H21 SINGLE n 1.089 0.0100 0.982 0.0175 +PEG C2 H22 SINGLE n 1.089 0.0100 0.982 0.0175 +PEG C3 H31 SINGLE n 1.089 0.0100 0.982 0.0175 +PEG C3 H32 SINGLE n 1.089 0.0100 0.982 0.0175 +PEG C4 H41 SINGLE n 1.089 0.0100 0.980 0.0144 +PEG C4 H42 SINGLE n 1.089 0.0100 0.980 0.0144 +PEG O4 HO4 SINGLE n 0.970 0.0120 0.846 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PEG O1 C1 C2 112.284 1.56 +PEG O1 C1 H11 109.012 1.50 +PEG O1 C1 H12 109.012 1.50 +PEG C2 C1 H11 109.198 1.50 +PEG C2 C1 H12 109.198 1.50 +PEG H11 C1 H12 108.093 1.50 +PEG C1 O1 HO1 109.347 1.86 +PEG C1 C2 O2 109.904 1.68 +PEG C1 C2 H21 109.795 1.50 +PEG C1 C2 H22 109.795 1.50 +PEG O2 C2 H21 109.691 1.50 +PEG O2 C2 H22 109.691 1.50 +PEG H21 C2 H22 108.274 1.50 +PEG C2 O2 C3 112.795 1.50 +PEG O2 C3 C4 109.904 1.68 +PEG O2 C3 H31 109.691 1.50 +PEG O2 C3 H32 109.691 1.50 +PEG C4 C3 H31 109.795 1.50 +PEG C4 C3 H32 109.795 1.50 +PEG H31 C3 H32 108.274 1.50 +PEG C3 C4 O4 112.284 1.56 +PEG C3 C4 H41 109.198 1.50 +PEG C3 C4 H42 109.198 1.50 +PEG O4 C4 H41 109.012 1.50 +PEG O4 C4 H42 109.012 1.50 +PEG H41 C4 H42 108.093 1.50 +PEG C4 O4 HO4 109.347 1.86 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +PEG sp3_sp3_1 C2 C1 O1 HO1 180.000 10.0 3 +PEG sp3_sp3_4 O1 C1 C2 O2 180.000 10.0 3 +PEG sp3_sp3_13 C1 C2 O2 C3 180.000 10.0 3 +PEG sp3_sp3_16 C4 C3 O2 C2 180.000 10.0 3 +PEG sp3_sp3_19 O2 C3 C4 O4 180.000 10.0 3 +PEG sp3_sp3_28 C3 C4 O4 HO4 180.000 10.0 3 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PEG SMILES ACDLabs 12.01 OCCOCCO +PEG InChI InChI 1.03 InChI=1S/C4H10O3/c5-1-3-7-4-2-6/h5-6H,1-4H2 +PEG InChIKey InChI 1.03 MTHSVFCYNBDYFN-UHFFFAOYSA-N +PEG SMILES_CANONICAL CACTVS 3.370 OCCOCCO +PEG SMILES CACTVS 3.370 OCCOCCO +PEG SMILES_CANONICAL "OpenEye OEToolkits" 1.7.6 C(COCCO)O +PEG SMILES "OpenEye OEToolkits" 1.7.6 C(COCCO)O +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PEG acedrg 243 "dictionary generator" +PEG acedrg_database 11 "data source" +PEG rdkit 2017.03.2 "Chemoinformatics tool" +PEG refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/PG4.cif b/image_analysis/structure_refinement/monomers/PG4.cif new file mode 100644 index 000000000..77efd2c07 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PG4.cif @@ -0,0 +1,198 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PG4 PG4 "TETRAETHYLENE GLYCOL" NON-POLYMER 31 13 . +# +data_comp_PG4 +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PG4 O1 O OH1 0 -3.161 60.725 73.637 +PG4 C1 C CH2 0 -2.073 60.164 74.345 +PG4 C2 C CH2 0 -1.379 59.093 73.563 +PG4 O2 O O2 0 -0.854 59.637 72.355 +PG4 C3 C CH2 0 0.478 60.128 72.474 +PG4 C4 C CH2 0 0.861 60.848 71.220 +PG4 O3 O O2 0 2.240 61.204 71.277 +PG4 C5 C CH2 0 2.663 62.051 70.212 +PG4 C6 C CH2 0 2.490 63.484 70.609 +PG4 O4 O O2 0 2.911 64.332 69.543 +PG4 C7 C CH2 0 4.287 64.696 69.603 +PG4 C8 C CH2 0 4.670 65.446 68.364 +PG4 O5 O OH1 0 3.831 66.560 68.126 +PG4 HO1 H H 0 -3.573 61.267 74.139 +PG4 H11 H H 0 -2.401 59.786 75.187 +PG4 H12 H H 0 -1.432 60.874 74.560 +PG4 H21 H H 0 -2.017 58.377 73.349 +PG4 H22 H H 0 -0.655 58.704 74.102 +PG4 H31 H H 0 1.095 59.379 72.627 +PG4 H32 H H 0 0.541 60.741 73.239 +PG4 H41 H H 0 0.311 61.656 71.122 +PG4 H42 H H 0 0.699 60.270 70.443 +PG4 H51 H H 0 2.138 61.866 69.401 +PG4 H52 H H 0 3.608 61.877 70.010 +PG4 H61 H H 0 3.016 63.670 71.419 +PG4 H62 H H 0 1.546 63.659 70.813 +PG4 H71 H H 0 4.841 63.889 69.685 +PG4 H72 H H 0 4.447 65.258 70.392 +PG4 H81 H H 0 4.623 64.841 67.594 +PG4 H82 H H 0 5.596 65.757 68.450 +PG4 HO5 H H 0 3.919 67.118 68.756 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PG4 O1 C1 SINGLE n 1.414 0.0200 1.414 0.0200 +PG4 C1 C2 SINGLE n 1.496 0.0200 1.496 0.0200 +PG4 C2 O2 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 O2 C3 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 C3 C4 SINGLE n 1.496 0.0200 1.496 0.0200 +PG4 C4 O3 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 O3 C5 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 C5 C6 SINGLE n 1.496 0.0200 1.496 0.0200 +PG4 C6 O4 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 O4 C7 SINGLE n 1.423 0.0106 1.423 0.0106 +PG4 C7 C8 SINGLE n 1.496 0.0200 1.496 0.0200 +PG4 C8 O5 SINGLE n 1.414 0.0200 1.414 0.0200 +PG4 O1 HO1 SINGLE n 0.970 0.0120 0.846 0.0200 +PG4 C1 H11 SINGLE n 1.089 0.0100 0.980 0.0144 +PG4 C1 H12 SINGLE n 1.089 0.0100 0.980 0.0144 +PG4 C2 H21 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C2 H22 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C3 H31 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C3 H32 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C4 H41 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C4 H42 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C5 H51 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C5 H52 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C6 H61 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C6 H62 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C7 H71 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C7 H72 SINGLE n 1.089 0.0100 0.982 0.0175 +PG4 C8 H81 SINGLE n 1.089 0.0100 0.980 0.0144 +PG4 C8 H82 SINGLE n 1.089 0.0100 0.980 0.0144 +PG4 O5 HO5 SINGLE n 0.970 0.0120 0.846 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PG4 C1 O1 HO1 109.347 1.86 +PG4 O1 C1 C2 112.284 1.56 +PG4 O1 C1 H11 109.012 1.50 +PG4 O1 C1 H12 109.012 1.50 +PG4 C2 C1 H11 109.198 1.50 +PG4 C2 C1 H12 109.198 1.50 +PG4 H11 C1 H12 108.093 1.50 +PG4 C1 C2 O2 109.904 1.68 +PG4 C1 C2 H21 109.795 1.50 +PG4 C1 C2 H22 109.795 1.50 +PG4 O2 C2 H21 109.691 1.50 +PG4 O2 C2 H22 109.691 1.50 +PG4 H21 C2 H22 108.274 1.50 +PG4 C2 O2 C3 112.795 1.50 +PG4 O2 C3 C4 109.613 1.74 +PG4 O2 C3 H31 109.691 1.50 +PG4 O2 C3 H32 109.691 1.50 +PG4 C4 C3 H31 109.729 1.50 +PG4 C4 C3 H32 109.729 1.50 +PG4 H31 C3 H32 108.274 1.50 +PG4 C3 C4 O3 109.613 1.74 +PG4 C3 C4 H41 109.729 1.50 +PG4 C3 C4 H42 109.729 1.50 +PG4 O3 C4 H41 109.691 1.50 +PG4 O3 C4 H42 109.691 1.50 +PG4 H41 C4 H42 108.274 1.50 +PG4 C4 O3 C5 112.795 1.50 +PG4 O3 C5 C6 109.613 1.74 +PG4 O3 C5 H51 109.691 1.50 +PG4 O3 C5 H52 109.691 1.50 +PG4 C6 C5 H51 109.729 1.50 +PG4 C6 C5 H52 109.729 1.50 +PG4 H51 C5 H52 108.274 1.50 +PG4 C5 C6 O4 109.613 1.74 +PG4 C5 C6 H61 109.729 1.50 +PG4 C5 C6 H62 109.729 1.50 +PG4 O4 C6 H61 109.691 1.50 +PG4 O4 C6 H62 109.691 1.50 +PG4 H61 C6 H62 108.274 1.50 +PG4 C6 O4 C7 112.795 1.50 +PG4 O4 C7 C8 109.904 1.68 +PG4 O4 C7 H71 109.691 1.50 +PG4 O4 C7 H72 109.691 1.50 +PG4 C8 C7 H71 109.795 1.50 +PG4 C8 C7 H72 109.795 1.50 +PG4 H71 C7 H72 108.274 1.50 +PG4 C7 C8 O5 112.284 1.56 +PG4 C7 C8 H81 109.198 1.50 +PG4 C7 C8 H82 109.198 1.50 +PG4 O5 C8 H81 109.012 1.50 +PG4 O5 C8 H82 109.012 1.50 +PG4 H81 C8 H82 108.093 1.50 +PG4 C8 O5 HO5 109.347 1.86 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +PG4 sp3_sp3_1 C2 C1 O1 HO1 180.000 10.0 3 +PG4 sp3_sp3_49 O4 C7 C8 O5 180.000 10.0 3 +PG4 sp3_sp3_58 C7 C8 O5 HO5 180.000 10.0 3 +PG4 sp3_sp3_4 O1 C1 C2 O2 180.000 10.0 3 +PG4 sp3_sp3_13 C1 C2 O2 C3 180.000 10.0 3 +PG4 sp3_sp3_16 C4 C3 O2 C2 180.000 10.0 3 +PG4 sp3_sp3_19 O2 C3 C4 O3 180.000 10.0 3 +PG4 sp3_sp3_28 C3 C4 O3 C5 180.000 10.0 3 +PG4 sp3_sp3_31 C6 C5 O3 C4 180.000 10.0 3 +PG4 sp3_sp3_34 O3 C5 C6 O4 180.000 10.0 3 +PG4 sp3_sp3_43 C5 C6 O4 C7 180.000 10.0 3 +PG4 sp3_sp3_46 C8 C7 O4 C6 180.000 10.0 3 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PG4 SMILES ACDLabs 10.04 OCCOCCOCCOCCO +PG4 SMILES_CANONICAL CACTVS 3.341 OCCOCCOCCOCCO +PG4 SMILES CACTVS 3.341 OCCOCCOCCOCCO +PG4 SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(COCCOCCOCCO)O +PG4 SMILES "OpenEye OEToolkits" 1.5.0 C(COCCOCCOCCO)O +PG4 InChI InChI 1.03 InChI=1S/C8H18O5/c9-1-3-11-5-7-13-8-6-12-4-2-10/h9-10H,1-8H2 +PG4 InChIKey InChI 1.03 UWHCKJMYHZGTIT-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PG4 acedrg 243 "dictionary generator" +PG4 acedrg_database 11 "data source" +PG4 rdkit 2017.03.2 "Chemoinformatics tool" +PG4 refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/PGE.cif b/image_analysis/structure_refinement/monomers/PGE.cif new file mode 100644 index 000000000..63666644b --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PGE.cif @@ -0,0 +1,168 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PGE PGE "TRIETHYLENE GLYCOL" NON-POLYMER 24 10 . +# +data_comp_PGE +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PGE C1 C CH2 0 18.715 -18.946 34.930 +PGE O1 O OH1 0 18.098 -20.073 34.339 +PGE C2 C CH2 0 19.228 -19.237 36.305 +PGE O2 O O2 0 18.136 -19.500 37.182 +PGE C3 C CH2 0 18.527 -19.893 38.496 +PGE C4 C CH2 0 18.196 -21.337 38.706 +PGE O4 O OH1 0 19.209 -25.686 36.980 +PGE C6 C CH2 0 19.520 -24.306 36.972 +PGE C5 C CH2 0 18.689 -23.532 37.946 +PGE O3 O O2 0 18.956 -22.140 37.808 +PGE H1 H H 0 18.064 -18.215 34.977 +PGE H12 H H 0 19.459 -18.656 34.363 +PGE HO1 H H 0 17.842 -19.875 33.558 +PGE H2 H H 0 19.741 -18.468 36.636 +PGE H22 H H 0 19.826 -20.016 36.277 +PGE H3 H H 0 18.049 -19.347 39.157 +PGE H32 H H 0 19.492 -19.753 38.624 +PGE H4 H H 0 17.237 -21.483 38.551 +PGE H42 H H 0 18.400 -21.592 39.632 +PGE HO4 H H 0 19.421 -26.016 37.730 +PGE H6 H H 0 19.375 -23.952 36.071 +PGE H62 H H 0 20.468 -24.192 37.195 +PGE H5 H H 0 18.897 -23.819 38.861 +PGE H52 H H 0 17.737 -23.704 37.778 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PGE C1 O1 SINGLE n 1.414 0.0200 1.414 0.0200 +PGE C1 C2 SINGLE n 1.496 0.0200 1.496 0.0200 +PGE C2 O2 SINGLE n 1.423 0.0106 1.423 0.0106 +PGE O2 C3 SINGLE n 1.423 0.0106 1.423 0.0106 +PGE C3 C4 SINGLE n 1.496 0.0200 1.496 0.0200 +PGE C4 O3 SINGLE n 1.423 0.0106 1.423 0.0106 +PGE O4 C6 SINGLE n 1.414 0.0200 1.414 0.0200 +PGE C6 C5 SINGLE n 1.496 0.0200 1.496 0.0200 +PGE C5 O3 SINGLE n 1.423 0.0106 1.423 0.0106 +PGE C1 H1 SINGLE n 1.089 0.0100 0.980 0.0144 +PGE C1 H12 SINGLE n 1.089 0.0100 0.980 0.0144 +PGE O1 HO1 SINGLE n 0.970 0.0120 0.846 0.0200 +PGE C2 H2 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C2 H22 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C3 H3 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C3 H32 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C4 H4 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C4 H42 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE O4 HO4 SINGLE n 0.970 0.0120 0.846 0.0200 +PGE C6 H6 SINGLE n 1.089 0.0100 0.980 0.0144 +PGE C6 H62 SINGLE n 1.089 0.0100 0.980 0.0144 +PGE C5 H5 SINGLE n 1.089 0.0100 0.982 0.0175 +PGE C5 H52 SINGLE n 1.089 0.0100 0.982 0.0175 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PGE O1 C1 C2 112.284 1.56 +PGE O1 C1 H1 109.012 1.50 +PGE O1 C1 H12 109.012 1.50 +PGE C2 C1 H1 109.198 1.50 +PGE C2 C1 H12 109.198 1.50 +PGE H1 C1 H12 108.093 1.50 +PGE C1 O1 HO1 109.347 1.86 +PGE C1 C2 O2 109.904 1.68 +PGE C1 C2 H2 109.795 1.50 +PGE C1 C2 H22 109.795 1.50 +PGE O2 C2 H2 109.691 1.50 +PGE O2 C2 H22 109.691 1.50 +PGE H2 C2 H22 108.274 1.50 +PGE C2 O2 C3 112.795 1.50 +PGE O2 C3 C4 109.613 1.74 +PGE O2 C3 H3 109.691 1.50 +PGE O2 C3 H32 109.691 1.50 +PGE C4 C3 H3 109.729 1.50 +PGE C4 C3 H32 109.729 1.50 +PGE H3 C3 H32 108.274 1.50 +PGE C3 C4 O3 109.613 1.74 +PGE C3 C4 H4 109.729 1.50 +PGE C3 C4 H42 109.729 1.50 +PGE O3 C4 H4 109.691 1.50 +PGE O3 C4 H42 109.691 1.50 +PGE H4 C4 H42 108.274 1.50 +PGE C6 O4 HO4 109.347 1.86 +PGE O4 C6 C5 112.284 1.56 +PGE O4 C6 H6 109.012 1.50 +PGE O4 C6 H62 109.012 1.50 +PGE C5 C6 H6 109.198 1.50 +PGE C5 C6 H62 109.198 1.50 +PGE H6 C6 H62 108.093 1.50 +PGE C6 C5 O3 109.904 1.68 +PGE C6 C5 H5 109.795 1.50 +PGE C6 C5 H52 109.795 1.50 +PGE O3 C5 H5 109.691 1.50 +PGE O3 C5 H52 109.691 1.50 +PGE H5 C5 H52 108.274 1.50 +PGE C4 O3 C5 112.795 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +PGE sp3_sp3_1 C2 C1 O1 HO1 180.000 10.0 3 +PGE sp3_sp3_4 O1 C1 C2 O2 180.000 10.0 3 +PGE sp3_sp3_13 C1 C2 O2 C3 180.000 10.0 3 +PGE sp3_sp3_16 C4 C3 O2 C2 180.000 10.0 3 +PGE sp3_sp3_19 O2 C3 C4 O3 180.000 10.0 3 +PGE sp3_sp3_28 C3 C4 O3 C5 180.000 10.0 3 +PGE sp3_sp3_31 C5 C6 O4 HO4 180.000 10.0 3 +PGE sp3_sp3_34 O3 C5 C6 O4 180.000 10.0 3 +PGE sp3_sp3_43 C6 C5 O3 C4 180.000 10.0 3 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PGE SMILES ACDLabs 10.04 OCCOCCOCCO +PGE SMILES_CANONICAL CACTVS 3.341 OCCOCCOCCO +PGE SMILES CACTVS 3.341 OCCOCCOCCO +PGE SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C(COCCOCCO)O +PGE SMILES "OpenEye OEToolkits" 1.5.0 C(COCCOCCO)O +PGE InChI InChI 1.03 InChI=1S/C6H14O4/c7-1-3-9-5-6-10-4-2-8/h7-8H,1-6H2 +PGE InChIKey InChI 1.03 ZIBGPFATKBEMQZ-UHFFFAOYSA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PGE acedrg 243 "dictionary generator" +PGE acedrg_database 11 "data source" +PGE rdkit 2017.03.2 "Chemoinformatics tool" +PGE refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/PHE.cif b/image_analysis/structure_refinement/monomers/PHE.cif new file mode 100644 index 000000000..57e42ec86 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PHE.cif @@ -0,0 +1,261 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PHE PHE PHENYLALANINE peptide 23 12 . + +data_comp_PHE +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PHE N N NT3 1 3.215 22.308 6.140 +PHE CA C CH1 0 4.240 21.287 5.785 +PHE C C C 0 5.492 21.998 5.258 +PHE O O O 0 5.348 22.751 4.269 +PHE CB C CH2 0 3.652 20.304 4.767 +PHE CG C CR6 0 4.548 19.121 4.423 +PHE CD1 C CR16 0 4.526 17.959 5.195 +PHE CD2 C CR16 0 5.408 19.169 3.325 +PHE CE1 C CR16 0 5.344 16.878 4.879 +PHE CE2 C CR16 0 6.225 18.087 3.012 +PHE CZ C CR16 0 6.192 16.943 3.789 +PHE OXT O OC -1 6.569 21.775 5.853 +PHE H H H 0 2.984 22.781 5.407 +PHE H2 H H 0 3.541 22.872 6.764 +PHE H3 H H 0 2.480 21.902 6.470 +PHE HA H H 0 4.482 20.785 6.608 +PHE HB3 H H 0 3.450 20.797 3.941 +PHE HB2 H H 0 2.802 19.961 5.122 +PHE HD1 H H 0 3.950 17.907 5.941 +PHE HD2 H H 0 5.437 19.946 2.791 +PHE HE1 H H 0 5.320 16.099 5.411 +PHE HE2 H H 0 6.803 18.134 2.267 +PHE HZ H H 0 6.746 16.210 3.575 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +PHE N n/a CA START +PHE H N . . +PHE H2 N . . +PHE H3 N . . +PHE CA N C . +PHE HA CA . . +PHE CB CA CG . +PHE HB3 CB . . +PHE HB2 CB . . +PHE CG CB CD1 . +PHE CD1 CG CE1 . +PHE HD1 CD1 . . +PHE CE1 CD1 CZ . +PHE HE1 CE1 . . +PHE CZ CE1 CE2 . +PHE HZ CZ . . +PHE CE2 CZ CD2 . +PHE HE2 CE2 . . +PHE CD2 CE2 HD2 . +PHE HD2 CD2 . . +PHE C CA . END +PHE O C . . +PHE OXT C . . +PHE CD2 CG . ADD + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +PHE N N(CCCH)(H)3 +PHE CA C(CC[6a]HH)(NH3)(COO)(H) +PHE C C(CCHN)(O)2 +PHE O O(CCO) +PHE CB C(C[6a]C[6a]2)(CCHN)(H)2 +PHE CG C[6a](C[6a]C[6a]H)2(CCHH){1|C<3>,2|H<1>} +PHE CD1 C[6a](C[6a]C[6a]C)(C[6a]C[6a]H)(H){1|C<3>,2|H<1>} +PHE CD2 C[6a](C[6a]C[6a]C)(C[6a]C[6a]H)(H){1|C<3>,2|H<1>} +PHE CE1 C[6a](C[6a]C[6a]H)2(H){1|C<3>,1|C<4>,1|H<1>} +PHE CE2 C[6a](C[6a]C[6a]H)2(H){1|C<3>,1|C<4>,1|H<1>} +PHE CZ C[6a](C[6a]C[6a]H)2(H){1|C<3>,2|H<1>} +PHE OXT O(CCO) +PHE H H(NCHH) +PHE H2 H(NCHH) +PHE H3 H(NCHH) +PHE HA H(CCCN) +PHE HB3 H(CC[6a]CH) +PHE HB2 H(CC[6a]CH) +PHE HD1 H(C[6a]C[6a]2) +PHE HD2 H(C[6a]C[6a]2) +PHE HE1 H(C[6a]C[6a]2) +PHE HE2 H(C[6a]C[6a]2) +PHE HZ H(C[6a]C[6a]2) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PHE N CA SINGLE n 1.489 0.0100 1.489 0.0100 +PHE CA C SINGLE n 1.531 0.0171 1.531 0.0171 +PHE CA CB SINGLE n 1.532 0.0100 1.532 0.0100 +PHE C O DOUBLE n 1.251 0.0183 1.251 0.0183 +PHE C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +PHE CB CG SINGLE n 1.523 0.0100 1.523 0.0100 +PHE CG CD1 DOUBLE y 1.390 0.0116 1.390 0.0116 +PHE CG CD2 SINGLE y 1.390 0.0116 1.390 0.0116 +PHE CD1 CE1 SINGLE y 1.386 0.0131 1.386 0.0131 +PHE CD2 CE2 DOUBLE y 1.386 0.0131 1.386 0.0131 +PHE CE1 CZ DOUBLE y 1.376 0.0151 1.376 0.0151 +PHE CE2 CZ SINGLE y 1.376 0.0151 1.376 0.0151 +PHE N H SINGLE n 1.018 0.0520 0.902 0.0102 +PHE N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +PHE N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +PHE CA HA SINGLE n 1.092 0.0100 0.994 0.0200 +PHE CB HB3 SINGLE n 1.092 0.0100 0.983 0.0163 +PHE CB HB2 SINGLE n 1.092 0.0100 0.983 0.0163 +PHE CD1 HD1 SINGLE n 1.085 0.0150 0.944 0.0143 +PHE CD2 HD2 SINGLE n 1.085 0.0150 0.944 0.0143 +PHE CE1 HE1 SINGLE n 1.085 0.0150 0.944 0.0180 +PHE CE2 HE2 SINGLE n 1.085 0.0150 0.944 0.0180 +PHE CZ HZ SINGLE n 1.085 0.0150 0.944 0.0170 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PHE CA N H 109.791 3.00 +PHE CA N H2 109.791 3.00 +PHE CA N H3 109.791 3.00 +PHE H N H2 109.032 3.00 +PHE H N H3 109.032 3.00 +PHE H2 N H3 109.032 3.00 +PHE N CA C 109.085 1.50 +PHE N CA CB 109.965 3.00 +PHE N CA HA 108.547 1.50 +PHE C CA CB 111.980 3.00 +PHE C CA HA 108.746 1.50 +PHE CB CA HA 108.686 1.50 +PHE CA C O 117.219 3.00 +PHE CA C OXT 117.219 3.00 +PHE O C OXT 125.562 1.50 +PHE CA CB CG 114.693 2.05 +PHE CA CB HB3 108.494 1.50 +PHE CA CB HB2 108.494 1.50 +PHE CG CB HB3 108.859 1.50 +PHE CG CB HB2 108.859 1.50 +PHE HB3 CB HB2 107.843 2.16 +PHE CB CG CD1 120.965 1.50 +PHE CB CG CD2 120.965 1.50 +PHE CD1 CG CD2 118.071 1.50 +PHE CG CD1 CE1 120.673 1.50 +PHE CG CD1 HD1 119.564 1.50 +PHE CE1 CD1 HD1 119.763 1.50 +PHE CG CD2 CE2 120.673 1.50 +PHE CG CD2 HD2 119.564 1.50 +PHE CE2 CD2 HD2 119.763 1.50 +PHE CD1 CE1 CZ 120.297 1.50 +PHE CD1 CE1 HE1 119.796 1.50 +PHE CZ CE1 HE1 119.907 1.50 +PHE CD2 CE2 CZ 120.297 1.50 +PHE CD2 CE2 HE2 119.796 1.50 +PHE CZ CE2 HE2 119.907 1.50 +PHE CE1 CZ CE2 119.995 1.50 +PHE CE1 CZ HZ 120.000 1.50 +PHE CE2 CZ HZ 120.000 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +PHE chi1 N CA CB CG -60.000 10.0 3 +PHE chi2 CA CB CG CD1 90.000 10.0 6 +PHE CONST_1 CB CG CD1 CE1 0.000 0.0 1 +PHE CONST_2 CG CD1 CE1 CZ 0.000 0.0 1 +PHE CONST_3 CZ CE2 CD2 CG 0.000 0.0 1 +PHE CONST_4 CD1 CE1 CZ CE2 0.000 0.0 1 +PHE CONST_5 CE1 CZ CE2 CD2 0.000 0.0 1 +PHE sp3_sp3_1 C CA N H 180.000 10.0 3 +PHE const_21 CE2 CD2 CG CD1 0.000 0.0 1 +PHE sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +PHE chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +PHE plan-1 CB 0.020 +PHE plan-1 CD1 0.020 +PHE plan-1 CD2 0.020 +PHE plan-1 CE1 0.020 +PHE plan-1 CE2 0.020 +PHE plan-1 CG 0.020 +PHE plan-1 CZ 0.020 +PHE plan-1 HD1 0.020 +PHE plan-1 HD2 0.020 +PHE plan-1 HE1 0.020 +PHE plan-1 HE2 0.020 +PHE plan-1 HZ 0.020 +PHE plan-2 C 0.020 +PHE plan-2 CA 0.020 +PHE plan-2 O 0.020 +PHE plan-2 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PHE SMILES ACDLabs 10.04 O=C(O)C(N)Cc1ccccc1 +PHE SMILES_CANONICAL CACTVS 3.341 N[C@@H](Cc1ccccc1)C(O)=O +PHE SMILES CACTVS 3.341 N[CH](Cc1ccccc1)C(O)=O +PHE SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 c1ccc(cc1)C[C@@H](C(=O)O)N +PHE SMILES "OpenEye OEToolkits" 1.5.0 c1ccc(cc1)CC(C(=O)O)N +PHE InChI InChI 1.03 InChI=1S/C9H11NO2/c10-8(9(11)12)6-7-4-2-1-3-5-7/h1-5,8H,6,10H2,(H,11,12)/t8-/m0/s1 +PHE InChIKey InChI 1.03 COLNVLDHVKWLRT-QMMMGPOBSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PHE acedrg 278 "dictionary generator" +PHE acedrg_database 12 "data source" +PHE rdkit 2019.09.1 "Chemoinformatics tool" +PHE refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/PO4.cif b/image_analysis/structure_refinement/monomers/PO4.cif new file mode 100644 index 000000000..6c80df723 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PO4.cif @@ -0,0 +1,86 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PO4 PO4 "PHOSPHATE ION" NON-POLYMER 5 5 . +# +data_comp_PO4 +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PO4 P P P 0 29.978 23.532 13.276 +PO4 O1 O O 0 31.126 22.989 14.118 +PO4 O2 O OP -1 30.372 24.882 12.690 +PO4 O3 O OP -1 29.672 22.557 12.145 +PO4 O4 O OP -1 28.741 23.699 14.151 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PO4 P O1 DOUBLE n 1.524 0.0200 1.524 0.0200 +PO4 P O2 SINGLE n 1.524 0.0200 1.524 0.0200 +PO4 P O3 SINGLE n 1.524 0.0200 1.524 0.0200 +PO4 P O4 SINGLE n 1.524 0.0200 1.524 0.0200 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PO4 O1 P O2 109.461 1.50 +PO4 O1 P O3 109.461 1.50 +PO4 O1 P O4 109.461 1.50 +PO4 O2 P O3 109.461 1.50 +PO4 O2 P O4 109.461 1.50 +PO4 O3 P O4 109.461 1.50 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +PO4 chir_1 P O2 O3 O4 both +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PO4 SMILES ACDLabs 10.04 "[O-]P([O-])([O-])=O" +PO4 SMILES_CANONICAL CACTVS 3.341 "[O-][P]([O-])([O-])=O" +PO4 SMILES CACTVS 3.341 "[O-][P]([O-])([O-])=O" +PO4 SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "[O-]P(=O)([O-])[O-]" +PO4 SMILES "OpenEye OEToolkits" 1.5.0 "[O-]P(=O)([O-])[O-]" +PO4 InChI InChI 1.03 InChI=1S/H3O4P/c1-5(2,3)4/h(H3,1,2,3,4)/p-3 +PO4 InChIKey InChI 1.03 NBIIXXVUZAFLBC-UHFFFAOYSA-K +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PO4 acedrg 243 "dictionary generator" +PO4 acedrg_database 11 "data source" +PO4 rdkit 2017.03.2 "Chemoinformatics tool" +PO4 refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/PRO.cif b/image_analysis/structure_refinement/monomers/PRO.cif new file mode 100644 index 000000000..2330d47a9 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/PRO.cif @@ -0,0 +1,216 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +PRO PRO PROLINE P-peptide 17 8 . + +data_comp_PRO +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.alt_atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +PRO N N N NT2 1 39.160 37.649 83.026 +PRO CA CA C CH1 0 38.550 38.680 82.125 +PRO C C C C 0 37.155 39.077 82.602 +PRO O O O O 0 36.450 38.196 83.146 +PRO CB CB C CH2 0 38.553 38.007 80.756 +PRO CG CG C CH2 0 38.265 36.558 81.098 +PRO CD CD C CH2 0 38.934 36.298 82.416 +PRO OXT OXT O OC -1 36.821 40.268 82.409 +PRO H H H H 0 40.054 37.806 83.097 +PRO H2 H2 H H 0 38.800 37.681 83.862 +PRO HA HA H H 0 39.125 39.473 82.102 +PRO HB3 HB3 H H 0 39.422 38.100 80.320 +PRO HB2 HB2 H H 0 37.858 38.378 80.178 +PRO HG3 HG3 H H 0 38.625 35.964 80.410 +PRO HG2 HG2 H H 0 37.302 36.406 81.169 +PRO HD3 HD3 H H 0 38.363 35.755 82.994 +PRO HD2 HD2 H H 0 39.785 35.835 82.289 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +PRO N n/a CA START +PRO CA N C . +PRO HA CA . . +PRO CB CA CG . +PRO HB3 CB . . +PRO HB2 CB . . +PRO CG CB CD . +PRO HG3 CG . . +PRO HG2 CG . . +PRO CD CG HD2 . +PRO HD3 CD . . +PRO HD2 CD . . +PRO C CA . END +PRO O C . . +PRO OXT C . . +PRO H N . . +PRO H2 N . . +PRO CD N . ADD + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +PRO N N[5](C[5]C[5]CH)(C[5]C[5]HH)(H)2{4|H<1>} +PRO CA C[5](C[5]C[5]HH)(N[5]C[5]HH)(COO)(H){4|H<1>} +PRO C C(C[5]C[5]N[5]H)(O)2 +PRO O O(CC[5]O) +PRO CB C[5](C[5]C[5]HH)(C[5]N[5]CH)(H)2{4|H<1>} +PRO CG C[5](C[5]C[5]HH)(C[5]N[5]HH)(H)2{1|C<3>,3|H<1>} +PRO CD C[5](C[5]C[5]HH)(N[5]C[5]HH)(H)2{1|C<3>,3|H<1>} +PRO OXT O(CC[5]O) +PRO H H(N[5]C[5]2H) +PRO H2 H(N[5]C[5]2H) +PRO HA H(C[5]C[5]N[5]C) +PRO HB3 H(C[5]C[5]2H) +PRO HB2 H(C[5]C[5]2H) +PRO HG3 H(C[5]C[5]2H) +PRO HG2 H(C[5]C[5]2H) +PRO HD3 H(C[5]C[5]N[5]H) +PRO HD2 H(C[5]C[5]N[5]H) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.value_order +_chem_comp_bond.pdbx_aromatic_flag +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +PRO N CA SINGLE n 1.496 0.0142 1.496 0.0142 +PRO N CD SINGLE n 1.499 0.0135 1.499 0.0135 +PRO CA C SINGLE n 1.525 0.0103 1.525 0.0103 +PRO CA CB SINGLE n 1.526 0.0157 1.526 0.0157 +PRO C O DOUBLE n 1.252 0.0117 1.252 0.0117 +PRO C OXT SINGLE n 1.252 0.0117 1.252 0.0117 +PRO CB CG SINGLE n 1.516 0.0179 1.516 0.0179 +PRO CG CD SINGLE n 1.497 0.0200 1.497 0.0200 +PRO N H SINGLE n 1.018 0.0520 0.910 0.0200 +PRO N H2 SINGLE n 1.018 0.0520 0.910 0.0200 +PRO CA HA SINGLE n 1.092 0.0100 0.980 0.0200 +PRO CB HB3 SINGLE n 1.092 0.0100 0.977 0.0145 +PRO CB HB2 SINGLE n 1.092 0.0100 0.977 0.0145 +PRO CG HG3 SINGLE n 1.092 0.0100 0.978 0.0181 +PRO CG HG2 SINGLE n 1.092 0.0100 0.978 0.0181 +PRO CD HD3 SINGLE n 1.092 0.0100 0.977 0.0199 +PRO CD HD2 SINGLE n 1.092 0.0100 0.977 0.0199 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +PRO CA N CD 107.978 1.50 +PRO CA N H 109.889 3.00 +PRO CA N H2 109.889 3.00 +PRO CD N H 110.257 3.00 +PRO CD N H2 110.257 3.00 +PRO H N H2 108.772 3.00 +PRO N CA C 110.397 1.50 +PRO N CA CB 103.994 1.50 +PRO N CA HA 109.579 1.50 +PRO C CA CB 113.159 3.00 +PRO C CA HA 109.687 1.50 +PRO CB CA HA 109.910 1.89 +PRO CA C O 116.979 3.00 +PRO CA C OXT 116.979 3.00 +PRO O C OXT 126.043 1.52 +PRO CA CB CG 101.701 3.00 +PRO CA CB HB3 110.865 1.50 +PRO CA CB HB2 110.865 1.50 +PRO CG CB HB3 110.891 1.59 +PRO CG CB HB2 110.891 1.59 +PRO HB3 CB HB2 108.880 2.25 +PRO CB CG CD 105.541 3.00 +PRO CB CG HG3 110.897 1.50 +PRO CB CG HG2 110.897 1.50 +PRO CD CG HG3 110.621 1.50 +PRO CD CG HG2 110.621 1.50 +PRO HG3 CG HG2 108.871 1.50 +PRO N CD CG 104.386 2.30 +PRO N CD HD3 110.569 1.50 +PRO N CD HD2 110.569 1.50 +PRO CG CD HD3 111.131 1.62 +PRO CG CD HD2 111.131 1.62 +PRO HD3 CD HD2 109.116 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +PRO chi1 N CA CB CG -60.000 10.0 3 +PRO chi2 CA CB CG CD 180.000 10.0 3 +PRO sp3_sp3_1 CB CA N CD 60.000 10.0 3 +PRO sp3_sp3_28 N CD CG CB -60.000 10.0 3 +PRO sp3_sp3_37 CG CD N CA 180.000 10.0 3 +PRO sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +PRO chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +PRO plan-1 C 0.020 +PRO plan-1 CA 0.020 +PRO plan-1 O 0.020 +PRO plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +PRO SMILES ACDLabs 10.04 "O=C(O)C1NCCC1" +PRO SMILES_CANONICAL CACTVS 3.341 "OC(=O)[C@@H]1CCCN1" +PRO SMILES CACTVS 3.341 "OC(=O)[CH]1CCCN1" +PRO SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "C1C[C@H](NC1)C(=O)O" +PRO SMILES "OpenEye OEToolkits" 1.5.0 "C1CC(NC1)C(=O)O" +PRO InChI InChI 1.03 "InChI=1S/C5H9NO2/c7-5(8)4-2-1-3-6-4/h4,6H,1-3H2,(H,7,8)/t4-/m0/s1" +PRO InChIKey InChI 1.03 ONIBWKKTOPOVIA-BYPYZUCNSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +PRO acedrg 281 "dictionary generator" +PRO acedrg_database 12 "data source" +PRO rdkit 2019.09.1 "Chemoinformatics tool" +PRO refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/SER.cif b/image_analysis/structure_refinement/monomers/SER.cif new file mode 100644 index 000000000..f16baafc7 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/SER.cif @@ -0,0 +1,188 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +SER SER SERINE peptide 14 7 . + +data_comp_SER +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +SER N N NT3 1 88.105 -7.500 -9.831 +SER CA C CH1 0 87.822 -7.221 -11.265 +SER C C C 0 88.475 -5.896 -11.689 +SER O O O 0 88.336 -4.918 -10.921 +SER CB C CH2 0 86.337 -7.203 -11.533 +SER OG O OH1 0 85.742 -8.447 -11.190 +SER OXT O OC -1 89.099 -5.887 -12.773 +SER H H H 0 87.553 -7.016 -9.304 +SER H2 H H 0 88.960 -7.295 -9.626 +SER H3 H H 0 87.971 -8.377 -9.665 +SER HA H H 0 88.226 -7.948 -11.803 +SER HB3 H H 0 86.182 -7.019 -12.479 +SER HB2 H H 0 85.923 -6.490 -11.011 +SER HG H H 0 84.904 -8.380 -11.287 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +SER N n/a CA START +SER H N . . +SER H2 N . . +SER H3 N . . +SER CA N C . +SER HA CA . . +SER CB CA OG . +SER HB3 CB . . +SER HB2 CB . . +SER OG CB HG . +SER HG OG . . +SER C CA . END +SER O C . . +SER OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +SER N N(CCCH)(H)3 +SER CA C(CHHO)(NH3)(COO)(H) +SER C C(CCHN)(O)2 +SER O O(CCO) +SER CB C(CCHN)(OH)(H)2 +SER OG O(CCHH)(H) +SER OXT O(CCO) +SER H H(NCHH) +SER H2 H(NCHH) +SER H3 H(NCHH) +SER HA H(CCCN) +SER HB3 H(CCHO) +SER HB2 H(CCHO) +SER HG H(OC) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +SER N CA SINGLE n 1.487 0.0100 1.487 0.0100 +SER CA C SINGLE n 1.536 0.0100 1.536 0.0100 +SER CA CB SINGLE n 1.508 0.0190 1.508 0.0190 +SER C O DOUBLE n 1.251 0.0183 1.251 0.0183 +SER C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +SER CB OG SINGLE n 1.421 0.0108 1.421 0.0108 +SER N H SINGLE n 1.018 0.0520 0.902 0.0102 +SER N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +SER N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +SER CA HA SINGLE n 1.092 0.0100 0.991 0.0200 +SER CB HB3 SINGLE n 1.092 0.0100 0.976 0.0180 +SER CB HB2 SINGLE n 1.092 0.0100 0.976 0.0180 +SER OG HG SINGLE n 0.972 0.0180 0.846 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +SER CA N H 109.696 3.00 +SER CA N H2 109.696 3.00 +SER CA N H3 109.696 3.00 +SER H N H2 109.032 3.00 +SER H N H3 109.032 3.00 +SER H2 N H3 109.032 3.00 +SER N CA C 109.839 1.50 +SER N CA CB 111.152 1.50 +SER N CA HA 108.129 1.50 +SER C CA CB 111.300 1.50 +SER C CA HA 108.235 1.50 +SER CB CA HA 108.445 1.50 +SER CA C O 117.199 1.50 +SER CA C OXT 117.189 1.50 +SER O C OXT 125.593 1.50 +SER CA CB OG 110.934 1.86 +SER CA CB HB3 109.238 1.50 +SER CA CB HB2 109.238 1.50 +SER OG CB HB3 109.353 1.50 +SER OG CB HB2 109.353 1.50 +SER HB3 CB HB2 108.095 1.88 +SER CB OG HG 108.539 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +SER chi1 N CA CB OG -60.000 10.0 3 +SER hh1 CA CB OG HG 180.000 10.0 3 +SER sp3_sp3_1 C CA N H 180.000 10.0 3 +SER sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +SER chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +SER plan-1 C 0.020 +SER plan-1 CA 0.020 +SER plan-1 O 0.020 +SER plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +SER SMILES ACDLabs 10.04 O=C(O)C(N)CO +SER SMILES_CANONICAL CACTVS 3.341 N[C@@H](CO)C(O)=O +SER SMILES CACTVS 3.341 N[CH](CO)C(O)=O +SER SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C([C@@H](C(=O)O)N)O +SER SMILES "OpenEye OEToolkits" 1.5.0 C(C(C(=O)O)N)O +SER InChI InChI 1.03 InChI=1S/C3H7NO3/c4-2(1-5)3(6)7/h2,5H,1,4H2,(H,6,7)/t2-/m0/s1 +SER InChIKey InChI 1.03 MTCFGRXMJLQNBG-REOHCLBHSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +SER acedrg 278 "dictionary generator" +SER acedrg_database 12 "data source" +SER rdkit 2019.09.1 "Chemoinformatics tool" +SER refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/SO4.cif b/image_analysis/structure_refinement/monomers/SO4.cif new file mode 100644 index 000000000..1f560acff --- /dev/null +++ b/image_analysis/structure_refinement/monomers/SO4.cif @@ -0,0 +1,86 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +SO4 SO4 "SULFATE ION" NON-POLYMER 5 5 . +# +data_comp_SO4 +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +SO4 S S S3 0 16.537 34.975 5.493 +SO4 O1 O O 0 17.831 34.952 4.866 +SO4 O2 O O 0 16.570 35.855 6.629 +SO4 O3 O OS -1 15.557 35.444 4.551 +SO4 O4 O OS -1 16.190 33.647 5.924 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +SO4 S O1 DOUBLE n 1.438 0.0156 1.438 0.0156 +SO4 S O2 DOUBLE n 1.438 0.0156 1.438 0.0156 +SO4 S O3 SINGLE n 1.438 0.0156 1.438 0.0156 +SO4 S O4 SINGLE n 1.438 0.0156 1.438 0.0156 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +SO4 O1 S O2 109.467 1.50 +SO4 O1 S O3 109.467 1.50 +SO4 O1 S O4 109.467 1.50 +SO4 O2 S O3 109.467 1.50 +SO4 O2 S O4 109.467 1.50 +SO4 O3 S O4 109.467 1.50 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +SO4 chir_1 S O1 O2 O3 both +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +SO4 SMILES ACDLabs 10.04 "[O-]S([O-])(=O)=O" +SO4 SMILES_CANONICAL CACTVS 3.341 "[O-][S]([O-])(=O)=O" +SO4 SMILES CACTVS 3.341 "[O-][S]([O-])(=O)=O" +SO4 SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "[O-]S(=O)(=O)[O-]" +SO4 SMILES "OpenEye OEToolkits" 1.5.0 "[O-]S(=O)(=O)[O-]" +SO4 InChI InChI 1.03 InChI=1S/H2O4S/c1-5(2,3)4/h(H2,1,2,3,4)/p-2 +SO4 InChIKey InChI 1.03 QAOWNCQODCNURD-UHFFFAOYSA-L +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +SO4 acedrg 243 "dictionary generator" +SO4 acedrg_database 11 "data source" +SO4 rdkit 2017.03.2 "Chemoinformatics tool" +SO4 refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/THR.cif b/image_analysis/structure_refinement/monomers/THR.cif new file mode 100644 index 000000000..ecef5ae40 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/THR.cif @@ -0,0 +1,208 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +THR THR THREONINE peptide 17 8 . + +data_comp_THR +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +THR N N NT3 1 36.284 31.964 31.738 +THR CA C CH1 0 35.016 31.199 31.745 +THR C C C 0 34.952 30.333 30.501 +THR O O O 0 35.086 30.909 29.398 +THR CB C CH1 0 33.833 32.166 31.829 +THR OG1 O OH1 0 34.044 32.962 32.993 +THR CG2 C CH3 0 32.493 31.457 31.927 +THR OXT O OC -1 34.770 29.107 30.668 +THR H H H 0 36.319 32.492 31.007 +THR H2 H H 0 36.984 31.395 31.731 +THR H3 H H 0 36.331 32.480 32.477 +THR HA H H 0 35.006 30.619 32.537 +THR HB H H 0 33.830 32.749 31.033 +THR HG1 H H 0 34.002 32.475 33.707 +THR HG21 H H 0 32.588 30.657 32.470 +THR HG22 H H 0 32.191 31.210 31.037 +THR HG23 H H 0 31.841 32.050 32.336 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +THR N n/a CA START +THR H N . . +THR H2 N . . +THR H3 N . . +THR CA N C . +THR HA CA . . +THR CB CA CG2 . +THR HB CB . . +THR OG1 CB HG1 . +THR HG1 OG1 . . +THR CG2 CB HG23 . +THR HG21 CG2 . . +THR HG22 CG2 . . +THR HG23 CG2 . . +THR C CA . END +THR O C . . +THR OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +THR N N(CCCH)(H)3 +THR CA C(CCHO)(NH3)(COO)(H) +THR C C(CCHN)(O)2 +THR O O(CCO) +THR CB C(CCHN)(CH3)(OH)(H) +THR OG1 O(CCCH)(H) +THR CG2 C(CCHO)(H)3 +THR OXT O(CCO) +THR H H(NCHH) +THR H2 H(NCHH) +THR H3 H(NCHH) +THR HA H(CCCN) +THR HB H(CCCO) +THR HG1 H(OC) +THR HG21 H(CCHH) +THR HG22 H(CCHH) +THR HG23 H(CCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +THR N CA SINGLE n 1.480 0.0122 1.480 0.0122 +THR CA C SINGLE n 1.515 0.0129 1.515 0.0129 +THR CA CB SINGLE n 1.528 0.0100 1.528 0.0100 +THR C O DOUBLE n 1.251 0.0183 1.251 0.0183 +THR C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +THR CB OG1 SINGLE n 1.424 0.0100 1.424 0.0100 +THR CB CG2 SINGLE n 1.518 0.0100 1.518 0.0100 +THR N H SINGLE n 1.018 0.0520 0.902 0.0102 +THR N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +THR N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +THR CA HA SINGLE n 1.092 0.0100 0.982 0.0200 +THR CB HB SINGLE n 1.092 0.0100 0.987 0.0100 +THR OG1 HG1 SINGLE n 0.972 0.0180 0.864 0.0200 +THR CG2 HG21 SINGLE n 1.092 0.0100 0.972 0.0156 +THR CG2 HG22 SINGLE n 1.092 0.0100 0.972 0.0156 +THR CG2 HG23 SINGLE n 1.092 0.0100 0.972 0.0156 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +THR CA N H 109.577 1.50 +THR CA N H2 109.577 1.50 +THR CA N H3 109.577 1.50 +THR H N H2 109.032 3.00 +THR H N H3 109.032 3.00 +THR H2 N H3 109.032 3.00 +THR N CA C 109.121 1.50 +THR N CA CB 109.645 1.84 +THR N CA HA 108.639 1.50 +THR C CA CB 111.778 1.58 +THR C CA HA 109.055 1.50 +THR CB CA HA 108.870 1.50 +THR CA C O 117.098 1.50 +THR CA C OXT 117.098 1.50 +THR O C OXT 125.804 1.50 +THR CA CB OG1 105.245 3.00 +THR CA CB CG2 112.544 1.50 +THR CA CB HB 109.595 2.39 +THR OG1 CB CG2 109.974 3.00 +THR OG1 CB HB 109.323 1.86 +THR CG2 CB HB 109.170 2.61 +THR CB OG1 HG1 109.544 3.00 +THR CB CG2 HG21 109.532 1.50 +THR CB CG2 HG22 109.532 1.50 +THR CB CG2 HG23 109.532 1.50 +THR HG21 CG2 HG22 109.425 1.50 +THR HG21 CG2 HG23 109.425 1.50 +THR HG22 CG2 HG23 109.425 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +THR chi1 N CA CB CG2 -60.000 10.0 3 +THR hh1 CA CB OG1 HG1 -60.000 10.0 3 +THR hh2 CA CB CG2 HG23 -60.000 10.0 3 +THR sp3_sp3_1 C CA N H 180.000 10.0 3 +THR sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +THR chir_1 CA N C CB positive +THR chir_2 CB OG1 CA CG2 negative + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +THR plan-1 C 0.020 +THR plan-1 CA 0.020 +THR plan-1 O 0.020 +THR plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +THR SMILES ACDLabs 10.04 O=C(O)C(N)C(O)C +THR SMILES_CANONICAL CACTVS 3.341 C[C@@H](O)[C@H](N)C(O)=O +THR SMILES CACTVS 3.341 C[CH](O)[CH](N)C(O)=O +THR SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C[C@H]([C@@H](C(=O)O)N)O +THR SMILES "OpenEye OEToolkits" 1.5.0 CC(C(C(=O)O)N)O +THR InChI InChI 1.03 InChI=1S/C4H9NO3/c1-2(6)3(5)4(7)8/h2-3,6H,5H2,1H3,(H,7,8)/t2-,3+/m1/s1 +THR InChIKey InChI 1.03 AYFVYJQAPQTCCC-GBXIJSLDSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +THR acedrg 278 "dictionary generator" +THR acedrg_database 12 "data source" +THR rdkit 2019.09.1 "Chemoinformatics tool" +THR refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/TRP.cif b/image_analysis/structure_refinement/monomers/TRP.cif new file mode 100644 index 000000000..8c24a618c --- /dev/null +++ b/image_analysis/structure_refinement/monomers/TRP.cif @@ -0,0 +1,301 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +TRP TRP TRYPTOPHAN peptide 27 15 . + +data_comp_TRP +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +TRP N N NT3 1 75.046 60.221 32.550 +TRP CA C CH1 0 74.659 61.570 32.056 +TRP C C C 0 73.758 61.438 30.822 +TRP O O O 0 72.787 62.222 30.736 +TRP CB C CH2 0 75.903 62.411 31.737 +TRP CG C CR5 0 76.760 62.727 32.935 +TRP CD1 C CR15 0 77.836 62.019 33.383 +TRP CD2 C CR56 0 76.605 63.839 33.843 +TRP NE1 N NR15 0 78.364 62.608 34.501 +TRP CE2 C CR56 0 77.632 63.725 34.809 +TRP CE3 C CR16 0 75.707 64.913 33.936 +TRP CZ2 C CR16 0 77.780 64.645 35.849 +TRP CZ3 C CR16 0 75.854 65.821 34.965 +TRP CH2 C CR16 0 76.878 65.687 35.909 +TRP OXT O OC -1 74.059 60.555 29.988 +TRP H H H 0 75.680 59.865 32.016 +TRP H2 H H 0 74.332 59.671 32.560 +TRP H3 H H 0 75.369 60.277 33.391 +TRP HA H H 0 74.147 62.030 32.775 +TRP HB3 H H 0 75.613 63.253 31.325 +TRP HB2 H H 0 76.446 61.928 31.078 +TRP HD1 H H 0 78.177 61.234 32.984 +TRP HE1 H H 0 79.056 62.317 34.946 +TRP HE3 H H 0 75.014 65.011 33.305 +TRP HZ2 H H 0 78.468 64.556 36.485 +TRP HZ3 H H 0 75.254 66.545 35.034 +TRP HH2 H H 0 76.954 66.321 36.599 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +TRP N n/a CA START +TRP H N . . +TRP H2 N . . +TRP H3 N . . +TRP CA N C . +TRP HA CA . . +TRP CB CA CG . +TRP HB3 CB . . +TRP HB2 CB . . +TRP CG CB CD1 . +TRP CD1 CG NE1 . +TRP HD1 CD1 . . +TRP NE1 CD1 CE2 . +TRP HE1 NE1 . . +TRP CE2 NE1 CD2 . +TRP CD2 CE2 CE3 . +TRP CE3 CD2 CZ3 . +TRP HE3 CE3 . . +TRP CZ3 CE3 CH2 . +TRP HZ3 CZ3 . . +TRP CH2 CZ3 CZ2 . +TRP HH2 CH2 . . +TRP CZ2 CH2 HZ2 . +TRP HZ2 CZ2 . . +TRP C CA . END +TRP O C . . +TRP OXT C . . +TRP CD2 CG . ADD + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +TRP N N(CCCH)(H)3 +TRP CA C(CC[5a]HH)(NH3)(COO)(H) +TRP C C(CCHN)(O)2 +TRP O O(CCO) +TRP CB C(C[5a]C[5a,6a]C[5a])(CCHN)(H)2 +TRP CG C[5a](C[5a,6a]C[5a,6a]C[6a])(C[5a]N[5a]H)(CCHH){2|C<3>,2|H<1>} +TRP CD1 C[5a](C[5a]C[5a,6a]C)(N[5a]C[5a,6a]H)(H){2|C<3>} +TRP CD2 C[5a,6a](C[5a,6a]C[6a]N[5a])(C[5a]C[5a]C)(C[6a]C[6a]H){1|C<3>,4|H<1>} +TRP NE1 N[5a](C[5a,6a]C[5a,6a]C[6a])(C[5a]C[5a]H)(H){1|C<4>,1|H<1>,2|C<3>} +TRP CE2 C[5a,6a](C[5a,6a]C[5a]C[6a])(C[6a]C[6a]H)(N[5a]C[5a]H){1|C<3>,1|C<4>,3|H<1>} +TRP CE3 C[6a](C[5a,6a]C[5a,6a]C[5a])(C[6a]C[6a]H)(H){1|C<4>,1|H<1>,1|N<3>,2|C<3>} +TRP CZ2 C[6a](C[5a,6a]C[5a,6a]N[5a])(C[6a]C[6a]H)(H){2|H<1>,3|C<3>} +TRP CZ3 C[6a](C[6a]C[5a,6a]H)(C[6a]C[6a]H)(H){1|H<1>,2|C<3>} +TRP CH2 C[6a](C[6a]C[5a,6a]H)(C[6a]C[6a]H)(H){1|C<3>,1|H<1>,1|N<3>} +TRP OXT O(CCO) +TRP H H(NCHH) +TRP H2 H(NCHH) +TRP H3 H(NCHH) +TRP HA H(CCCN) +TRP HB3 H(CC[5a]CH) +TRP HB2 H(CC[5a]CH) +TRP HD1 H(C[5a]C[5a]N[5a]) +TRP HE1 H(N[5a]C[5a,6a]C[5a]) +TRP HE3 H(C[6a]C[5a,6a]C[6a]) +TRP HZ2 H(C[6a]C[5a,6a]C[6a]) +TRP HZ3 H(C[6a]C[6a]2) +TRP HH2 H(C[6a]C[6a]2) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +TRP N CA SINGLE n 1.486 0.0100 1.486 0.0100 +TRP CA C SINGLE n 1.532 0.0129 1.532 0.0129 +TRP CA CB SINGLE n 1.535 0.0100 1.535 0.0100 +TRP C O DOUBLE n 1.251 0.0183 1.251 0.0183 +TRP C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +TRP CB CG SINGLE n 1.506 0.0100 1.506 0.0100 +TRP CG CD1 DOUBLE y 1.364 0.0100 1.364 0.0100 +TRP CG CD2 SINGLE y 1.445 0.0100 1.445 0.0100 +TRP CD1 NE1 SINGLE y 1.369 0.0100 1.369 0.0100 +TRP CD2 CE2 DOUBLE y 1.412 0.0100 1.412 0.0100 +TRP CD2 CE3 SINGLE y 1.399 0.0100 1.399 0.0100 +TRP NE1 CE2 SINGLE y 1.370 0.0100 1.370 0.0100 +TRP CE2 CZ2 SINGLE y 1.393 0.0100 1.393 0.0100 +TRP CE3 CZ3 DOUBLE y 1.377 0.0100 1.377 0.0100 +TRP CZ2 CH2 DOUBLE y 1.376 0.0101 1.376 0.0101 +TRP CZ3 CH2 SINGLE y 1.394 0.0120 1.394 0.0120 +TRP N H SINGLE n 1.018 0.0520 0.902 0.0102 +TRP N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +TRP N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +TRP CA HA SINGLE n 1.092 0.0100 0.995 0.0200 +TRP CB HB3 SINGLE n 1.092 0.0100 0.981 0.0100 +TRP CB HB2 SINGLE n 1.092 0.0100 0.981 0.0100 +TRP CD1 HD1 SINGLE n 1.085 0.0150 0.944 0.0195 +TRP NE1 HE1 SINGLE n 1.013 0.0120 0.873 0.0200 +TRP CE3 HE3 SINGLE n 1.085 0.0150 0.942 0.0199 +TRP CZ2 HZ2 SINGLE n 1.085 0.0150 0.942 0.0181 +TRP CZ3 HZ3 SINGLE n 1.085 0.0150 0.943 0.0167 +TRP CH2 HH2 SINGLE n 1.085 0.0150 0.941 0.0176 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +TRP CA N H 109.786 3.00 +TRP CA N H2 109.786 3.00 +TRP CA N H3 109.786 3.00 +TRP H N H2 109.032 3.00 +TRP H N H3 109.032 3.00 +TRP H2 N H3 109.032 3.00 +TRP N CA C 109.790 1.50 +TRP N CA CB 110.346 1.50 +TRP N CA HA 108.404 1.50 +TRP C CA CB 111.156 1.50 +TRP C CA HA 108.682 1.50 +TRP CB CA HA 108.429 1.50 +TRP CA C O 117.155 2.01 +TRP CA C OXT 117.155 2.01 +TRP O C OXT 125.691 1.50 +TRP CA CB CG 113.870 1.50 +TRP CA CB HB3 108.522 1.50 +TRP CA CB HB2 108.522 1.50 +TRP CG CB HB3 108.877 1.50 +TRP CG CB HB2 108.877 1.50 +TRP HB3 CB HB2 107.959 3.00 +TRP CB CG CD1 126.940 2.13 +TRP CB CG CD2 126.837 1.66 +TRP CD1 CG CD2 106.223 1.50 +TRP CG CD1 NE1 110.303 1.50 +TRP CG CD1 HD1 125.325 2.99 +TRP NE1 CD1 HD1 124.372 1.81 +TRP CG CD2 CE2 106.978 1.50 +TRP CG CD2 CE3 134.327 1.50 +TRP CE2 CD2 CE3 118.695 1.50 +TRP CD1 NE1 CE2 109.057 1.50 +TRP CD1 NE1 HE1 125.366 3.00 +TRP CE2 NE1 HE1 125.577 3.00 +TRP CD2 CE2 NE1 107.438 1.50 +TRP CD2 CE2 CZ2 122.273 1.50 +TRP NE1 CE2 CZ2 130.289 1.50 +TRP CD2 CE3 CZ3 118.811 1.50 +TRP CD2 CE3 HE3 120.479 1.50 +TRP CZ3 CE3 HE3 120.709 1.50 +TRP CE2 CZ2 CH2 117.418 1.50 +TRP CE2 CZ2 HZ2 121.196 1.50 +TRP CH2 CZ2 HZ2 121.386 1.50 +TRP CE3 CZ3 CH2 121.228 1.50 +TRP CE3 CZ3 HZ3 119.424 1.50 +TRP CH2 CZ3 HZ3 119.348 1.50 +TRP CZ2 CH2 CZ3 121.574 1.50 +TRP CZ2 CH2 HH2 119.154 1.50 +TRP CZ3 CH2 HH2 119.272 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +TRP chi1 N CA CB CG -60.000 10.0 3 +TRP chi2 CA CB CG CD1 90.000 10.0 6 +TRP CONST_1 CB CG CD1 NE1 0.000 0.0 1 +TRP CONST_2 CG CD1 NE1 CE2 0.000 0.0 1 +TRP CONST_3 NE1 CE2 CD2 CE3 0.000 0.0 1 +TRP CONST_4 CE2 CD2 CE3 CZ3 0.000 0.0 1 +TRP CONST_5 CD1 NE1 CE2 CD2 0.000 0.0 1 +TRP CONST_6 CD2 CE3 CZ3 CH2 0.000 0.0 1 +TRP CONST_7 CZ3 CH2 CZ2 CE2 0.000 0.0 1 +TRP CONST_8 CE3 CZ3 CH2 CZ2 0.000 0.0 1 +TRP sp3_sp3_1 C CA N H 180.000 10.0 3 +TRP const_33 CE2 CD2 CG CD1 0.000 0.0 1 +TRP const_17 CD2 CE2 CZ2 CH2 0.000 0.0 1 +TRP sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +TRP chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +TRP plan-1 CD2 0.020 +TRP plan-1 CE2 0.020 +TRP plan-1 CE3 0.020 +TRP plan-1 CG 0.020 +TRP plan-1 CH2 0.020 +TRP plan-1 CZ2 0.020 +TRP plan-1 CZ3 0.020 +TRP plan-1 HE3 0.020 +TRP plan-1 HH2 0.020 +TRP plan-1 HZ2 0.020 +TRP plan-1 HZ3 0.020 +TRP plan-1 NE1 0.020 +TRP plan-2 CB 0.020 +TRP plan-2 CD1 0.020 +TRP plan-2 CD2 0.020 +TRP plan-2 CE2 0.020 +TRP plan-2 CE3 0.020 +TRP plan-2 CG 0.020 +TRP plan-2 CZ2 0.020 +TRP plan-2 HD1 0.020 +TRP plan-2 HE1 0.020 +TRP plan-2 NE1 0.020 +TRP plan-3 C 0.020 +TRP plan-3 CA 0.020 +TRP plan-3 O 0.020 +TRP plan-3 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +TRP SMILES ACDLabs 10.04 "O=C(O)C(N)Cc2c1ccccc1nc2" +TRP SMILES_CANONICAL CACTVS 3.341 "N[C@@H](Cc1c[nH]c2ccccc12)C(O)=O" +TRP SMILES CACTVS 3.341 "N[CH](Cc1c[nH]c2ccccc12)C(O)=O" +TRP SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "c1ccc2c(c1)c(c[nH]2)C[C@@H](C(=O)O)N" +TRP SMILES "OpenEye OEToolkits" 1.5.0 "c1ccc2c(c1)c(c[nH]2)CC(C(=O)O)N" +TRP InChI InChI 1.03 "InChI=1S/C11H12N2O2/c12-9(11(14)15)5-7-6-13-10-4-2-1-3-8(7)10/h1-4,6,9,13H,5,12H2,(H,14,15)/t9-/m0/s1" +TRP InChIKey InChI 1.03 QIVBCDIJIAJPQS-VIFPVBQESA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +TRP acedrg 278 "dictionary generator" +TRP acedrg_database 12 "data source" +TRP rdkit 2019.09.1 "Chemoinformatics tool" +TRP refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/TYR.cif b/image_analysis/structure_refinement/monomers/TYR.cif new file mode 100644 index 000000000..f1a4e5bee --- /dev/null +++ b/image_analysis/structure_refinement/monomers/TYR.cif @@ -0,0 +1,268 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +TYR TYR TYROSINE peptide 24 13 . + +data_comp_TYR +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +TYR N N NT3 1 5.311 5.160 15.589 +TYR CA C CH1 0 5.358 6.374 16.456 +TYR C C C 0 4.823 7.578 15.662 +TYR O O O 0 3.988 8.305 16.245 +TYR CB C CH2 0 6.763 6.679 16.994 +TYR CG C CR6 0 7.348 5.630 17.938 +TYR CD1 C CR16 0 7.096 5.672 19.314 +TYR CD2 C CR16 0 8.161 4.597 17.458 +TYR CE1 C CR16 0 7.628 4.720 20.176 +TYR CE2 C CR16 0 8.697 3.641 18.313 +TYR CZ C CR6 0 8.431 3.702 19.674 +TYR OH O OH1 0 8.982 2.738 20.476 +TYR OXT O OC -1 5.248 7.759 14.496 +TYR H H H 0 5.552 4.421 16.046 +TYR H2 H H 0 5.856 5.257 14.876 +TYR H3 H H 0 4.470 5.038 15.288 +TYR HA H H 0 4.756 6.220 17.232 +TYR HB3 H H 0 6.733 7.543 17.464 +TYR HB2 H H 0 7.369 6.788 16.227 +TYR HD1 H H 0 6.552 6.358 19.667 +TYR HD2 H H 0 8.350 4.543 16.534 +TYR HE1 H H 0 7.444 4.765 21.099 +TYR HE2 H H 0 9.240 2.953 17.971 +TYR HH H H 0 8.782 2.828 21.308 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +TYR N n/a CA START +TYR H N . . +TYR H2 N . . +TYR H3 N . . +TYR CA N C . +TYR HA CA . . +TYR CB CA CG . +TYR HB3 CB . . +TYR HB2 CB . . +TYR CG CB CD1 . +TYR CD1 CG CE1 . +TYR HD1 CD1 . . +TYR CE1 CD1 CZ . +TYR HE1 CE1 . . +TYR CZ CE1 CE2 . +TYR OH CZ HH . +TYR HH OH . . +TYR CE2 CZ CD2 . +TYR HE2 CE2 . . +TYR CD2 CE2 HD2 . +TYR HD2 CD2 . . +TYR C CA . END +TYR O C . . +TYR OXT C . . +TYR CD2 CG . ADD + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +TYR N N(CCCH)(H)3 +TYR CA C(CC[6a]HH)(NH3)(COO)(H) +TYR C C(CCHN)(O)2 +TYR O O(CCO) +TYR CB C(C[6a]C[6a]2)(CCHN)(H)2 +TYR CG C[6a](C[6a]C[6a]H)2(CCHH){1|C<3>,2|H<1>} +TYR CD1 C[6a](C[6a]C[6a]C)(C[6a]C[6a]H)(H){1|C<3>,1|H<1>,1|O<2>} +TYR CD2 C[6a](C[6a]C[6a]C)(C[6a]C[6a]H)(H){1|C<3>,1|H<1>,1|O<2>} +TYR CE1 C[6a](C[6a]C[6a]H)(C[6a]C[6a]O)(H){1|C<3>,1|C<4>,1|H<1>} +TYR CE2 C[6a](C[6a]C[6a]H)(C[6a]C[6a]O)(H){1|C<3>,1|C<4>,1|H<1>} +TYR CZ C[6a](C[6a]C[6a]H)2(OH){1|C<3>,2|H<1>} +TYR OH O(C[6a]C[6a]2)(H) +TYR OXT O(CCO) +TYR H H(NCHH) +TYR H2 H(NCHH) +TYR H3 H(NCHH) +TYR HA H(CCCN) +TYR HB3 H(CC[6a]CH) +TYR HB2 H(CC[6a]CH) +TYR HD1 H(C[6a]C[6a]2) +TYR HD2 H(C[6a]C[6a]2) +TYR HE1 H(C[6a]C[6a]2) +TYR HE2 H(C[6a]C[6a]2) +TYR HH H(OC[6a]) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +TYR N CA SINGLE n 1.489 0.0100 1.489 0.0100 +TYR CA C SINGLE n 1.531 0.0171 1.531 0.0171 +TYR CA CB SINGLE n 1.532 0.0100 1.532 0.0100 +TYR C O DOUBLE n 1.251 0.0183 1.251 0.0183 +TYR C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +TYR CB CG SINGLE n 1.523 0.0100 1.523 0.0100 +TYR CG CD1 DOUBLE y 1.390 0.0116 1.390 0.0116 +TYR CG CD2 SINGLE y 1.390 0.0116 1.390 0.0116 +TYR CD1 CE1 SINGLE y 1.385 0.0100 1.385 0.0100 +TYR CD2 CE2 DOUBLE y 1.385 0.0100 1.385 0.0100 +TYR CE1 CZ DOUBLE y 1.383 0.0100 1.383 0.0100 +TYR CE2 CZ SINGLE y 1.383 0.0100 1.383 0.0100 +TYR CZ OH SINGLE n 1.365 0.0137 1.365 0.0137 +TYR N H SINGLE n 1.018 0.0520 0.902 0.0102 +TYR N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +TYR N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +TYR CA HA SINGLE n 1.092 0.0100 0.994 0.0200 +TYR CB HB3 SINGLE n 1.092 0.0100 0.983 0.0163 +TYR CB HB2 SINGLE n 1.092 0.0100 0.983 0.0163 +TYR CD1 HD1 SINGLE n 1.085 0.0150 0.944 0.0143 +TYR CD2 HD2 SINGLE n 1.085 0.0150 0.944 0.0143 +TYR CE1 HE1 SINGLE n 1.085 0.0150 0.942 0.0174 +TYR CE2 HE2 SINGLE n 1.085 0.0150 0.942 0.0174 +TYR OH HH SINGLE n 0.966 0.0059 0.858 0.0200 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +TYR CA N H 109.791 3.00 +TYR CA N H2 109.791 3.00 +TYR CA N H3 109.791 3.00 +TYR H N H2 109.032 3.00 +TYR H N H3 109.032 3.00 +TYR H2 N H3 109.032 3.00 +TYR N CA C 109.085 1.50 +TYR N CA CB 109.965 3.00 +TYR N CA HA 108.547 1.50 +TYR C CA CB 111.980 3.00 +TYR C CA HA 108.746 1.50 +TYR CB CA HA 108.686 1.50 +TYR CA C O 117.219 3.00 +TYR CA C OXT 117.219 3.00 +TYR O C OXT 125.562 1.50 +TYR CA CB CG 114.693 2.05 +TYR CA CB HB3 108.494 1.50 +TYR CA CB HB2 108.494 1.50 +TYR CG CB HB3 108.859 1.50 +TYR CG CB HB2 108.859 1.50 +TYR HB3 CB HB2 107.843 2.16 +TYR CB CG CD1 121.060 1.50 +TYR CB CG CD2 121.060 1.50 +TYR CD1 CG CD2 117.879 1.50 +TYR CG CD1 CE1 121.468 1.50 +TYR CG CD1 HD1 119.327 1.50 +TYR CE1 CD1 HD1 119.205 1.50 +TYR CG CD2 CE2 121.468 1.50 +TYR CG CD2 HD2 119.327 1.50 +TYR CE2 CD2 HD2 119.205 1.50 +TYR CD1 CE1 CZ 119.794 1.50 +TYR CD1 CE1 HE1 120.177 1.50 +TYR CZ CE1 HE1 120.029 1.50 +TYR CD2 CE2 CZ 119.794 1.50 +TYR CD2 CE2 HE2 120.177 1.50 +TYR CZ CE2 HE2 120.029 1.50 +TYR CE1 CZ CE2 119.597 1.50 +TYR CE1 CZ OH 120.202 3.00 +TYR CE2 CZ OH 120.202 3.00 +TYR CZ OH HH 109.970 3.00 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +TYR chi1 N CA CB CG -60.000 10.0 3 +TYR chi2 CA CB CG CD1 90.000 10.0 6 +TYR CONST_1 CB CG CD1 CE1 0.000 0.0 1 +TYR CONST_2 CG CD1 CE1 CZ 0.000 0.0 1 +TYR CONST_3 CZ CE2 CD2 CG 0.000 0.0 1 +TYR CONST_4 CD1 CE1 CZ CE2 0.000 0.0 1 +TYR CONST_5 CE1 CZ CE2 CD2 0.000 0.0 1 +TYR hh1 CE1 CZ OH HH 0.000 5.0 2 +TYR sp3_sp3_1 C CA N H 180.000 10.0 3 +TYR const_21 CE2 CD2 CG CD1 0.000 0.0 1 +TYR sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +TYR chir_1 CA N C CB positive + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +TYR plan-1 CB 0.020 +TYR plan-1 CD1 0.020 +TYR plan-1 CD2 0.020 +TYR plan-1 CE1 0.020 +TYR plan-1 CE2 0.020 +TYR plan-1 CG 0.020 +TYR plan-1 CZ 0.020 +TYR plan-1 HD1 0.020 +TYR plan-1 HD2 0.020 +TYR plan-1 HE1 0.020 +TYR plan-1 HE2 0.020 +TYR plan-1 OH 0.020 +TYR plan-2 C 0.020 +TYR plan-2 CA 0.020 +TYR plan-2 O 0.020 +TYR plan-2 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +TYR SMILES ACDLabs 10.04 "O=C(O)C(N)Cc1ccc(O)cc1" +TYR SMILES_CANONICAL CACTVS 3.341 "N[C@@H](Cc1ccc(O)cc1)C(O)=O" +TYR SMILES CACTVS 3.341 "N[CH](Cc1ccc(O)cc1)C(O)=O" +TYR SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 "c1cc(ccc1C[C@@H](C(=O)O)N)O" +TYR SMILES "OpenEye OEToolkits" 1.5.0 "c1cc(ccc1CC(C(=O)O)N)O" +TYR InChI InChI 1.03 "InChI=1S/C9H11NO3/c10-8(9(12)13)5-6-1-3-7(11)4-2-6/h1-4,8,11H,5,10H2,(H,12,13)/t8-/m0/s1" +TYR InChIKey InChI 1.03 OUYCCCASQSFEME-QMMMGPOBSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +TYR acedrg 278 "dictionary generator" +TYR acedrg_database 12 "data source" +TYR rdkit 2019.09.1 "Chemoinformatics tool" +TYR refmac5 5.8.0419 "optimization tool" +TYR servalcat 0.4.57 'optimization tool' diff --git a/image_analysis/structure_refinement/monomers/U.cif b/image_analysis/structure_refinement/monomers/U.cif new file mode 100644 index 000000000..608cab6db --- /dev/null +++ b/image_analysis/structure_refinement/monomers/U.cif @@ -0,0 +1,248 @@ +# +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +U U "URIDINE-5'-MONOPHOSPHATE" RNA 32 21 . +# +data_comp_U +# +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +U OP3 O OP -1 28.643 1.174 0.256 +U P P P 0 28.819 1.986 -1.013 +U OP1 O O 0 28.329 1.258 -2.251 +U OP2 O OP -1 30.224 2.536 -1.171 +U "O5'" O O2 0 27.859 3.273 -0.849 +U "C5'" C CH2 0 26.439 3.063 -0.635 +U "C4'" C CH1 0 25.718 4.389 -0.671 +U "O4'" O O2 0 26.311 5.305 0.281 +U "C3'" C CH1 0 25.778 5.166 -1.991 +U "O3'" O OH1 0 24.835 4.654 -2.925 +U "C2'" C CH1 0 25.458 6.596 -1.533 +U "O2'" O OH1 0 24.071 6.867 -1.498 +U "C1'" C CH1 0 26.019 6.633 -0.106 +U N1 N NR6 0 27.258 7.450 0.002 +U C2 C CR6 0 27.205 8.658 0.693 +U O2 O O 0 26.192 9.093 1.231 +U N3 N NR16 0 28.393 9.351 0.740 +U C4 C CR6 0 29.603 8.978 0.180 +U O4 O O 0 30.583 9.712 0.310 +U C5 C CR16 0 29.578 7.725 -0.520 +U C6 C CR16 0 28.433 7.023 -0.585 +U "H5'" H H 0 26.293 2.630 0.242 +U "H5''" H H 0 26.078 2.471 -1.340 +U "H4'" H H 0 24.781 4.238 -0.422 +U "H3'" H H 0 26.692 5.130 -2.374 +U "HO3'" H H 0 24.819 5.164 -3.604 +U "H2'" H H 0 25.919 7.246 -2.101 +U "HO2'" H H 0 23.948 7.707 -1.488 +U "H1'" H H 0 25.334 6.986 0.500 +U H3 H H 0 28.372 10.124 1.182 +U H5 H H 0 30.354 7.400 -0.928 +U H6 H H 0 28.431 6.206 -1.045 +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +U OP3 P SINGLE n 1.517 0.0192 1.517 0.0192 +U P OP1 DOUBLE n 1.517 0.0192 1.517 0.0192 +U P OP2 SINGLE n 1.517 0.0192 1.517 0.0192 +U P "O5'" SINGLE n 1.614 0.0178 1.614 0.0178 +U "O5'" "C5'" SINGLE n 1.450 0.0166 1.450 0.0166 +U "C5'" "C4'" SINGLE n 1.509 0.0100 1.509 0.0100 +U "C4'" "O4'" SINGLE n 1.451 0.0111 1.451 0.0111 +U "C4'" "C3'" SINGLE n 1.535 0.0100 1.535 0.0100 +U "O4'" "C1'" SINGLE n 1.412 0.0100 1.412 0.0100 +U "C3'" "O3'" SINGLE n 1.422 0.0100 1.422 0.0100 +U "C3'" "C2'" SINGLE n 1.533 0.0109 1.533 0.0109 +U "C2'" "O2'" SINGLE n 1.412 0.0100 1.412 0.0100 +U "C2'" "C1'" SINGLE n 1.529 0.0100 1.529 0.0100 +U "C1'" N1 SINGLE n 1.476 0.0133 1.476 0.0133 +U N1 C2 SINGLE y 1.383 0.0100 1.383 0.0100 +U N1 C6 SINGLE y 1.375 0.0106 1.375 0.0106 +U C2 O2 DOUBLE n 1.224 0.0111 1.224 0.0111 +U C2 N3 SINGLE y 1.372 0.0112 1.372 0.0112 +U N3 C4 SINGLE y 1.381 0.0100 1.381 0.0100 +U C4 O4 DOUBLE n 1.231 0.0100 1.231 0.0100 +U C4 C5 SINGLE y 1.434 0.0100 1.434 0.0100 +U C5 C6 DOUBLE y 1.342 0.0100 1.342 0.0100 +U "C5'" "H5'" SINGLE n 1.089 0.0100 0.989 0.0200 +U "C5'" "H5''" SINGLE n 1.089 0.0100 0.989 0.0200 +U "C4'" "H4'" SINGLE n 1.089 0.0100 0.981 0.0200 +U "C3'" "H3'" SINGLE n 1.089 0.0100 0.992 0.0200 +U "O3'" "HO3'" SINGLE n 0.970 0.0120 0.849 0.0200 +U "C2'" "H2'" SINGLE n 1.089 0.0100 0.978 0.0200 +U "O2'" "HO2'" SINGLE n 0.970 0.0120 0.849 0.0200 +U "C1'" "H1'" SINGLE n 1.089 0.0100 0.981 0.0118 +U N3 H3 SINGLE n 1.016 0.0100 0.889 0.0200 +U C5 H5 SINGLE n 1.082 0.0130 0.935 0.0100 +U C6 H6 SINGLE n 1.082 0.0130 0.938 0.0107 +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +U OP3 P OP1 112.864 1.69 +U OP3 P OP2 112.864 1.69 +U OP3 P "O5'" 105.808 2.07 +U OP1 P OP2 112.864 1.69 +U OP1 P "O5'" 105.808 2.07 +U OP2 P "O5'" 105.808 2.07 +U P "O5'" "C5'" 118.783 1.50 +U "O5'" "C5'" "C4'" 109.342 1.50 +U "O5'" "C5'" "H5'" 109.845 1.50 +U "O5'" "C5'" "H5''" 109.845 1.50 +U "C4'" "C5'" "H5'" 109.624 1.50 +U "C4'" "C5'" "H5''" 109.624 1.50 +U "H5'" "C5'" "H5''" 108.472 1.50 +U "C5'" "C4'" "O4'" 109.615 1.50 +U "C5'" "C4'" "C3'" 116.008 1.52 +U "C5'" "C4'" "H4'" 108.268 1.50 +U "O4'" "C4'" "C3'" 104.439 1.50 +U "O4'" "C4'" "H4'" 108.698 1.50 +U "C3'" "C4'" "H4'" 109.363 1.86 +U "C4'" "O4'" "C1'" 109.578 1.50 +U "C4'" "C3'" "O3'" 111.281 2.46 +U "C4'" "C3'" "C2'" 102.071 1.50 +U "C4'" "C3'" "H3'" 110.452 2.54 +U "O3'" "C3'" "C2'" 111.993 3.00 +U "O3'" "C3'" "H3'" 110.380 1.67 +U "C2'" "C3'" "H3'" 110.108 1.66 +U "C3'" "O3'" "HO3'" 108.744 3.00 +U "C3'" "C2'" "O2'" 112.861 2.52 +U "C3'" "C2'" "C1'" 101.269 1.50 +U "C3'" "C2'" "H2'" 110.799 1.82 +U "O2'" "C2'" "C1'" 109.476 3.00 +U "O2'" "C2'" "H2'" 111.022 1.77 +U "C1'" "C2'" "H2'" 110.760 1.63 +U "C2'" "O2'" "HO2'" 109.449 1.85 +U "O4'" "C1'" "C2'" 106.825 1.50 +U "O4'" "C1'" N1 108.667 1.50 +U "O4'" "C1'" "H1'" 109.327 1.50 +U "C2'" "C1'" N1 112.859 1.50 +U "C2'" "C1'" "H1'" 109.776 1.83 +U N1 "C1'" "H1'" 109.166 1.50 +U "C1'" N1 C2 117.109 1.50 +U "C1'" N1 C6 121.471 1.52 +U C2 N1 C6 121.419 1.50 +U N1 C2 O2 122.841 1.50 +U N1 C2 N3 114.848 1.50 +U O2 C2 N3 122.311 1.50 +U C2 N3 C4 126.992 1.50 +U C2 N3 H3 115.772 1.79 +U C4 N3 H3 117.236 1.73 +U N3 C4 O4 119.401 1.50 +U N3 C4 C5 114.659 1.50 +U O4 C4 C5 125.940 1.50 +U C4 C5 C6 119.525 1.50 +U C4 C5 H5 120.151 1.50 +U C6 C5 H5 120.325 1.50 +U N1 C6 C5 122.557 1.50 +U N1 C6 H6 118.477 1.50 +U C5 C6 H6 118.966 1.50 +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +U C2e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +U C2e-nyu0 "C4'" "O4'" "C1'" "C2'" 340.700 6.300 1 +U C2e-nyu1 "O4'" "C1'" "C2'" "C3'" 32.800 4.900 1 +U C2e-nyu2 "C1'" "C2'" "C3'" "C4'" 326.9 3.600 1 +U C2e-nyu3 "C2'" "C3'" "C4'" "O4'" 22.600 4.500 1 +U C2e-nyu4 "C3'" "C4'" "O4'" "C1'" 357.700 6.100 1 +U C3e-chi "O4'" "C1'" N1 C2 210.000 10.000 6 +U C3e-nyu0 "C4'" "O4'" "C1'" "C2'" 2.8 6.100 1 +U C3e-nyu1 "O4'" "C1'" "C2'" "C3'" 335.00 4.900 1 +U C3e-nyu2 "C1'" "C2'" "C3'" "C4'" 35.9 2.800 1 +U C3e-nyu3 "C2'" "C3'" "C4'" "O4'" 324.700 3.100 1 +U C3e-nyu4 "C3'" "C4'" "O4'" "C1'" 20.500 5.100 1 +U alpha "C5'" "O5'" P OP3 -60.000 10.00 3 +U beta P "O5'" "C5'" "C4'" 180.000 10.00 3 +U epsi "C4'" "C3'" "O3'" "HO3'" 180.000 10.00 3 +U gamma "O5'" "C5'" "C4'" "C3'" 180.000 10.00 3 +U sp3_sp3_52 "C3'" "C2'" "O2'" "HO2'" 180.000 10.00 3 +U const_sp2_sp2_4 O2 C2 N1 "C1'" 0.000 5.0 2 +U const_22 C5 C6 N1 "C1'" 180.000 10.0 2 +U const_sp2_sp2_7 O2 C2 N3 C4 180.000 5.0 2 +U const_11 O4 C4 N3 C2 180.000 10.0 2 +U const_15 O4 C4 C5 C6 180.000 10.0 2 +U const_17 C4 C5 C6 N1 0.000 10.0 2 +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +U chir_1 P "O5'" OP3 OP2 both +U chir_2 "C4'" "O4'" "C3'" "C5'" negative +U chir_3 "C3'" "O3'" "C4'" "C2'" positive +U chir_4 "C2'" "O2'" "C1'" "C3'" negative +U chir_5 "C1'" "O4'" N1 "C2'" negative +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +U plan-1 "C1'" 0.020 +U plan-1 C2 0.020 +U plan-1 C4 0.020 +U plan-1 C5 0.020 +U plan-1 C6 0.020 +U plan-1 H3 0.020 +U plan-1 H5 0.020 +U plan-1 H6 0.020 +U plan-1 N1 0.020 +U plan-1 N3 0.020 +U plan-1 O2 0.020 +U plan-1 O4 0.020 +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +U SMILES ACDLabs 10.04 O=C1NC(=O)N(C=C1)C2OC(C(O)C2O)COP(=O)(O)O +U SMILES_CANONICAL CACTVS 3.341 O[C@H]1[C@@H](O)[C@@H](O[C@@H]1CO[P](O)(O)=O)N2C=CC(=O)NC2=O +U SMILES CACTVS 3.341 O[CH]1[CH](O)[CH](O[CH]1CO[P](O)(O)=O)N2C=CC(=O)NC2=O +U SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 C1=CN(C(=O)NC1=O)[C@H]2[C@@H]([C@@H]([C@H](O2)COP(=O)(O)O)O)O +U SMILES "OpenEye OEToolkits" 1.5.0 C1=CN(C(=O)NC1=O)C2C(C(C(O2)COP(=O)(O)O)O)O +U InChI InChI 1.03 InChI=1S/C9H13N2O9P/c12-5-1-2-11(9(15)10-5)8-7(14)6(13)4(20-8)3-19-21(16,17)18/h1-2,4,6-8,13-14H,3H2,(H,10,12,15)(H2,16,17,18)/t4-,6-,7-,8-/m1/s1 +U InChIKey InChI 1.03 DJJCXFVJDGTHFX-XVFCMESISA-N +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +U acedrg 243 "dictionary generator" +U acedrg_database 11 "data source" +U rdkit 2017.03.2 "Chemoinformatics tool" +U refmac5 5.8.0238 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/VAL.cif b/image_analysis/structure_refinement/monomers/VAL.cif new file mode 100644 index 000000000..af42ed1b8 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/VAL.cif @@ -0,0 +1,221 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +VAL VAL VALINE peptide 19 8 . + +data_comp_VAL +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +VAL N N NT3 1 11.307 2.990 48.522 +VAL CA C CH1 0 10.346 4.137 48.590 +VAL C C C 0 9.715 4.163 49.994 +VAL O O O 0 9.179 3.107 50.398 +VAL CB C CH1 0 9.259 4.073 47.494 +VAL CG1 C CH3 0 8.396 5.334 47.475 +VAL CG2 C CH3 0 9.849 3.802 46.112 +VAL OXT O OC -1 9.782 5.237 50.630 +VAL H H H 0 11.930 3.145 47.888 +VAL H2 H H 0 10.867 2.229 48.319 +VAL H3 H H 0 11.735 2.877 49.308 +VAL HA H H 0 10.853 4.963 48.468 +VAL HB H H 0 8.670 3.315 47.717 +VAL HG11 H H 0 8.964 6.117 47.567 +VAL HG12 H H 0 7.763 5.306 48.212 +VAL HG13 H H 0 7.907 5.387 46.637 +VAL HG21 H H 0 10.555 4.444 45.928 +VAL HG22 H H 0 9.155 3.884 45.436 +VAL HG23 H H 0 10.217 2.902 46.084 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +VAL N n/a CA START +VAL H N . . +VAL H2 N . . +VAL H3 N . . +VAL CA N C . +VAL HA CA . . +VAL CB CA CG2 . +VAL HB CB . . +VAL CG1 CB HG13 . +VAL HG11 CG1 . . +VAL HG12 CG1 . . +VAL HG13 CG1 . . +VAL CG2 CB HG23 . +VAL HG21 CG2 . . +VAL HG22 CG2 . . +VAL HG23 CG2 . . +VAL C CA . END +VAL O C . . +VAL OXT C . . + +loop_ +_chem_comp_acedrg.comp_id +_chem_comp_acedrg.atom_id +_chem_comp_acedrg.atom_type +VAL N N(CCCH)(H)3 +VAL CA C(CCCH)(NH3)(COO)(H) +VAL C C(CCHN)(O)2 +VAL O O(CCO) +VAL CB C(CCHN)(CH3)2(H) +VAL CG1 C(CCCH)(H)3 +VAL CG2 C(CCCH)(H)3 +VAL OXT O(CCO) +VAL H H(NCHH) +VAL H2 H(NCHH) +VAL H3 H(NCHH) +VAL HA H(CCCN) +VAL HB H(CC3) +VAL HG11 H(CCHH) +VAL HG12 H(CCHH) +VAL HG13 H(CCHH) +VAL HG21 H(CCHH) +VAL HG22 H(CCHH) +VAL HG23 H(CCHH) + +loop_ +_chem_comp_bond.comp_id +_chem_comp_bond.atom_id_1 +_chem_comp_bond.atom_id_2 +_chem_comp_bond.type +_chem_comp_bond.aromatic +_chem_comp_bond.value_dist_nucleus +_chem_comp_bond.value_dist_nucleus_esd +_chem_comp_bond.value_dist +_chem_comp_bond.value_dist_esd +VAL N CA SINGLE n 1.495 0.0100 1.495 0.0100 +VAL CA C SINGLE n 1.538 0.0100 1.538 0.0100 +VAL CA CB SINGLE n 1.541 0.0101 1.541 0.0101 +VAL C O DOUBLE n 1.251 0.0183 1.251 0.0183 +VAL C OXT SINGLE n 1.251 0.0183 1.251 0.0183 +VAL CB CG1 SINGLE n 1.524 0.0131 1.524 0.0131 +VAL CB CG2 SINGLE n 1.524 0.0131 1.524 0.0131 +VAL N H SINGLE n 1.018 0.0520 0.902 0.0102 +VAL N H2 SINGLE n 1.018 0.0520 0.902 0.0102 +VAL N H3 SINGLE n 1.018 0.0520 0.902 0.0102 +VAL CA HA SINGLE n 1.092 0.0100 0.977 0.0200 +VAL CB HB SINGLE n 1.092 0.0100 0.986 0.0184 +VAL CG1 HG11 SINGLE n 1.092 0.0100 0.972 0.0156 +VAL CG1 HG12 SINGLE n 1.092 0.0100 0.972 0.0156 +VAL CG1 HG13 SINGLE n 1.092 0.0100 0.972 0.0156 +VAL CG2 HG21 SINGLE n 1.092 0.0100 0.972 0.0156 +VAL CG2 HG22 SINGLE n 1.092 0.0100 0.972 0.0156 +VAL CG2 HG23 SINGLE n 1.092 0.0100 0.972 0.0156 + +loop_ +_chem_comp_angle.comp_id +_chem_comp_angle.atom_id_1 +_chem_comp_angle.atom_id_2 +_chem_comp_angle.atom_id_3 +_chem_comp_angle.value_angle +_chem_comp_angle.value_angle_esd +VAL CA N H 109.990 2.80 +VAL CA N H2 109.990 2.80 +VAL CA N H3 109.990 2.80 +VAL H N H2 109.032 3.00 +VAL H N H3 109.032 3.00 +VAL H2 N H3 109.032 3.00 +VAL N CA C 108.738 1.50 +VAL N CA CB 111.627 2.88 +VAL N CA HA 108.328 1.50 +VAL C CA CB 111.231 1.50 +VAL C CA HA 108.550 1.50 +VAL CB CA HA 108.536 1.50 +VAL CA C O 117.155 1.50 +VAL CA C OXT 117.155 1.50 +VAL O C OXT 125.690 1.50 +VAL CA CB CG1 111.834 1.50 +VAL CA CB CG2 111.834 1.50 +VAL CA CB HB 107.069 1.50 +VAL CG1 CB CG2 110.700 1.76 +VAL CG1 CB HB 107.681 2.06 +VAL CG2 CB HB 107.681 2.06 +VAL CB CG1 HG11 109.510 1.50 +VAL CB CG1 HG12 109.510 1.50 +VAL CB CG1 HG13 109.510 1.50 +VAL HG11 CG1 HG12 109.390 1.50 +VAL HG11 CG1 HG13 109.390 1.50 +VAL HG12 CG1 HG13 109.390 1.50 +VAL CB CG2 HG21 109.510 1.50 +VAL CB CG2 HG22 109.510 1.50 +VAL CB CG2 HG23 109.510 1.50 +VAL HG21 CG2 HG22 109.390 1.50 +VAL HG21 CG2 HG23 109.390 1.50 +VAL HG22 CG2 HG23 109.390 1.50 + +loop_ +_chem_comp_tor.comp_id +_chem_comp_tor.id +_chem_comp_tor.atom_id_1 +_chem_comp_tor.atom_id_2 +_chem_comp_tor.atom_id_3 +_chem_comp_tor.atom_id_4 +_chem_comp_tor.value_angle +_chem_comp_tor.value_angle_esd +_chem_comp_tor.period +VAL chi1 N CA CB CG2 -60.000 10.0 3 +VAL hh1 CA CB CG1 HG13 180.000 10.0 3 +VAL hh2 CA CB CG2 HG23 -60.000 10.0 3 +VAL sp3_sp3_1 C CA N H 180.000 10.0 3 +VAL sp2_sp3_1 O C CA N 0.000 10.0 6 + +loop_ +_chem_comp_chir.comp_id +_chem_comp_chir.id +_chem_comp_chir.atom_id_centre +_chem_comp_chir.atom_id_1 +_chem_comp_chir.atom_id_2 +_chem_comp_chir.atom_id_3 +_chem_comp_chir.volume_sign +VAL chir_1 CA N C CB positive +VAL chir_2 CB CA CG1 CG2 both + +loop_ +_chem_comp_plane_atom.comp_id +_chem_comp_plane_atom.plane_id +_chem_comp_plane_atom.atom_id +_chem_comp_plane_atom.dist_esd +VAL plan-1 C 0.020 +VAL plan-1 CA 0.020 +VAL plan-1 O 0.020 +VAL plan-1 OXT 0.020 + +loop_ +_pdbx_chem_comp_descriptor.comp_id +_pdbx_chem_comp_descriptor.type +_pdbx_chem_comp_descriptor.program +_pdbx_chem_comp_descriptor.program_version +_pdbx_chem_comp_descriptor.descriptor +VAL SMILES ACDLabs 10.04 O=C(O)C(N)C(C)C +VAL SMILES_CANONICAL CACTVS 3.341 CC(C)[C@H](N)C(O)=O +VAL SMILES CACTVS 3.341 CC(C)[CH](N)C(O)=O +VAL SMILES_CANONICAL "OpenEye OEToolkits" 1.5.0 CC(C)[C@@H](C(=O)O)N +VAL SMILES "OpenEye OEToolkits" 1.5.0 CC(C)C(C(=O)O)N +VAL InChI InChI 1.03 InChI=1S/C5H11NO2/c1-3(2)4(6)5(7)8/h3-4H,6H2,1-2H3,(H,7,8)/t4-/m0/s1 +VAL InChIKey InChI 1.03 KZSNJWFQEVHDMF-BYPYZUCNSA-N + +loop_ +_pdbx_chem_comp_description_generator.comp_id +_pdbx_chem_comp_description_generator.program_name +_pdbx_chem_comp_description_generator.program_version +_pdbx_chem_comp_description_generator.descriptor +VAL acedrg 278 "dictionary generator" +VAL acedrg_database 12 "data source" +VAL rdkit 2019.09.1 "Chemoinformatics tool" +VAL refmac5 5.8.0419 "optimization tool" diff --git a/image_analysis/structure_refinement/monomers/ZN.cif b/image_analysis/structure_refinement/monomers/ZN.cif new file mode 100644 index 000000000..aada536e8 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ZN.cif @@ -0,0 +1,30 @@ +data_comp_list +loop_ +_chem_comp.id +_chem_comp.three_letter_code +_chem_comp.name +_chem_comp.group +_chem_comp.number_atoms_all +_chem_comp.number_atoms_nh +_chem_comp.desc_level +ZN ZN 'ZINC ION ' NON-POLYMER 1 1 . + +data_comp_ZN +loop_ +_chem_comp_atom.comp_id +_chem_comp_atom.atom_id +_chem_comp_atom.type_symbol +_chem_comp_atom.type_energy +_chem_comp_atom.partial_charge +_chem_comp_atom.x +_chem_comp_atom.y +_chem_comp_atom.z +ZN ZN ZN ZN 2.000 0.000 0.000 0.000 + +loop_ +_chem_comp_tree.comp_id +_chem_comp_tree.atom_id +_chem_comp_tree.atom_back +_chem_comp_tree.atom_forward +_chem_comp_tree.connect_type +ZN ZN n/a . END diff --git a/image_analysis/structure_refinement/monomers/ener_lib.cif b/image_analysis/structure_refinement/monomers/ener_lib.cif new file mode 100644 index 000000000..717864eb2 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/ener_lib.cif @@ -0,0 +1,219 @@ +data_energy +loop_ +_lib_atom.type +_lib_atom.weight +_lib_atom.hb_type +_lib_atom.vdw_radius +_lib_atom.vdwh_radius +_lib_atom.ion_radius +_lib_atom.element +_lib_atom.valency +_lib_atom.sp +CSP 12.01150 N 1.700 1.700 . C 4 1 +CSP1 12.01150 N 1.700 1.700 . C 4 1 +C 12.01150 N 1.700 1.750 . C 4 2 +C1 12.01150 N 1.700 1.820 . C 4 2 +C2 12.01150 N 1.700 1.800 . C 4 2 +CR1 12.01150 N 1.700 1.800 . C 4 2 +CR2 12.01150 N 1.700 1.800 . C 4 2 +CR1H 12.01150 N 1.700 1.800 . C 4 2 +CR15 12.01150 N 1.700 1.740 . C 4 2 +CR5 12.01150 N 1.700 1.740 . C 4 2 +CR56 12.01150 N 1.700 1.740 . C 4 2 +CR55 12.01150 N 1.700 1.740 . C 4 2 +CR16 12.01150 N 1.700 1.820 . C 4 2 +CR6 12.01150 N 1.700 1.740 . C 4 2 +CR66 12.01150 N 1.700 1.740 . C 4 2 +CH1 12.01150 N 1.700 1.950 . C 4 3 +CH2 12.01150 N 1.700 1.920 . C 4 3 +CH3 12.01150 N 1.700 1.940 . C 4 3 +CT 12.01150 N 1.700 1.850 . C 4 3 +NS 14.00670 A 1.550 1.600 1.32 N 3 1 +NSP 14.00670 A 1.550 1.600 1.32 N 3 1 +NS1 14.00670 D 1.550 1.600 1.32 N 3 1 +NSP1 14.00670 D 1.550 1.600 1.32 N 3 1 +N 14.00670 N 1.550 1.600 1.32 N 3 2 +NC1 14.00670 D 1.550 1.600 1.32 N 3 2 +NH0 14.00670 N 1.550 1.600 1.32 N 3 2 +NH1 14.00670 D 1.550 1.600 1.32 N 3 2 +NC2 14.00670 D 1.550 1.600 1.32 N 3 2 +NH2 14.00670 D 1.550 1.600 1.32 N 3 2 +NC3 14.00670 D 1.550 1.600 1.32 N 3 2 +N20 14.00670 A 1.550 1.600 1.32 N 3 2 +N21 14.00670 B 1.550 1.600 1.32 N 3 2 +NT 14.00670 N 1.550 1.600 1.32 N 3 3 +NT1 14.00670 D 1.550 1.600 1.32 N 3 3 +NT2 14.00670 D 1.550 1.600 1.32 N 3 3 +NT3 14.00670 D 1.550 1.600 1.32 N 3 3 +NT4 14.00670 D 1.550 1.600 1.32 N 3 3 +N30 14.00670 A 1.550 1.600 1.32 N 3 3 +N31 14.00670 B 1.550 1.600 1.32 N 3 3 +N32 14.00670 B 1.550 1.600 1.32 N 3 3 +N33 14.00670 B 1.550 1.600 1.32 N 3 3 +NPA 14.00670 A 1.550 1.600 1.32 N 3 2 +NPB 14.00670 A 1.550 1.600 1.32 N 3 2 +NR5 14.00670 A 1.550 1.600 1.32 N 3 2 +NR15 14.00670 D 1.550 1.600 1.32 N 3 2 +NRD5 14.00670 A 1.550 1.600 1.32 N 3 2 +NR56 14.00670 N 1.550 1.600 1.32 N 3 2 +NR55 14.00670 N 1.550 1.600 1.32 N 3 2 +NR6 14.00670 A 1.550 1.600 1.32 N 3 2 +NR66 14.00670 N 1.550 1.600 1.32 N 3 2 +NR16 14.00670 D 1.550 1.600 1.32 N 3 2 +NRD6 14.00670 A 1.550 1.600 1.32 N 3 2 +OS 15.99940 A 1.520 1.520 1.28 O 2 2 +O 15.99940 A 1.520 1.520 1.28 O 2 2 +AF 15.99940 A 1.520 1.520 1.28 AF 2 2 +O2 15.99940 A 1.520 1.520 1.28 O 2 3 +OH1 15.99940 B 1.520 1.520 1.28 O 2 3 +OH2 15.99940 B 1.520 1.520 1.28 O 2 3 +OHA 15.99940 B 1.520 1.680 1.28 O 2 3 +OHB 15.99940 B 1.520 1.680 1.28 O 2 3 +OHC 15.99940 B 1.520 1.680 1.28 O 2 3 +OC2 15.99940 A 1.520 1.520 1.28 O 2 2 +OC 15.99940 A 1.520 1.520 1.28 O 2 2 +OP 15.99940 A 1.520 1.520 1.28 O 2 2 +OB 15.99940 A 1.520 1.520 1.28 O 2 2 +P 30.97380 N 1.800 1.88 1.79 P 5 . +P1 30.97380 N 1.800 1.88 1.79 P 5 . +PS 30.97380 N 1.800 1.90 1.79 P 5 . +S 32.06400 A 1.800 1.88 1.7 S 2 . +S3 32.06400 A 1.800 1.88 1.7 S 4 . +S2 32.06400 A 1.800 1.88 1.7 S 2 . +S1 32.06400 A 1.800 1.88 1.7 S 2 . +ST 32.06400 A 1.800 1.88 1.7 S 6 3 +SH1 32.06400 B 1.800 1.950 1.7 S 2 . +H 1.00800 N 1.200 . . H 1 . +HCH 1.00800 N 1.200 . . H 1 . +HCH1 1.00800 N 1.200 . . H 1 . +HCH2 1.00800 N 1.200 . . H 1 . +HCH3 1.00800 N 1.200 . . H 1 . +HCR1 1.00800 N 1.200 . . H 1 . +HC2 1.00800 N 1.200 . . H 1 . +HC1 1.00800 N 1.200 . . H 1 . +HC2 1.00800 N 1.200 . . H 1 . +HCR5 1.00800 N 1.200 . . H 1 . +HCR6 1.00800 N 1.200 . . H 1 . +HNC1 1.00800 H 1.200 . . H 1 . +HNC2 1.00800 H 1.200 . . H 1 . +HNH1 1.00800 H 1.200 . . H 1 . +HNH2 1.00800 H 1.200 . . H 1 . +HNR5 1.00800 H 1.200 . . H 1 . +HNR6 1.00800 H 1.200 . . H 1 . +HNT1 1.00800 H 1.200 . . H 1 . +HNT2 1.00800 H 1.200 . . H 1 . +HNT3 1.00800 H 1.200 . . H 1 . +HOH1 1.00800 H 1.200 . . H 1 . +HOH2 1.00800 H 1.200 . . H 1 . +HOHA 1.00800 H 1.200 . . H 1 . +HOHB 1.00800 H 1.200 . . H 1 . +HOHC 1.00800 H 1.200 . . H 1 . +HSH1 1.00800 H 1.200 . . H 1 . +SI 28.0855 N 2.10 . 0.40 SI 4 3 +SI1 28.0855 N 2.10 . 0.40 SI 4 . +GE 72.59 N 2.10 . 0.40 GE 1 . +GE1 72.59 N 2.10 . 0.40 GE 1 . +SN 118.69 N 2.17 . 0.69 SN 1 . +PB 207.2 N 2.02 . 0.79 PB 1 . +LI 6.941 N 1.82 . 0.73 LI 1 . +NA 22.990 N 2.27 . 1.13 NA 1 . +K 30.0983 N 2.75 . 1.51 K 1 . +RB 85.468 N 2.00 . 1.48 RB 1 . +CS 132.905 N 2.98 . 1.81 CS 1 . +FR 223.0 N . . 1.94 FR 1 . +BE 9.0123 N 1.12 . 0.41 BE 1 . +MG 24.30500 N 1.73 . 0.71 MG 1 . +CA 40.08000 N 1.94 . 1.14 CA 1 . +SR 87.62 N 2.19 . 1.32 SR 1 . +BA 137.33 N 2.53 . 1.49 BA 1 . +RA 226.025 N 2.15 . 1.62 RA 1 . +SC 44.9559 N 1.60 . 0.885 SC 1 . +Y 88.9059 N 1.80 . 1.04 Y 1 . +LA 138.9055 N 1.95 . 1.172 LA 1 . +CE 140.12 N 1.85 . 1.01 CE 1 . +PR 140.9077 N 1.85 . 0.99 PR 1 . +ND 144.24 N 1.85 . 1.123 ND 1 . +PM . N . . 1.11 PM 1 . +SM 150.36 N 1.85 . 1.098 SM 1 . +EU 151.96 N 1.85 . 1.087 EU 1 . +GD 157.25 N 1.80 . 1.078 GD 1 . +TB 158.9254 N 1.75 . 0.90 TB 1 . +DY 162.50 N 1.75 . 1.052 DY 1 . +HO 164.9304 N 1.75 . 1.041 HO 1 . +ER 167.26 N 1.75 . 1.03 ER 1 . +TM 168.9342 N 1.75 . 1.02 TM 1 . +YB 173.04 N 1.75 . 1.008 YB 1 . +LU 174.967 N 1.75 . 1.001 LU 1 . +AC 227.028 N 1.95 . 1.26 AC 1 . +TH 232.0 N 1.80 . 1.08 TH 1 . +PA 231.0 N 1.80 . 0.92 PA 1 . +U 238.0 N 1.86 . 0.66 U 1 . +NP 237.0 N 1.75 . 0.85 NP 1 . +PU 239.0 N 1.75 . 0.85 PU 1 . +AM 241.0 N 1.75 . 0.99 AM 1 . +CM 244.0 N . . 0.99 CM 1 . +BK 249.0 N . . 0.97 BK 1 . +CF 252.0 N . . 0.961 CF 1 . +ES 253.0 N . . . ES 1 . +FM 257.0 N . . . FM 1 . +MD 256.0 N . . . MD 1 . +NO 255.0 N . . . NO 1 . +LR 256.0 N . . . LR 1 . +TI 47.88 N 1.40 . 0.56 TI 1 . +ZR 91.22 N 1.55 . 0.73 ZR 1 . +HF 178.49 N 1.55 . 0.72 HF 1 . +RF . N . . . RF 1 . +V 50.9415 N 1.35 . 0.68 V 1 . +NB 92.9064 N 1.45 . 0.62 NB 1 . +TA 180.9479 N 1.45 . 0.78 TA 1 . +DB . N . . . DB 1 . +CR 51.996 N 1.40 . 0.53 CR 1 . +MO 95.94 N 1.45 . 0.55 MO 1 . +W 183.85 N 1.35 . 0.56 W 1 . +SG . N . . . SG 1 . +MN 54.938 N 1.40 . 0.46 MN 1 . +TC 98.906 N 1.35 . 0.51 TC 1 . +RE 186.207 N 1.35 . 0.52 RE 1 . +BH . N . . . BH 1 . +FE 55.847 N 1.40 . 0.68 FE 1 . +RU 101.07 N 1.30 . 0.52 RU 1 . +OSE 190.2 N 1.30 . 0.53 OS 1 . +HS . N . . . HS 1 . +CO 58.9332 N 1.35 . 0.54 CO 1 . +RH 102.9055 N 1.35 . 0.69 RH 1 . +IR 192.22 N 1.35 . 0.71 IR 1 . +MT . N . . . MT 1 . +NI 58.69 N 1.63 . 0.63 NI 1 . +PD 106.42 N 1.63 . 0.78 PD 1 . +PT 195.08 N 1.75 . 0.71 PT 1 . +CU 63.546 N 1.40 . 0.71 CU 1 . +AG 107.868 N 1.72 . 0.81 AG 1 . +AU 196.9665 N 1.66 . 0.71 AU 1 . +ZN 65.38 N 1.39 . 0.74 ZN 1 . +CD 112.41 N 1.58 . 0.92 CD 1 . +HG 200.59 N 1.55 . 1.10 HG 1 . +B 10.81 N 0.85 . 0.25 B 1 . +AL 26.98154 N 1.25 . 0.53 AL 1 . +GA 69.72 N 1.87 . 0.61 GA 1 . +IN 114.82 N 1.93 . 0.76 IN 1 . +TL 204.383 N 1.96 . 0.89 TL 1 . +AS 74.9216 N 1.85 . 0.475 AS 1 . +AS1 74.9216 N 1.85 . 0.475 AS 1 . +SB 121.75 N 1.8 . 0.90 SB 1 . +BI 208.9804 N 1.8 . 0.90 BI 1 . +SE 78.96 N 1.90 . 0.42 SE 1 . +TE 127.60 N 2.06 . 0.57 TE 1 . +PO 210.0 N 2.0 . 0.81 PO 1 . +F 18.998 B 1.47 . 1.19 F 1 . +CL 35.453 A 1.75 . 1.67 CL 1 . +BR 79.904 N 1.85 . 0.73 BR 1 . +I 126.9045 N 1.98 . 0.56 I 1 . +AT 210.0 N 1.80 . 0.76 AT 1 . +HE 4.0026 N 1.40 . . HE 1 . +NE 20.179 N 1.54 . 1.12 NE 1 . +AR 39.948 N 1.88 . 1.54 AR 1 . +KR 83.80 N 2.02 . 1.69 KR 1 . +XE 131.29 N 2.16 . 1.90 XE 1 . +RN 222.0 N 2.20 . 2.0 RN 1 . +DUM 16.0 N 0.6 0.6 0.6 O . . +. . B 1.7 1.5 1.7 C 4 3 diff --git a/image_analysis/structure_refinement/monomers/links_and_mods.cif b/image_analysis/structure_refinement/monomers/links_and_mods.cif new file mode 100644 index 000000000..6747c388d --- /dev/null +++ b/image_analysis/structure_refinement/monomers/links_and_mods.cif @@ -0,0 +1,4698 @@ +data_link_list +loop_ +_chem_link.id +_chem_link.comp_id_1 +_chem_link.mod_id_1 +_chem_link.group_comp_1 +_chem_link.comp_id_2 +_chem_link.mod_id_2 +_chem_link.group_comp_2 +_chem_link.name +DNA-SER . DEL_OP3 DNA/RNA SER SERm1 peptide DNA-SER +DNA-TYR . DEL_OP3 DNA/RNA TYR TYRmod5 peptide DNA-TYR +SS . CYS-SS peptide . CYS-SS peptide SS-bridge +disulf CYS CYS-SS peptide CYS CYS-SS peptide SS-bridge +TRANS . DEL-OXT peptide . DEL-HN1 peptide TRANS +CIS . DEL-OXT peptide . DEL-HN1 peptide CIS +PTRANS . DEL-OXT peptide . DEL-HNP P-peptide PTRANS +PCIS . DEL-OXT peptide . DEL-HNP P-peptide PCIS +NMTRANS . DEL-OXT1 peptide . DEL-NMH M-peptide NMTRANS +NMCIS . DEL-OXT1 peptide . DEL-NMH M-peptide NMCIS +gap . . . . . . gap-link +p . DEL_HO3p DNA/RNA . DEL_OP3 DNA/RNA default-DNA/RNA-link +AA-RNA . DEL-OXT peptide . DEL_HO3p DNA/RNA aminoacyl-RNA +ZN-CYS ZN . NON-POLYMER CYS CYSmod1 peptide bond_ZN_=_CYS-SG +ZN-HISND ZN . NON-POLYMER HIS DEL-HD1 peptide bond_ZN_=_HIS-ND1 +ZN-HISNE ZN . NON-POLYMER HIS DEL-HE2 peptide bond_ZN_=_HIS-NE2 +FE-CYS FE . NON-POLYMER CYS CYSmod1 peptide bond_FE_=_CYS-SG +FE-HISND FE . NON-POLYMER HIS DEL-HD1 peptide bond_FE_=_HIS-ND1 +FE-HISNE FE . NON-POLYMER HIS DEL-HE2 peptide bond_FE_=_HIS-NE2 +symmetry . . . . . . dummy_link +GTP-p GTP GTPmod1 NON-POLYMER . DEL_OP3 DNA/RNA GTP-p +HIS_TYR1 HIS HISmod1 peptide TYR TYRmod1 peptide HIS_TYR1 +HIS_TYR2 HIS HISmod3 peptide TYR TYRmod2 peptide HIS_TYR2 +LYS-CYS LYS LYSmod1 peptide CYS CYSmod1 peptide LYS-CYS +LYS-ASN LYS LYSmod3 peptide ASN ASNmod1 peptide LYS-ASN +MET-TYR MET METmod1 peptide TYR TYRmod3 peptide MET-TYR +TRP-TYR TRP TRPmod1 peptide TYR TYRmod4 peptide TRP-TYR + +data_mod_list +loop_ +_chem_mod.id +_chem_mod.name +_chem_mod.comp_id +_chem_mod.group_id +SERm1 SERINE SER peptide +CYS-SS HG-deletete CYS peptide +CYSmod1 CYS-HG-delete_with_atom_type CYS peptide +NH3 NH3-terminus . peptide +NH1 NH1-terminus . peptide +NH2 NH2-terminus_for_proline . peptide +NH2N NH2-terminus_proline_type_with_CN . peptide +COO COO-terminus . peptide +AA-STAND AA_to_residue_modification . peptide +AA-STPRO AA_to_residue_modification_for_proline . peptide +NA-STAND DNA/RNA_to_residue_modification . DNA/RNA +5*END DNA/RNA-5*-terminus . DNA/RNA +3*END DNA/RNA-3*-terminus . DNA/RNA +p5*END DNA/RNA-p5*-terminus . DNA/RNA +p3*END DNA/RNA-p3*-terminus . DNA/RNA +DEL_OP3 DN/RNA-OP3-delete . DNA/RNA +DEL_HO3p DNA/RNA-OP3-delete . DNA/RNA +FOR-N N-terminus_of_formyl . . +FOR-C C-terminus_of_formyl . . +G-N2 delete_N2_from_guanosine . DNA/RNA +DEL-HD1 delete_HD1_from_HIS HIS peptide +DEL-HE2 delete_HE2_from_HIS HIS peptide +DEL-OXT delete_OXT_from_peptide . peptide +DEL-OXT1 delete_OXT_from_peptide . peptide +DEL-HN1 delete_Hs_from_peptide . peptide +DEL-NMH delete_Hs_from_NMpeptide . peptide +DEL-HNP delete_Hs_from_peptide . peptide +PEPT-D change_peptide_to_D . peptide +1MA N1-metyl_of_adenosine . DNA/RNA +1MG N1-metyl_of_guanosine . DNA/RNA +2MG N2-metyl_of_guanosine . DNA/RNA +M2G N2-dimetyl_of_guanosine . DNA/RNA +O2*MET O2*_metyl . DNA/RNA +C5MET C5_metyl . DNA/RNA +N7MET N7_metyl . DNA/RNA +RNA-O2* delete_O2*_from_RNA . DNA/RNA +XYS-O1 delete_O1_from_XYS . . +B2C replace_B_to_C . peptide +B2C_D replace_B_to_C_for_D-peptide . peptide +RENAME change_monomer"s_name . . +TERMINUS chain_terminus_without_modification . . +DEL-HD22 delete_HD22_from_ASN ASN peptide +DEL-HG delete_HG_from_SER SER peptide +DEL-HG1 delete_HG1_from_THR THR peptide +HISmod1 HISTIDINE HIS peptide +HISmod2 HISTIDINE HIS peptide +GTPmod1 "GUANOSINE-5'-TRIPHOSPHATE" GTP NON-POLYMER +TYRmod1 TYROSINE TYR peptide +HISmod3 HISTIDINE HIS peptide +TYRmod2 TYROSINE TYR peptide +LYSmod1 LYSINE LYS peptide +CYSmod2 CYSTEINE CYS peptide +LYSmod2 LYSINE LYS peptide +LYSmod3 LYSINE LYS peptide +ASNmod1 ASPARAGINE ASN peptide +METmod1 METHIONINE MET peptide +TYRmod3 TYROSINE TYR peptide +LEUmod1 LEUCINE LEU peptide +LYSmod4 LYSINE LYS peptide +TRPmod1 TRYPTOPHAN TRP peptide +TYRmod4 TYROSINE TYR peptide +TYRmod5 TYROSINE TYR peptide +LYSmod5 LYSINE LYS peptide +MS6mod2 DEL-HN1_equiv_for_MS6-pept . peptide +ASPprot "Protonation of ASP" ASP peptide +GLUprot "Protonation of GLU" GLU peptide +HISprot1 HISTIDINE HIS peptide +HISprot2 HISTIDINE HIS peptide + +data_link_DNA-SER +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +DNA-SER 1 P 2 OG SINGLE 1.607 0.0108 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +DNA-SER 1 OP1 1 P 2 OG 107.777 3.00 +DNA-SER 1 OP2 1 P 2 OG 107.777 3.00 +DNA-SER 1 "O5'" 1 P 2 OG 103.482 3.00 +DNA-SER 2 CB 2 OG 1 P 119.008 2.40 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +DNA-SER sp3_sp3_1 2 CB 2 OG 1 P 1 OP1 60.000 10.0 3 +DNA-SER sp3_sp3_2 2 CA 2 CB 2 OG 1 P 180.000 10.0 3 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +DNA-SER 1 P 1 "O5'" 2 OG 1 OP2 both + +data_link_DNA-TYR +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +DNA-TYR 1 P 2 OH SINGLE 1.618 0.0100 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +DNA-TYR 1 OP1 1 P 2 OH 108.075 3.00 +DNA-TYR 1 OP2 1 P 2 OH 108.075 3.00 +DNA-TYR 1 "O5'" 1 P 2 OH 101.281 3.00 +DNA-TYR 2 CZ 2 OH 1 P 121.950 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +DNA-TYR sp3_sp3_1 1 OP1 1 P 2 OH 2 CZ 180.000 10.0 3 +DNA-TYR sp2_sp2_1 2 CE1 2 CZ 2 OH 1 P 180.000 5.0 2 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +DNA-TYR 1 P 1 "O5'" 2 OH 1 OP2 both + +data_link_SS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +SS 1 SG 2 SG single 2.031 .020 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +SS 1 CB 1 SG 2 SG 103.800 1.800 +SS 1 SG 2 SG 2 CB 103.800 1.800 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +SS ss 1 CB 1 SG 2 SG 2 CB 90.00 10.0 2 + +data_link_disulf +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +disulf 1 SG 2 SG single 2.031 .020 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +disulf 1 CB 1 SG 2 SG 103.800 1.800 +disulf 1 SG 2 SG 2 CB 103.800 1.800 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +disulf ss 1 CB 1 SG 2 SG 2 CB 90.00 10.0 2 + +data_link_TRANS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +TRANS 1 C 2 N SINGLE 1.337 0.011 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +TRANS 1 CA 1 C 2 N 115.917 1.50 +TRANS 1 O 1 C 2 N 123.469 1.50 +TRANS 1 C 2 N 2 CA 122.095 1.76 +TRANS 1 C 2 N 2 H 119.176 1.83 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +TRANS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +TRANS omega 1 CA 1 C 2 N 2 CA 180.00 5.0 0 +TRANS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +TRANS plan-1 1 CA 0.020 +TRANS plan-1 1 C 0.020 +TRANS plan-1 2 N 0.020 +TRANS plan-1 1 O 0.020 +TRANS plan-2 2 CA 0.020 +TRANS plan-2 1 C 0.020 +TRANS plan-2 2 H 0.020 +TRANS plan-2 2 N 0.020 + +data_link_CIS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +CIS 1 C 2 N SINGLE 1.337 0.011 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +CIS 1 CA 1 C 2 N 115.917 1.50 +CIS 1 O 1 C 2 N 123.469 1.50 +CIS 1 C 2 N 2 CA 122.095 1.76 +CIS 1 C 2 N 2 H 119.176 1.83 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +CIS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +CIS omega 1 CA 1 C 2 N 2 CA 0.00 5.0 0 +CIS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +CIS plan-1 1 CA 0.020 +CIS plan-1 1 C 0.020 +CIS plan-1 2 N 0.020 +CIS plan-1 1 O 0.020 +CIS plan-2 2 CA 0.020 +CIS plan-2 1 C 0.020 +CIS plan-2 2 H 0.020 +CIS plan-2 2 N 0.020 + +data_link_PTRANS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +PTRANS 1 C 2 N SINGLE 1.352 0.010 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +PTRANS 1 CA 1 C 2 N 118.415 1.50 +PTRANS 1 O 1 C 2 N 121.016 1.53 +PTRANS 2 CA 2 N 1 C 120.469 1.50 +PTRANS 2 CD 2 N 1 C 124.005 1.50 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +PTRANS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +PTRANS omega 1 CA 1 C 2 N 2 CA 180.00 5.0 0 +PTRANS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +PTRANS plan-1 1 CA 0.020 +PTRANS plan-1 1 C 0.020 +PTRANS plan-1 2 N 0.020 +PTRANS plan-1 1 O 0.020 +PTRANS plan-2 1 C .020 +PTRANS plan-2 2 N .020 +PTRANS plan-2 2 CA .020 +PTRANS plan-2 2 CD .020 + +data_link_PCIS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +PCIS 1 C 2 N SINGLE 1.352 0.010 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +PCIS 1 CA 1 C 2 N 118.415 1.50 +PCIS 1 O 1 C 2 N 121.016 1.53 +PCIS 2 CA 2 N 1 C 120.469 1.50 +PCIS 2 CD 2 N 1 C 124.005 1.50 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +PCIS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +PCIS omega 1 CA 1 C 2 N 2 CA 0.00 5.0 0 +PCIS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +PCIS plan-1 1 CA 0.020 +PCIS plan-1 1 C 0.020 +PCIS plan-1 2 N 0.020 +PCIS plan-1 1 O 0.020 +PCIS plan-2 1 C .020 +PCIS plan-2 2 N .020 +PCIS plan-2 2 CA .020 +PCIS plan-2 2 CD .020 + +data_link_NMTRANS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +NMTRANS 1 C 2 N SINGLE 1.346 0.020 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +NMTRANS 1 CA 1 C 2 N 118.492 1.50 +NMTRANS 1 O 1 C 2 N 121.426 2.26 +NMTRANS 2 CA 2 N 1 C 121.862 2.35 +NMTRANS 2 CN 2 N 1 C 121.178 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +NMTRANS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +NMTRANS omega 1 CA 1 C 2 N 2 CA 180.00 5.0 0 +NMTRANS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +NMTRANS plan-2 1 CA 0.020 +NMTRANS plan-2 1 C 0.020 +NMTRANS plan-2 2 N 0.020 +NMTRANS plan-2 1 O 0.020 +NMTRANS plan-3 2 CA 0.020 +NMTRANS plan-3 2 CN 0.020 +NMTRANS plan-3 1 C 0.020 +NMTRANS plan-3 2 N 0.020 + +data_link_NMCIS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +NMCIS 1 C 2 N single 1.329 .014 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +NMCIS 1 O 1 C 2 N 123.000 1.600 +NMCIS 1 CA 1 C 2 N 116.200 2.000 +NMCIS 1 C 2 N 2 CN 124.300 3.000 +NMCIS 1 C 2 N 2 CA 121.700 1.800 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +NMCIS psi 1 N 1 CA 1 C 2 N 160.00 30.0 2 +NMCIS omega 1 CA 1 C 2 N 2 CA .00 5.0 0 +NMCIS phi 1 C 2 N 2 CA 2 C 60.00 20.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +NMCIS plane1 1 CA .020 +NMCIS plane1 1 C .020 +NMCIS plane1 1 O .020 +NMCIS plane1 2 N .020 +NMCIS plane2 1 C .050 +NMCIS plane2 2 N .050 +NMCIS plane2 2 CA .050 +NMCIS plane2 2 CN .050 + +data_link_gap + +data_link_p +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +p 1 "O3'" 2 P SINGLE 1.607 0.0100 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +p 1 "C3'" 1 "O3'" 2 P 121.082 1.50 +p 2 OP1 2 P 1 "O3'" 109.493 3.00 +p 2 OP2 2 P 1 "O3'" 109.493 3.00 +p 2 "O5'" 2 P 1 "O3'" 100.661 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +p zeta 1 "C3'" 1 "O3'" 2 P 2 "O5'" 60.000 10.00 3 +p epsilon 1 "C4'" 1 "C3'" 1 "O3'" 2 P 180.000 10.00 3 +p alpha 1 "O3'" 2 "P" 2 "O5'" 2 "C5'" 180.000 10.00 3 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +p 2 P 2 "O5'" 1 "O3'" 2 OP2 both + +data_link_AA-RNA +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +AA-RNA 1 C 2 "O3'" SINGLE 1.334 0.0128 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +AA-RNA 1 CA 1 C 2 "O3'" 111.770 3.00 +AA-RNA 1 O 1 C 2 "O3'" 123.273 1.50 +AA-RNA 2 "C3'" 2 "O3'" 1 C 116.978 1.50 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +AA-RNA sp2_sp2_1 1 CA 1 C 2 "O3'" 2 "C3'" 180.000 5.0 2 +AA-RNA sp3_sp3_1 2 "C4'" 2 "C3'" 2 "O3'" 1 C 180.000 10.0 3 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +AA-RNA plan-1 1 CA 0.020 +AA-RNA plan-1 1 C 0.020 +AA-RNA plan-1 2 "O3'" 0.020 +AA-RNA plan-1 1 O 0.020 + +data_link_ZN-CYS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +ZN-CYS 1 ZN 2 SG single 2.340 .020 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +ZN-CYS 1 ZN 2 SG 2 CB 109.000 3.000 + +data_link_ZN-HISND +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +ZN-HISND 1 ZN 2 ND1 single 2.057 .064 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +ZN-HISND 1 ZN 2 ND1 2 CG 125.350 3.000 +ZN-HISND 1 ZN 2 ND1 2 CE1 125.350 3.000 + +data_link_ZN-HISNE +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +ZN-HISNE 1 ZN 2 NE2 single 2.058 .073 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +ZN-HISNE 1 ZN 2 NE2 2 CD2 125.500 3.000 +ZN-HISNE 1 ZN 2 NE2 2 CE1 125.500 3.000 + +data_link_FE-CYS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +FE-CYS 1 FE 2 SG single 2.260 .020 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +FE-CYS 1 FE 2 SG 2 CB 109.470 3.000 + +data_link_FE-HISND +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +FE-HISND 1 FE 2 ND1 single 2.057 .064 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +FE-HISND 1 FE 2 ND1 2 CG 125.350 3.000 +FE-HISND 1 FE 2 ND1 2 CE1 125.350 3.000 + +data_link_FE-HISNE +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +FE-HISNE 1 FE 2 NE2 single 2.058 .073 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +FE-HISNE 1 FE 2 NE2 2 CD2 125.500 3.000 +FE-HISNE 1 FE 2 NE2 2 CE1 125.500 3.000 + +data_link_symmetry +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +symmetry 0 . 0 . . .000 .020 + +data_link_GTP-p +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +GTP-p 1 "O3'" 2 P SINGLE 1.607 0.0100 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +GTP-p 1 "C3'" 1 "O3'" 2 P 121.082 1.50 +GTP-p 2 OP1 2 P 1 "O3'" 109.493 3.00 +GTP-p 2 OP2 2 P 1 "O3'" 109.493 3.00 +GTP-p 2 "O5'" 2 P 1 "O3'" 100.661 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +GTP-p sp3_sp3_1 1 "C3'" 1 "O3'" 2 P 2 OP1 60.000 10.0 3 +GTP-p sp3_sp3_2 1 "C4'" 1 "C3'" 1 "O3'" 2 P 180.000 10.0 3 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +GTP-p 2 P 2 "O5'" 1 "O3'" 2 OP2 both + +data_link_HIS_TYR1 +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +HIS_TYR1 1 ND1 2 CB SINGLE 1.479 0.0100 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +HIS_TYR1 1 CG 1 ND1 2 CB 126.908 3.00 +HIS_TYR1 1 CE1 1 ND1 2 CB 124.367 2.36 +HIS_TYR1 2 CA 2 CB 1 ND1 111.116 3.00 +HIS_TYR1 2 CG 2 CB 1 ND1 110.829 1.95 +HIS_TYR1 1 ND1 2 CB 2 HB2 106.371 1.50 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +HIS_TYR1 sp2_sp3_1 1 CG 1 ND1 2 CB 2 CA 150.000 10.0 6 +HIS_TYR1 const_24_1 1 CB 1 CG 1 ND1 2 CB 0.000 0.0 2 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +HIS_TYR1 2 CB 1 ND1 2 CA 2 CG both + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +HIS_TYR1 plan-2 2 CB 0.020 +HIS_TYR1 plan-2 1 CB 0.020 +HIS_TYR1 plan-2 1 CG 0.020 +HIS_TYR1 plan-2 1 CD2 0.020 +HIS_TYR1 plan-2 1 CE1 0.020 +HIS_TYR1 plan-2 1 HD2 0.020 +HIS_TYR1 plan-2 1 HE1 0.020 +HIS_TYR1 plan-2 1 HE2 0.020 +HIS_TYR1 plan-2 1 NE2 0.020 +HIS_TYR1 plan-2 1 ND1 0.020 + +data_link_HIS_TYR2 +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +HIS_TYR2 1 NE2 2 CE2 SINGLE 1.447 0.0100 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +HIS_TYR2 1 CD2 1 NE2 2 CE2 126.913 1.60 +HIS_TYR2 1 CE1 1 NE2 2 CE2 124.723 2.73 +HIS_TYR2 2 CD2 2 CE2 1 NE2 119.776 1.50 +HIS_TYR2 2 CZ 2 CE2 1 NE2 120.443 1.51 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +HIS_TYR2 sp2_sp2_1 2 CD2 2 CE2 1 NE2 1 CD2 180.000 20 2 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +HIS_TYR2 plan-1 2 CB 0.020 +HIS_TYR2 plan-1 2 CG 0.020 +HIS_TYR2 plan-1 2 CD1 0.020 +HIS_TYR2 plan-1 2 CD2 0.020 +HIS_TYR2 plan-1 2 CE1 0.020 +HIS_TYR2 plan-1 2 CE2 0.020 +HIS_TYR2 plan-1 2 CZ 0.020 +HIS_TYR2 plan-1 2 HD1 0.020 +HIS_TYR2 plan-1 2 HD2 0.020 +HIS_TYR2 plan-1 2 HE1 0.020 +HIS_TYR2 plan-1 1 NE2 0.020 +HIS_TYR2 plan-1 2 OH 0.020 +HIS_TYR2 plan-2 2 CE2 0.020 +HIS_TYR2 plan-2 1 CB 0.020 +HIS_TYR2 plan-2 1 CG 0.020 +HIS_TYR2 plan-2 1 CD2 0.020 +HIS_TYR2 plan-2 1 CE1 0.020 +HIS_TYR2 plan-2 1 HD1 0.020 +HIS_TYR2 plan-2 1 HD2 0.020 +HIS_TYR2 plan-2 1 HE1 0.020 +HIS_TYR2 plan-2 1 NE2 0.020 +HIS_TYR2 plan-2 1 ND1 0.020 + +data_link_LYS-CYS +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +LYS-CYS 1 NZ 2 SG SINGLE 1.682 0.0176 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +LYS-CYS 1 CE 1 NZ 2 SG 116.537 1.50 +LYS-CYS 2 SG 1 NZ 1 HZ1 110.707 3.00 +LYS-CYS 2 CB 2 SG 1 NZ 109.471 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +LYS-CYS sp3_sp3_1 1 CE 1 NZ 2 SG 2 CB 60.000 10.00 3 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +LYS-CYS 1 NZ 2 SG 1 CE 1 HZ1 both + +data_link_LYS-ASN +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +LYS-ASN 1 NZ 2 CG SINGLE 1.337 0.0118 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +LYS-ASN 1 CE 1 NZ 2 CG 124.480 2.27 +LYS-ASN 2 CG 1 NZ 1 HZ1 117.279 2.10 +LYS-ASN 2 CB 2 CG 1 NZ 116.603 1.50 +LYS-ASN 2 OD1 2 CG 1 NZ 121.996 1.50 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +LYS-ASN sp2_sp2_1 2 CB 2 CG 1 NZ 1 CE 180.000 5.00 2 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +LYS-ASN plan-4 2 CB 0.020 +LYS-ASN plan-4 2 CG 0.020 +LYS-ASN plan-4 1 NZ 0.020 +LYS-ASN plan-4 2 OD1 0.020 +LYS-ASN plan-1 1 CE 0.020 +LYS-ASN plan-1 2 CG 0.020 +LYS-ASN plan-1 1 HZ1 0.020 +LYS-ASN plan-1 1 NZ 0.020 + +data_link_MET-TYR +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +MET-TYR 1 SD 2 CE1 SINGLE 1.780 0.0200 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +MET-TYR 1 CG 1 SD 2 CE1 103.903 1.50 +MET-TYR 1 CE 1 SD 2 CE1 103.843 3.00 +MET-TYR 2 CD1 2 CE1 1 SD 120.241 3.00 +MET-TYR 2 CZ 2 CE1 1 SD 120.124 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +MET-TYR sp2_sp3_1 2 CD1 2 CE1 1 SD 1 CG 150.000 10.0 6 +MET-TYR sp2_sp2_1 2 CG 2 CD1 2 CE1 1 SD 180.000 0.0 2 + +loop_ +_chem_link_chir.link_id +_chem_link_chir.atom_centre_comp_id +_chem_link_chir.atom_id_centre +_chem_link_chir.atom_1_comp_id +_chem_link_chir.atom_id_1 +_chem_link_chir.atom_2_comp_id +_chem_link_chir.atom_id_2 +_chem_link_chir.atom_3_comp_id +_chem_link_chir.atom_id_3 +_chem_link_chir.volume_sign +MET-TYR 1 SD 2 CE1 1 CG 1 CE both + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +MET-TYR plan-1 2 CB 0.020 +MET-TYR plan-1 2 CG 0.020 +MET-TYR plan-1 2 CD1 0.020 +MET-TYR plan-1 2 CD2 0.020 +MET-TYR plan-1 2 CE1 0.020 +MET-TYR plan-1 2 CE2 0.020 +MET-TYR plan-1 2 CZ 0.020 +MET-TYR plan-1 2 HD1 0.020 +MET-TYR plan-1 2 HD2 0.020 +MET-TYR plan-1 2 HE2 0.020 +MET-TYR plan-1 2 OH 0.020 +MET-TYR plan-1 1 SD 0.020 + +data_link_TRP-TYR +loop_ +_chem_link_bond.link_id +_chem_link_bond.atom_1_comp_id +_chem_link_bond.atom_id_1 +_chem_link_bond.atom_2_comp_id +_chem_link_bond.atom_id_2 +_chem_link_bond.type +_chem_link_bond.value_dist +_chem_link_bond.value_dist_esd +TRP-TYR 1 CH2 2 CE2 SINGLE 1.492 0.0125 + +loop_ +_chem_link_angle.link_id +_chem_link_angle.atom_1_comp_id +_chem_link_angle.atom_id_1 +_chem_link_angle.atom_2_comp_id +_chem_link_angle.atom_id_2 +_chem_link_angle.atom_3_comp_id +_chem_link_angle.atom_id_3 +_chem_link_angle.value_angle +_chem_link_angle.value_angle_esd +TRP-TYR 1 CZ2 1 CH2 2 CE2 120.507 2.02 +TRP-TYR 1 CZ3 1 CH2 2 CE2 120.338 2.79 +TRP-TYR 2 CD2 2 CE2 1 CH2 120.621 2.79 +TRP-TYR 2 CZ 2 CE2 1 CH2 121.366 3.00 + +loop_ +_chem_link_tor.link_id +_chem_link_tor.id +_chem_link_tor.atom_1_comp_id +_chem_link_tor.atom_id_1 +_chem_link_tor.atom_2_comp_id +_chem_link_tor.atom_id_2 +_chem_link_tor.atom_3_comp_id +_chem_link_tor.atom_id_3 +_chem_link_tor.atom_4_comp_id +_chem_link_tor.atom_id_4 +_chem_link_tor.value_angle +_chem_link_tor.value_angle_esd +_chem_link_tor.period +TRP-TYR sp2_sp2_1 1 CZ2 1 CH2 2 CE2 2 CD2 180.000 5.0 2 + +loop_ +_chem_link_plane.link_id +_chem_link_plane.plane_id +_chem_link_plane.atom_comp_id +_chem_link_plane.atom_id +_chem_link_plane.dist_esd +TRP-TYR plan-1 1 CE2 0.020 +TRP-TYR plan-1 1 CE3 0.020 +TRP-TYR plan-1 1 CZ2 0.020 +TRP-TYR plan-1 1 CZ3 0.020 +TRP-TYR plan-1 1 CH2 0.020 +TRP-TYR plan-1 2 CE2 0.020 +TRP-TYR plan-1 1 CG 0.020 +TRP-TYR plan-1 1 CD2 0.020 +TRP-TYR plan-1 1 HE3 0.020 +TRP-TYR plan-1 1 HZ2 0.020 +TRP-TYR plan-1 1 HZ3 0.020 +TRP-TYR plan-1 1 NE1 0.020 +TRP-TYR plan-2 1 CH2 0.020 +TRP-TYR plan-2 2 CB 0.020 +TRP-TYR plan-2 2 CG 0.020 +TRP-TYR plan-2 2 CD1 0.020 +TRP-TYR plan-2 2 CD2 0.020 +TRP-TYR plan-2 2 CE1 0.020 +TRP-TYR plan-2 2 CE2 0.020 +TRP-TYR plan-2 2 CZ 0.020 +TRP-TYR plan-2 2 HD1 0.020 +TRP-TYR plan-2 2 HD2 0.020 +TRP-TYR plan-2 2 HE1 0.020 +TRP-TYR plan-2 2 OH 0.020 + +data_mod_SERm1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +SERm1 delete HG . H H 0 +SERm1 change OG . O O2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +SERm1 delete OG HG single . . . . +SERm1 change CA CB single 1.516 0.0100 1.516 0.0100 +SERm1 change CB OG single 1.438 0.0200 1.438 0.0200 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +SERm1 delete CB OG HG . . +SERm1 change CA CB OG 108.381 1.50 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +SERm1 delete CA CB OG HG . . . 3 +SERm1 change OG CB CA N sp3_sp3_199 180.000 10.0 3 + +data_mod_CYS-SS +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +CYS-SS delete HG . . . .000 + +data_mod_CYSmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +CYSmod1 delete HG . H HSH1 0 +CYSmod1 change SG . S S2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +CYSmod1 delete SG HG single . . . . +CYSmod1 change CB HB3 single 0.980 0.0104 1.089 0.0100 +CYSmod1 change CB HB2 single 0.980 0.0104 1.089 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +CYSmod1 delete CB SG HG . . +CYSmod1 change N CA CB 109.354 2.20 +CYSmod1 change C CA CB 110.419 3.00 +CYSmod1 change CA CB SG 114.974 2.42 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +CYSmod1 delete CA CB SG HG . . . 0 +CYSmod1 change N CA CB SG sp3_sp3_19 180.000 10.0 3 + +data_mod_NH3 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +NH3 change N N . NT3 -1.000 +NH3 add H H H HNT3 .000 +NH3 add . H2 H HNT3 .000 +NH3 add . H3 H HNT3 .000 +NH3 delete HN1 . . . .000 +NH3 delete HN2 . . . .000 +NH3 delete HN3 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +NH3 change N n/a . CA START +NH3 add H N . . . +NH3 add H2 N . . . +NH3 add H3 N . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +NH3 add N H2 single 0.914 0.010 1.036 0.016 +NH3 add N H3 single 0.914 0.010 1.036 0.016 +NH3 change N CA single 1.491 .021 1.491 .021 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +NH3 add H2 N H3 109.470 3.000 +NH3 add H3 N CA 109.470 3.000 +NH3 add H2 N CA 109.470 3.000 +NH3 add H N H2 109.470 3.000 +NH3 add H N H3 109.470 3.000 +NH3 change H N CA 109.470 3.000 + +data_mod_NH1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +NH1 change N N . NH1 .000 +NH1 add . H H HNH1 .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +NH1 change N n/a . CA START +NH1 add H N . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +NH1 add N H single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +NH1 add H N CA 109.307 3.000 +NH1 add H N CD 106.136 2.250 + +data_mod_NH2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +NH2 change N N . NH1 .000 +NH2 add . H H HNH1 .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +NH2 change N n/a . CA START +NH2 add H N . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +NH2 add N H single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +NH2 add H N CA 109.307 3.000 +NH2 add H N CD 106.136 2.250 + +data_mod_NH2N +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +NH2N change N N . NH2 .000 + +data_mod_COO +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +COO change C C . C .000 +COO change O O . OC -.500 +COO add . OXT O OC -.500 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +COO add OXT C . . END +COO change C n/a . OXT . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +COO change C O deloc 1.231 .020 1.231 .020 +COO add C OXT deloc 1.231 .020 1.231 .020 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +COO change CA C O 121.000 3.000 +COO add CA C OXT 121.000 3.000 +COO add O C OXT 118.000 3.000 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.id +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +COO add psi N CA C OXT 160.00 30.0 2 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +COO add oxt C .020 +COO add oxt CA .020 +COO add oxt O .020 +COO add oxt OXT .020 + +data_mod_AA-STAND + +data_mod_AA-STPRO +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +AA-STPRO delete HN . . . .000 + +data_mod_NA-STAND + +data_mod_5*END +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +5*END delete P . . . .000 +5*END delete OP1 . . . .000 +5*END delete OP2 . . . .000 +5*END delete OP3 . . . .000 +5*END change 'O5'' 'O5'' . OH1 0.000 +5*END add . 'HO5'' H HOH1 0.000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +5*END delete P n/a . . . +5*END delete O1P n/a . . . +5*END delete O2P n/a . . . +5*END change 'O5'' n/a . 'C5'' START +5*END add 'HO5'' 'O5'' . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +5*END add 'O5'' 'HO5'' single 0.839 0.010 0.970 0.012 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +5*END add 'C5'' 'O5'' 'HO5'' 120.000 3.000 + +data_mod_3*END +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +3*END change 'O3'' 'O3'' . OH1 0.000 +3*END add . 'HO3'' H HOH1 0.000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +3*END change 'O3'' 'C3'' . . END +3*END add 'HO3'' 'O3'' . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +3*END add 'O3'' 'HO3'' single 0.839 0.010 0.970 0.012 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +3*END add 'C3'' 'O3'' 'HO3'' 120.000 3.000 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.id +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +3*END add hh 'C4'' 'C3'' 'O3'' 'HO3'' .00 30.0 3 + +data_mod_p5*END +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +p5*END change OP3 OP3 O OP -.330 + +data_mod_p3*END +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +p3*END change 'O3'' 'O3'' . OH1 0.000 +p3*END add . 'HO3'' H HOH1 0.000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +p3*END change 'O3'' 'C3'' . . END +p3*END add 'HO3'' 'O3'' . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +p3*END add 'O3'' 'HO3'' single 0.839 0.010 0.970 0.012 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +p3*END add 'C3'' 'O3'' 'HO3'' 120.000 3.000 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.id +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +p3*END add hh 'C4'' 'C3'' 'O3'' 'HO3'' .00 30.0 3 + +data_mod_DEL_OP3 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL_OP3 delete OP3 . O OP -1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL_OP3 delete OP3 P single . . . . +DEL_OP3 change P OP1 double 1.491 0.0100 1.491 0.0100 +DEL_OP3 change P OP2 single 1.491 0.0100 1.491 0.0100 +DEL_OP3 change P "O5'" single 1.599 0.0103 1.599 0.0103 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL_OP3 delete OP3 P OP1 . . +DEL_OP3 delete OP3 P OP2 . . +DEL_OP3 delete OP3 P "O5'" . . +DEL_OP3 change OP1 P OP2 118.304 1.50 +DEL_OP3 change OP1 P "O5'" 108.008 3.00 +DEL_OP3 change OP2 P "O5'" 108.008 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +DEL_OP3 delete "C5'" "O5'" P OP3 . . + +data_mod_DEL_HO3p +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL_HO3p delete "HO3'" . H H 0 +DEL_HO3p change "O3'" . O O2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL_HO3p delete "O3'" "HO3'" single . . . . +DEL_HO3p change "C3'" "O3'" single 1.421 0.0119 1.421 0.0119 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL_HO3p delete "C3'" "O3'" "HO3'" . . + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +DEL_HO3p delete "C4'" "C3'" "O3'" "HO3'" . . + +data_mod_FOR-N +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +FOR-N add . H H HC1 .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +FOR-N add H C . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +FOR-N add C H single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +FOR-N add H C O 121.000 3.000 + +data_mod_FOR-C +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +FOR-C change O O . OC -0.500 +FOR-C add . OXT O OC -0.500 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +FOR-C add OXT C . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +FOR-C change C O deloc 1.231 .020 1.231 .020 +FOR-C add C OXT deloc 1.231 .020 1.231 .020 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +FOR-C add O C OXT 120.000 3.000 + +data_mod_G-N2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +G-N2 delete N2 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +G-N2 delete N2 n/a . . . + +data_mod_DEL-HD1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +DEL-HD1 delete HD1 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +DEL-HD1 change ND1 n/a . . END + +data_mod_DEL-HE2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +DEL-HE2 delete HE2 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +DEL-HE2 change NE2 n/a . . END + +data_mod_DEL-OXT +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-OXT delete OXT . O OC -1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-OXT delete C OXT single . . . . +DEL-OXT change CA C single 1.526 0.010 1.526 0.010 +DEL-OXT change C O double 1.229 0.012 1.229 0.012 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-OXT delete CA C OXT . . +DEL-OXT delete O C OXT . . +DEL-OXT change CA C O 120.614 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +DEL-OXT delete plan-1 C 0.020 +DEL-OXT delete plan-1 CA 0.020 +DEL-OXT delete plan-1 O 0.020 +DEL-OXT delete plan-1 OXT 0.020 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +DEL-OXT delete O C CA N 0.000 10.0 + +data_mod_DEL-OXT1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-OXT1 delete OXT . O OC -1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-OXT1 delete C OXT single . . . . +DEL-OXT1 change CA C single 1.526 0.010 1.526 0.010 +DEL-OXT1 change C O double 1.232 0.010 1.232 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-OXT1 delete CA C OXT . . +DEL-OXT1 delete O C OXT . . +DEL-OXT1 change CA C O 120.082 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +DEL-OXT1 delete plan-1 C 0.020 +DEL-OXT1 delete plan-1 CA 0.020 +DEL-OXT1 delete plan-1 O 0.020 +DEL-OXT1 delete plan-1 OXT 0.020 + +data_mod_DEL-HN1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-HN1 delete H2 . H H 0 +DEL-HN1 delete H3 . H H 0 +DEL-HN1 change N . N NH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-HN1 delete N H2 single . . . . +DEL-HN1 delete N H3 single . . . . +DEL-HN1 change CA N single 1.453 0.010 1.453 0.010 +DEL-HN1 change N H single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-HN1 delete CA N H2 . . +DEL-HN1 delete CA N H3 . . +DEL-HN1 delete H N H2 . . +DEL-HN1 delete H N H3 . . +DEL-HN1 delete H2 N H3 . . +DEL-HN1 change CA N H 118.729 1.50 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +DEL-HN1 delete C CA N H 180 10 + +data_mod_DEL-NMH +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-NMH delete H . H H 0 +DEL-NMH change N . N N 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-NMH delete N H single . . . . +DEL-NMH change N CN single 1.450 0.0200 1.450 0.0200 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-NMH delete CN N H . . +DEL-NMH delete CA N H . . +DEL-NMH change CN N CA 118.119 2.78 +DEL-NMH change N CA C 111.097 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +DEL-NMH change CN N CA C sp2_sp3_13 0.000 10.0 6 +DEL-NMH change CA N CN HN1 sp2_sp3_7 0.000 10.0 6 + +loop_ +_chem_mod_chir.mod_id +_chem_mod_chir.function +_chem_mod_chir.atom_id_centre +_chem_mod_chir.atom_id_1 +_chem_mod_chir.atom_id_2 +_chem_mod_chir.atom_id_3 +_chem_mod_chir.new_volume_sign +DEL-NMH delete N CA CN H . + +data_mod_DEL-HNP +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-HNP delete H . H H 0 +DEL-HNP delete H2 . H H 0 +DEL-HNP change N . N NH0 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-HNP delete N H single . . . . +DEL-HNP delete N H2 single . . . . +DEL-HNP change N CA single 1.459 0.0100 1.459 0.0100 +DEL-HNP change N CD single 1.472 0.0100 1.472 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-HNP delete CA N H . . +DEL-HNP delete CA N H2 . . +DEL-HNP delete CD N H . . +DEL-HNP delete CD N H2 . . +DEL-HNP delete H N H2 . . +DEL-HNP change CA N CD 112.597 1.50 +DEL-HNP change N CA C 113.251 1.50 +DEL-HNP change N CD CG 102.887 1.50 + +data_mod_PEPT-D +loop_ +_chem_mod_chir.mod_id +_chem_mod_chir.function +_chem_mod_chir.atom_id_centre +_chem_mod_chir.atom_id_1 +_chem_mod_chir.atom_id_2 +_chem_mod_chir.atom_id_3 +_chem_mod_chir.new_volume_sign +PEPT-D change CA N CB C positiv + +data_mod_1MA +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +1MA change N1 . . NR6 .000 +1MA add . C1 C CH3 .000 +1MA add . H11 H HCH .000 +1MA add . H12 H HGH .000 +1MA add . H13 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +1MA add C1 N1 . H13 . +1MA add H11 C1 . . . +1MA add H12 C1 . . . +1MA add H13 C1 . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +1MA add C1 N1 single 1.465 .020 1.465 .020 +1MA add C1 H11 single 0.988 0.010 1.089 0.010 +1MA add C1 H12 single 0.988 0.010 1.089 0.010 +1MA add C1 H13 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +1MA add N1 C1 H11 109.470 3.000 +1MA add N1 C1 H12 109.470 3.000 +1MA add N1 C1 H13 109.470 3.000 +1MA add H12 C1 H11 109.470 3.000 +1MA add H13 C1 H11 109.470 3.000 +1MA add H13 C1 H12 109.470 3.000 + +data_mod_1MG +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +1MG change N1 . . NR6 .000 +1MG add . C1A C CH3 .000 +1MG add . H1A1 H HCH .000 +1MG add . H1A2 H HGH .000 +1MG add . H1A3 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +1MG add C1A N1 . H1A3 . +1MG add H1A1 C1A . . . +1MG add H1A2 C1A . . . +1MG add H1A3 C1A . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +1MG add C1A N1 single 1.465 .020 1.465 .020 +1MG add C1A H1A1 single 0.988 0.010 1.089 0.010 +1MG add C1A H1A2 single 0.988 0.010 1.089 0.010 +1MG add C1A H1A3 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +1MG add N1 C1A H1A1 109.470 3.000 +1MG add N1 C1A H1A2 109.470 3.000 +1MG add N1 C1A H1A3 109.470 3.000 +1MG add H1A2 C1A H1A1 109.470 3.000 +1MG add H1A3 C1A H1A1 109.470 3.000 +1MG add H1A3 C1A H1A2 109.470 3.000 + +data_mod_2MG +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +2MG change N2 . . NH1 .000 +2MG add . C2A C CH3 .000 +2MG add . H2A1 H HCH .000 +2MG add . H2A2 H HGH .000 +2MG add . H2A3 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +2MG change N2 C2 . C2A . +2MG add C2A N2 . H2A3 . +2MG add H2A1 C2A . . . +2MG add H2A2 C2A . . . +2MG add H2A3 C2A . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +2MG add C2A N2 single 1.465 .020 1.465 .020 +2MG add C2A H2A1 single 0.988 0.010 1.089 0.010 +2MG add C2A H2A2 single 0.988 0.010 1.089 0.010 +2MG add C2A H2A3 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +2MG add C2 N2 C2A 115.000 3.000 +2MG add N2 C2A H2A1 109.470 3.000 +2MG add N2 C2A H2A2 109.470 3.000 +2MG add N2 C2A H2A3 109.470 3.000 +2MG add H2A2 C2A H2A1 109.470 3.000 +2MG add H2A3 C2A H2A1 109.470 3.000 +2MG add H2A3 C2A H2A2 109.470 3.000 + +data_mod_M2G +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +M2G change N2 . . N .000 +M2G add . C2A C CH3 .000 +M2G add . H2A1 H HCH .000 +M2G add . H2A2 H HGH .000 +M2G add . H2A3 H HCH .000 +M2G add . C2B C CH3 .000 +M2G add . H2B1 H HCH .000 +M2G add . H2B2 H HGH .000 +M2G add . H2B3 H HCH .000 +M2G delete H21 . . . .000 +M2G delete H22 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +M2G change N2 C2 . C2A . +M2G add C2A N2 . H2A3 . +M2G add H2A1 C2A . . . +M2G add H2A2 C2A . . . +M2G add H2A3 C2A . . . +M2G add C2B N2 . H2B3 . +M2G add H2B1 C2B . . . +M2G add H2B2 C2B . . . +M2G add H2B3 C2B . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +M2G add C2A N2 single 1.465 .020 1.465 .020 +M2G add C2A H2A1 single 0.988 0.010 1.089 0.010 +M2G add C2A H2A2 single 0.988 0.010 1.089 0.010 +M2G add C2A H2A3 single 0.988 0.010 1.089 0.010 +M2G add C2B N2 single 1.465 .020 1.465 .020 +M2G add C2B H2B1 single 0.988 0.010 1.089 0.010 +M2G add C2B H2B2 single 0.988 0.010 1.089 0.010 +M2G add C2B H2B3 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +M2G add C2 N2 C2A 118.000 3.000 +M2G add C2 N2 C2B 118.000 3.000 +M2G add C2A N2 C2B 124.000 3.000 +M2G add N2 C2A H2A1 109.470 3.000 +M2G add N2 C2A H2A2 109.470 3.000 +M2G add N2 C2A H2A3 109.470 3.000 +M2G add H2A2 C2A H2A1 109.470 3.000 +M2G add H2A3 C2A H2A1 109.470 3.000 +M2G add H2A3 C2A H2A2 109.470 3.000 +M2G add N2 C2B H2B1 109.470 3.000 +M2G add N2 C2B H2B2 109.470 3.000 +M2G add N2 C2B H2B3 109.470 3.000 +M2G add H2B2 C2B H2B1 109.470 3.000 +M2G add H2B3 C2B H2B1 109.470 3.000 +M2G add H2B3 C2B H2B2 109.470 3.000 + +data_mod_O2*MET +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +O2*MET change 'O2'' . . OC2 .000 +O2*MET delete 'HO2'' . . . .000 +O2*MET add . C2A C CH3 .000 +O2*MET add . H2A1 H HCH .000 +O2*MET add . H2A2 H HGH .000 +O2*MET add . H2A3 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +O2*MET change 'O2'' 'C2'' . C2A . +O2*MET add C2A 'O2'' . H2A3 . +O2*MET add H2A1 C2A . . . +O2*MET add H2A2 C2A . . . +O2*MET add H2A3 C2A . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +O2*MET add 'O2'' C2A single 1.420 .020 1.420 .020 +O2*MET add C2A H2A1 single 0.988 0.010 1.089 0.010 +O2*MET add C2A H2A2 single 0.988 0.010 1.089 0.010 +O2*MET add C2A H2A3 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +O2*MET add 'C2'' 'O2'' C2A 120.000 3.000 +O2*MET add 'O2'' C2A H2A1 109.470 3.000 +O2*MET add 'O2'' C2A H2A2 109.470 3.000 +O2*MET add 'O2'' C2A H2A3 109.470 3.000 +O2*MET add H2A2 C2A H2A1 109.470 3.000 +O2*MET add H2A3 C2A H2A1 109.470 3.000 +O2*MET add H2A3 C2A H2A2 109.470 3.000 + +data_mod_C5MET +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +C5MET change C5 . . CR6 .000 +C5MET add . C5A C CH3 .000 +C5MET add . H5A1 H HCH .000 +C5MET add . H5A2 H HGH .000 +C5MET add . H5A3 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +C5MET add C5A C5 . H5A3 . +C5MET add H5A1 C5A . . . +C5MET add H5A2 C5A . . . +C5MET add H5A3 C5A . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +C5MET add C5A C5 single 1.500 .020 1.500 .020 +C5MET add C5A H5A1 single 0.988 0.010 1.089 0.010 +C5MET add C5A H5A2 single 0.988 0.010 1.089 0.010 +C5MET add C5A H5A3 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +C5MET add C4 C5 C5A 122.000 3.000 +C5MET add C6 C5 C5A 118.000 3.000 +C5MET add C5 C5A H5A2 109.470 3.000 +C5MET add C5 C5A H5A3 109.470 3.000 +C5MET add H5A2 C5A H5A1 109.470 3.000 +C5MET add H5A3 C5A H5A1 109.470 3.000 +C5MET add H5A3 C5A H5A2 109.470 3.000 + +data_mod_N7MET +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +N7MET change N7 . . NR5 .000 +N7MET add . C7 C CH3 .000 +N7MET add . H71 H HCH .000 +N7MET add . H72 H HGH .000 +N7MET add . H73 H HCH .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +N7MET add C7 N7 . H73 . +N7MET add H71 C7 . . . +N7MET add H72 C7 . . . +N7MET add H73 C7 . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +N7MET add C7 N7 single 1.465 .020 1.465 .020 +N7MET add C7 H71 single 0.988 0.010 1.089 0.010 +N7MET add C7 H72 single 0.988 0.010 1.089 0.010 +N7MET add C7 H73 single 0.988 0.010 1.089 0.010 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +N7MET add C5 N7 C7 126.000 3.000 +N7MET add C8 N7 C7 126.000 3.000 +N7MET add N7 C7 H71 109.470 3.000 +N7MET add N7 C7 H72 109.470 3.000 +N7MET add N7 C7 H73 109.470 3.000 +N7MET add H72 C7 H71 109.470 3.000 +N7MET add H73 C7 H71 109.470 3.000 +N7MET add H73 C7 H72 109.470 3.000 + +data_mod_RNA-O2* +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +RNA-O2* delete 'O2'' . . . .000 +RNA-O2* delete 'HO2'' . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +RNA-O2* delete 'O2'' n/a . . . +RNA-O2* delete 'HO2'' n/a . . . + +data_mod_XYS-O1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +XYS-O1 delete O1 . . . .000 +XYS-O1 delete HO1 . . . .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +XYS-O1 delete O1 n/a . . . +XYS-O1 delete HO1 n/a . . . + +data_mod_B2C +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +B2C change N N . NT3 -1.000 +B2C add . H1 H HNT3 0.000 +B2C add . H2 H HNT3 0.000 +B2C add . H3 H HNT3 0.000 +B2C delete H . . . .000 +B2C change C B B B .000 +B2C change O O1 O O .000 +B2C add . O2 O O .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +B2C change N n/a . CA START +B2C add H1 N . . . +B2C add H2 N . . . +B2C add H3 N . . . +B2C change B CA . . END +B2C change CA N . B . +B2C change O1 B . . . +B2C add O2 B . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +B2C add N H1 single 0.914 0.010 1.036 0.016 +B2C add N H2 single 0.914 0.010 1.036 0.016 +B2C add N H3 single 0.914 0.010 1.036 0.016 +B2C change N CA single 1.491 .021 1.491 .021 +B2C change B CA single 1.560 .020 1.560 .020 +B2C change B O1 deloc 1.480 .020 1.480 .020 +B2C add B O2 deloc 1.480 .020 1.480 .020 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +B2C add H2 N H3 109.470 3.000 +B2C add H3 N CA 109.470 3.000 +B2C add H2 N CA 109.470 3.000 +B2C add H1 N H2 109.470 3.000 +B2C add H1 N H3 109.470 3.000 +B2C add H1 N CA 109.470 3.000 +B2C add O1 B O2 112.000 3.000 +B2C change CA B O1 126.000 3.000 +B2C add CA B O2 126.000 3.000 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.id +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +B2C add hhb N CA B O2 .00 30.0 3 + +loop_ +_chem_mod_chir.mod_id +_chem_mod_chir.function +_chem_mod_chir.atom_id_centre +_chem_mod_chir.atom_id_1 +_chem_mod_chir.atom_id_2 +_chem_mod_chir.atom_id_3 +_chem_mod_chir.new_volume_sign +B2C change CA N CB B negativ + +data_mod_B2C_D +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_partial_charge +B2C_D change N N . NT3 -1.000 +B2C_D add . H1 H HNT3 0.000 +B2C_D add . H2 H HNT3 0.00 +B2C_D add . H3 H HNT3 0.00 +B2C_D delete H . . . .000 +B2C_D change C B B B .000 +B2C_D change O O1 O O .000 +B2C_D add . O2 O O .000 + +loop_ +_chem_mod_tree.mod_id +_chem_mod_tree.function +_chem_mod_tree.atom_id +_chem_mod_tree.atom_back +_chem_mod_tree.back_type +_chem_mod_tree.atom_forward +_chem_mod_tree.connect_type +B2C_D change N n/a . CA START +B2C_D add H1 N . . . +B2C_D add H2 N . . . +B2C_D add H3 N . . . +B2C_D change B CA . . END +B2C_D change CA N . B . +B2C_D change O1 B . . . +B2C_D add O2 B . . . + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +B2C_D add N H1 single 0.914 0.010 1.036 0.016 +B2C_D add N H2 single 0.914 0.010 1.036 0.016 +B2C_D add N H3 single 0.914 0.010 1.036 0.016 +B2C_D change N CA single 1.491 .021 1.491 .021 +B2C_D change B CA single 1.560 .020 1.560 .020 +B2C_D change B O1 deloc 1.480 .020 1.480 .020 +B2C_D add B O2 deloc 1.480 .020 1.480 .020 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +B2C_D add H2 N H3 109.470 3.000 +B2C_D add H3 N CA 109.470 3.000 +B2C_D add H2 N CA 109.470 3.000 +B2C_D add H1 N H2 109.470 3.000 +B2C_D add H1 N H3 109.470 3.000 +B2C_D add H1 N CA 109.470 3.000 +B2C_D add O1 B O2 112.000 3.000 +B2C_D change CA B O1 126.000 3.000 +B2C_D add CA B O2 126.000 3.000 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.id +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +B2C_D add hhb N CA B O2 .00 30.0 3 + +loop_ +_chem_mod_chir.mod_id +_chem_mod_chir.function +_chem_mod_chir.atom_id_centre +_chem_mod_chir.atom_id_1 +_chem_mod_chir.atom_id_2 +_chem_mod_chir.atom_id_3 +_chem_mod_chir.new_volume_sign +B2C_D change CA N CB B positiv + +data_mod_RENAME + +data_mod_TERMINUS + +data_mod_DEL-HD22 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-HD22 delete HD22 . H H 0 +DEL-HD22 change ND2 . N NH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-HD22 delete ND2 HD22 single . . . . +DEL-HD22 change CB CG single 1.520 0.0174 1.520 0.0174 +DEL-HD22 change CG OD1 double 1.227 0.0138 1.227 0.0138 +DEL-HD22 change ND2 HD21 single 0.863 0.0200 1.013 0.0120 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-HD22 delete CG ND2 HD22 . . +DEL-HD22 delete HD21 ND2 HD22 . . +DEL-HD22 change CA CB CG 112.357 3.00 +DEL-HD22 change OD1 CG ND2 123.445 2.69 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +DEL-HD22 delete CB CG ND2 HD22 . . . 2 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +DEL-HD22 delete plan-3 CG 0.020 +DEL-HD22 delete plan-3 HD21 0.020 +DEL-HD22 delete plan-3 HD22 0.020 +DEL-HD22 delete plan-3 ND2 0.020 + +data_mod_DEL-HG +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-HG delete HG . H H 0 +DEL-HG change OG . O O2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-HG delete OG HG single . . . . +DEL-HG change CA CB single 1.518 0.0126 1.518 0.0126 +DEL-HG change CB OG single 1.426 0.0176 1.426 0.0176 +DEL-HG change CB HB3 single 0.982 0.0125 1.092 0.0100 +DEL-HG change CB HB2 single 0.982 0.0125 1.092 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-HG delete CB OG HG . . +DEL-HG change N CA CB 113.399 3.00 +DEL-HG change C CA CB 111.339 3.00 +DEL-HG change CA CB OG 109.581 3.00 +DEL-HG change OG CB HB3 109.634 2.46 +DEL-HG change OG CB HB2 109.634 2.46 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +DEL-HG delete CA CB OG HG . . . 3 + +data_mod_DEL-HG1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +DEL-HG1 delete HG1 . H H 0 +DEL-HG1 change OG1 . O O2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +DEL-HG1 delete OG1 HG1 single . . . . +DEL-HG1 change CA CB single 1.538 0.0100 1.538 0.0100 +DEL-HG1 change CB OG1 single 1.440 0.0100 1.440 0.0100 +DEL-HG1 change CB CG2 single 1.508 0.0200 1.508 0.0200 +DEL-HG1 change CB HB single 0.993 0.0134 1.092 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +DEL-HG1 delete CB OG1 HG1 . . +DEL-HG1 change N CA CB 113.399 3.00 +DEL-HG1 change C CA CB 111.339 3.00 +DEL-HG1 change CA CB OG1 111.145 1.50 +DEL-HG1 change CA CB CG2 110.837 3.00 +DEL-HG1 change CG2 CB HB 109.492 1.50 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +DEL-HG1 delete CA CB OG1 HG1 . . . 3 + +data_mod_HISmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +HISmod1 delete HD1 . H H 0 +HISmod1 change ND1 . N NR5 1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +HISmod1 delete ND1 HD1 single . . . . +HISmod1 change CB CG single 1.491 0.0100 1.491 0.0100 +HISmod1 change CG ND1 single 1.352 0.0200 1.352 0.0200 +HISmod1 change CG CD2 double 1.357 0.0100 1.357 0.0100 +HISmod1 change ND1 CE1 double 1.351 0.0200 1.351 0.0200 +HISmod1 change CE1 HE1 single 0.939 0.0134 1.082 0.0130 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +HISmod1 delete CG ND1 HD1 . . +HISmod1 delete CE1 ND1 HD1 . . +HISmod1 change CB CG ND1 123.044 1.50 +HISmod1 change CG CD2 HD2 126.231 1.50 +HISmod1 change ND1 CE1 HE1 125.433 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +HISmod1 delete plan-1 CB 0.020 +HISmod1 delete plan-1 CD2 0.020 +HISmod1 delete plan-1 CE1 0.020 +HISmod1 delete plan-1 CG 0.020 +HISmod1 delete plan-1 HD1 0.020 +HISmod1 delete plan-1 HD2 0.020 +HISmod1 delete plan-1 HE1 0.020 +HISmod1 delete plan-1 HE2 0.020 +HISmod1 delete plan-1 ND1 0.020 +HISmod1 delete plan-1 NE2 0.020 + +data_mod_HISmod2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +HISmod2 delete HE2 . H H 0 +HISmod2 change NE2 . N NR5 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +HISmod2 delete NE2 HE2 single . . . . +HISmod2 change CG CD2 double 1.366 0.0178 1.366 0.0178 +HISmod2 change ND1 CE1 double 1.344 0.0200 1.344 0.0200 +HISmod2 change CE1 NE2 single 1.322 0.0100 1.322 0.0100 +HISmod2 change CD2 HD2 single 0.949 0.0120 1.082 0.0130 +HISmod2 change CE1 HE1 single 0.939 0.0134 1.082 0.0130 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +HISmod2 delete CD2 NE2 HE2 . . +HISmod2 delete CE1 NE2 HE2 . . +HISmod2 change NE2 CD2 HD2 125.717 1.62 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +HISmod2 delete plan-1 CB 0.020 +HISmod2 delete plan-1 CD2 0.020 +HISmod2 delete plan-1 CE1 0.020 +HISmod2 delete plan-1 CG 0.020 +HISmod2 delete plan-1 HD1 0.020 +HISmod2 delete plan-1 HD2 0.020 +HISmod2 delete plan-1 HE1 0.020 +HISmod2 delete plan-1 HE2 0.020 +HISmod2 delete plan-1 ND1 0.020 +HISmod2 delete plan-1 NE2 0.020 + +data_mod_GTPmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +GTPmod1 delete "HO3'" . H H 0 +GTPmod1 change "O3'" . O O2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +GTPmod1 delete "O3'" "HO3'" single . . . . + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +GTPmod1 delete "C3'" "O3'" "HO3'" . . +GTPmod1 change "C5'" "C4'" "C3'" 114.817 2.32 +GTPmod1 change "C3'" "C4'" "H4'" 109.150 1.50 +GTPmod1 change "C2'" "C3'" "H3'" 110.368 2.92 +GTPmod1 change "C3'" "C2'" "H2'" 110.368 2.92 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +GTPmod1 delete "C4'" "C3'" "O3'" "HO3'" . . . 0 + +data_mod_TYRmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TYRmod1 delete HB3 . H H 0 +TYRmod1 change CB . C CH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TYRmod1 delete CB HB3 single . . . . +TYRmod1 change CA C single 1.533 0.0111 1.533 0.0111 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TYRmod1 delete CA CB HB3 . . +TYRmod1 delete CG CB HB3 . . +TYRmod1 delete HB3 CB HB2 . . +TYRmod1 change N CA CB 113.399 3.00 +TYRmod1 change CA C O 117.156 1.94 +TYRmod1 change CA C OXT 117.156 1.94 +TYRmod1 change CA CB CG 113.308 3.00 +TYRmod1 change CA CB HB2 106.713 1.50 +TYRmod1 change CG CB HB2 107.067 3.00 +TYRmod1 change CB CG CD1 120.731 3.00 +TYRmod1 change CB CG CD2 120.731 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +TYRmod1 change N CA CB CG sp3_sp3_28 180.000 10.0 3 +TYRmod1 change CD1 CG CB CA sp2_sp3_19 150.000 10.0 6 + +data_mod_HISmod3 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +HISmod3 delete HE2 . H H 0 +HISmod3 change NE2 . N NR5 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +HISmod3 delete NE2 HE2 single . . . . +HISmod3 change CG CD2 double 1.364 0.0129 1.364 0.0129 +HISmod3 change ND1 CE1 double 1.351 0.0200 1.351 0.0200 +HISmod3 change CD2 NE2 single 1.376 0.0100 1.376 0.0100 +HISmod3 change CE1 NE2 single 1.338 0.0162 1.338 0.0162 +HISmod3 change CD2 HD2 single 0.947 0.0141 1.082 0.0130 +HISmod3 change CE1 HE1 single 0.928 0.0133 1.082 0.0130 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +HISmod3 delete CD2 NE2 HE2 . . +HISmod3 delete CE1 NE2 HE2 . . +HISmod3 change CG ND1 CE1 108.905 3.00 +HISmod3 change CG CD2 NE2 108.374 2.83 +HISmod3 change CG CD2 HD2 126.805 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +HISmod3 delete plan-1 CB 0.020 +HISmod3 delete plan-1 CD2 0.020 +HISmod3 delete plan-1 CE1 0.020 +HISmod3 delete plan-1 CG 0.020 +HISmod3 delete plan-1 HD1 0.020 +HISmod3 delete plan-1 HD2 0.020 +HISmod3 delete plan-1 HE1 0.020 +HISmod3 delete plan-1 HE2 0.020 +HISmod3 delete plan-1 ND1 0.020 +HISmod3 delete plan-1 NE2 0.020 + +data_mod_TYRmod2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TYRmod2 delete HE2 . H H 0 +TYRmod2 change CE2 . C CR6 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TYRmod2 delete CE2 HE2 single . . . . +TYRmod2 change CG CD2 single 1.374 0.0100 1.374 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TYRmod2 delete CD2 CE2 HE2 . . +TYRmod2 delete CZ CE2 HE2 . . +TYRmod2 change CB CG CD2 121.348 2.28 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +TYRmod2 delete plan-1 CB 0.020 +TYRmod2 delete plan-1 CD1 0.020 +TYRmod2 delete plan-1 CD2 0.020 +TYRmod2 delete plan-1 CE1 0.020 +TYRmod2 delete plan-1 CE2 0.020 +TYRmod2 delete plan-1 CG 0.020 +TYRmod2 delete plan-1 CZ 0.020 +TYRmod2 delete plan-1 HD1 0.020 +TYRmod2 delete plan-1 HD2 0.020 +TYRmod2 delete plan-1 HE1 0.020 +TYRmod2 delete plan-1 HE2 0.020 +TYRmod2 delete plan-1 OH 0.020 + +data_mod_LYSmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LYSmod1 delete HZ2 . H H 0 +LYSmod1 delete HZ3 . H H 0 +LYSmod1 change NZ . N NT1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LYSmod1 delete NZ HZ2 single . . . . +LYSmod1 delete NZ HZ3 single . . . . +LYSmod1 change CE NZ single 1.468 0.0134 1.468 0.0134 +LYSmod1 change NZ HZ1 single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LYSmod1 delete CE NZ HZ2 . . +LYSmod1 delete CE NZ HZ3 . . +LYSmod1 delete HZ1 NZ HZ2 . . +LYSmod1 delete HZ1 NZ HZ3 . . +LYSmod1 delete HZ2 NZ HZ3 . . +LYSmod1 change CE NZ HZ1 111.861 3.00 + +data_mod_CYSmod2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +CYSmod2 delete HG . H HSH1 0 +CYSmod2 change SG . S S2 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +CYSmod2 delete SG HG single . . . . +CYSmod2 change CB SG single 1.805 0.0100 1.805 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +CYSmod2 delete CB SG HG . . + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +CYSmod2 delete CA CB SG HG . . + +data_mod_LYSmod2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LYSmod2 delete HZ1 . H H 0 +LYSmod2 delete HZ2 . H H 0 +LYSmod2 delete HZ3 . H H 0 +LYSmod2 change NZ . N N 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LYSmod2 delete NZ HZ1 single . . . . +LYSmod2 delete NZ HZ2 single . . . . +LYSmod2 delete NZ HZ3 single . . . . +LYSmod2 change CE NZ single 1.480 0.0168 1.480 0.0168 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LYSmod2 delete CE NZ HZ1 . . +LYSmod2 delete CE NZ HZ2 . . +LYSmod2 delete CE NZ HZ3 . . +LYSmod2 delete HZ1 NZ HZ2 . . +LYSmod2 delete HZ1 NZ HZ3 . . +LYSmod2 delete HZ2 NZ HZ3 . . + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +LYSmod2 delete CD CE NZ HZ3 . . + +data_mod_LYSmod3 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LYSmod3 delete HZ2 . H H 0 +LYSmod3 delete HZ3 . H H 0 +LYSmod3 change NZ . N NH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LYSmod3 delete NZ HZ2 single . . . . +LYSmod3 delete NZ HZ3 single . . . . +LYSmod3 change CE NZ single 1.456 0.0109 1.456 0.0109 +LYSmod3 change NZ HZ1 single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LYSmod3 delete CE NZ HZ2 . . +LYSmod3 delete CE NZ HZ3 . . +LYSmod3 delete HZ1 NZ HZ2 . . +LYSmod3 delete HZ1 NZ HZ3 . . +LYSmod3 delete HZ2 NZ HZ3 . . +LYSmod3 change CE NZ HZ1 118.241 1.90 + +data_mod_ASNmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +ASNmod1 delete ND2 . N NH2 0 +ASNmod1 delete HD21 . H H 0 +ASNmod1 delete HD22 . H H 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +ASNmod1 delete CG ND2 single . . . . +ASNmod1 delete ND2 HD21 single . . . . +ASNmod1 delete ND2 HD22 single . . . . +ASNmod1 change CB CG single 1.508 0.0116 1.508 0.0116 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +ASNmod1 delete CB CG ND2 . . +ASNmod1 delete OD1 CG ND2 . . +ASNmod1 delete CG ND2 HD21 . . +ASNmod1 delete CG ND2 HD22 . . +ASNmod1 delete HD21 ND2 HD22 . . +ASNmod1 change CB CG OD1 121.400 1.50 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +ASNmod1 delete CB CG ND2 HD21 . . + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +ASNmod1 delete plan-2 CB 0.020 +ASNmod1 delete plan-2 CG 0.020 +ASNmod1 delete plan-2 ND2 0.020 +ASNmod1 delete plan-2 OD1 0.020 +ASNmod1 delete plan-3 CG 0.020 +ASNmod1 delete plan-3 HD21 0.020 +ASNmod1 delete plan-3 HD22 0.020 +ASNmod1 delete plan-3 ND2 0.020 + +data_mod_METmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +METmod1 change SD . S S3 1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +METmod1 change CG SD single 1.808 0.0100 1.808 0.0100 +METmod1 change CE HE3 single 0.967 0.0100 1.089 0.0100 +METmod1 change CE HE2 single 0.967 0.0100 1.089 0.0100 +METmod1 change CE HE1 single 0.967 0.0100 1.089 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +METmod1 change CA CB CG 114.058 2.21 +METmod1 change CG CB HB3 108.377 2.40 +METmod1 change CG CB HB2 108.377 2.40 +METmod1 change CB CG SD 110.122 1.50 +METmod1 change CB CG HG3 108.661 3.00 +METmod1 change CB CG HG2 108.661 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +METmod1 change CA CB CG SD sp3_sp3_19 180.000 10.0 3 +METmod1 change CB CG SD CE sp3_sp3_28 180.000 10.0 3 + +data_mod_TYRmod3 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TYRmod3 delete HE1 . H H 0 +TYRmod3 change CE1 . C CR6 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TYRmod3 delete CE1 HE1 single . . . . +TYRmod3 change CE1 CZ double 1.395 0.0152 1.395 0.0152 +TYRmod3 change CD1 HD1 single 0.940 0.0104 1.082 0.0130 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TYRmod3 delete CD1 CE1 HE1 . . +TYRmod3 delete CZ CE1 HE1 . . +TYRmod3 change CB CG CD1 121.186 2.28 +TYRmod3 change CG CD1 HD1 119.873 2.79 +TYRmod3 change CD1 CE1 CZ 119.634 2.58 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +TYRmod3 change CB CG CD1 CE1 const_sp2_sp2_3 180.000 0.0 2 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +TYRmod3 delete plan-1 CB 0.020 +TYRmod3 delete plan-1 CD1 0.020 +TYRmod3 delete plan-1 CD2 0.020 +TYRmod3 delete plan-1 CE1 0.020 +TYRmod3 delete plan-1 CE2 0.020 +TYRmod3 delete plan-1 CG 0.020 +TYRmod3 delete plan-1 CZ 0.020 +TYRmod3 delete plan-1 HD1 0.020 +TYRmod3 delete plan-1 HD2 0.020 +TYRmod3 delete plan-1 HE1 0.020 +TYRmod3 delete plan-1 HE2 0.020 +TYRmod3 delete plan-1 OH 0.020 + +data_mod_LEUmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LEUmod1 delete OXT . O OC -1 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LEUmod1 delete C OXT single . . . . +LEUmod1 change CA C single 1.527 0.0100 1.527 0.0100 +LEUmod1 change C O double 1.229 0.0102 1.229 0.0102 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LEUmod1 delete CA C OXT . . +LEUmod1 delete O C OXT . . +LEUmod1 change CA C O 121.041 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +LEUmod1 delete plan-1 C 0.020 +LEUmod1 delete plan-1 CA 0.020 +LEUmod1 delete plan-1 O 0.020 +LEUmod1 delete plan-1 OXT 0.020 + +data_mod_LYSmod4 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LYSmod4 delete HZ1 . H H 0 +LYSmod4 delete HZ2 . H H 0 +LYSmod4 delete HZ3 . H H 0 +LYSmod4 change NZ . N N 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LYSmod4 delete NZ HZ1 single . . . . +LYSmod4 delete NZ HZ2 single . . . . +LYSmod4 delete NZ HZ3 single . . . . +LYSmod4 change CE NZ single 1.462 0.0100 1.462 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LYSmod4 delete CE NZ HZ1 . . +LYSmod4 delete CE NZ HZ2 . . +LYSmod4 delete CE NZ HZ3 . . +LYSmod4 delete HZ1 NZ HZ2 . . +LYSmod4 delete HZ1 NZ HZ3 . . +LYSmod4 delete HZ2 NZ HZ3 . . + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +LYSmod4 delete CD CE NZ HZ1 . . + +data_mod_TRPmod1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TRPmod1 delete HH2 . H H 0 +TRPmod1 change CH2 . C CR6 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TRPmod1 delete CH2 HH2 single . . . . +TRPmod1 change CE2 CZ2 single 1.395 0.0185 1.395 0.0185 +TRPmod1 change CE3 CZ3 double 1.379 0.0158 1.379 0.0158 +TRPmod1 change CZ2 CH2 double 1.391 0.0100 1.391 0.0100 +TRPmod1 change CZ3 CH2 single 1.412 0.0100 1.412 0.0100 +TRPmod1 change CZ2 HZ2 single 0.950 0.0100 1.082 0.0130 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TRPmod1 delete CZ2 CH2 HH2 . . +TRPmod1 delete CZ3 CH2 HH2 . . +TRPmod1 change CE2 CZ2 CH2 119.258 1.50 +TRPmod1 change CZ2 CH2 CZ3 119.154 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +TRPmod1 delete plan-1 CD2 0.020 +TRPmod1 delete plan-1 CE2 0.020 +TRPmod1 delete plan-1 CE3 0.020 +TRPmod1 delete plan-1 CG 0.020 +TRPmod1 delete plan-1 CH2 0.020 +TRPmod1 delete plan-1 CZ2 0.020 +TRPmod1 delete plan-1 CZ3 0.020 +TRPmod1 delete plan-1 HE3 0.020 +TRPmod1 delete plan-1 HH2 0.020 +TRPmod1 delete plan-1 HZ2 0.020 +TRPmod1 delete plan-1 HZ3 0.020 +TRPmod1 delete plan-1 NE1 0.020 + +data_mod_TYRmod4 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TYRmod4 delete HE2 . H H 0 +TYRmod4 change CE2 . C CR6 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TYRmod4 delete CE2 HE2 single . . . . +TYRmod4 change CG CD2 single 1.391 0.0149 1.391 0.0149 +TYRmod4 change CD2 CE2 double 1.396 0.0127 1.396 0.0127 +TYRmod4 change CE2 CZ single 1.400 0.0131 1.400 0.0131 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TYRmod4 delete CD2 CE2 HE2 . . +TYRmod4 delete CZ CE2 HE2 . . +TYRmod4 change CB CG CD2 121.325 2.28 +TYRmod4 change CD1 CG CD2 117.170 2.83 +TYRmod4 change CG CD2 CE2 123.240 3.00 +TYRmod4 change CD2 CE2 CZ 118.013 1.50 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +TYRmod4 delete plan-1 CB 0.020 +TYRmod4 delete plan-1 CD1 0.020 +TYRmod4 delete plan-1 CD2 0.020 +TYRmod4 delete plan-1 CE1 0.020 +TYRmod4 delete plan-1 CE2 0.020 +TYRmod4 delete plan-1 CG 0.020 +TYRmod4 delete plan-1 CZ 0.020 +TYRmod4 delete plan-1 HD1 0.020 +TYRmod4 delete plan-1 HD2 0.020 +TYRmod4 delete plan-1 HE1 0.020 +TYRmod4 delete plan-1 HE2 0.020 +TYRmod4 delete plan-1 OH 0.020 + +data_mod_TYRmod5 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +TYRmod5 delete HH . H H 0 +TYRmod5 change OH . O O 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +TYRmod5 delete OH HH single . . . . +TYRmod5 change CZ OH single 1.410 0.0100 1.410 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +TYRmod5 delete CZ OH HH . . +TYRmod5 change CE1 CZ CE2 121.469 1.50 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +TYRmod5 delete CE1 CZ OH HH . . . 0 + +data_mod_LYSmod5 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +LYSmod5 delete HZ2 . H H 0 +LYSmod5 delete HZ3 . H H 0 +LYSmod5 change NZ . N NH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +LYSmod5 delete NZ HZ2 single . . . . +LYSmod5 delete NZ HZ3 single . . . . +LYSmod5 change CE NZ single 1.456 0.0109 1.456 0.0109 +LYSmod5 change NZ HZ1 single 0.914 0.010 1.036 0.016 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +LYSmod5 delete CE NZ HZ2 . . +LYSmod5 delete CE NZ HZ3 . . +LYSmod5 delete HZ1 NZ HZ2 . . +LYSmod5 delete HZ1 NZ HZ3 . . +LYSmod5 delete HZ2 NZ HZ3 . . +LYSmod5 change CE NZ HZ1 118.176 1.90 + +data_mod_MS6mod2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +MS6mod2 delete H2 . H H 0 +MS6mod2 delete H3 . H H 0 +MS6mod2 change N . N NH1 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +MS6mod2 delete N H2 single . . . . +MS6mod2 delete N H3 single . . . . +MS6mod2 change N CA single 1.454 0.0100 1.454 0.0100 +MS6mod2 change N H single 0.871 0.0200 1.016 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +MS6mod2 delete CA N H2 . . +MS6mod2 delete CA N H3 . . +MS6mod2 delete H N H2 . . +MS6mod2 delete H N H3 . . +MS6mod2 delete H2 N H3 . . +MS6mod2 change CA N H 119.298 3.00 +MS6mod2 change N CA C 111.439 3.00 + +data_mod_ASPprot +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +ASPprot change OD2 . O OH1 0 +ASPprot add . HD2 H H 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +ASPprot change CB CG single 1.505 0.0100 1.505 0.0100 +ASPprot change CG OD1 double 1.217 0.0198 1.217 0.0198 +ASPprot change CG OD2 single 1.308 0.0191 1.308 0.0191 +ASPprot add OD2 HD2 single 0.876 0.0200 0.966 0.0059 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +ASPprot change CA CB CG 113.488 1.82 +ASPprot change CG CB HB3 108.725 1.50 +ASPprot change CG CB HB2 108.725 1.50 +ASPprot change CB CG OD1 123.540 1.50 +ASPprot change CB CG OD2 113.234 2.02 +ASPprot add CG OD2 HD2 110.209 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +ASPprot add CB CG OD2 HD2 sp2_sp2_1 180.000 5.0 2 + +data_mod_GLUprot +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +GLUprot change OE2 . O OH1 0 +GLUprot add . HE2 H H 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +GLUprot change CG CD single 1.504 0.0100 1.504 0.0100 +GLUprot change CD OE1 double 1.217 0.0198 1.217 0.0198 +GLUprot change CD OE2 single 1.308 0.0191 1.308 0.0191 +GLUprot add OE2 HE2 single 0.876 0.0200 0.966 0.0059 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +GLUprot change CG CD OE1 123.741 1.99 +GLUprot change CG CD OE2 113.306 2.95 +GLUprot add CD OE2 HE2 110.209 3.00 + +loop_ +_chem_mod_tor.mod_id +_chem_mod_tor.function +_chem_mod_tor.atom_id_1 +_chem_mod_tor.atom_id_2 +_chem_mod_tor.atom_id_3 +_chem_mod_tor.atom_id_4 +_chem_mod_tor.id +_chem_mod_tor.new_value_angle +_chem_mod_tor.new_value_angle_esd +_chem_mod_tor.new_period +GLUprot add CG CD OE2 HE2 sp2_sp2_1 180.000 5.0 2 + +data_mod_HISprot1 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +HISprot1 delete HD1 . H H 0 +HISprot1 change ND1 . N NRD5 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +HISprot1 delete ND1 HD1 single . . . . +HISprot1 change CB CG single 1.491 0.0100 1.491 0.0100 +HISprot1 change CG CD2 double 1.359 0.0100 1.359 0.0100 +HISprot1 change CD2 NE2 single 1.373 0.0100 1.373 0.0100 +HISprot1 change CE1 NE2 single 1.335 0.0127 1.335 0.0127 +HISprot1 change CB HB3 single 0.981 0.0100 1.092 0.0100 +HISprot1 change CB HB2 single 0.981 0.0100 1.092 0.0100 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +HISprot1 delete CG ND1 HD1 . . +HISprot1 delete CE1 ND1 HD1 . . +HISprot1 change CA N H 109.786 3.00 +HISprot1 change CA N H2 109.786 3.00 +HISprot1 change CA N H3 109.786 3.00 +HISprot1 change N CA HA 108.404 1.50 +HISprot1 change CB CA HA 109.001 1.50 +HISprot1 change CA C O 117.155 2.01 +HISprot1 change CA C OXT 117.155 2.01 +HISprot1 change HB3 CB HB2 107.622 1.50 +HISprot1 change CB CG ND1 121.338 1.81 +HISprot1 change ND1 CG CD2 108.617 1.58 +HISprot1 change CG ND1 CE1 105.858 1.50 +HISprot1 change ND1 CE1 NE2 111.595 1.50 +HISprot1 change ND1 CE1 HE1 124.330 1.50 +HISprot1 change NE2 CE1 HE1 124.075 2.88 +HISprot1 change CD2 NE2 CE1 107.204 3.00 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +HISprot1 delete plan-1 CB 0.020 +HISprot1 delete plan-1 CD2 0.020 +HISprot1 delete plan-1 CE1 0.020 +HISprot1 delete plan-1 CG 0.020 +HISprot1 delete plan-1 HD1 0.020 +HISprot1 delete plan-1 HD2 0.020 +HISprot1 delete plan-1 HE1 0.020 +HISprot1 delete plan-1 HE2 0.020 +HISprot1 delete plan-1 ND1 0.020 +HISprot1 delete plan-1 NE2 0.020 +HISprot1 add plan-1 CB 0.020 +HISprot1 add plan-1 CD2 0.020 +HISprot1 add plan-1 CE1 0.020 +HISprot1 add plan-1 CG 0.020 +HISprot1 add plan-1 HD2 0.020 +HISprot1 add plan-1 HE1 0.020 +HISprot1 add plan-1 HE2 0.020 +HISprot1 add plan-1 ND1 0.020 +HISprot1 add plan-1 NE2 0.020 + +data_mod_HISprot2 +loop_ +_chem_mod_atom.mod_id +_chem_mod_atom.function +_chem_mod_atom.atom_id +_chem_mod_atom.new_atom_id +_chem_mod_atom.new_type_symbol +_chem_mod_atom.new_type_energy +_chem_mod_atom.new_charge +HISprot2 delete HE2 . H H 0 +HISprot2 change ND1 . N NR15 0 +HISprot2 change NE2 . N NRD5 0 + +loop_ +_chem_mod_bond.mod_id +_chem_mod_bond.function +_chem_mod_bond.atom_id_1 +_chem_mod_bond.atom_id_2 +_chem_mod_bond.new_type +_chem_mod_bond.new_value_dist +_chem_mod_bond.new_value_dist_esd +_chem_mod_bond.new_value_dist_nucleus +_chem_mod_bond.new_value_dist_nucleus_esd +HISprot2 delete NE2 HE2 single . . . . +HISprot2 change CB CG single 1.494 0.0100 1.494 0.0100 +HISprot2 change CG CD2 double 1.356 0.0100 1.356 0.0100 +HISprot2 change ND1 CE1 single 1.346 0.0100 1.346 0.0100 +HISprot2 change CD2 NE2 single 1.380 0.0100 1.380 0.0100 +HISprot2 change CE1 NE2 double 1.308 0.0100 1.308 0.0100 +HISprot2 change CB HB3 single 0.981 0.0100 1.092 0.0100 +HISprot2 change CB HB2 single 0.981 0.0100 1.092 0.0100 +HISprot2 change ND1 HD1 single 0.919 0.0200 1.013 0.0120 +HISprot2 change CD2 HD2 single 0.929 0.0143 1.085 0.0150 + +loop_ +_chem_mod_angle.mod_id +_chem_mod_angle.function +_chem_mod_angle.atom_id_1 +_chem_mod_angle.atom_id_2 +_chem_mod_angle.atom_id_3 +_chem_mod_angle.new_value_angle +_chem_mod_angle.new_value_angle_esd +HISprot2 delete CD2 NE2 HE2 . . +HISprot2 delete CE1 NE2 HE2 . . +HISprot2 change CA N H 109.786 3.00 +HISprot2 change CA N H2 109.786 3.00 +HISprot2 change CA N H3 109.786 3.00 +HISprot2 change N CA HA 108.404 1.50 +HISprot2 change CB CA HA 109.001 1.50 +HISprot2 change CA C O 117.155 2.01 +HISprot2 change CA C OXT 117.155 2.01 +HISprot2 change HB3 CB HB2 107.622 1.50 +HISprot2 change CB CG CD2 132.429 1.50 +HISprot2 change CG ND1 CE1 107.807 1.50 +HISprot2 change CG CD2 NE2 110.147 1.50 +HISprot2 change CG CD2 HD2 124.943 1.50 +HISprot2 change ND1 CE1 NE2 111.530 1.50 +HISprot2 change ND1 CE1 HE1 123.708 1.50 +HISprot2 change NE2 CE1 HE1 124.763 3.00 +HISprot2 change CD2 NE2 CE1 105.756 3.00 + +loop_ +_chem_mod_plane_atom.mod_id +_chem_mod_plane_atom.function +_chem_mod_plane_atom.plane_id +_chem_mod_plane_atom.atom_id +_chem_mod_plane_atom.new_dist_esd +HISprot2 delete plan-1 CB 0.020 +HISprot2 delete plan-1 CD2 0.020 +HISprot2 delete plan-1 CE1 0.020 +HISprot2 delete plan-1 CG 0.020 +HISprot2 delete plan-1 HD1 0.020 +HISprot2 delete plan-1 HD2 0.020 +HISprot2 delete plan-1 HE1 0.020 +HISprot2 delete plan-1 HE2 0.020 +HISprot2 delete plan-1 ND1 0.020 +HISprot2 delete plan-1 NE2 0.020 +HISprot2 add plan-1 CB 0.020 +HISprot2 add plan-1 CD2 0.020 +HISprot2 add plan-1 CE1 0.020 +HISprot2 add plan-1 CG 0.020 +HISprot2 add plan-1 HD1 0.020 +HISprot2 add plan-1 HD2 0.020 +HISprot2 add plan-1 HE1 0.020 +HISprot2 add plan-1 ND1 0.020 +HISprot2 add plan-1 NE2 0.020 diff --git a/image_analysis/structure_refinement/monomers/update_monomers.py b/image_analysis/structure_refinement/monomers/update_monomers.py new file mode 100644 index 000000000..5b0b8d871 --- /dev/null +++ b/image_analysis/structure_refinement/monomers/update_monomers.py @@ -0,0 +1,96 @@ +#!/usr/bin/env python3 +# SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +# SPDX-License-Identifier: GPL-3.0-only +"""Copy the subset of the CCP4 Monomer Library (https://github.com/MonomerLibrary/monomers, LGPL-3.0) +that rugnux's restrained refinement carries in its binary into this directory. + + update_monomers.py /path/to/monomers + +COMPOUNDS below is THE list: a compound named there is restrained by the refinement, everything else +is held fixed. To add one, add its code and run this again; CMake embeds every .cif of this directory +(MonomerLibrary.cpp), so nothing else needs to change. + +The compound files are copied verbatim. links_and_mods.cif is cut down to the links and modifications +that can apply to these compounds (the polymer links, the termini, the disulfide, ...), and ener_lib.cif +to its atom-type table (_lib_atom: the van der Waals and ion radii and the hydrogen-bond types). +Requires the gemmi Python module.""" + +import os +import shutil +import sys + +import gemmi + +AMINO_ACIDS = ["ALA", "ARG", "ASN", "ASP", "CYS", "GLN", "GLU", "GLY", "HIS", "ILE", + "LEU", "LYS", "MET", "PHE", "PRO", "SER", "THR", "TRP", "TYR", "VAL", "MSE"] +NUCLEOTIDES = ["DA", "DC", "DG", "DT", "A", "C", "G", "U"] +NUCLEOTIDE_LIGANDS = ["ATP", "ADP", "AMP", "GTP", "GDP", "GMP"] +ADDITIVES = ["DMS", "PEG", "PGE", "PG4", "1PE", "GOL", "EDO", "SO4", "PO4", "ACT", "MPD"] +WATER_AND_IONS = ["HOH", "NA", "K", "MG", "CA", "ZN", "MN", "FE", "FE2", "NI", "CU", "CO", "CD", + "CL", "BR", "IOD"] +COMPOUNDS = AMINO_ACIDS + NUCLEOTIDES + NUCLEOTIDE_LIGANDS + ADDITIVES + WATER_AND_IONS + +# Groups of the polymers above; links and modifications of other groups (sugars) are left out. +GROUPS = {".", "peptide", "P-peptide", "M-peptide", "DNA/RNA", "NON-POLYMER"} + + +def compound_path(lib, code): + return os.path.join(lib, code[0].lower(), code + ".cif") + + +def applies(comp, group): + return (comp == "." or comp in COMPOUNDS) and group in GROUPS + + +def trim_links_and_mods(lib, out): + doc = gemmi.cif.read(os.path.join(lib, "links_and_mods.cif")) + links = doc.find_block("link_list").find("_chem_link.", ["id", "comp_id_1", "mod_id_1", "group_comp_1", + "comp_id_2", "mod_id_2", "group_comp_2", "name"]) + mods = doc.find_block("mod_list").find("_chem_mod.", ["id", "name", "comp_id", "group_id"]) + keep_links = [list(r) for r in links if applies(r[1], r[3]) and applies(r[4], r[6])] + keep_mods = [list(r) for r in mods if applies(r[2], r[3])] + keep = {"link_" + r[0] for r in keep_links} | {"mod_" + r[0] for r in keep_mods} + + new = gemmi.cif.Document() + for name, tag, rows in (("link_list", "_chem_link.", keep_links), ("mod_list", "_chem_mod.", keep_mods)): + block = new.add_new_block(name) + old = doc.find_block(name).find_loop_item(tag + "id").loop + loop = block.init_loop(tag, [t[len(tag):] for t in old.tags]) + for r in rows: + loop.add_row(r) + for block in doc: + if block.name in keep: + new.add_copied_block(block) + new.write_file(out) + return len(keep_links), len(keep_mods) + + +def trim_ener_lib(lib, out): + doc = gemmi.cif.read(os.path.join(lib, "ener_lib.cif")) + atoms = doc[0].find_loop_item("_lib_atom.type").loop + new = gemmi.cif.Document() + block = new.add_new_block(doc[0].name) + loop = block.init_loop("_lib_atom.", [t[len("_lib_atom."):] for t in atoms.tags]) + for i in range(atoms.length()): + loop.add_row([atoms[i, j] for j in range(atoms.width())]) + new.write_file(out) + + +def main(): + if len(sys.argv) != 2: + sys.exit(__doc__) + lib = sys.argv[1] + here = os.path.dirname(os.path.abspath(__file__)) + for f in os.listdir(here): + if f.endswith(".cif"): + os.remove(os.path.join(here, f)) + for code in COMPOUNDS: + shutil.copyfile(compound_path(lib, code), os.path.join(here, code + ".cif")) + n_links, n_mods = trim_links_and_mods(lib, os.path.join(here, "links_and_mods.cif")) + trim_ener_lib(lib, os.path.join(here, "ener_lib.cif")) + shutil.copyfile(os.path.join(lib, "COPYING"), os.path.join(here, "COPYING")) + print(f"{len(COMPOUNDS)} compounds, {n_links} links, {n_mods} modifications") + + +if __name__ == "__main__": + main() diff --git a/licenses/COLLECT.sh b/licenses/COLLECT.sh index 772ff0748..d594d75da 100644 --- a/licenses/COLLECT.sh +++ b/licenses/COLLECT.sh @@ -75,6 +75,7 @@ copy_license bitshuffle-hperf.txt compression/bitshuffle_hperf/LICENSE-APACHE copy_license lz4.txt compression/lz4/LICENSE copy_license xilinx-hls-headers.txt fpga/include/LICENSE.HLS_Headers copy_license gemmi.txt gemmi_gph/LICENSE.txt +copy_license ccp4-monomer-library.txt image_analysis/structure_refinement/monomers/COPYING # GEMMI bundles six third-party headers under its own include tree, each under its own licence # (see THIRD_PARTY_NOTICES.md). Only PEGTL ships a LICENSE file; sajson, fast_float, half, pocketfft # and tinydir carry their terms in a comment at the top of the header, so licenses/sajson.txt, diff --git a/licenses/ccp4-monomer-library.txt b/licenses/ccp4-monomer-library.txt new file mode 100644 index 000000000..3f7b8b1e5 --- /dev/null +++ b/licenses/ccp4-monomer-library.txt @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + -- 2.54.0 From b4b68d368f4e26a02e4f68b1d3a10a4a6cf981bf Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 25 Oct 2026 01:22:54 +0200 Subject: [PATCH 018/122] Restrained refinement on the GPU: ML amplitude target, FFT gradient, dictionary restraints, R1 + R2 driver, blobs RefineModel (Refinement.h) refines a placed model against the merge, reading and writing nothing: - placement stage (R1): every chain of 50+ atoms as a rigid body at once (L-BFGS on six parameters per chain, their gradient from the per-atom one through Ceres jets), then one B shift per residue; - restrained stage (R2): positions and isotropic B of every atom of a residue the embedded dictionary describes, the rest held fixed but kept in Fcalc and the mask; riding hydrogens added by gemmi's topology, moved with their parents, re-placed every macro-cycle. Macro-cycles refit the mask, the scale and bulk solvent (FitModelScale / ModelScaleGPUPool) and the likelihood's D and beta (ML on the free set in resolution bins), rebuild the repulsion pairs (symmetry mates included), then L-BFGS on positions and, where chosen, on B. - weights: a ladder of full refinements at multiples of the gradient-balanced X-ray weight, chosen by R-free within bond/angle bounds (ties to the tighter geometry), then the B refinement tried at its own weights and kept only where it beats B held by more than the tie. The target and its gradient (RefinementXray, RefinementGPU): the Rice/centric amplitude likelihood (RefinementMath.h, shared host/device code), the gradient by Agarwal's FFT method - the adjoint of the reciprocal-space symmetry composition into a half-l (CPU) or half-u (cuFFT) spectrum, one inverse real transform, then each atom's density derivatives (xyz and B) summed over its box. On the GPU everything per evaluation stays on the device: ModelDensityGPU's gather, r2c, a fused compose + likelihood kernel, a CSR gather for the adjoint (no atomics), c2r, one warp per atom for the gradient; the restraints are one kernel per restraint plus a per-atom gather of gradient slots; cub reductions. Deterministic. Restraints (RefinementRestraints): bonds, angles, torsions (with esd, no phi/psi, no alternative sugar puckers), chiral volumes, least-squares planes from gemmi's Topo; repulsions beyond 1-4 (vdW radii from the dictionary's energy library, 2.6 A for H-bond pairs, 1.9 A metal-N/O/S); B similarity of bonded and angle-related atoms. DensityBlobs (D1): gemmi's flood-fill blobs of mFo-DFc above 3 sigma peaking above 4 sigma, placed beside the model and labelled WATER / ION / LIGAND / MODEL_ERROR by distance, contacts, volume and the anomalous map. tools/rugnux_refine_test refines a model against a finished run's p.mtz (developer utility, not installed). Tests: likelihood derivative, the embedded library, restraint values on ideal residues and every restraint kind's gradient against finite differences (CPU, and the GPU against the CPU), the X-ray gradient against finite differences in P1, P212121, C2 and P6122 (CPU and GPU), and a synthetic refinement that recovers a shaken model. Credits in docs/ACKNOWLEDGEMENT.md and at the algorithms. Measured on the open arm's battery outputs against REFMAC 5.8, 10 cycles, same p.mtz, free set and start model (R-free): 5reo 0.2228 vs 0.2236, 8dyz 0.1733 vs 0.1651, 9chw 0.1995 vs 0.1969 (CPU engine). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit 8efe6f2322b3bfdae580bb34f256e67730dfc3c2) --- docs/ACKNOWLEDGEMENT.md | 45 + .../structure_refinement/CMakeLists.txt | 8 + .../structure_refinement/DensityBlobs.cpp | 110 +++ .../structure_refinement/DensityBlobs.h | 41 + .../structure_refinement/Refinement.cpp | 781 ++++++++++++++++++ .../structure_refinement/Refinement.h | 103 +++ .../structure_refinement/RefinementGPU.cpp | 283 +++++++ .../structure_refinement/RefinementGPU.cu | 691 ++++++++++++++++ .../structure_refinement/RefinementGPU.h | 24 + .../RefinementGPUEngine.h | 78 ++ .../structure_refinement/RefinementMath.h | 268 ++++++ .../RefinementRestraints.cpp | 568 +++++++++++++ .../RefinementRestraints.h | 98 +++ .../structure_refinement/RefinementXray.cpp | 396 +++++++++ .../structure_refinement/RefinementXray.h | 117 +++ tests/CMakeLists.txt | 1 + tests/RefinementTest.cpp | 452 ++++++++++ tools/CMakeLists.txt | 5 + tools/rugnux_refine_test.cpp | 151 ++++ 19 files changed, 4220 insertions(+) create mode 100644 image_analysis/structure_refinement/DensityBlobs.cpp create mode 100644 image_analysis/structure_refinement/DensityBlobs.h create mode 100644 image_analysis/structure_refinement/Refinement.cpp create mode 100644 image_analysis/structure_refinement/Refinement.h create mode 100644 image_analysis/structure_refinement/RefinementGPU.cpp create mode 100644 image_analysis/structure_refinement/RefinementGPU.cu create mode 100644 image_analysis/structure_refinement/RefinementGPU.h create mode 100644 image_analysis/structure_refinement/RefinementGPUEngine.h create mode 100644 image_analysis/structure_refinement/RefinementMath.h create mode 100644 image_analysis/structure_refinement/RefinementRestraints.cpp create mode 100644 image_analysis/structure_refinement/RefinementRestraints.h create mode 100644 image_analysis/structure_refinement/RefinementXray.cpp create mode 100644 image_analysis/structure_refinement/RefinementXray.h create mode 100644 tests/RefinementTest.cpp create mode 100644 tools/rugnux_refine_test.cpp diff --git a/docs/ACKNOWLEDGEMENT.md b/docs/ACKNOWLEDGEMENT.md index 7238bb34f..51a688911 100644 --- a/docs/ACKNOWLEDGEMENT.md +++ b/docs/ACKNOWLEDGEMENT.md @@ -508,6 +508,51 @@ molecular replacement; the error itself is AlphaFold's: J. Jumper, R. Evans, A. accurate protein structure prediction with AlphaFold" (2021), Nature 596, 583-589 [doi:10.1038/s41586-021-03819-2](https://doi.org/10.1038/s41586-021-03819-2). +**Structure refinement** (`--refine`) — the placed model is refined against the maximum-likelihood +amplitude target, the Rice distribution of an observed amplitude given the model's (its centric +counterpart for a centric reflection): N. S. Pannu and R. J. Read, "Improved structure refinement +through maximum likelihood" (1996), Acta Cryst. A52, 659-668 +[doi:10.1107/S0108767396004370](https://doi.org/10.1107/S0108767396004370); G. N. Murshudov, +A. A. Vagin and E. J. Dodson, "Refinement of macromolecular structures by the maximum-likelihood method" +(1997), Acta Cryst. D53, 240-255 [doi:10.1107/S0907444996012255](https://doi.org/10.1107/S0907444996012255). +Its two parameters, D and the variance, are fitted by maximum likelihood on the free reflections in +resolution bins: V. Y. Lunin and T. P. Skovoroda, "R-free likelihood-based estimates of errors for phases +calculated from atomic models" (1995), Acta Cryst. A51, 880-887 +[doi:10.1107/S010876739500688X](https://doi.org/10.1107/S010876739500688X); V. Y. Lunin, P. V. Afonine and +A. G. Urzhumtsev, "Likelihood-based refinement. I. Irremovable model errors" (2002), Acta Cryst. A58, +270-282 [doi:10.1107/S0108767302001046](https://doi.org/10.1107/S0108767302001046). The gradient with +respect to every atom is taken by the FFT method - the derivatives of the target with respect to the +structure factors transformed into a map and summed against each atom's density derivatives: +R. C. Agarwal, "A new least-squares refinement technique based on the fast Fourier transform algorithm" +(1978), Acta Cryst. A34, 791-809 [doi:10.1107/S0567739478001618](https://doi.org/10.1107/S0567739478001618). +The positions and B factors are minimised by L-BFGS (Ceres): D. C. Liu and J. Nocedal, "On the limited +memory BFGS method for large scale optimization" (1989), Math. Program. 45, 503-528 +[doi:10.1007/BF01589116](https://doi.org/10.1007/BF01589116). The geometry restraints are those of the CCP4 +Monomer Library, a subset of which rugnux carries (see THIRD_PARTY_NOTICES.md): A. A. Vagin, +R. A. Steiner, A. A. Lebedev, L. Potterton, S. McNicholas, F. Long and G. N. Murshudov, "REFMAC5 +dictionary: organization of prior chemical knowledge and guidelines for its use" (2004), Acta Cryst. D60, +2184-2195 [doi:10.1107/S0907444904023510](https://doi.org/10.1107/S0907444904023510); applied to the model +through GEMMI's topology (links, modifications, planes, chiral volumes, torsions): M. Wojdyr, "GEMMI: A +library for structural biology" (2022), J. Open Source Softw. 7, 4200 +[doi:10.21105/joss.04200](https://doi.org/10.21105/joss.04200). The torsion derivatives follow +A. Blondel and M. Karplus, "New formulation for derivatives of torsion angles and improper torsion angles +in molecular mechanics: elimination of singularities" (1996), J. Comput. Chem. 17, 1132-1141 +[doi:10.1002/(SICI)1096-987X(19960715)17:9<1132::AID-JCC5>3.0.CO;2-T](https://doi.org/10.1002/(SICI)1096-987X(19960715)17:9%3C1132::AID-JCC5%3E3.0.CO;2-T). +The B factors of bonded atoms are restrained to each other, as REFMAC5 restrains them (Murshudov et al. +1997, above). The weight of the X-ray term against the geometry starts from the ratio of the two +gradients and is chosen among several full refinements by R-free with the geometry held within bounds, +as phenix.refine chooses it: P. V. Afonine, R. W. Grosse-Kunstleve, N. Echols, J. J. Headd, +N. W. Moriarty, M. Mustyakimov, T. C. Terwilliger, A. Urzhumtsev, P. H. Zwart and P. D. Adams, +"Towards automated crystallographic structure refinement with phenix.refine" (2012), Acta Cryst. D68, +352-367 [doi:10.1107/S0907444912001308](https://doi.org/10.1107/S0907444912001308). R-free itself: +A. T. Brünger, "Free R value: a novel statistical quantity for assessing the accuracy of crystal +structures" (1992), Nature 355, 472-475 [doi:10.1038/355472a0](https://doi.org/10.1038/355472a0). + +**Unmodelled density** — the blobs `--refine` lists are the connected regions of the difference map above +a cutoff, found by flood fill as Coot's "unmodelled blobs" finds them, in GEMMI's implementation +(`find_blobs_by_flood_fill`): P. Emsley, B. Lohkamp, W. G. Scott and K. Cowtan, "Features and development +of Coot" (2010), Acta Cryst. D66, 486-501 [doi:10.1107/S0907444910007493](https://doi.org/10.1107/S0907444910007493). + ## Software and computing methods Decoding bitshuffle+LZ4 images on the GPU, rather than decompressing them on the host and uploading diff --git a/image_analysis/structure_refinement/CMakeLists.txt b/image_analysis/structure_refinement/CMakeLists.txt index 1f98395e0..44d65a19d 100644 --- a/image_analysis/structure_refinement/CMakeLists.txt +++ b/image_analysis/structure_refinement/CMakeLists.txt @@ -18,6 +18,14 @@ ADD_LIBRARY(JFJochStructureRefinement STATIC $<$:ModelScaleGPU.cu> ModelScaleGPU.h SigmaA.cpp SigmaA.h MonomerLibrary.cpp MonomerLibrary.h + RefinementMath.h + RefinementRestraints.cpp RefinementRestraints.h + RefinementXray.cpp RefinementXray.h + Refinement.cpp Refinement.h + DensityBlobs.cpp DensityBlobs.h + $<$:RefinementGPU.cpp> + $<$:RefinementGPU.cu> + RefinementGPU.h RefinementGPUEngine.h ${CMAKE_CURRENT_BINARY_DIR}/MonomerLibraryData.cpp) # The subset of the CCP4 Monomer Library that refinement restrains with (monomers/, chosen by diff --git a/image_analysis/structure_refinement/DensityBlobs.cpp b/image_analysis/structure_refinement/DensityBlobs.cpp new file mode 100644 index 000000000..59794e77b --- /dev/null +++ b/image_analysis/structure_refinement/DensityBlobs.cpp @@ -0,0 +1,110 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "DensityBlobs.h" + +#include +#include + +#include "gemmi/blob.hpp" +#include "gemmi/neighbor.hpp" + +namespace { + +constexpr double CUTOFF_SIGMA = 3.0; +constexpr double PEAK_SIGMA = 4.0; +// Closer than this to a model atom, the density is the model's own atom out of place. +constexpr double MODEL_ERROR_DISTANCE = 1.6; +// Waters and ions sit at least this far from the model's atoms. +constexpr double CONTACT_MIN = 2.2; +// An ion's peak, in sigma, where the anomalous map gives no help. +constexpr double ION_PEAK_SIGMA = 8.0; +constexpr double ION_ANOMALOUS_SIGMA = 4.0; +// The smallest blob called ligand-like, A^3: at high resolution a strong single atom's blob already spans four of +// the resolution's spheres. +constexpr double LIGAND_MIN_VOLUME = 8.0; + +bool Polar(const gemmi::Element &el) { + return el == gemmi::El::N || el == gemmi::El::O; +} + +} // namespace + +const char *DensityBlobKindName(DensityBlob::Kind kind) { + switch (kind) { + case DensityBlob::Kind::Water: return "WATER"; + case DensityBlob::Kind::Ion: return "ION"; + case DensityBlob::Kind::Ligand: return "LIGAND"; + case DensityBlob::Kind::ModelError: return "MODEL_ERROR"; + case DensityBlob::Kind::Unassigned: break; + } + return "UNASSIGNED"; +} + +std::vector FindDensityBlobs(const gemmi::Grid &difference, double rms, const gemmi::Structure &model, + double d_min, const gemmi::Grid *anomalous, double anomalous_rms) { + std::vector out; + if (!(rms > 0) || model.models.empty()) + return out; + gemmi::Grid map = difference; + for (float &v : map.data) + v = static_cast(v / rms); + gemmi::BlobCriteria criteria; + criteria.cutoff = CUTOFF_SIGMA; + criteria.min_volume = 0.0; + criteria.min_score = 0.0; + criteria.min_peak = PEAK_SIGMA; + const std::vector blobs = gemmi::find_blobs_by_flood_fill(map, criteria); + + gemmi::Model copy = model.models[0]; + gemmi::UnitCell cell = map.unit_cell; + cell.set_cell_images_from_spacegroup(map.spacegroup); + gemmi::NeighborSearch ns(copy, cell, 5.0); + ns.populate(false); + // A single atom's blob at this resolution: a sphere of half the resolution's radius. Four of them is ligand size. + const double atom_volume = 4.0 / 3.0 * 3.14159265358979 * std::pow(0.5 * d_min, 3); + + for (const gemmi::Blob &b : blobs) { + DensityBlob d; + d.peak_sigma = b.peak_value; + d.volume = b.volume; + d.score = b.score; + d.centroid = b.centroid; + // the copy of the blob beside the atom nearest to it + if (gemmi::NeighborSearch::Mark *m = ns.find_nearest_atom(b.centroid, 12.0)) { + const gemmi::CRA cra = m->to_cra(copy); + const gemmi::FTransform t = ns.get_image_transformation(m->image_idx); + const gemmi::Fractional fc = cell.fractionalize(b.centroid); + const gemmi::Fractional fi = t.apply(cell.fractionalize(cra.atom->pos)); + const gemmi::Fractional shifted(fc.x - std::round(fc.x - fi.x), fc.y - std::round(fc.y - fi.y), + fc.z - std::round(fc.z - fi.z)); + d.centroid = cell.orthogonalize(gemmi::FTransform(t.inverse()).apply(shifted)); + d.nearest_atom_distance = d.centroid.dist(cra.atom->pos); + d.nearest_atom = cra.atom->name + " " + cra.residue->name + " " + cra.chain->name + + cra.residue->seqid.str(); + } else + d.nearest_atom_distance = INFINITY; + ns.for_each(d.centroid, '\0', 3.4, [&](gemmi::NeighborSearch::Mark &m, double dist_sq) { + const double r = std::sqrt(dist_sq); + if (Polar(m.element) && r >= 2.4) + d.polar_contacts++; + if ((Polar(m.element) || m.element == gemmi::El::S) && r >= 1.8 && r <= 2.6) + d.metal_contacts++; + }); + if (anomalous != nullptr && anomalous_rms > 0) + d.anomalous_sigma = anomalous->interpolate_value(b.peak_pos) / anomalous_rms; + + if (d.nearest_atom_distance < MODEL_ERROR_DISTANCE) + d.kind = DensityBlob::Kind::ModelError; + else if (d.nearest_atom_distance >= 1.8 && d.metal_contacts >= 2 && + (d.anomalous_sigma >= ION_ANOMALOUS_SIGMA || d.peak_sigma >= ION_PEAK_SIGMA)) + d.kind = DensityBlob::Kind::Ion; + else if (d.volume > std::max(4 * atom_volume, LIGAND_MIN_VOLUME) && d.nearest_atom_distance >= CONTACT_MIN) + d.kind = DensityBlob::Kind::Ligand; + else if (d.nearest_atom_distance >= CONTACT_MIN && d.polar_contacts >= 1) + d.kind = DensityBlob::Kind::Water; + out.push_back(d); + } + std::sort(out.begin(), out.end(), [](const DensityBlob &a, const DensityBlob &b) { return a.score > b.score; }); + return out; +} diff --git a/image_analysis/structure_refinement/DensityBlobs.h b/image_analysis/structure_refinement/DensityBlobs.h new file mode 100644 index 000000000..657c22f51 --- /dev/null +++ b/image_analysis/structure_refinement/DensityBlobs.h @@ -0,0 +1,41 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include + +#include "gemmi/grid.hpp" +#include "gemmi/model.hpp" + +// What a model leaves unexplained: the connected regions of positive mFo-DFc density above a cutoff ("blobs"), +// each placed beside the model, measured and given a likely reading - a water, an ion, something ligand-sized, +// or an error of the model itself (a misplaced or missing atom, an alternative conformation). +// +// The readings are rules on what is measured, meant to point a person at the density, not to identify a +// compound: a blob called LIGAND is density of ligand size and shape where the model has nothing, which a +// buffer molecule or an unmodelled side chain can be as well as the compound that was soaked. +struct DensityBlob { + enum class Kind { Water, Ion, Ligand, ModelError, Unassigned }; + Kind kind = Kind::Unassigned; + gemmi::Position centroid; // the copy nearest the model + double peak_sigma = 0; // the highest point, in the map's rms + double volume = 0; // A^3 above the cutoff + double score = 0; // the density above the cutoff integrated, sigma A^3 + double nearest_atom_distance = 0; + std::string nearest_atom; // e.g. "OG1 THR A42" + int polar_contacts = 0; // N or O of the model at 2.4-3.4 A + int metal_contacts = 0; // N, O or S of the model at 1.8-2.6 A + double anomalous_sigma = 0; // the anomalous difference map at the peak, 0 where there is none +}; + +const char *DensityBlobKindName(DensityBlob::Kind kind); + +// The blobs of `difference` (an mFo-DFc map of the whole cell, rms `rms`) above 3 sigma that peak above 4 sigma, +// strongest (by score) first. `model`: what the map was made from, in the map's cell. `anomalous`: the anomalous +// difference map on any grid of the same cell, or null. Following the flood fill of Coot's unmodelled blobs as +// gemmi implements it (find_blobs_by_flood_fill). +std::vector FindDensityBlobs(const gemmi::Grid &difference, double rms, const gemmi::Structure &model, + double d_min, const gemmi::Grid *anomalous = nullptr, + double anomalous_rms = 0); diff --git a/image_analysis/structure_refinement/Refinement.cpp b/image_analysis/structure_refinement/Refinement.cpp new file mode 100644 index 000000000..588bb140b --- /dev/null +++ b/image_analysis/structure_refinement/Refinement.cpp @@ -0,0 +1,781 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "Refinement.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "gemmi/fourier.hpp" // get_size_for_hkl, get_f_phi_on_grid +#include "gemmi/modify.hpp" // remove_hydrogens +#include "gemmi/scaling.hpp" +#include "gemmi/stats.hpp" // calculate_data_statistics + +#include "../../common/JFJochException.h" +#include "../../common/JFJochMath.h" +#include "../../common/Logger.h" +#include "ModelFFT.h" +#include "ModelScaling.h" +#include "RefinementXray.h" +#include "SigmaA.h" +#ifdef JFJOCH_USE_CUDA +#include "../../common/CUDAWrapper.h" +#include "RefinementGPU.h" +#endif + +namespace { + +constexpr double B_FLOOR = 2.0; // A^2: no atom's B goes below it +// nor above twice the model's largest B, within these bounds (the GPU's gather is reserved for it) +constexpr double B_CEILING_MIN = 100.0, B_CEILING_MAX = 300.0; +// How far below the smallest B of the model a macro-cycle's B refinement may take an atom; the blur of the +// cycle is chosen for that. +constexpr double B_STEP_DOWN = 10.0; +constexpr double REPULSION_MARGIN = 0.5; // A: pairs this much beyond their contact distance are listed too +// The geometry the weight is chosen within (Afonine et al. 2012 select among weights by R-free with the +// geometry held to a target in the same way). +constexpr double MAX_RMSD_BONDS = 0.02, MAX_RMSD_ANGLES = 2.0; +// R-free differences smaller than this do not decide between two weights: the tighter geometry is taken. +constexpr double R_FREE_TIE = 0.001; + +std::string Joined(const std::vector &names) { + std::string out; + for (const std::string &n : names) + out += (out.empty() ? "" : " ") + n; + return out; +} + +std::vector AtomList(gemmi::Model &model) { + std::vector atoms; + for (gemmi::Chain &ch : model.chains) + for (gemmi::Residue &r : ch.residues) + for (gemmi::Atom &a : r.atoms) + atoms.push_back(&a); + return atoms; +} + +// The model as refinement takes it: the first model only, without hydrogens and atoms of unknown element, +// every B isotropic (an anisotropic one becomes its equivalent isotropic B) and inside the allowed range. +gemmi::Structure PrepareModel(const gemmi::Structure &placed, const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg) { + gemmi::Structure st = placed; + st.models.resize(1); + st.cell = cell; + st.spacegroup_hm = sg.xhm(); + gemmi::remove_hydrogens(st.models[0]); + for (gemmi::Chain &ch : st.models[0].chains) + for (gemmi::Residue &r : ch.residues) { + std::erase_if(r.atoms, [](const gemmi::Atom &a) { return a.element == gemmi::El::X; }); + for (gemmi::Atom &a : r.atoms) { + if (a.aniso.nonzero()) { + a.b_iso = static_cast(gemmi::u_to_b() * a.aniso.trace() / 3.0); + a.aniso = {0, 0, 0, 0, 0, 0}; + } + a.b_iso = static_cast(std::clamp(a.b_iso, B_FLOOR, B_CEILING_MAX)); + } + } + gemmi::remove_empty_children(st); + st.setup_cell_images(); + return st; +} + +// What every stage works on: the model, the reflections, the engine and the row model of the cycle. +struct Context { + gemmi::Structure st; + std::vector atoms; + gemmi::UnitCell cell; + const gemmi::SpaceGroup *sg = nullptr; + double d_min = 0; + RefinementReflections refl; + std::unique_ptr engine; +#ifdef JFJOCH_USE_CUDA + std::unique_ptr scale_gpu; +#endif + size_t nthreads = 1; + XrayRowModel rows; + std::vector> fcalc, fmask; + double k_sol = 0, b_sol = 0; + double b_floor = B_FLOOR; // the cycle's lowest allowed B + double b_ceiling = B_CEILING_MAX; + // Riding hydrogens: per atom the parent it rides on (-1: none), and where it sits from the parent. + std::vector rider_parent; + std::vector rider_offset; + int evaluations = 0; + + gemmi::Model &Model() { return st.models[0]; } + + // The hydrogens moved with their parents, at the offsets they were last placed at, and given their B. + void MoveRiders() { + for (size_t i = 0; i < rider_parent.size(); i++) + if (rider_parent[i] >= 0) { + atoms[i]->pos = atoms[rider_parent[i]]->pos + rider_offset[i]; + atoms[i]->b_iso = atoms[rider_parent[i]]->b_iso; + } + } + // What the target says of a hydrogen is said of its parent. + void FoldRiders(std::vector> &g) const { + for (size_t i = 0; i < rider_parent.size(); i++) + if (rider_parent[i] >= 0) + for (int c = 0; c < 4; c++) + g[rider_parent[i]][c] += g[i][c]; + } + + std::vector> XyzB() const { + std::vector> out(atoms.size()); + for (size_t i = 0; i < atoms.size(); i++) + out[i] = {atoms[i]->pos.x, atoms[i]->pos.y, atoms[i]->pos.z, atoms[i]->b_iso}; + return out; + } + std::vector Positions() const { + std::vector out; + for (const gemmi::Atom *a : atoms) + out.push_back(a->pos); + return out; + } + void SetPositions(const std::vector &p) { + for (size_t i = 0; i < atoms.size(); i++) + atoms[i]->pos = p[i]; + } + std::vector B() const { + std::vector out; + for (const gemmi::Atom *a : atoms) + out.push_back(a->b_iso); + return out; + } + void SetB(const std::vector &b) { + for (size_t i = 0; i < atoms.size(); i++) + atoms[i]->b_iso = static_cast(b[i]); + } + + // A new macro-cycle: the blur for the B the cycle may reach, the bulk-solvent mask of the model as it is, + // the scale and the solvent fitted to the working set, and the likelihood's parameters from the free set. + // Returns the R-factors of the model as it stands. + RFactors Refit() { + double b_min = b_ceiling; + for (const gemmi::Atom *a : atoms) + b_min = std::min(b_min, a->b_iso); + b_floor = std::max(B_FLOOR, b_min - B_STEP_DOWN); + engine->SetBlur(RefinementBlur(cell, *sg, d_min, b_floor)); + engine->Fcalc(Model(), fcalc); + engine->Fmask(Model(), fmask); + + gemmi::AsuData> fc, fm; + gemmi::AsuData> fo; + fc.unit_cell_ = fm.unit_cell_ = fo.unit_cell_ = cell; + fc.spacegroup_ = fm.spacegroup_ = fo.spacegroup_ = sg; + for (size_t m = 0; m < refl.Size(); m++) { + fc.v.push_back({refl.hkl[m], fcalc[m]}); + fm.v.push_back({refl.hkl[m], fmask[m]}); + if (!refl.free[m]) + fo.v.push_back({refl.hkl[m], {refl.fo[m], 1.0f}}); + } + gemmi::Scaling scaling(cell, sg); + scaling.use_solvent = true; + scaling.prepare_points(fc, fo, &fm); +#ifdef JFJOCH_USE_CUDA + if (scale_gpu) + scale_gpu->Fit(scaling, SolventBMax(Model()), nthreads); + else +#endif + FitModelScale(scaling, {.b_hi = SolventBMax(Model())}, nthreads); + k_sol = scaling.k_sol; + b_sol = scaling.b_sol; + rows.k_total.resize(refl.Size()); + rows.fmask.resize(refl.Size()); + std::vector> fmodel(refl.Size()); + for (size_t m = 0; m < refl.Size(); m++) { + rows.k_total[m] = static_cast(scaling.get_overall_scale_factor(refl.hkl[m])); + rows.fmask[m] = static_cast(scaling.get_solvent_scale(cell.calculate_stol_sq(refl.hkl[m]))) * fmask[m]; + fmodel[m] = rows.k_total[m] * (fcalc[m] + rows.fmask[m]); + } + EstimateLikelihoodParameters(refl, fmodel, rows); + engine->SetRowModel(rows); + return ComputeRFactors(refl, fmodel); + } + + // F_model with the cycle's scale and solvent, for the atoms as they are now. + std::vector> FModel() { + engine->Fcalc(Model(), fcalc); + std::vector> fmodel(refl.Size()); + for (size_t m = 0; m < refl.Size(); m++) + fmodel[m] = rows.k_total[m] * (fcalc[m] + rows.fmask[m]); + return fmodel; + } +}; + +ceres::GradientProblemSolver::Options SolverOptions(int iterations) { + ceres::GradientProblemSolver::Options options; + options.line_search_direction_type = ceres::LBFGS; + options.max_num_iterations = iterations; + options.function_tolerance = 1e-7; + options.gradient_tolerance = 1e-10; + options.parameter_tolerance = 1e-9; + options.logging_type = ceres::SILENT; + return options; +} + +// The positions or the B factors of the refinable atoms, against w times the X-ray target plus a restraint set. +// Following Liu & Nocedal (1989) Math. Program. 45, 503-528 for the minimiser (Ceres' L-BFGS) +class AtomTarget : public ceres::FirstOrderFunction { +public: + enum class Mode { Xyz, B }; + AtomTarget(Context &ctx, Mode mode, const std::vector ¶m_atoms, double weight, int restraint_set) + : ctx_(ctx), mode_(mode), param_atoms_(param_atoms), weight_(weight), restraint_set_(restraint_set) {} + + int NumParameters() const override { + return static_cast(param_atoms_.size()) * (mode_ == Mode::Xyz ? 3 : 1); + } + + bool Evaluate(const double *p, double *cost, double *gradient) const override { + for (size_t k = 0; k < param_atoms_.size(); k++) { + gemmi::Atom &a = *ctx_.atoms[param_atoms_[k]]; + if (mode_ == Mode::Xyz) + a.pos = gemmi::Position(p[3 * k], p[3 * k + 1], p[3 * k + 2]); + else + a.b_iso = static_cast(std::clamp(p[k], ctx_.b_floor, ctx_.b_ceiling)); + } + ctx_.MoveRiders(); + ctx_.evaluations++; + std::vector> gx, gr; + const double xray = ctx_.engine->Evaluate(ctx_.Model(), gradient != nullptr ? &gx : nullptr); + if (gradient != nullptr) + ctx_.FoldRiders(gx); + double restraints = 0; + if (restraint_set_ >= 0) + restraints = ctx_.engine->EvaluateRestraints(restraint_set_, ctx_.XyzB(), gradient != nullptr ? &gr : nullptr); + *cost = weight_ * xray + restraints; + if (gradient != nullptr) + for (size_t k = 0; k < param_atoms_.size(); k++) { + const int i = param_atoms_[k]; + if (mode_ == Mode::Xyz) + for (int c = 0; c < 3; c++) + gradient[3 * k + c] = weight_ * gx[i][c] + (restraint_set_ >= 0 ? gr[i][c] : 0.0); + else { + // held at a bound, B does not move further out + const bool held = (p[k] <= ctx_.b_floor && gx[i][3] > 0) || (p[k] >= ctx_.b_ceiling && gx[i][3] < 0); + gradient[k] = held ? 0.0 : weight_ * gx[i][3] + (restraint_set_ >= 0 ? gr[i][3] : 0.0); + } + } + return std::isfinite(*cost); + } + +private: + Context &ctx_; + Mode mode_; + const std::vector ¶m_atoms_; + double weight_; + int restraint_set_; +}; + +void Minimise(Context &ctx, AtomTarget::Mode mode, const std::vector ¶m_atoms, double weight, + int restraint_set, int iterations) { + if (param_atoms.empty()) + return; + std::vector p; + for (int i : param_atoms) { + const gemmi::Atom &a = *ctx.atoms[i]; + if (mode == AtomTarget::Mode::Xyz) { + p.push_back(a.pos.x); + p.push_back(a.pos.y); + p.push_back(a.pos.z); + } else + p.push_back(a.b_iso); + } + ceres::GradientProblem problem(std::make_unique(ctx, mode, param_atoms, weight, restraint_set)); + ceres::GradientProblemSolver::Summary summary; + ceres::Solve(SolverOptions(iterations), problem, p.data(), &summary); + // the atoms where the solver ended, not where its last line search probed + for (size_t k = 0; k < param_atoms.size(); k++) { + gemmi::Atom &a = *ctx.atoms[param_atoms[k]]; + if (mode == AtomTarget::Mode::Xyz) + a.pos = gemmi::Position(p[3 * k], p[3 * k + 1], p[3 * k + 2]); + else + a.b_iso = static_cast(std::clamp(p[k], ctx.b_floor, ctx.b_ceiling)); + } + ctx.MoveRiders(); +} + +// Groups of atoms that move as rigid bodies (one per chain) against the X-ray target: per body an angle-axis +// rotation about its centroid, scaled by its rms radius so that a unit moves a typical atom by an angstrom as a +// unit of translation does, then a translation. +class RigidBodiesTarget : public ceres::FirstOrderFunction { +public: + RigidBodiesTarget(Context &ctx, const std::vector> &bodies) + : ctx_(ctx), bodies_(bodies), base_(ctx.Positions()) { + for (const std::vector &b : bodies) { + gemmi::Position c; + for (int i : b) + c += base_[i]; + c *= 1.0 / static_cast(b.size()); + double r2 = 0; + for (int i : b) + r2 += c.dist_sq(base_[i]); + centre_.push_back(c); + radius_.push_back(std::max(1.0, std::sqrt(r2 / static_cast(b.size())))); + } + } + int NumParameters() const override { return static_cast(6 * bodies_.size()); } + + bool Evaluate(const double *q, double *cost, double *gradient) const override { + Place(q); + ctx_.evaluations++; + std::vector> g; + *cost = ctx_.engine->Evaluate(ctx_.Model(), gradient != nullptr ? &g : nullptr); + if (gradient == nullptr) + return std::isfinite(*cost); + using Jet = ceres::Jet; + for (size_t b = 0; b < bodies_.size(); b++) { + const Jet aa[3] = {Jet(q[6 * b] / radius_[b], 0), Jet(q[6 * b + 1] / radius_[b], 1), + Jet(q[6 * b + 2] / radius_[b], 2)}; + double dq[6] = {0, 0, 0, 0, 0, 0}; + for (int i : bodies_[b]) { + const gemmi::Position d = base_[i] - centre_[b]; + const Jet p[3] = {Jet(d.x), Jet(d.y), Jet(d.z)}; + Jet rp[3]; + ceres::AngleAxisRotatePoint(aa, p, rp); + for (int c = 0; c < 3; c++) { + for (int k = 0; k < 3; k++) + dq[k] += g[i][c] * rp[c].v[k] / radius_[b]; + dq[3 + c] += g[i][c]; + } + } + std::copy(dq, dq + 6, gradient + 6 * b); + } + return std::isfinite(*cost); + } + + void Place(const double *q) const { + for (size_t b = 0; b < bodies_.size(); b++) { + const double aa[3] = {q[6 * b] / radius_[b], q[6 * b + 1] / radius_[b], q[6 * b + 2] / radius_[b]}; + for (int i : bodies_[b]) { + const gemmi::Position d = base_[i] - centre_[b]; + const double p[3] = {d.x, d.y, d.z}; + double rp[3]; + ceres::AngleAxisRotatePoint(aa, p, rp); + ctx_.atoms[i]->pos = gemmi::Position(rp[0] + centre_[b].x + q[6 * b + 3], rp[1] + centre_[b].y + q[6 * b + 4], + rp[2] + centre_[b].z + q[6 * b + 5]); + } + } + } + +private: + Context &ctx_; + const std::vector> &bodies_; + std::vector base_; + std::vector centre_; + std::vector radius_; +}; + +// One B shift per group of atoms (a residue), against the X-ray target. +class GroupBTarget : public ceres::FirstOrderFunction { +public: + GroupBTarget(Context &ctx, const std::vector> &groups) + : ctx_(ctx), groups_(groups), base_(ctx.B()) {} + int NumParameters() const override { return static_cast(groups_.size()); } + + bool Evaluate(const double *q, double *cost, double *gradient) const override { + Place(q); + ctx_.evaluations++; + std::vector> g; + *cost = ctx_.engine->Evaluate(ctx_.Model(), gradient != nullptr ? &g : nullptr); + if (gradient != nullptr) + for (size_t k = 0; k < groups_.size(); k++) { + gradient[k] = 0; + for (int i : groups_[k]) { + const double b = base_[i] + q[k]; + if (b > ctx_.b_floor && b < ctx_.b_ceiling) + gradient[k] += g[i][3]; + } + } + return std::isfinite(*cost); + } + + void Place(const double *q) const { + for (size_t k = 0; k < groups_.size(); k++) + for (int i : groups_[k]) + ctx_.atoms[i]->b_iso = static_cast(std::clamp(base_[i] + q[k], ctx_.b_floor, ctx_.b_ceiling)); + } + +private: + Context &ctx_; + const std::vector> &groups_; + std::vector base_; +}; + +// The placement stage: rigid bodies, then group B. +void RefinePlacement(Context &ctx, RefinementResult &result) { + std::vector> bodies, groups; + size_t i = 0; + for (const gemmi::Chain &ch : ctx.Model().chains) { + std::vector body; + for (const gemmi::Residue &r : ch.residues) { + std::vector group; + for (size_t k = 0; k < r.atoms.size(); k++, i++) { + group.push_back(static_cast(i)); + if (!r.is_water()) + body.push_back(static_cast(i)); + } + groups.push_back(group); + } + // A chain of a few atoms (an ion, a ligand of its own chain) stays where it is. + if (body.size() >= 50) + bodies.push_back(body); + } + result.rigid_bodies = static_cast(bodies.size()); + if (!bodies.empty()) { + std::vector q(6 * bodies.size(), 0.0); + auto target = std::make_unique(ctx, bodies); + RigidBodiesTarget *rb = target.get(); + ceres::GradientProblem problem(std::move(target)); + ceres::GradientProblemSolver::Summary summary; + ceres::Solve(SolverOptions(30), problem, q.data(), &summary); + rb->Place(q.data()); + } + ctx.Refit(); + { + std::vector q(groups.size(), 0.0); + auto target = std::make_unique(ctx, groups); + GroupBTarget *gb = target.get(); + ceres::GradientProblem problem(std::move(target)); + ceres::GradientProblemSolver::Summary summary; + ceres::Solve(SolverOptions(30), problem, q.data(), &summary); + gb->Place(q.data()); + } +} + +// The X-ray weight that balances the two gradients: the norm of the geometry's gradient (taken on the model +// shaken by 0.1 A, where a refined model's geometry would have none) over the norm of the X-ray target's. +// Following Brunger (1992)-style gradient balancing as phenix.refine starts its weight search (Afonine et al. +// (2012) Acta Cryst. D68, 352-367) +double BalancedWeight(Context &ctx, const std::vector &refinable) { + std::vector> gx, gr; + ctx.engine->Evaluate(ctx.Model(), &gx); + std::vector> xyzb = ctx.XyzB(); + std::mt19937 rng(1); + std::normal_distribution shake(0.0, 0.1); + for (std::array &a : xyzb) + for (int c = 0; c < 3; c++) + a[c] += shake(rng); + ctx.engine->EvaluateRestraints(0, xyzb, &gr); + double nx = 0, ng = 0; + for (int i : refinable) + for (int c = 0; c < 3; c++) { + nx += gx[i][c] * gx[i][c]; + ng += gr[i][c] * gr[i][c]; + } + return nx > 0 ? std::sqrt(ng / nx) : 1.0; +} + +// The model's map coefficients and its difference map, as model validation makes them (sigma_A weighted). +void MakeMaps(Context &ctx, const std::vector &merged, double wavelength_A, RefinementResult &result) { + ctx.Refit(); + const std::vector> fmodel = ctx.FModel(); + const gemmi::GroupOps gops = ctx.sg->operations(); + std::vector sa; + for (size_t m = 0; m < ctx.refl.Size(); m++) + sa.push_back({ctx.refl.fo[m], std::abs(fmodel[m]), ctx.refl.inv_d2[m], static_cast(ctx.refl.epsilon[m]), + static_cast(ctx.refl.centric[m]), static_cast(ctx.refl.free[m])}); + const SigmaAResult sigma_a = EstimateSigmaA(sa, ctx.cell); + result.mean_fom = sigma_a.mean_fom; + + auto maps = std::make_shared(); + MtzTable &mtz = maps->coefficients; + mtz.space_group_name = ctx.sg->xhm(); + mtz.unit_cell = UnitCell{static_cast(ctx.cell.a), static_cast(ctx.cell.b), static_cast(ctx.cell.c), + static_cast(ctx.cell.alpha), static_cast(ctx.cell.beta), + static_cast(ctx.cell.gamma)}; + mtz.datasets = {{"HKL_base", "HKL_base", "HKL_base", 0.0f}, + {"refinement", "refinement", "refinement", static_cast(wavelength_A)}}; + const std::pair columns[] = {{"H", 'H'}, {"K", 'H'}, {"L", 'H'}, {"FP", 'F'}, {"FC", 'F'}, + {"PHIC", 'P'}, {"FWT", 'F'}, {"PHWT", 'P'}, {"DELFWT", 'F'}, + {"PHDELWT", 'P'}, {"FOM", 'W'}, {"FREE", 'I'}}; + for (const auto &[label, type] : columns) + mtz.columns.push_back({label, type, type == 'H' ? 0 : 1, {}}); + gemmi::AsuData> diff; + diff.unit_cell_ = ctx.cell; + diff.spacegroup_ = ctx.sg; + for (size_t m = 0; m < ctx.refl.Size(); m++) { + const double fo = ctx.refl.fo[m], fc = std::abs(fmodel[m]); + const double mw = sigma_a.weight[m].m, d = sigma_a.weight[m].d; + const double fwt = ctx.refl.centric[m] ? mw * fo : 2 * mw * fo - d * fc; + const double delfwt = mw * fo - d * fc; + const double phi = std::arg(fmodel[m]); + double phi_deg = phi * 180.0 / PI; + if (phi_deg < 0) + phi_deg += 360.0; + const float row[] = {static_cast(ctx.refl.hkl[m][0]), static_cast(ctx.refl.hkl[m][1]), + static_cast(ctx.refl.hkl[m][2]), static_cast(fo), static_cast(fc), + static_cast(phi_deg), static_cast(fwt), static_cast(phi_deg), + static_cast(delfwt), static_cast(phi_deg), static_cast(mw), + ctx.refl.free[m] ? 0.0f : 1.0f}; + for (size_t c = 0; c < mtz.columns.size(); c++) + mtz.columns[c].values.push_back(row[c]); + diff.v.push_back({ctx.refl.hkl[m], std::polar(static_cast(delfwt), static_cast(phi))}); + } + result.maps = maps; + const std::array size = gemmi::get_size_for_hkl(diff, {{0, 0, 0}}, 3.0); + result.difference_map = std::make_shared>(MapFromFPhi(gemmi::get_f_phi_on_grid(diff, size, true))); + result.difference_map_rms = gemmi::calculate_data_statistics(result.difference_map->data).rms; + + // The anomalous difference map: F(+) - F(-) on the model's phase turned back by 90 degrees, read on the + + // rows of an anomalous merge only (as model validation reads it). + // Following ANODE, Thorn & Sheldrick (2011) J. Appl. Cryst. 44, 1285-1287 + const gemmi::ReciprocalAsu asu(ctx.sg); + std::map danom; + for (const MergedReflection &r : merged) { + if (!std::isfinite(r.F_plus) || !std::isfinite(r.F_minus)) + continue; + const gemmi::Miller h{{r.h, r.k, r.l}}; + if (gops.is_reflection_centric(h)) + continue; + const auto [hasu, plus] = asu.to_asu_sign(h, gops); + if (plus) + danom[hasu] = r.F_plus - r.F_minus; + } + if (!danom.empty()) { + gemmi::AsuData> anom; + anom.unit_cell_ = ctx.cell; + anom.spacegroup_ = ctx.sg; + for (size_t m = 0; m < ctx.refl.Size(); m++) { + const auto it = danom.find(ctx.refl.hkl[m]); + if (it != danom.end()) + anom.v.push_back({ctx.refl.hkl[m], it->second * std::polar(1.0f, static_cast(std::arg(fmodel[m]) - PI / 2))}); + } + if (!anom.v.empty()) { + result.anomalous_map = std::make_shared>( + MapFromFPhi(gemmi::get_f_phi_on_grid(anom, gemmi::get_size_for_hkl(anom, {{0, 0, 0}}, 3.0), true))); + result.anomalous_map_rms = gemmi::calculate_data_statistics(result.anomalous_map->data).rms; + } + } +} + +// The engine for the model as it is now: on the GPU where it is wanted and takes the case within its budget, +// on the CPU otherwise. +void MakeEngine(Context &ctx, bool gpu, const RefinementSettings &settings, Logger &logger) { + ctx.engine.reset(); +#ifdef JFJOCH_USE_CUDA + ctx.scale_gpu.reset(); + if (gpu && get_gpu_count() > 0) { + try { + const int device = get_gpu(); + const size_t card = get_gpu_total_memory(device); + const size_t usable = card / 5 * 4; + const size_t budget = usable > settings.gpu_resident_bytes ? usable - settings.gpu_resident_bytes : 0; + size_t bytes = 0; + ctx.engine = MakeRefinementEngineGPU(device, ctx.cell, *ctx.sg, ctx.d_min, ctx.refl, ctx.Model(), + ctx.b_ceiling, budget, &bytes); + if (ctx.engine) + ctx.scale_gpu = std::make_unique(device, ctx.refl.Size(), 1); + else + logger.Info("Refinement: on the CPU - the GPU cannot take this case or {:.1f} GB is over its budget", + bytes / 1e9); + } catch (const JFJochException &e) { + logger.Warning("Refinement: the GPU failed ({}), on the CPU", e.what()); + ctx.engine.reset(); + ctx.scale_gpu.reset(); + } + } +#else + (void) gpu; + (void) logger; +#endif + if (!ctx.engine) + ctx.engine = MakeRefinementEngineCPU(ctx.cell, *ctx.sg, ctx.d_min, ctx.refl, settings.nthreads); +} + +} // namespace + +RefinementResult RefineModel(const gemmi::Structure &placed, const std::vector &merged, + const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double wavelength_A, + Logger &logger, const RefinementSettings &settings) { + const auto start = std::chrono::steady_clock::now(); + RefinementResult result; + Context ctx; + ctx.st = PrepareModel(placed, cell, sg); + ctx.cell = cell; + ctx.sg = &sg; + ctx.nthreads = settings.nthreads; + ctx.atoms = AtomList(ctx.Model()); + result.atoms = static_cast(ctx.atoms.size()); + double b_max = 0; + for (const gemmi::Atom *a : ctx.atoms) + b_max = std::max(b_max, a->b_iso); + ctx.b_ceiling = std::clamp(2 * b_max, B_CEILING_MIN, B_CEILING_MAX); + if (ctx.atoms.empty()) { + result.failure_reason = "the model has no atoms"; + return result; + } + double max_inv_d2 = 0; + for (const MergedReflection &r : merged) + if (std::isfinite(r.F) && r.d > 0) + max_inv_d2 = std::max(max_inv_d2, 1.0 / (double(r.d) * r.d)); + if (max_inv_d2 <= 0) { + result.failure_reason = "no amplitudes"; + return result; + } + // just past the finest reflection, so that prepare_asu_data()'s strict limit keeps it + ctx.d_min = 0.999 / std::sqrt(max_inv_d2); + result.d_min = 1.0 / std::sqrt(max_inv_d2); + ctx.refl = PrepareRefinementReflections(merged, cell, sg, ctx.d_min); + if (ctx.refl.Size() < 100) { + result.failure_reason = "too few reflections"; + return result; + } + + MakeEngine(ctx, settings.gpu, settings, logger); + result.on_gpu = ctx.engine->OnGPU(); + + RFactors r = ctx.Refit(); + result.n_work = r.n_work; + result.n_free = r.n_free; + result.r_work_start = r.r_work; + result.r_free_start = r.r_free; + logger.Info("Refinement: {} atoms, {} reflections to {:.2f} A ({} free), on the {}; as given R-work {:.4f}, R-free {:.4f}", + ctx.atoms.size(), ctx.refl.Size(), result.d_min, r.n_free, result.on_gpu ? "GPU" : "CPU", r.r_work, + r.r_free); + + RefinePlacement(ctx, result); + r = ctx.Refit(); + result.r_work_placement = r.r_work; + result.r_free_placement = r.r_free; + logger.Info("Refinement, placement ({} rigid bodies, B per residue): R-work {:.4f}, R-free {:.4f}", + result.rigid_bodies, r.r_work, r.r_free); + + if (settings.restrained) { + RefinementTopology topo = BuildRefinementTopology(ctx.st, settings.riding_hydrogens); + // the hydrogens it added: the atoms and the engine made again for them + ctx.atoms = AtomList(ctx.Model()); + ctx.rider_parent = topo.rider_parent; + auto place_riders = [&]() { + PlaceRidingHydrogens(topo); + ctx.rider_offset.assign(ctx.atoms.size(), gemmi::Position()); + for (size_t i = 0; i < ctx.atoms.size(); i++) + if (ctx.rider_parent[i] >= 0) { + ctx.rider_offset[i] = ctx.atoms[i]->pos - ctx.atoms[ctx.rider_parent[i]]->pos; + ctx.atoms[i]->b_iso = ctx.atoms[ctx.rider_parent[i]]->b_iso; + } + }; + place_riders(); + if (static_cast(ctx.atoms.size()) != result.atoms) { + MakeEngine(ctx, result.on_gpu, settings, logger); + result.on_gpu = ctx.engine->OnGPU(); + } + ctx.Refit(); + result.restrained_residues = topo.restrained_residues; + result.fixed_residues = topo.fixed_residues; + result.fixed_names = topo.fixed_names; + std::vector refinable; + for (size_t i = 0; i < ctx.atoms.size(); i++) + if (topo.refinable[i]) + refinable.push_back(static_cast(i)); + result.refined_atoms = static_cast(refinable.size()); + logger.Info("Refinement: {} residues restrained, {} held fixed{}; {} bonds, {} angles, {} torsions, {} chiral " + "volumes, {} planes", + topo.restrained_residues, topo.fixed_residues, + topo.fixed_names.empty() ? std::string() : " (" + Joined(topo.fixed_names) + ")", + topo.bonds, topo.angles, topo.torsions, topo.chirals, topo.planes); + + auto restraints_now = [&]() { + RestraintSet set = topo.geometry; + set.Append(BuildRepulsions(topo, ctx.Model(), cell, sg, REPULSION_MARGIN)); + set.Finalize(ctx.atoms.size()); + return set; + }; + ctx.engine->SetRestraints(1, topo.adp); + { + const RestraintSet set = restraints_now(); + ctx.engine->SetRestraints(0, set); + RestraintSet repulsions = BuildRepulsions(topo, ctx.Model(), cell, sg, 0.0); + result.geometry_start = MeasureGeometry(topo.geometry, repulsions, ctx.XyzB()); + } + const double w0 = BalancedWeight(ctx, refinable); + logger.Info("Refinement: geometry as given rmsd bonds {:.4f} A, angles {:.2f} deg, {} clashes; balanced X-ray " + "weight {:.3g}", result.geometry_start.rmsd_bonds, result.geometry_start.rmsd_angles, + result.geometry_start.clashes, w0); + + const std::vector pos0 = ctx.Positions(); + const std::vector b0 = ctx.B(); + int best = -1; + std::vector best_pos; + std::vector best_b; + // One full refinement from the start: macro-cycles of the positions at X-ray weight w and, where adp_w is + // not 0, the B factors at X-ray weight adp_w; kept where it beats the best so far. The rungs come in order + // of trust - tighter geometry, then fewer parameters - and a later one displaces an earlier only by more + // than the tie in R-free. + auto trial = [&](double w, double adp_w) { + ctx.SetPositions(pos0); + ctx.SetB(b0); + for (int cycle = 0; cycle < settings.macro_cycles; cycle++) { + place_riders(); + ctx.Refit(); + ctx.engine->SetRestraints(0, restraints_now()); + Minimise(ctx, AtomTarget::Mode::Xyz, refinable, w, 0, settings.xyz_iterations); + if (adp_w > 0) + Minimise(ctx, AtomTarget::Mode::B, refinable, adp_w, 1, settings.b_iterations); + } + place_riders(); + RefinementWeightTrial t; + t.weight = w; + t.adp_weight = adp_w; + const RFactors rf = ctx.Refit(); + t.r_work = rf.r_work; + t.r_free = rf.r_free; + t.geometry = MeasureGeometry(topo.geometry, BuildRepulsions(topo, ctx.Model(), cell, sg, 0.0), ctx.XyzB()); + t.within_bounds = t.geometry.rmsd_bonds <= MAX_RMSD_BONDS && t.geometry.rmsd_angles <= MAX_RMSD_ANGLES; + logger.Info("Refinement, X-ray weight {:.3g}, B {}: R-work {:.4f}, R-free {:.4f}, rmsd bonds {:.4f} A, " + "angles {:.2f} deg{}", + w, adp_w > 0 ? fmt::format("refined at weight {:.3g}", adp_w) : std::string("held"), rf.r_work, + rf.r_free, t.geometry.rmsd_bonds, t.geometry.rmsd_angles, + t.within_bounds ? "" : " (geometry out of bounds)"); + result.trials.push_back(t); + const int k = static_cast(result.trials.size()) - 1; + const bool better = best < 0 ? true + : t.within_bounds && (!result.trials[best].within_bounds || + t.r_free < result.trials[best].r_free - R_FREE_TIE); + if (better) { + best = k; + best_pos = ctx.Positions(); + best_b = ctx.B(); + } + }; + // the positions' weight, with the B factors as they are + for (double ladder : settings.weight_ladder) + trial(w0 * ladder, 0.0); + // then the B factors refined too, at that weight, against their own weight + const double w = result.trials[best].weight; + for (double adp : settings.adp_ladder) + trial(w, w * adp); + ctx.SetPositions(best_pos); + ctx.SetB(best_b); + place_riders(); + const RefinementWeightTrial &chosen = result.trials[best]; + result.restrained = true; + result.weight = chosen.weight; + result.adp_weight = chosen.adp_weight; + result.r_work = chosen.r_work; + result.r_free = chosen.r_free; + result.geometry = chosen.geometry; + } + + MakeMaps(ctx, merged, wavelength_A, result); + result.blobs = FindDensityBlobs(*result.difference_map, result.difference_map_rms, ctx.st, result.d_min, + result.anomalous_map.get(), result.anomalous_map_rms); + result.k_sol = ctx.k_sol; + result.b_sol = ctx.b_sol; + result.model = std::make_shared(ctx.st); + result.ok = true; + result.seconds = std::chrono::duration(std::chrono::steady_clock::now() - start).count(); + logger.Info("Refinement: done in {:.1f} s, {} target evaluations{}", result.seconds, ctx.evaluations, + result.restrained ? fmt::format("; R-work {:.4f}, R-free {:.4f}, weight {:.3g}", result.r_work, + result.r_free, result.weight) + : std::string()); + return result; +} diff --git a/image_analysis/structure_refinement/Refinement.h b/image_analysis/structure_refinement/Refinement.h new file mode 100644 index 000000000..a1d1076b6 --- /dev/null +++ b/image_analysis/structure_refinement/Refinement.h @@ -0,0 +1,103 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include + +#include "gemmi/grid.hpp" +#include "gemmi/model.hpp" +#include "gemmi/symmetry.hpp" +#include "gemmi/unitcell.hpp" + +#include "../../common/Reflection.h" // MergedReflection +#include "DensityBlobs.h" +#include "ModelValidation.h" // ModelMaps +#include "RefinementRestraints.h" // GeometryStatistics + +class Logger; + +// Refinement of an atomic model already placed against the data (ValidateAgainstModel's placed model, or a +// molecular-replacement placement), in two stages: +// +// 1. Placement: each chain as a rigid body, then one B shift per residue, then the bulk solvent and the +// scale. Needs no dictionary. +// 2. Restrained: every atom's position and isotropic B, against the maximum-likelihood amplitude target with +// the geometry the dictionary describes (MonomerLibrary.h: bonds, angles, planes, chiral volumes, +// torsions, repulsions; B similarity of bonded atoms). Residues it does not describe are held fixed and +// stay in the structure factors and the bulk-solvent mask. The weight of the X-ray term against the +// geometry is chosen from a ladder of full refinements, by R-free among those whose geometry stays within +// bounds; then whether, and at what weight, to refine the B factors as well, the same way. +// +// The library reads and writes nothing: the model and the reflections come in, the refined model, the +// statistics and the map coefficients go out. Nothing it finds feeds back into processing decisions. +struct RefinementSettings { + bool restrained = true; // stage 2; false stops after the placement stage + int macro_cycles = 5; + int xyz_iterations = 25; // L-BFGS iterations per macro-cycle + int b_iterations = 15; + // The positions' X-ray weight, times the gradient-balanced one (BalancedWeight), tried in this order. + std::vector weight_ladder = {0.0078125, 0.015625, 0.03125, 0.0625}; + // The X-ray weights of the B refinement tried next, times the positions' chosen weight. + std::vector adp_ladder = {1.0, 4.0, 16.0}; + bool riding_hydrogens = true; // the dictionary's hydrogens added, riding on their parents + bool gpu = true; + size_t nthreads = 1; + size_t gpu_resident_bytes = 0; // held on the card by what runs beside +}; + +// One rung of the weight ladder. +struct RefinementWeightTrial { + double weight = 0; // the X-ray term's weight + double adp_weight = 0; // the B refinement's X-ray weight; 0: the B factors were held + double r_work = 1, r_free = 1; + GeometryStatistics geometry; + bool within_bounds = false; // the geometry bounds the choice is made inside +}; + +struct RefinementResult { + bool ok = false; + std::string failure_reason; + bool on_gpu = false; + double seconds = 0; + double d_min = 0; + int n_work = 0, n_free = 0; + + // The model as given, scaled to these reflections (hydrogens removed, B made isotropic). + double r_work_start = 1, r_free_start = 1; + // After the placement stage. + int rigid_bodies = 0; + double r_work_placement = 1, r_free_placement = 1; + // After the restrained stage (NaN where it did not run). + bool restrained = false; + double r_work = NAN, r_free = NAN; + double weight = 0; + double adp_weight = 0; // 0: the B factors kept as placed + std::vector trials; + GeometryStatistics geometry_start, geometry; + + int atoms = 0, refined_atoms = 0; + int restrained_residues = 0, fixed_residues = 0; + std::vector fixed_names; + double k_sol = 0, b_sol = 0; + double mean_fom = 0; + + std::shared_ptr model; // the refined model, in the data's cell and frame + std::shared_ptr maps; // its 2mFo-DFc and mFo-DFc coefficients (as _maps.mtz holds them) + // The mFo-DFc map of the refined model and its rms, for finding what it leaves unexplained (DensityBlobs.h). + std::shared_ptr> difference_map; + double difference_map_rms = 0; + // The anomalous difference map on the refined model's phases, where the merge kept the Bijvoet pairs. + std::shared_ptr> anomalous_map; + double anomalous_map_rms = 0; + // What the refined model leaves unexplained in the difference map (FindDensityBlobs). + std::vector blobs; +}; + +// `placed`: the model in the data's cell and space group. `merged`: the merge, with French-Wilson amplitudes +// and free flags, in the same group. +RefinementResult RefineModel(const gemmi::Structure &placed, const std::vector &merged, + const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double wavelength_A, + Logger &logger, const RefinementSettings &settings); diff --git a/image_analysis/structure_refinement/RefinementGPU.cpp b/image_analysis/structure_refinement/RefinementGPU.cpp new file mode 100644 index 000000000..97e31b7b8 --- /dev/null +++ b/image_analysis/structure_refinement/RefinementGPU.cpp @@ -0,0 +1,283 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RefinementGPU.h" + +#include +#include + +#include "gemmi/dencalc.hpp" +#include "gemmi/it92.hpp" +#include "gemmi/solmask.hpp" // SolventMasker, refmac_radius_for_bulk_solvent + +#include "RefinementGPUEngine.h" + +namespace { + +using Table = gemmi::IT92; + +// One atom's density as the gather takes it, isotropic, with `blur`. +ModelDensityAtom DensityAtom(const gemmi::Atom &atom, double b_iso, const gemmi::DensityCalculator &dc) { + using CReal = Table::Coef::coef_type; + const auto &coef = Table::get(atom.element, atom.charge, atom.serial); + const CReal b = static_cast(b_iso + dc.blur); + const auto precal = coef.precalculate_density_iso(b, 0.0f); + const double radius = dc.estimate_radius(precal, b); + ModelDensityAtom a{}; + a.occ = atom.occ; + a.aniso = 0; + a.radius = static_cast(radius); + a.max_r2 = static_cast(radius * radius); + for (int k = 0; k < 5; k++) { + a.a[k] = precal.a[k]; + a.b[k][0] = precal.b[k]; + } + return a; +} + +std::vector Atoms(const gemmi::Model &model) { + std::vector atoms; + for (const gemmi::Chain &ch : model.chains) + for (const gemmi::Residue &r : ch.residues) + for (const gemmi::Atom &a : r.atoms) + atoms.push_back(&a); + return atoms; +} + +class RefinementEngineGPU : public RefinementEngine { +public: + RefinementEngineGPU(int device, const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double d_min, + const RefinementReflections &refl, const gemmi::Model &model, double b_max) + : device_(device), cell_(cell), sg_(sg), d_min_(d_min) { + const gemmi::Grid grid = RigidBodyZoneGrid(cell, sg, d_min); + setup_.grid.nu = grid.nu; + setup_.grid.nv = grid.nv; + setup_.grid.nw = grid.nw; + for (int i = 0; i < 3; i++) + for (int j = 0; j < 3; j++) { + setup_.grid.orth[3 * i + j] = cell.orth.mat[i][j]; + setup_.grid.frac[3 * i + j] = cell.frac.mat[i][j]; + } + setup_.volume = cell.volume; + const gemmi::GroupOps gops = sg.operations(); + setup_.den = gemmi::Op::DEN; + setup_.centring = static_cast(gops.cen_ops.size()); + for (const gemmi::Op &op : gops.sym_ops) { + std::array o{}; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) + o[3 * i + j] = op.rot[i][j]; + o[9 + i] = op.tran[i]; + } + setup_.sym_ops.push_back(o); + } + for (const gemmi::Op::Tran &cen : gops.cen_ops) + for (const gemmi::Op &op : gops.sym_ops) { + ModelMaskOp m{}; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) + m.rot[3 * i + j] = static_cast(op.rot[i][j]) / gemmi::Op::DEN; + m.tran[i] = static_cast(op.tran[i] + cen[i]) / gemmi::Op::DEN; + } + setup_.mask_ops.push_back(m); + } + for (size_t m = 0; m < refl.Size(); m++) { + setup_.rows.push_back({refl.hkl[m][0], refl.hkl[m][1], refl.hkl[m][2]}); + setup_.inv_d2.push_back(refl.inv_d2[m]); + setup_.fo.push_back(refl.fo[m]); + setup_.work.push_back(!refl.free[m]); + setup_.centric.push_back(refl.centric[m]); + } + + // The adjoint of the composition on cuFFT's half-u spectrum: the term of row m and operator o, at + // k = hR, goes to k where k_u > 0, conjugated to -k where k_u < 0, and to both on the planes k_u = 0 + // and k_u = nu/2, which hold their own Friedel mates. + const int nu = grid.nu, nv = grid.nv, nw = grid.nw; + auto point = [&](int ku, int kv, int kw) { + return ku + (nu / 2 + 1) * (gemmi::modulo(kv, nv) + nv * gemmi::modulo(kw, nw)); + }; + std::vector> entries; + const int n_ops = static_cast(gops.sym_ops.size()); + for (size_t m = 0; m < refl.Size(); m++) + for (int o = 0; o < n_ops; o++) { + const gemmi::Miller k = gops.sym_ops[o].apply_to_hkl(refl.hkl[m]); + const int term = (static_cast(m) * n_ops + o) * 2; + if (k[0] > 0 && 2 * k[0] != nu) + entries.emplace_back(point(k[0], k[1], k[2]), term); + else if (k[0] < 0 && -2 * k[0] != nu) + entries.emplace_back(point(-k[0], -k[1], -k[2]), term + 1); + else { + const int ku = std::abs(k[0]); + entries.emplace_back(point(ku, k[1], k[2]), term); + entries.emplace_back(point(ku, -k[1], -k[2]), term + 1); + } + } + std::stable_sort(entries.begin(), entries.end(), + [](const auto &a, const auto &b) { return a.first < b.first; }); + for (size_t e = 0; e < entries.size(); e++) { + if (e == 0 || entries[e].first != entries[e - 1].first) { + setup_.scatter_point.push_back(entries[e].first); + setup_.scatter_start.push_back(static_cast(e)); + } + setup_.scatter_term.push_back(entries[e].second); + } + setup_.scatter_start.push_back(static_cast(entries.size())); + + // The gather's reserve for every atom at b_max with the largest blur a refinement sets (B down to 0). + dc_ = Calculator(RefinementBlur(cell, sg, d_min, 0.0)); + std::vector widest; + for (const gemmi::Atom *a : Atoms(model)) + widest.push_back(DensityAtom(*a, b_max, dc_)); + setup_.max_atoms = widest.size(); + setup_.max_pairs = ModelDensityGPU::PairBound(setup_.grid, widest); + supported_ = !setup_.rows.empty() && ModelDensityGPU::Supports(setup_.grid, widest) && + setup_.mask_ops.size() <= ModelMaskGPU::MAX_OPS; + if (supported_) { + fft_work_ = RefinementGPUEngine::FFTWorkBytes(device, setup_.grid); + // the restraints: about thirty records and slots per atom + bytes_ = RefinementGPUEngine::DeviceBytes(setup_, fft_work_, 30 * widest.size(), 60 * widest.size()); + } + } + + bool Supported() const { return supported_; } + size_t Bytes() const { return bytes_; } + void Reserve() { engine_ = std::make_unique(device_, setup_, fft_work_); } + + void SetBlur(double blur) override { + dc_ = Calculator(blur); + last_b_.clear(); + engine_->SetBlur(blur); + } + + void SetRowModel(const XrayRowModel &rows) override { + std::vector> fmask(rows.fmask.size()); + for (size_t m = 0; m < fmask.size(); m++) + fmask[m] = {rows.fmask[m].real(), rows.fmask[m].imag()}; + engine_->SetRowModel(rows.k_total, fmask, rows.d, rows.var); + } + + bool OnGPU() const override { return true; } + + void Fcalc(const gemmi::Model &model, std::vector> &f) override { + SetAtoms(model); + std::vector> out; + engine_->Fcalc(out); + f.resize(out.size()); + for (size_t m = 0; m < out.size(); m++) + f[m] = {out[m][0], out[m][1]}; + } + + void Fmask(const gemmi::Model &model, std::vector> &f) override { + const gemmi::SolventMasker masker(gemmi::AtomicRadiiSet::Refmac); + std::vector mask_atoms; + for (const gemmi::Atom *a : Atoms(model)) { + if ((masker.ignore_hydrogen && a->is_hydrogen()) || (masker.ignore_zero_occupancy_atoms && a->occ <= 0)) + continue; + const gemmi::Fractional f0 = cell_.fractionalize(a->pos); + double frac[3] = {f0.x, f0.y, f0.z}; + for (double &x : frac) { + x -= std::floor(x); + if (x >= 1.0) + x = 0.0; + } + mask_atoms.push_back({frac[0], frac[1], frac[2], + masker.constant_r + masker.rprobe + + gemmi::refmac_radius_for_bulk_solvent(a->element.elem)}); + } + std::vector> out; + engine_->Fmask(mask_atoms, out); + f.resize(out.size()); + for (size_t m = 0; m < out.size(); m++) + f[m] = {out[m][0], out[m][1]}; + } + + double Evaluate(const gemmi::Model &model, std::vector> *grad) override { + SetAtoms(model); + std::vector> g; + const double value = engine_->Evaluate(grad != nullptr ? &g : nullptr); + if (grad != nullptr) { + grad->resize(g.size()); + for (size_t i = 0; i < g.size(); i++) + (*grad)[i] = {g[i][0], g[i][1], g[i][2], g[i][3]}; + } + return value; + } + + void SetRestraints(int which, const RestraintSet &set) override { + engine_->SetRestraints(which, set.records, set.plane_atoms, set.slot_start, set.slot_index, set.slots); + } + + double EvaluateRestraints(int which, const std::vector> &xyzb, + std::vector> *grad) override { + std::vector> x(xyzb.size()), g; + for (size_t i = 0; i < xyzb.size(); i++) + x[i] = {static_cast(xyzb[i][0]), static_cast(xyzb[i][1]), static_cast(xyzb[i][2]), + static_cast(xyzb[i][3])}; + const double value = engine_->EvaluateRestraints(which, x, grad != nullptr ? &g : nullptr); + if (grad != nullptr) { + grad->resize(g.size()); + for (size_t i = 0; i < g.size(); i++) + (*grad)[i] = {g[i][0], g[i][1], g[i][2], g[i][3]}; + } + return value; + } + +private: + gemmi::DensityCalculator Calculator(double blur) const { + gemmi::DensityCalculator dc; + dc.d_min = d_min_; + dc.rate = 1.5; + dc.grid.unit_cell = cell_; + dc.grid.spacegroup = &sg_; + dc.blur = blur; + return dc; + } + + // The atoms' densities (made again only for the atoms whose B moved) and grid positions, to the device. + void SetAtoms(const gemmi::Model &model) { + const std::vector atoms = Atoms(model); + if (last_b_.size() != atoms.size()) { + last_b_.assign(atoms.size(), NAN); + atoms_.resize(atoms.size()); + } + std::vector> pos(atoms.size()); + const int n3[3] = {setup_.grid.nu, setup_.grid.nv, setup_.grid.nw}; + for (size_t i = 0; i < atoms.size(); i++) { + if (!(atoms[i]->b_iso == last_b_[i])) { + atoms_[i] = DensityAtom(*atoms[i], atoms[i]->b_iso, dc_); + last_b_[i] = atoms[i]->b_iso; + } + const gemmi::Fractional f = cell_.fractionalize(atoms[i]->pos); + pos[i] = {static_cast(f.x * n3[0]), static_cast(f.y * n3[1]), static_cast(f.z * n3[2]), 0}; + } + engine_->SetAtoms(atoms_, pos); + } + + int device_; + gemmi::UnitCell cell_; + const gemmi::SpaceGroup &sg_; + double d_min_; + RefinementGPUSetup setup_; + gemmi::DensityCalculator dc_; + bool supported_ = false; + size_t fft_work_ = 0, bytes_ = 0; + std::unique_ptr engine_; + std::vector last_b_; + std::vector atoms_; +}; + +} // namespace + +std::unique_ptr MakeRefinementEngineGPU(int device, const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, double d_min, + const RefinementReflections &refl, + const gemmi::Model &model, double b_max, size_t budget, + size_t *device_bytes) { + auto engine = std::make_unique(device, cell, sg, d_min, refl, model, b_max); + if (device_bytes != nullptr) + *device_bytes = engine->Bytes(); + if (!engine->Supported() || engine->Bytes() > budget) + return nullptr; + engine->Reserve(); + return engine; +} diff --git a/image_analysis/structure_refinement/RefinementGPU.cu b/image_analysis/structure_refinement/RefinementGPU.cu new file mode 100644 index 000000000..4dde8f429 --- /dev/null +++ b/image_analysis/structure_refinement/RefinementGPU.cu @@ -0,0 +1,691 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RefinementGPUEngine.h" + +#include +#include + +#include +#include + +#include "../../common/JFJochException.h" +#include "../indexing/CUDAMemHelpers.h" + +namespace { + +void cuda_err(cudaError_t val) { + if (val != cudaSuccess) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, cudaGetErrorString(val)); +} + +void cufft_err(cufftResult val) { + if (val != CUFFT_SUCCESS) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "cuFFT error " + std::to_string(static_cast(val))); +} + +constexpr int THREADS = 256; +constexpr int WARP = 32; +constexpr double FOUR_PI2 = 4 * refine_math::PI * refine_math::PI; + +int blocks(size_t n) { + return static_cast((n + THREADS - 1) / THREADS); +} + +__device__ __forceinline__ int imod(int a, int n) { + const int r = a % n; + return r < 0 ? r + n : r; +} + +// gemmi's unsafe_expapprox(), as ModelDensityGPU.cu has it. +__device__ __forceinline__ float expapprox(float x) { + const float val = 12102203.1615614f * x + 1065353216.f; + const int vali = static_cast(val); + const float a = __int_as_float(vali & 0x7F800000); + const float b = __int_as_float((vali & 0x7FFFFF) | 0x3F800000); + return a * (0.509871020f + b * (0.312146713f + b * (0.166617139f + b * (-2.190619930e-3f + b * 1.3555747234e-2f)))); +} + +// exp(+2 pi i h.t) of row h and operator o, exact for the fractions a translation is made of. +__device__ __forceinline__ void op_phase(const int *h, const int *tran, int den, double &c, double &s) { + sincospi(2.0 * (h[0] * tran[0] + h[1] * tran[1] + h[2] * tran[2]) / den, &s, &c); +} + +// F of the atoms at each row, composed from the half-u transform of one copy (ModelStructureFactorsGPU.cu's +// compose_kernel), and with `evaluate` the target's term of a working row and the coefficient +// conj(dT/dF) n_cen unblur the gradient's map is made of. +__global__ void compose_target_kernel(const float2 *f1, float norm, int nu, int nv, int nw, const int *ops, int n_ops, + int den, const int *row_hkl, const double *row_scale, int rows, bool evaluate, + const float *k_total, const float2 *fmask, const float *ml_d, const float *ml_var, + const float *fo, const char *work, const char *centric, float2 *f, double *nll, + float2 *coef) { + const int m = blockIdx.x * blockDim.x + threadIdx.x; + if (m >= rows) + return; + const int h[3] = {row_hkl[3 * m], row_hkl[3 * m + 1], row_hkl[3 * m + 2]}; + double sr = 0, si = 0; + for (int o = 0; o < n_ops; o++) { + const int *rot = ops + 12 * o, *tran = rot + 9; + int k[3]; + for (int i = 0; i < 3; i++) + k[i] = (rot[i] * h[0] + rot[3 + i] * h[1] + rot[6 + i] * h[2]) / den; + const bool conj = k[0] < 0; + if (conj) + for (int i = 0; i < 3; i++) + k[i] = -k[i]; + const float2 out = f1[k[0] + static_cast(nu / 2 + 1) * (imod(k[1], nv) + static_cast(nv) * imod(k[2], nw))]; + const double vr = out.x * norm, vi = (conj ? out.y : -out.y) * norm; + double s, c; + op_phase(h, tran, den, c, s); + sr += c * vr - s * vi; + si += c * vi + s * vr; + } + const double scale = row_scale[m]; + sr *= scale; + si *= scale; + f[m] = make_float2(static_cast(sr), static_cast(si)); + if (!evaluate) + return; + double term = 0, cr = 0, ci = 0; + if (work[m]) { + const double k = k_total[m]; + const double mr = k * (sr + fmask[m].x), mi = k * (si + fmask[m].y); + const double fc = sqrt(mr * mr + mi * mi); + double dfc = 0; + term = refine_math::AmplitudeNegLogLikelihood(fo[m], fc, ml_d[m], ml_var[m], centric[m], dfc); + if (fc > 0) { + // dT/dF = k dT/d|F_model| F_model / |F_model|; the coefficient is its conjugate times the scale + const double g = k * dfc / fc * scale; + cr = g * mr; + ci = -g * mi; + } + } + nll[m] = term; + coef[m] = make_float2(static_cast(cr), static_cast(ci)); +} + +// The gradient's coefficients on the half-u spectrum: each point the sum, in order, of the terms +// (coef[row] exp(2 pi i h.t_op)) / 2 that land on it, conjugated where they land as a Friedel mate. +__global__ void scatter_kernel(const float2 *coef, const int *row_hkl, const int *ops, int n_ops, int den, + const int *point, const int *start, const int *term, int points, float2 *spectrum) { + const int s = blockIdx.x * blockDim.x + threadIdx.x; + if (s >= points) + return; + double sr = 0, si = 0; + for (int e = start[s]; e < start[s + 1]; e++) { + const int t = term[e]; + const bool conj = t & 1; + const int m = (t >> 1) / n_ops, o = (t >> 1) % n_ops; + double c, sn; + op_phase(row_hkl + 3 * m, ops + 12 * o + 9, den, c, sn); + const double ar = 0.5 * (coef[m].x * c - coef[m].y * sn), ai = 0.5 * (coef[m].x * sn + coef[m].y * c); + sr += ar; + si += conj ? -ai : ai; + } + spectrum[point[s]] = make_float2(static_cast(sr), static_cast(si)); +} + +// F_mask at each row, read at h directly (ModelStructureFactorsGPU.cu's fmask_kernel). +__global__ void fmask_kernel(const float2 *fm, float norm, const int *row_hkl, int rows, int nu, int nv, int nw, + float2 *fmask) { + const int m = blockIdx.x * blockDim.x + threadIdx.x; + if (m >= rows) + return; + int h = row_hkl[3 * m], k = row_hkl[3 * m + 1], l = row_hkl[3 * m + 2]; + const bool conj = h < 0; + if (conj) { + h = -h; + k = -k; + l = -l; + } + const float2 out = fm[h + static_cast(nu / 2 + 1) * (imod(k, nv) + static_cast(nv) * imod(l, nw))]; + const float re = out.x * norm, im = -out.y * norm; + fmask[m] = make_float2(re, conj ? -im : im); +} + +// dT/d(x, y, z, B) of every atom: the derivative map summed against the derivatives of the atom's density over +// its box, one warp per atom, the lanes' sums added in a fixed tree. The box, the points within the radius and +// their offsets from the centre are the density gather's (ModelDensityGPU.cu). +__global__ void atom_gradient_kernel(const ModelDensityAtom *atoms, const float4 *pos, const int *box, int n, + ModelDensityGPU::Geometry g, const float *map, float map_scale, float4 *grad) { + const int a = (blockIdx.x * blockDim.x + threadIdx.x) / WARP; + const int lane = threadIdx.x % WARP; + if (a >= n) + return; + const ModelDensityAtom at = atoms[a]; + const float4 p = pos[a]; + const float nctr[3] = {p.x, p.y, p.z}; + int lo[3], span[3]; + for (int k = 0; k < 3; k++) { + lo[k] = __float2int_rn(nctr[k]) - box[3 * a + k]; + span[k] = 2 * box[3 * a + k] + 1; + } + const int total = span[0] * span[1] * span[2]; + float gx = 0, gy = 0, gz = 0, gb = 0; + for (int t = lane; t < total; t += WARP) { + const int u = lo[0] + t % span[0], v = lo[1] + t / span[0] % span[1], w = lo[2] + t / (span[0] * span[1]); + const float fx = nctr[0] - static_cast(u); + const float fy = nctr[1] - static_cast(v); + const float fz = nctr[2] - static_cast(w); + const float z = g.m22 * fz; + const float y = g.m11 * fy + g.m12 * fz; + const float x = g.m00 * fx + (g.m01 * fy + g.m02 * fz); + const float r2 = (y * y + z * z) + x * x; + if (r2 > at.max_r2) + continue; + const float value = map[imod(u, g.nu) + static_cast(g.nu) * (imod(v, g.nv) + static_cast(g.nv) * imod(w, g.nw))]; + float dr2 = 0, db = 0; + for (int q = 0; q < 5; q++) { + const float b = at.b[q][0]; + const float e = at.a[q] * expapprox(fmaxf(b * r2, -88.f)); + dr2 += e * b; + db += e * b * (1.5f + b * r2); + } + gx += value * dr2 * x; + gy += value * dr2 * y; + gz += value * dr2 * z; + gb += value * db; + } + for (int off = WARP / 2; off > 0; off /= 2) { + gx += __shfl_down_sync(0xffffffff, gx, off); + gy += __shfl_down_sync(0xffffffff, gy, off); + gz += __shfl_down_sync(0xffffffff, gz, off); + gb += __shfl_down_sync(0xffffffff, gb, off); + } + if (lane == 0) { + const float s = 2.0f * at.occ * map_scale; + grad[a] = make_float4(s * gx, s * gy, s * gz, at.occ * map_scale * gb / static_cast(FOUR_PI2)); + } +} + +using V3f = refine_math::V3; + +__device__ V3f xyz(const float4 *p, int i) { + const float4 q = p[i]; + return {q.x, q.y, q.z}; +} + +// Every restraint's E, and its gradient into its slots, one thread per restraint. +__global__ void restraint_kernel(const RestraintRecord *records, int n, const int *plane_atoms, const float4 *xyzb, + float4 *contrib, double *energy) { + const int i = blockIdx.x * blockDim.x + threadIdx.x; + if (i >= n) + return; + const RestraintRecord &r = records[i]; + V3f g[4] = {}; + int na = 0; + float e = 0; + switch (static_cast(r.kind)) { + case RestraintKind::Bond: + e = refine_math::BondTerm(xyz(xyzb, r.atom[0]), xyz(xyzb, r.atom[1]), r.ideal, r.sigma, g); + na = 2; + break; + case RestraintKind::Angle: + e = refine_math::AngleTerm(xyz(xyzb, r.atom[0]), xyz(xyzb, r.atom[1]), xyz(xyzb, r.atom[2]), r.ideal, + r.sigma, g); + na = 3; + break; + case RestraintKind::Torsion: + e = refine_math::TorsionTerm(xyz(xyzb, r.atom[0]), xyz(xyzb, r.atom[1]), xyz(xyzb, r.atom[2]), + xyz(xyzb, r.atom[3]), r.ideal, r.sigma, r.period, g); + na = 4; + break; + case RestraintKind::Chiral: + e = refine_math::ChiralTerm(xyz(xyzb, r.atom[0]), xyz(xyzb, r.atom[1]), xyz(xyzb, r.atom[2]), + xyz(xyzb, r.atom[3]), r.ideal, r.sigma, g); + na = 4; + break; + case RestraintKind::Repulsion: { + const V3f q = xyz(xyzb, r.atom[1]); + const V3f image{r.rot[0] * q.x + r.rot[1] * q.y + r.rot[2] * q.z + r.tran[0], + r.rot[3] * q.x + r.rot[4] * q.y + r.rot[5] * q.z + r.tran[1], + r.rot[6] * q.x + r.rot[7] * q.y + r.rot[8] * q.z + r.tran[2]}; + e = refine_math::RepulsionTerm(xyz(xyzb, r.atom[0]), image, r.ideal, r.sigma, g); + const V3f gi = g[1]; + g[1] = {r.rot[0] * gi.x + r.rot[3] * gi.y + r.rot[6] * gi.z, + r.rot[1] * gi.x + r.rot[4] * gi.y + r.rot[7] * gi.z, + r.rot[2] * gi.x + r.rot[5] * gi.y + r.rot[8] * gi.z}; + na = 2; + break; + } + case RestraintKind::Plane: { + V3f px[RefinementGPUEngine::MAX_PLANE_ATOMS], pg[RefinementGPUEngine::MAX_PLANE_ATOMS]; + const int m = r.atom[1]; + for (int k = 0; k < m; k++) + px[k] = xyz(xyzb, plane_atoms[r.atom[0] + k]); + e = refine_math::PlaneTerm(px, m, r.sigma, pg); + for (int k = 0; k < m; k++) + contrib[r.slot + k] = make_float4(pg[k].x, pg[k].y, pg[k].z, 0.0f); + break; + } + case RestraintKind::BSimilarity: { + const float rr = (xyzb[r.atom[0]].w - xyzb[r.atom[1]].w) / r.sigma; + e = rr * rr; + contrib[r.slot] = make_float4(0, 0, 0, 2 * rr / r.sigma); + contrib[r.slot + 1] = make_float4(0, 0, 0, -2 * rr / r.sigma); + break; + } + } + for (int k = 0; k < na; k++) + contrib[r.slot + k] = make_float4(g[k].x, g[k].y, g[k].z, 0.0f); + energy[i] = e; +} + +// Each atom's restraint gradient: its slots summed in order. +__global__ void slot_gather_kernel(const float4 *contrib, const int *start, const int *index, int n, float4 *grad) { + const int a = blockIdx.x * blockDim.x + threadIdx.x; + if (a >= n) + return; + float4 s = make_float4(0, 0, 0, 0); + for (int k = start[a]; k < start[a + 1]; k++) { + const float4 c = contrib[index[k]]; + s.x += c.x; + s.y += c.y; + s.z += c.z; + s.w += c.w; + } + grad[a] = s; +} + +CudaFFTShape ForwardShape(const ModelDensityGrid &g) { + return {.n = {g.nw, g.nv, g.nu}, .idist = g.nu * g.nv * g.nw, .odist = (g.nu / 2 + 1) * g.nv * g.nw, + .type = CUFFT_R2C}; +} + +CudaFFTShape InverseShape(const ModelDensityGrid &g) { + return {.n = {g.nw, g.nv, g.nu}, .idist = (g.nu / 2 + 1) * g.nv * g.nw, .odist = g.nu * g.nv * g.nw, + .type = CUFFT_C2R}; +} + +class DeviceGuard { +public: + explicit DeviceGuard(int device) { + cuda_err(cudaGetDevice(&previous_)); + cuda_err(cudaSetDevice(device)); + } + ~DeviceGuard() { cudaSetDevice(previous_); } + DeviceGuard(const DeviceGuard &) = delete; + DeviceGuard &operator=(const DeviceGuard &) = delete; + +private: + int previous_ = 0; +}; + +size_t GridPoints(const ModelDensityGrid &g) { + return static_cast(g.nu) * g.nv * g.nw; +} + +size_t ComplexPoints(const ModelDensityGrid &g) { + return static_cast(g.nu / 2 + 1) * g.nv * g.nw; +} + +template +void Upload(CudaDevicePtr &dst, const std::vector &src, cudaStream_t stream) { + if (!src.empty()) + cuda_err(cudaMemcpyAsync(dst, src.data(), src.size() * sizeof(T), cudaMemcpyHostToDevice, stream)); +} + +// A device buffer of at least n elements, kept between calls and grown when it is too small. +template +void Ensure(CudaDevicePtr &p, size_t &capacity, size_t n) { + if (n <= capacity && p) + return; + capacity = std::max(n, 1); + p = CudaDevicePtr(capacity, CudaAlloc::Synchronous); +} + +// cub's temporary storage to reduce n doubles. +size_t ReduceBytes(size_t n) { + size_t bytes = 0; + cuda_err(cub::DeviceReduce::Sum(nullptr, bytes, static_cast(nullptr), static_cast(nullptr), + static_cast(std::max(n, 1)))); + return bytes; +} + +} // namespace + +struct RefinementGPUEngineImpl { + struct Restraints { + int records = 0, atoms = 0; + size_t cap_records = 0, cap_planes = 0, cap_start = 0, cap_index = 0, cap_slots = 0, cap_reduce = 0, + cap_atoms = 0, cap_xyzb = 0, reduce_bytes = 0; + CudaDevicePtr rec; + CudaDevicePtr plane_atoms, slot_start, slot_index; + CudaDevicePtr contrib, xyzb, grad; + CudaDevicePtr energy, sum; + CudaDevicePtr reduce_temp; + }; + + RefinementGPUSetup setup; + size_t work_bytes; + int device = 0; + CudaStream stream; + int n_atoms = 0; + + CudaDevicePtr pos; + CudaDevicePtr box; + CudaDevicePtr mask_atoms; + CudaDevicePtr grid; + CudaDevicePtr spectrum; + CudaDevicePtr fft_work; + CudaDevicePtr ops, row_hkl; + CudaDevicePtr row_scale; + CudaDevicePtr k_total, ml_d, ml_var, fo; + CudaDevicePtr fmask_scaled, f, fm, coef; + CudaDevicePtr work, centric; + CudaDevicePtr nll, nll_sum; + CudaDevicePtr reduce_temp; + size_t reduce_bytes = 0; + CudaDevicePtr scatter_point, scatter_start, scatter_term; + CudaDevicePtr grad; + CudaDevicePtr atoms_copy; // the density gather keeps its own; this one is the gradient's + std::unique_ptr density; + std::unique_ptr mask; + CudaFFTPlan forward, inverse; + ModelDensityGPU::Geometry geom{}; + Restraints restraints[2]; + + RefinementGPUEngineImpl(int dev, const RefinementGPUSetup &s, size_t fft_work_bytes) : setup(s), work_bytes(fft_work_bytes), device(dev) { + const auto sync = CudaAlloc::Synchronous; + const size_t na = std::max(setup.max_atoms, 1), nr = std::max(setup.rows.size(), 1); + pos = CudaDevicePtr(na, sync); + box = CudaDevicePtr(3 * na, sync); + mask_atoms = CudaDevicePtr(na, sync); + atoms_copy = CudaDevicePtr(na, sync); + grad = CudaDevicePtr(na, sync); + grid = CudaDevicePtr(GridPoints(setup.grid), sync); + spectrum = CudaDevicePtr(ComplexPoints(setup.grid), sync); + fft_work = CudaDevicePtr(std::max(work_bytes, 1), sync); + ops = CudaDevicePtr(std::max(12 * setup.sym_ops.size(), 1), sync); + row_hkl = CudaDevicePtr(3 * nr, sync); + row_scale = CudaDevicePtr(nr, sync); + k_total = CudaDevicePtr(nr, sync); + ml_d = CudaDevicePtr(nr, sync); + ml_var = CudaDevicePtr(nr, sync); + fo = CudaDevicePtr(nr, sync); + fmask_scaled = CudaDevicePtr(nr, sync); + f = CudaDevicePtr(nr, sync); + fm = CudaDevicePtr(nr, sync); + coef = CudaDevicePtr(nr, sync); + work = CudaDevicePtr(nr, sync); + centric = CudaDevicePtr(nr, sync); + nll = CudaDevicePtr(nr, sync); + nll_sum = CudaDevicePtr(1, sync); + reduce_bytes = ReduceBytes(nr); + reduce_temp = CudaDevicePtr(std::max(reduce_bytes, 1), sync); + scatter_point = CudaDevicePtr(std::max(setup.scatter_point.size(), 1), sync); + scatter_start = CudaDevicePtr(std::max(setup.scatter_start.size(), 1), sync); + scatter_term = CudaDevicePtr(std::max(setup.scatter_term.size(), 1), sync); + density = std::make_unique(stream, setup.max_atoms, setup.max_pairs, + ModelDensityGPU::Bricks(setup.grid.nu, setup.grid.nv, setup.grid.nw)); + mask = std::make_unique(stream, GridPoints(setup.grid)); + ModelMaskGrid mask_grid; + mask_grid.nu = setup.grid.nu; + mask_grid.nv = setup.grid.nv; + mask_grid.nw = setup.grid.nw; + std::copy(setup.grid.orth, setup.grid.orth + 9, mask_grid.orth); + mask_grid.volume = setup.volume; + mask->SetGrid(mask_grid, setup.mask_ops); + + std::vector flat_ops; + for (const auto &o : setup.sym_ops) + flat_ops.insert(flat_ops.end(), o.begin(), o.end()); + std::vector hkl; + for (const auto &h : setup.rows) + hkl.insert(hkl.end(), h.begin(), h.end()); + Upload(ops, flat_ops, stream); + Upload(row_hkl, hkl, stream); + Upload(fo, setup.fo, stream); + Upload(work, setup.work, stream); + Upload(centric, setup.centric, stream); + Upload(scatter_point, setup.scatter_point, stream); + Upload(scatter_start, setup.scatter_start, stream); + Upload(scatter_term, setup.scatter_term, stream); + + const double inv_n[3] = {1.0 / setup.grid.nu, 1.0 / setup.grid.nv, 1.0 / setup.grid.nw}; + geom.nu = setup.grid.nu; + geom.nv = setup.grid.nv; + geom.nw = setup.grid.nw; + geom.m00 = static_cast(setup.grid.orth[0] * inv_n[0]); + geom.m01 = static_cast(setup.grid.orth[1] * inv_n[1]); + geom.m02 = static_cast(setup.grid.orth[2] * inv_n[2]); + geom.m11 = static_cast(setup.grid.orth[4] * inv_n[1]); + geom.m12 = static_cast(setup.grid.orth[5] * inv_n[2]); + geom.m22 = static_cast(setup.grid.orth[8] * inv_n[2]); + + forward = CudaFFTPlan(ForwardShape(setup.grid), stream, fft_work); + inverse = CudaFFTPlan(InverseShape(setup.grid), stream, fft_work); + if (forward.WorkBytes() > work_bytes || inverse.WorkBytes() > work_bytes) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "refinement: cuFFT work area over the reserve"); + cuda_err(cudaStreamSynchronize(stream)); + } + + ~RefinementGPUEngineImpl() { cudaStreamSynchronize(stream); } + + float Norm() const { return static_cast(setup.volume / static_cast(GridPoints(setup.grid))); } + + // The atoms' density on the grid and its transform into the spectrum. + void Transform() { + density->Compute(pos, grid); + cufft_err(forward.R2C(grid, reinterpret_cast(spectrum.get()))); + } + + void Compose(bool evaluate) { + const int rows = static_cast(setup.rows.size()); + if (rows == 0) + return; + compose_target_kernel<<>>( + spectrum, Norm(), setup.grid.nu, setup.grid.nv, setup.grid.nw, ops, static_cast(setup.sym_ops.size()), + setup.den, row_hkl, row_scale, rows, evaluate, k_total, fmask_scaled, ml_d, ml_var, fo, work, centric, f, + nll, coef); + cuda_err(cudaGetLastError()); + } +}; + +size_t RefinementGPUEngine::FFTWorkBytes(int device, const ModelDensityGrid &grid) { + DeviceGuard guard(device); + return std::max(CudaFFTPlan::WorkBytes(ForwardShape(grid)), CudaFFTPlan::WorkBytes(InverseShape(grid))); +} + +size_t RefinementGPUEngine::DeviceBytes(const RefinementGPUSetup &s, size_t fft_work_bytes, size_t max_records, + size_t max_slots) { + const size_t na = s.max_atoms + 1, nr = s.rows.size() + 1; + size_t bytes = na * (2 * sizeof(float4) + 3 * sizeof(int) + sizeof(ModelMaskAtom) + sizeof(ModelDensityAtom)); + bytes += GridPoints(s.grid) * sizeof(float) + ComplexPoints(s.grid) * sizeof(float2) + fft_work_bytes; + bytes += nr * (3 * sizeof(int) + 2 * sizeof(double) + 4 * sizeof(float) + 4 * sizeof(float2) + 2); + bytes += (s.scatter_point.size() + s.scatter_start.size() + s.scatter_term.size()) * sizeof(int); + bytes += ModelDensityGPU::DeviceBytes(s.max_atoms, s.max_pairs, ModelDensityGPU::Bricks(s.grid.nu, s.grid.nv, s.grid.nw)); + bytes += ModelMaskGPU::DeviceBytes(GridPoints(s.grid)); + bytes += max_records * (sizeof(RestraintRecord) + sizeof(double)) + max_slots * (sizeof(float4) + sizeof(int)) + + na * (2 * sizeof(float4) + sizeof(int)); + return bytes; +} + +RefinementGPUEngine::RefinementGPUEngine(int device, const RefinementGPUSetup &setup, size_t fft_work_bytes) { + DeviceGuard guard(device); + impl_ = std::make_unique(device, setup, fft_work_bytes); +} + +RefinementGPUEngine::~RefinementGPUEngine() { + if (impl_) { + DeviceGuard guard(impl_->device); + impl_.reset(); + } +} + +void RefinementGPUEngine::SetBlur(double blur) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + std::vector scale(e.setup.rows.size()); + for (size_t m = 0; m < scale.size(); m++) + scale[m] = e.setup.centring * std::exp(blur * 0.25 * e.setup.inv_d2[m]); + Upload(e.row_scale, scale, e.stream); + cuda_err(cudaStreamSynchronize(e.stream)); +} + +void RefinementGPUEngine::SetRowModel(const std::vector &k_total, const std::vector> &fmask, + const std::vector &d, const std::vector &var) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + Upload(e.k_total, k_total, e.stream); + if (!fmask.empty()) + cuda_err(cudaMemcpyAsync(e.fmask_scaled, fmask.data(), fmask.size() * sizeof(float2), cudaMemcpyHostToDevice, + e.stream)); + Upload(e.ml_d, d, e.stream); + Upload(e.ml_var, var, e.stream); + cuda_err(cudaStreamSynchronize(e.stream)); +} + +void RefinementGPUEngine::SetAtoms(const std::vector &atoms, const std::vector> &pos) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + if (atoms.size() > e.setup.max_atoms || pos.size() != atoms.size()) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "refinement: atoms over the reserve"); + e.density->SetAtoms(e.setup.grid, atoms); + e.n_atoms = static_cast(atoms.size()); + const std::vector b = ModelDensityGPU::Boxes(e.setup.grid, atoms); + if (!atoms.empty()) { + cuda_err(cudaMemcpyAsync(e.pos, pos.data(), pos.size() * sizeof(float4), cudaMemcpyHostToDevice, e.stream)); + cuda_err(cudaMemcpyAsync(e.atoms_copy, atoms.data(), atoms.size() * sizeof(ModelDensityAtom), + cudaMemcpyHostToDevice, e.stream)); + Upload(e.box, b, e.stream); + } + cuda_err(cudaStreamSynchronize(e.stream)); +} + +void RefinementGPUEngine::Fcalc(std::vector> &f) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + e.Transform(); + e.Compose(false); + f.resize(e.setup.rows.size()); + if (!f.empty()) + cuda_err(cudaMemcpyAsync(f.data(), e.f, f.size() * sizeof(float2), cudaMemcpyDeviceToHost, e.stream)); + cuda_err(cudaStreamSynchronize(e.stream)); +} + +void RefinementGPUEngine::Fmask(const std::vector &mask_atoms, std::vector> &f) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + if (mask_atoms.size() > e.setup.max_atoms) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "refinement: mask atoms over the reserve"); + if (!mask_atoms.empty()) + cuda_err(cudaMemcpyAsync(e.mask_atoms, mask_atoms.data(), mask_atoms.size() * sizeof(ModelMaskAtom), + cudaMemcpyHostToDevice, e.stream)); + e.mask->Compute(e.mask_atoms, static_cast(mask_atoms.size()), e.grid); + cufft_err(e.forward.R2C(e.grid, reinterpret_cast(e.spectrum.get()))); + const int rows = static_cast(e.setup.rows.size()); + f.resize(rows); + if (rows > 0) { + fmask_kernel<<>>(e.spectrum, e.Norm(), e.row_hkl, rows, e.setup.grid.nu, + e.setup.grid.nv, e.setup.grid.nw, e.fm); + cuda_err(cudaGetLastError()); + cuda_err(cudaMemcpyAsync(f.data(), e.fm, rows * sizeof(float2), cudaMemcpyDeviceToHost, e.stream)); + } + cuda_err(cudaStreamSynchronize(e.stream)); +} + +double RefinementGPUEngine::Evaluate(std::vector> *grad) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + const int rows = static_cast(e.setup.rows.size()); + e.Transform(); + e.Compose(true); + double sum = 0; + if (rows > 0) { + size_t temp = e.reduce_bytes; + cuda_err(cub::DeviceReduce::Sum(e.reduce_temp.get(), temp, e.nll.get(), e.nll_sum.get(), rows, e.stream)); + cuda_err(cudaMemcpyAsync(&sum, e.nll_sum, sizeof(double), cudaMemcpyDeviceToHost, e.stream)); + } + if (grad != nullptr) { + const ModelDensityGrid &g = e.setup.grid; + cuda_err(cudaMemsetAsync(e.spectrum, 0, ComplexPoints(g) * sizeof(float2), e.stream)); + const int points = static_cast(e.setup.scatter_point.size()); + if (points > 0) { + scatter_kernel<<>>(e.coef, e.row_hkl, e.ops, + static_cast(e.setup.sym_ops.size()), e.setup.den, + e.scatter_point, e.scatter_start, e.scatter_term, + points, e.spectrum); + cuda_err(cudaGetLastError()); + } + cufft_err(e.inverse.C2R(reinterpret_cast(e.spectrum.get()), e.grid)); + if (e.n_atoms > 0) { + const size_t threads = static_cast(e.n_atoms) * WARP; + atom_gradient_kernel<<>>(e.atoms_copy, e.pos, e.box, e.n_atoms, e.geom, + e.grid, e.Norm(), e.grad); + cuda_err(cudaGetLastError()); + } + grad->resize(e.n_atoms); + if (e.n_atoms > 0) + cuda_err(cudaMemcpyAsync(grad->data(), e.grad, e.n_atoms * sizeof(float4), cudaMemcpyDeviceToHost, e.stream)); + } + cuda_err(cudaStreamSynchronize(e.stream)); + return sum; +} + +void RefinementGPUEngine::SetRestraints(int which, const std::vector &records, + const std::vector &plane_atoms, const std::vector &slot_start, + const std::vector &slot_index, int slots) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + RefinementGPUEngineImpl::Restraints &r = e.restraints[which]; + for (const RestraintRecord &rec : records) + if (rec.kind == static_cast(RestraintKind::Plane) && rec.atom[1] > MAX_PLANE_ATOMS) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "refinement: a plane of too many atoms"); + r.records = static_cast(records.size()); + r.atoms = static_cast(slot_start.empty() ? 0 : slot_start.size() - 1); + Ensure(r.rec, r.cap_records, records.size()); + Ensure(r.energy, r.cap_reduce, records.size()); + Ensure(r.plane_atoms, r.cap_planes, plane_atoms.size()); + Ensure(r.slot_start, r.cap_start, slot_start.size()); + Ensure(r.slot_index, r.cap_index, slot_index.size()); + Ensure(r.contrib, r.cap_slots, static_cast(slots)); + Ensure(r.xyzb, r.cap_xyzb, r.atoms); + Ensure(r.grad, r.cap_atoms, r.atoms); + if (!r.sum) + r.sum = CudaDevicePtr(1, CudaAlloc::Synchronous); + const size_t bytes = ReduceBytes(r.cap_reduce); + if (!r.reduce_temp || bytes > r.reduce_bytes) { + r.reduce_bytes = bytes; + r.reduce_temp = CudaDevicePtr(std::max(bytes, 1), CudaAlloc::Synchronous); + } + Upload(r.rec, records, e.stream); + Upload(r.plane_atoms, plane_atoms, e.stream); + Upload(r.slot_start, slot_start, e.stream); + Upload(r.slot_index, slot_index, e.stream); + cuda_err(cudaStreamSynchronize(e.stream)); +} + +double RefinementGPUEngine::EvaluateRestraints(int which, const std::vector> &xyzb, + std::vector> *grad) { + RefinementGPUEngineImpl &e = *impl_; + DeviceGuard guard(e.device); + RefinementGPUEngineImpl::Restraints &r = e.restraints[which]; + if (static_cast(xyzb.size()) != r.atoms) + throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "refinement: restraint atoms do not match"); + if (r.atoms > 0) + cuda_err(cudaMemcpyAsync(r.xyzb, xyzb.data(), xyzb.size() * sizeof(float4), cudaMemcpyHostToDevice, e.stream)); + double sum = 0; + if (r.records > 0) { + restraint_kernel<<>>(r.rec, r.records, r.plane_atoms, r.xyzb, r.contrib, + r.energy); + cuda_err(cudaGetLastError()); + size_t temp = r.reduce_bytes; + cuda_err(cub::DeviceReduce::Sum(r.reduce_temp.get(), temp, r.energy.get(), r.sum.get(), r.records, e.stream)); + cuda_err(cudaMemcpyAsync(&sum, r.sum, sizeof(double), cudaMemcpyDeviceToHost, e.stream)); + } + if (grad != nullptr) { + grad->resize(r.atoms); + if (r.atoms > 0) { + if (r.records > 0) { + slot_gather_kernel<<>>(r.contrib, r.slot_start, r.slot_index, + r.atoms, r.grad); + cuda_err(cudaGetLastError()); + } else + cuda_err(cudaMemsetAsync(r.grad, 0, r.atoms * sizeof(float4), e.stream)); + cuda_err(cudaMemcpyAsync(grad->data(), r.grad, r.atoms * sizeof(float4), cudaMemcpyDeviceToHost, e.stream)); + } + } + cuda_err(cudaStreamSynchronize(e.stream)); + return sum; +} diff --git a/image_analysis/structure_refinement/RefinementGPU.h b/image_analysis/structure_refinement/RefinementGPU.h new file mode 100644 index 000000000..965fab1ad --- /dev/null +++ b/image_analysis/structure_refinement/RefinementGPU.h @@ -0,0 +1,24 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +// Restrained refinement's targets on a GPU (CUDA builds only): the RefinementEngine of RefinementXray.h with +// everything per evaluation on the device - the atoms' density (ModelDensityGPU's gather), its transform, the +// symmetry composed in reciprocal space, the likelihood target, the derivative map by the inverse transform +// of the target's derivatives and every atom's gradient read off it, and the geometry restraints. The host +// passes positions in and gets one value and one gradient per atom back. + +#include + +#include "RefinementXray.h" + +// The engine for refining `model` against `refl` on `device`, or null where the GPU cannot take this case (an +// atom's box wider than the cell, too many symmetry operators) or its memory is over `budget` bytes. +// `b_max`: the largest B an atom may reach, which the gather's reserve is sized for. Throws JFJochException on a +// CUDA failure. +std::unique_ptr MakeRefinementEngineGPU(int device, const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, double d_min, + const RefinementReflections &refl, + const gemmi::Model &model, double b_max, size_t budget, + size_t *device_bytes = nullptr); diff --git a/image_analysis/structure_refinement/RefinementGPUEngine.h b/image_analysis/structure_refinement/RefinementGPUEngine.h new file mode 100644 index 000000000..a8b34807a --- /dev/null +++ b/image_analysis/structure_refinement/RefinementGPUEngine.h @@ -0,0 +1,78 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +// The device half of restrained refinement on a GPU (RefinementGPU.h, CUDA builds only). The host half works +// out with gemmi everything that depends on the cell, the group and the reflections; this half grids the atoms, +// transforms, composes the symmetry, evaluates the likelihood target, takes its derivative back to every atom +// by the FFT method, and evaluates the geometry restraints. Every kernel is deterministic - gathers and fixed +// reduction trees, no floating-point atomics - so the same input gives the same bits on every run. + +#include +#include +#include +#include + +#include "ModelDensityGPU.h" +#include "ModelMaskGPU.h" +#include "RefinementMath.h" + +// Everything an engine needs that does not depend on the atoms. +struct RefinementGPUSetup { + ModelDensityGrid grid; // the structure-factor grid, u fastest + double volume = 0; + std::vector> sym_ops; // gemmi's Op: rot row-major and tran, in units of 1 / den + int den = 24; + double centring = 1; // the number of centring vectors + std::vector mask_ops; // every operator with every centring vector + std::vector> rows; // the reflections, in the order their numbers come back + std::vector inv_d2; + std::vector fo; + std::vector work, centric; + // The adjoint of the composition, as a gather: the half-u spectrum points the gradient's coefficients + // land on (ascending), and for each the terms (row * ops + op) * 2 + conj adding to it, in order. + std::vector scatter_point, scatter_start, scatter_term; + size_t max_atoms = 0, max_pairs = 0; +}; + +struct RefinementGPUEngineImpl; + +class RefinementGPUEngine { +public: + static size_t DeviceBytes(const RefinementGPUSetup &setup, size_t fft_work_bytes, size_t max_records, + size_t max_slots); + static size_t FFTWorkBytes(int device, const ModelDensityGrid &grid); + + RefinementGPUEngine(int device, const RefinementGPUSetup &setup, size_t fft_work_bytes); + ~RefinementGPUEngine(); + + // n_cen exp(blur s^2 / 4) per reflection: prepare_asu_data()'s unblur. + void SetBlur(double blur); + // Per macro-cycle: F_model = k_total (F + fmask), and the likelihood's D and variance. + void SetRowModel(const std::vector &k_total, const std::vector> &fmask, + const std::vector &d, const std::vector &var); + + // The atoms, as ModelStructureFactorsGPU takes them: densities, grid positions (fractional times the grid + // size, not wrapped) and the boxes of ModelDensityGPU::Boxes(). + void SetAtoms(const std::vector &atoms, const std::vector> &pos); + // F of the atoms at the rows. + void Fcalc(std::vector> &f); + // The bulk-solvent mask's F at the rows (the mask atoms fractional, wrapped). + void Fmask(const std::vector &mask_atoms, std::vector> &f); + // -ln L over the working rows for the atoms last set and, with `grad`, dT/d(x, y, z, B) per atom. + double Evaluate(std::vector> *grad); + + // Restraint set `which` (0 or 1), as RestraintSet holds it. + void SetRestraints(int which, const std::vector &records, const std::vector &plane_atoms, + const std::vector &slot_start, const std::vector &slot_index, int slots); + // The sum of E of set `which` at `xyzb` (x, y, z, B per atom) and dE/d(x, y, z, B) per atom. + double EvaluateRestraints(int which, const std::vector> &xyzb, + std::vector> *grad); + + // The most atoms of a plane restraint the kernel takes. + static constexpr int MAX_PLANE_ATOMS = 32; + +private: + std::unique_ptr impl_; +}; diff --git a/image_analysis/structure_refinement/RefinementMath.h b/image_analysis/structure_refinement/RefinementMath.h new file mode 100644 index 000000000..996a96ac6 --- /dev/null +++ b/image_analysis/structure_refinement/RefinementMath.h @@ -0,0 +1,268 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +// The per-term arithmetic of restrained refinement (Refinement.h), written once for the CPU and the GPU: +// the maximum-likelihood amplitude target of one reflection and the geometry restraints, each with its +// derivatives. Plain functions on plain numbers, so the CUDA engine (RefinementGPU.cu) and the CPU path +// (RefinementXray.cpp, RefinementRestraints.cpp) evaluate the same expressions. + +#include + +#if defined(__CUDACC__) +#define REFINE_HD __host__ __device__ +#else +#define REFINE_HD +#endif + +// What a restraint is, for the evaluators on either side (RefinementRestraints.h builds them). +enum class RestraintKind : int { Bond = 0, Angle, Torsion, Chiral, Plane, Repulsion, BSimilarity }; + +// One restraint. E = ((value - ideal) / sigma)^2, summed over a set. +struct RestraintRecord { + int kind = 0; + int atom[4] = {0, 0, 0, 0}; // Plane: atom[0] the first of its atoms in plane_atoms, atom[1] their number + float ideal = 0; // A, degrees, A^3 (chiral) or A (repulsion: the contact distance) + float sigma = 1; + int period = 0; // Torsion + int slot = 0; // the first of its gradient slots, one per atom + // Repulsion: where the second atom is, as the image x' = rot x + tran of its position (Cartesian); + // the identity elsewhere. + float rot[9] = {1, 0, 0, 0, 1, 0, 0, 0, 1}; + float tran[3] = {0, 0, 0}; +}; + +namespace refine_math { + +constexpr double PI = 3.14159265358979323846; +constexpr double DEG = PI / 180.0; + +// ln I0(x) and I1(x)/I0(x) for x >= 0, from the polynomial approximations of Abramowitz & Stegun (1964), +// Handbook of Mathematical Functions, 9.8.1-9.8.4 (relative error below 2e-7); for large x through the +// exponentially scaled form, so nothing overflows. +template +REFINE_HD inline void BesselI0I1(T x, T &log_i0, T &i1_over_i0) { + if (x < T(3.75)) { + const T t = (x / T(3.75)) * (x / T(3.75)); + const T i0 = T(1.0) + t * (T(3.5156229) + t * (T(3.0899424) + t * (T(1.2067492) + + t * (T(0.2659732) + t * (T(0.0360768) + t * T(0.0045813)))))); + const T i1 = x * (T(0.5) + t * (T(0.87890594) + t * (T(0.51498869) + t * (T(0.15084934) + + t * (T(0.02658733) + t * (T(0.00301532) + t * T(0.00032411))))))); + log_i0 = log(i0); + i1_over_i0 = i1 / i0; + } else { + const T t = T(3.75) / x; + // sqrt(x) exp(-x) I0(x) and sqrt(x) exp(-x) I1(x) + const T s0 = T(0.39894228) + t * (T(0.01328592) + t * (T(0.00225319) + t * (T(-0.00157565) + + t * (T(0.00916281) + t * (T(-0.02057706) + t * (T(0.02635537) + t * (T(-0.01647633) + + t * T(0.00392377)))))))); + const T s1 = T(0.39894228) + t * (T(-0.03988024) + t * (T(-0.00362018) + t * (T(0.00163801) + + t * (T(-0.01031555) + t * (T(0.02282967) + t * (T(-0.02895312) + t * (T(0.01787654) + + t * T(-0.00420059)))))))); + log_i0 = x + log(s0) - T(0.5) * log(x); + i1_over_i0 = s1 / s0; + } +} + +// The likelihood of one observed amplitude given the model amplitude Fc - the Rice distribution for an +// acentric reflection, its centric counterpart otherwise - with D the fraction of the model that is +// right and var the variance the rest of the structure and the measurement leave (epsilon beta plus the +// observation's own sigma^2). Returns -ln L without the terms that depend on neither Fc nor the +// parameters, and sets d(-ln L)/dFc. +// Following Pannu & Read (1996) Acta Cryst. A52, 659-668 and Murshudov, Vagin & Dodson (1997) Acta Cryst. +// D53, 240-255 +template +REFINE_HD inline T AmplitudeNegLogLikelihood(T fo, T fc, T d, T var, bool centric, T &dfc) { + if (!centric) { + const T x = T(2.0) * d * fo * fc / var; + T log_i0, ratio; + BesselI0I1(x, log_i0, ratio); + dfc = (T(2.0) * d * d * fc - ratio * T(2.0) * d * fo) / var; + return log(var) + (fo * fo + d * d * fc * fc) / var - log_i0; + } + const T x = d * fo * fc / var; + // ln cosh x = x + ln(1 + exp(-2x)) - ln 2 for x >= 0 + const T log_cosh = x + log(T(1.0) + exp(T(-2.0) * x)) - T(0.6931471805599453); + dfc = (d * d * fc - tanh(x) * d * fo) / var; + return T(0.5) * log(var) + (fo * fo + d * d * fc * fc) / (T(2.0) * var) - log_cosh; +} + +// --- geometry restraints: E = ((value - ideal) / sigma)^2 and dE/dx for each atom --- + +template +struct V3 { + T x, y, z; +}; + +template REFINE_HD inline V3 operator-(V3 a, V3 b) { return {a.x - b.x, a.y - b.y, a.z - b.z}; } +template REFINE_HD inline V3 operator+(V3 a, V3 b) { return {a.x + b.x, a.y + b.y, a.z + b.z}; } +template REFINE_HD inline V3 operator*(T s, V3 a) { return {s * a.x, s * a.y, s * a.z}; } +template REFINE_HD inline T Dot(V3 a, V3 b) { return a.x * b.x + a.y * b.y + a.z * b.z; } +template REFINE_HD inline V3 Cross(V3 a, V3 b) { + return {a.y * b.z - a.z * b.y, a.z * b.x - a.x * b.z, a.x * b.y - a.y * b.x}; +} +template REFINE_HD inline T Norm(V3 a) { return sqrt(Dot(a, a)); } + +// A bond length. +template +REFINE_HD inline T BondTerm(V3 a, V3 b, T ideal, T sigma, V3 g[2]) { + const V3 d = a - b; + const T len = Norm(d); + const T r = (len - ideal) / sigma; + const T f = len > T(0) ? T(2.0) * r / (sigma * len) : T(0); + g[0] = f * d; + g[1] = (-f) * d; + return r * r; +} + +// A bond angle at b, ideal and sigma in degrees. +template +REFINE_HD inline T AngleTerm(V3 a, V3 b, V3 c, T ideal, T sigma, V3 g[3]) { + const V3 u = a - b, v = c - b; + const T lu = Norm(u), lv = Norm(v); + const V3 cr = Cross(u, v); + const T theta = atan2(Norm(cr), Dot(u, v)); + const T s = T(DEG); + const T r = (theta - ideal * s) / (sigma * s); + // dtheta/du = (cos(theta) u/|u| - v/|v|) / (|u| sin(theta)), and the same with u and v swapped + const T sin_t = fmax(sin(theta), T(1e-6)), cos_t = cos(theta); + const T f = T(2.0) * r / (sigma * s); + const V3 du = (T(1.0) / (lu * sin_t)) * ((cos_t / lu) * u - (T(1.0) / lv) * v); + const V3 dv = (T(1.0) / (lv * sin_t)) * ((cos_t / lv) * v - (T(1.0) / lu) * u); + g[0] = f * du; + g[2] = f * dv; + g[1] = (-f) * (du + dv); + return r * r; +} + +// The dihedral angle p0-p1-p2-p3 in radians, and its derivatives with respect to the four positions. +// Following Blondel & Karplus (1996) J. Comput. Chem. 17, 1132-1141 +template +REFINE_HD inline T Dihedral(V3 p0, V3 p1, V3 p2, V3 p3, V3 d[4]) { + const V3 b1 = p1 - p0, b2 = p2 - p1, b3 = p3 - p2; + const V3 m = Cross(b1, b2), n = Cross(b2, b3); + const T lb2 = Norm(b2); + const T mm = fmax(Dot(m, m), T(1e-12)), nn = fmax(Dot(n, n), T(1e-12)); + const T phi = atan2(lb2 * Dot(b1, n), Dot(m, n)); + d[0] = (-lb2 / mm) * m; + d[3] = (lb2 / nn) * n; + const T bb = lb2 * lb2; + const T p = Dot(b1, b2) / bb, q = Dot(b3, b2) / bb; + d[1] = (-(T(1.0) + p)) * d[0] + q * d[3]; + d[2] = (-T(1.0)) * (d[0] + d[1] + d[3]); + return phi; +} + +// A torsion restrained to ideal (degrees) modulo 360/period; period 0 is read as 1. +template +REFINE_HD inline T TorsionTerm(V3 p0, V3 p1, V3 p2, V3 p3, T ideal, T sigma, int period, V3 g[4]) { + V3 d[4]; + const T phi = Dihedral(p0, p1, p2, p3, d) / T(DEG); + const T step = T(360.0) / T(period > 0 ? period : 1); + T delta = phi - ideal; + delta -= step * floor(delta / step + T(0.5)); + const T r = delta / sigma; + const T f = T(2.0) * r / (sigma * T(DEG)); + for (int i = 0; i < 4; i++) + g[i] = f * d[i]; + return r * r; +} + +// A chiral volume (c the centre): (a1 - c) . ((a2 - c) x (a3 - c)). +template +REFINE_HD inline T ChiralTerm(V3 c, V3 a1, V3 a2, V3 a3, T ideal, T sigma, V3 g[4]) { + const V3 x1 = a1 - c, x2 = a2 - c, x3 = a3 - c; + const T vol = Dot(x1, Cross(x2, x3)); + const T r = (vol - ideal) / sigma; + const T f = T(2.0) * r / sigma; + g[1] = f * Cross(x2, x3); + g[2] = f * Cross(x3, x1); + g[3] = f * Cross(x1, x2); + g[0] = (-T(1.0)) * (g[1] + g[2] + g[3]); + return r * r; +} + +// A repulsion below the contact distance d0 (none above it). +template +REFINE_HD inline T RepulsionTerm(V3 a, V3 b, T d0, T sigma, V3 g[2]) { + const V3 d = a - b; + const T len = Norm(d); + if (len >= d0 || len <= T(0)) { + g[0] = g[1] = V3{0, 0, 0}; + return T(0); + } + const T r = (d0 - len) / sigma; + const T f = T(-2.0) * r / (sigma * len); + g[0] = f * d; + g[1] = (-f) * d; + return r * r; +} + +// The unit eigenvector of the smallest eigenvalue of a symmetric 3x3 matrix (a00 a11 a22 a01 a02 a12), by +// cyclic Jacobi rotations. +template +REFINE_HD inline V3 SmallestEigenvector(const T m_in[6]) { + T a[3][3] = {{m_in[0], m_in[3], m_in[4]}, {m_in[3], m_in[1], m_in[5]}, {m_in[4], m_in[5], m_in[2]}}; + T v[3][3] = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; + for (int sweep = 0; sweep < 12; sweep++) + for (int p = 0; p < 2; p++) + for (int q = p + 1; q < 3; q++) { + if (fabs(a[p][q]) < T(1e-30)) + continue; + const T theta = (a[q][q] - a[p][p]) / (T(2.0) * a[p][q]); + const T t = (theta >= 0 ? T(1.0) : T(-1.0)) / (fabs(theta) + sqrt(theta * theta + T(1.0))); + const T c = T(1.0) / sqrt(t * t + T(1.0)), s = t * c; + for (int k = 0; k < 3; k++) { + const T akp = a[k][p], akq = a[k][q]; + a[k][p] = c * akp - s * akq; + a[k][q] = s * akp + c * akq; + } + for (int k = 0; k < 3; k++) { + const T apk = a[p][k], aqk = a[q][k]; + a[p][k] = c * apk - s * aqk; + a[q][k] = s * apk + c * aqk; + } + for (int k = 0; k < 3; k++) { + const T vkp = v[k][p], vkq = v[k][q]; + v[k][p] = c * vkp - s * vkq; + v[k][q] = s * vkp + c * vkq; + } + } + int i = 0; + if (a[1][1] < a[i][i]) + i = 1; + if (a[2][2] < a[i][i]) + i = 2; + return {v[0][i], v[1][i], v[2][i]}; +} + +// A plane: the distances of n atoms from their least-squares plane. The plane is optimal, so the +// derivative of each atom's distance carries no term from the plane moving: dE/dx_i = 2 (n.(x_i - c)) n / sigma^2. +template +REFINE_HD inline T PlaneTerm(const V3 *x, int n, T sigma, V3 *g) { + V3 c{0, 0, 0}; + for (int i = 0; i < n; i++) + c = c + x[i]; + c = (T(1.0) / T(n)) * c; + T m[6] = {0, 0, 0, 0, 0, 0}; + for (int i = 0; i < n; i++) { + const V3 d = x[i] - c; + m[0] += d.x * d.x; + m[1] += d.y * d.y; + m[2] += d.z * d.z; + m[3] += d.x * d.y; + m[4] += d.x * d.z; + m[5] += d.y * d.z; + } + const V3 nv = SmallestEigenvector(m); + T e = 0; + for (int i = 0; i < n; i++) { + const T r = Dot(nv, x[i] - c) / sigma; + e += r * r; + g[i] = (T(2.0) * r / sigma) * nv; + } + return e; +} + +} // namespace refine_math diff --git a/image_analysis/structure_refinement/RefinementRestraints.cpp b/image_analysis/structure_refinement/RefinementRestraints.cpp new file mode 100644 index 000000000..3b79485ef --- /dev/null +++ b/image_analysis/structure_refinement/RefinementRestraints.cpp @@ -0,0 +1,568 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RefinementRestraints.h" + +#include +#include +#include +#include + +#include "gemmi/neighbor.hpp" +#include "gemmi/polyheur.hpp" // setup_entities +#include "gemmi/riding_h.hpp" // place_hydrogens_on_all_atoms +#include "gemmi/topo.hpp" + +#include "MonomerLibrary.h" +#include "RefinementMath.h" + +using refine_math::V3; + +namespace { + +constexpr float CHIRAL_SIGMA = 0.2f; // A^3 +constexpr float REPULSION_SIGMA = 0.2f; // A +constexpr float HBOND_CONTACT = 2.6f; // A +constexpr float METAL_CONTACT = 1.9f; // A, to N, O or S +// B similarity: main chain and the rest, for bonded pairs and pairs bonded to a common atom. +constexpr float B_SIGMA_MAIN_BOND = 1.5f, B_SIGMA_MAIN_ANGLE = 2.0f; +constexpr float B_SIGMA_SIDE_BOND = 3.0f, B_SIGMA_SIDE_ANGLE = 4.5f; + +bool IsMainChain(const gemmi::Atom &a) { + static const std::set names = {"N", "CA", "C", "O", "OXT", "P", "OP1", "OP2", "O5'", "C5'", + "C4'", "C3'", "O3'"}; + return names.count(a.name) > 0; +} + +bool IsMetal(const gemmi::Element &el) { + return el.is_metal(); +} + +// The radius van der Waals contacts are made of, without hydrogens: the dictionary's for the atom's +// energy type, or an element's typical value where the residue is not described. +float VdwRadius(const gemmi::MonLib &monlib, const std::string &resname, const gemmi::Atom &a) { + auto cc = monlib.monomers.find(resname); + if (cc != monlib.monomers.end()) { + auto it = cc->second.find_atom(a.name); + if (it != cc->second.atoms.end()) { + auto e = monlib.ener_lib.atoms.find(it->chem_type); + if (e != monlib.ener_lib.atoms.end() && std::isfinite(e->second.vdw_radius)) + return static_cast(e->second.vdw_radius); + } + } + switch (a.element.elem) { + case gemmi::El::C: return 1.70f; + case gemmi::El::N: return 1.55f; + case gemmi::El::O: return 1.52f; + case gemmi::El::S: return 1.80f; + case gemmi::El::P: return 1.80f; + default: return 1.70f; + } +} + +bool CanHydrogenBond(const gemmi::MonLib &monlib, const std::string &resname, const gemmi::Atom &a) { + if (a.element != gemmi::El::N && a.element != gemmi::El::O) + return false; + auto cc = monlib.monomers.find(resname); + if (cc != monlib.monomers.end()) { + auto it = cc->second.find_atom(a.name); + if (it != cc->second.atoms.end()) { + auto e = monlib.ener_lib.atoms.find(it->chem_type); + if (e != monlib.ener_lib.atoms.end()) + return e->second.hb_type == 'D' || e->second.hb_type == 'A' || e->second.hb_type == 'B' || + e->second.hb_type == 'H'; + } + } + return true; // N or O of an undescribed residue +} + +V3 At(const std::vector> &xyzb, int i) { + return {xyzb[i][0], xyzb[i][1], xyzb[i][2]}; +} + +V3 Image(const RestraintRecord &r, V3 p) { + return {r.rot[0] * p.x + r.rot[1] * p.y + r.rot[2] * p.z + r.tran[0], + r.rot[3] * p.x + r.rot[4] * p.y + r.rot[5] * p.z + r.tran[1], + r.rot[6] * p.x + r.rot[7] * p.y + r.rot[8] * p.z + r.tran[2]}; +} + +// The gradient at an image back on the atom it is an image of: rot^T g. +V3 FromImage(const RestraintRecord &r, V3 g) { + return {r.rot[0] * g.x + r.rot[3] * g.y + r.rot[6] * g.z, + r.rot[1] * g.x + r.rot[4] * g.y + r.rot[7] * g.z, + r.rot[2] * g.x + r.rot[5] * g.y + r.rot[8] * g.z}; +} + +} // namespace + +void RestraintSet::Add(RestraintRecord r, int n_atoms_of_r) { + r.slot = slots; + slots += n_atoms_of_r; + records.push_back(r); +} + +void RestraintSet::Append(const RestraintSet &other) { + const int plane_offset = static_cast(plane_atoms.size()); + for (RestraintRecord r : other.records) { + r.slot += slots; + if (r.kind == static_cast(RestraintKind::Plane)) + r.atom[0] += plane_offset; + records.push_back(r); + } + plane_atoms.insert(plane_atoms.end(), other.plane_atoms.begin(), other.plane_atoms.end()); + slots += other.slots; +} + +void RestraintSet::Finalize(size_t n_atoms) { + slot_atom.assign(slots, -1); + for (const RestraintRecord &r : records) { + if (r.kind == static_cast(RestraintKind::Plane)) { + for (int k = 0; k < r.atom[1]; k++) + slot_atom[r.slot + k] = plane_atoms[r.atom[0] + k]; + } else { + const int n = r.kind == static_cast(RestraintKind::Bond) || + r.kind == static_cast(RestraintKind::Repulsion) || + r.kind == static_cast(RestraintKind::BSimilarity) ? 2 + : r.kind == static_cast(RestraintKind::Angle) ? 3 : 4; + for (int k = 0; k < n; k++) + slot_atom[r.slot + k] = r.atom[k]; + } + } + slot_start.assign(n_atoms + 1, 0); + for (int a : slot_atom) + if (a >= 0) + slot_start[a + 1]++; + for (size_t a = 0; a < n_atoms; a++) + slot_start[a + 1] += slot_start[a]; + slot_index.assign(slot_start[n_atoms], 0); + std::vector fill(slot_start.begin(), slot_start.end() - 1); + for (int s = 0; s < slots; s++) + if (slot_atom[s] >= 0) + slot_index[fill[slot_atom[s]]++] = s; +} + +double RestraintValue(const RestraintSet &set, const RestraintRecord &r, const std::vector> &xyzb) { + V3 g[4]; + switch (static_cast(r.kind)) { + case RestraintKind::Bond: + return refine_math::Norm(At(xyzb, r.atom[0]) - At(xyzb, r.atom[1])); + case RestraintKind::Angle: { + const V3 u = At(xyzb, r.atom[0]) - At(xyzb, r.atom[1]), v = At(xyzb, r.atom[2]) - At(xyzb, r.atom[1]); + return std::atan2(refine_math::Norm(refine_math::Cross(u, v)), refine_math::Dot(u, v)) / refine_math::DEG; + } + case RestraintKind::Torsion: + return refine_math::Dihedral(At(xyzb, r.atom[0]), At(xyzb, r.atom[1]), At(xyzb, r.atom[2]), + At(xyzb, r.atom[3]), g) / refine_math::DEG; + case RestraintKind::Chiral: { + const V3 c = At(xyzb, r.atom[0]); + return refine_math::Dot(At(xyzb, r.atom[1]) - c, + refine_math::Cross(At(xyzb, r.atom[2]) - c, At(xyzb, r.atom[3]) - c)); + } + case RestraintKind::Repulsion: + return refine_math::Norm(At(xyzb, r.atom[0]) - Image(r, At(xyzb, r.atom[1]))); + case RestraintKind::BSimilarity: + return xyzb[r.atom[0]][3] - xyzb[r.atom[1]][3]; + case RestraintKind::Plane: + break; + } + (void) set; + return NAN; +} + +double EvaluateRestraints(const RestraintSet &set, const std::vector> &xyzb, + std::vector> *grad) { + double sum = 0; + std::vector> px, pg; + for (const RestraintRecord &r : set.records) { + V3 g[4] = {}; + int n = 0; + double e = 0; + const double ideal = r.ideal, sigma = r.sigma; + switch (static_cast(r.kind)) { + case RestraintKind::Bond: + e = refine_math::BondTerm(At(xyzb, r.atom[0]), At(xyzb, r.atom[1]), ideal, sigma, g); + n = 2; + break; + case RestraintKind::Angle: + e = refine_math::AngleTerm(At(xyzb, r.atom[0]), At(xyzb, r.atom[1]), At(xyzb, r.atom[2]), ideal, sigma, g); + n = 3; + break; + case RestraintKind::Torsion: + e = refine_math::TorsionTerm(At(xyzb, r.atom[0]), At(xyzb, r.atom[1]), At(xyzb, r.atom[2]), + At(xyzb, r.atom[3]), ideal, sigma, r.period, g); + n = 4; + break; + case RestraintKind::Chiral: + e = refine_math::ChiralTerm(At(xyzb, r.atom[0]), At(xyzb, r.atom[1]), At(xyzb, r.atom[2]), + At(xyzb, r.atom[3]), ideal, sigma, g); + n = 4; + break; + case RestraintKind::Repulsion: + e = refine_math::RepulsionTerm(At(xyzb, r.atom[0]), Image(r, At(xyzb, r.atom[1])), ideal, sigma, g); + g[1] = FromImage(r, g[1]); + n = 2; + break; + case RestraintKind::Plane: { + const int m = r.atom[1]; + px.resize(m); + pg.resize(m); + for (int k = 0; k < m; k++) + px[k] = At(xyzb, set.plane_atoms[r.atom[0] + k]); + e = refine_math::PlaneTerm(px.data(), m, sigma, pg.data()); + if (grad != nullptr) + for (int k = 0; k < m; k++) { + std::array &d = (*grad)[set.plane_atoms[r.atom[0] + k]]; + d[0] += pg[k].x; + d[1] += pg[k].y; + d[2] += pg[k].z; + } + break; + } + case RestraintKind::BSimilarity: { + const double rr = (xyzb[r.atom[0]][3] - xyzb[r.atom[1]][3]) / sigma; + e = rr * rr; + if (grad != nullptr) { + (*grad)[r.atom[0]][3] += 2 * rr / sigma; + (*grad)[r.atom[1]][3] -= 2 * rr / sigma; + } + break; + } + } + sum += e; + if (grad != nullptr) + for (int k = 0; k < n; k++) { + std::array &d = (*grad)[r.atom[k]]; + d[0] += g[k].x; + d[1] += g[k].y; + d[2] += g[k].z; + } + } + return sum; +} + +RefinementTopology BuildRefinementTopology(gemmi::Structure &st, bool hydrogens) { + RefinementTopology out; + gemmi::Model &model = st.models.at(0); + out.monlib = std::make_shared(EmbeddedMonomerLibrary()); + gemmi::MonLib &monlib = *out.monlib; + gemmi::setup_entities(st); + gemmi::Logger quiet; // missing atoms and unknown residues are what the fixed residues report + quiet.threshold = 0; + out.topo = gemmi::prepare_topology(st, monlib, 0, + hydrogens ? gemmi::HydrogenChange::ReAddButWater : gemmi::HydrogenChange::NoChange, + /*reorder=*/false, quiet, /*ignore_unknown_links=*/true, /*use_cispeps=*/true); + gemmi::Topo *topo = out.topo.get(); + + // the atoms as they are now, hydrogens added + std::unordered_map index; + std::vector residue_of; + for (const gemmi::Chain &ch : model.chains) + for (const gemmi::Residue &r : ch.residues) + for (const gemmi::Atom &a : r.atoms) { + index[&a] = static_cast(residue_of.size()); + residue_of.push_back(&r); + } + const size_t n = residue_of.size(); + out.refinable.assign(n, 0); + out.vdw_radius.assign(n, 1.7f); + out.hbond.assign(n, 0); + out.metal.assign(n, 0); + out.altloc.assign(n, 0); + out.element.assign(n, gemmi::El::X); + out.rider_parent.assign(n, -1); + for (const gemmi::Topo::Bond &b : topo->bonds) + for (int k = 0; k < 2; k++) + if (b.atoms[k]->is_hydrogen() && !b.atoms[1 - k]->is_hydrogen()) + out.rider_parent[index.at(b.atoms[k])] = index.at(b.atoms[1 - k]); + // A hydrogen gemmi could not place, or with no parent, scatters nothing. + for (gemmi::Chain &ch : model.chains) + for (gemmi::Residue &r : ch.residues) + for (gemmi::Atom &a : r.atoms) + if (a.is_hydrogen() && (out.rider_parent[index.at(&a)] < 0 || !std::isfinite(a.pos.x))) { + a.occ = 0; + out.rider_parent[index.at(&a)] = -1; + if (!std::isfinite(a.pos.x)) + a.pos = r.atoms.front().pos; + } + + // A residue is refined where the dictionary describes it and every one of its atoms. + std::set fixed_names; + for (const gemmi::Topo::ChainInfo &ci : topo->chain_infos) + for (const gemmi::Topo::ResInfo &ri : ci.res_infos) { + const gemmi::Residue &res = *ri.res; + bool known = ri.orig_chemcomp != nullptr && InEmbeddedMonomerLibrary(res.name); + for (const gemmi::Atom &a : res.atoms) + known = known && ri.get_final_chemcomp(a.altloc).has_atom(a.name); + if (known) + out.restrained_residues++; + else { + out.fixed_residues++; + fixed_names.insert(res.name); + } + for (const gemmi::Atom &a : res.atoms) { + const auto it = index.find(&a); + if (it == index.end()) + continue; + const int i = it->second; + out.refinable[i] = known && a.occ > 0 && !a.is_hydrogen(); + out.vdw_radius[i] = VdwRadius(monlib, res.name, a); + out.hbond[i] = res.is_water() || CanHydrogenBond(monlib, res.name, a); + out.metal[i] = res.atoms.size() == 1 && IsMetal(a.element); + out.altloc[i] = a.altloc; + out.element[i] = a.element.elem; + } + } + out.fixed_names.assign(fixed_names.begin(), fixed_names.end()); + + auto idx = [&](const gemmi::Atom *a) { return index.at(a); }; + auto has_h = [](std::initializer_list atoms) { + for (const gemmi::Atom *a : atoms) + if (a->is_hydrogen()) + return true; + return false; + }; + auto any_refinable = [&](std::initializer_list atoms) { + for (int a : atoms) + if (out.refinable[a]) + return true; + return false; + }; + std::vector> excluded(n); + std::vector> bonded(n); + for (size_t i = 0; i < n; i++) + excluded[i].insert(static_cast(i)); + + for (const gemmi::Topo::Bond &b : topo->bonds) { + if (b.asu == gemmi::Asu::Different || has_h({b.atoms[0], b.atoms[1]})) + continue; + const int i = idx(b.atoms[0]), j = idx(b.atoms[1]); + excluded[i].insert(j); + excluded[j].insert(i); + bonded[i].push_back(j); + bonded[j].push_back(i); + if (!any_refinable({i, j}) || !(b.restr->esd > 0)) + continue; + RestraintRecord r; + r.kind = static_cast(RestraintKind::Bond); + r.atom[0] = i; + r.atom[1] = j; + r.ideal = static_cast(b.restr->value); + r.sigma = static_cast(b.restr->esd); + out.geometry.Add(r, 2); + out.bonds++; + RestraintRecord rb; + rb.kind = static_cast(RestraintKind::BSimilarity); + rb.atom[0] = i; + rb.atom[1] = j; + const bool main = IsMainChain(*b.atoms[0]) && IsMainChain(*b.atoms[1]); + rb.sigma = main ? B_SIGMA_MAIN_BOND : B_SIGMA_SIDE_BOND; + out.adp.Add(rb, 2); + } + for (const gemmi::Topo::Angle &an : topo->angles) { + if (has_h({an.atoms[0], an.atoms[1], an.atoms[2]})) + continue; + const int i = idx(an.atoms[0]), j = idx(an.atoms[1]), k = idx(an.atoms[2]); + excluded[i].insert(k); + excluded[k].insert(i); + if (!any_refinable({i, j, k}) || !(an.restr->esd > 0)) + continue; + RestraintRecord r; + r.kind = static_cast(RestraintKind::Angle); + r.atom[0] = i; + r.atom[1] = j; + r.atom[2] = k; + r.ideal = static_cast(an.restr->value); + r.sigma = static_cast(an.restr->esd); + out.geometry.Add(r, 3); + out.angles++; + RestraintRecord rb; + rb.kind = static_cast(RestraintKind::BSimilarity); + rb.atom[0] = i; + rb.atom[1] = k; + const bool main = IsMainChain(*an.atoms[0]) && IsMainChain(*an.atoms[2]); + rb.sigma = main ? B_SIGMA_MAIN_ANGLE : B_SIGMA_SIDE_ANGLE; + out.adp.Add(rb, 2); + } + for (const gemmi::Topo::Torsion &t : topo->torsions) { + const std::string &label = t.restr->label; + if (has_h({t.atoms[0], t.atoms[1], t.atoms[2], t.atoms[3]})) + continue; + if (!(t.restr->esd > 0) || label.rfind("phi", 0) == 0 || label.rfind("psi", 0) == 0 || + label.rfind("C2e", 0) == 0 || label.rfind("C3e", 0) == 0) + continue; + const int a = idx(t.atoms[0]), b = idx(t.atoms[1]), c = idx(t.atoms[2]), d = idx(t.atoms[3]); + if (!any_refinable({a, b, c, d})) + continue; + RestraintRecord r; + r.kind = static_cast(RestraintKind::Torsion); + r.atom[0] = a; + r.atom[1] = b; + r.atom[2] = c; + r.atom[3] = d; + r.ideal = static_cast(t.restr->value); + r.sigma = static_cast(t.restr->esd); + r.period = t.restr->period; + out.geometry.Add(r, 4); + out.torsions++; + } + for (const gemmi::Topo::Chirality &ch : topo->chirs) { + if (ch.restr->sign == gemmi::ChiralityType::Both || has_h({ch.atoms[0], ch.atoms[1], ch.atoms[2], ch.atoms[3]})) + continue; + const int c = idx(ch.atoms[0]), a1 = idx(ch.atoms[1]), a2 = idx(ch.atoms[2]), a3 = idx(ch.atoms[3]); + if (!any_refinable({c, a1, a2, a3})) + continue; + const double volume = topo->ideal_chiral_abs_volume(ch); + RestraintRecord r; + r.kind = static_cast(RestraintKind::Chiral); + r.atom[0] = c; + r.atom[1] = a1; + r.atom[2] = a2; + r.atom[3] = a3; + r.ideal = static_cast(ch.restr->sign == gemmi::ChiralityType::Negative ? -volume : volume); + r.sigma = CHIRAL_SIGMA; + out.geometry.Add(r, 4); + out.chirals++; + } + for (const gemmi::Topo::Plane &p_all : topo->planes) { + gemmi::Topo::Plane p = p_all; + std::erase_if(p.atoms, [](const gemmi::Atom *a) { return a->is_hydrogen(); }); + if (p.atoms.size() < 4 || !(p.restr->esd > 0)) + continue; + bool any = false; + for (const gemmi::Atom *a : p.atoms) + any = any || out.refinable[idx(a)]; + if (!any) + continue; + RestraintRecord r; + r.kind = static_cast(RestraintKind::Plane); + r.atom[0] = static_cast(out.geometry.plane_atoms.size()); + r.atom[1] = static_cast(p.atoms.size()); + r.sigma = static_cast(p.restr->esd); + for (const gemmi::Atom *a : p.atoms) + out.geometry.plane_atoms.push_back(idx(a)); + out.geometry.Add(r, r.atom[1]); + out.planes++; + } + // and those three bonds away, whose distance the torsions and planes govern + std::vector> within3 = excluded; + for (size_t i = 0; i < n; i++) + for (int j : excluded[i]) + for (int k : bonded[j]) + within3[i].insert(k); + out.excluded.resize(n); + for (size_t i = 0; i < n; i++) + out.excluded[i].assign(within3[i].begin(), within3[i].end()); + out.geometry.Finalize(n); + out.adp.Finalize(n); + return out; +} + +RestraintSet BuildRepulsions(const RefinementTopology &topo, const gemmi::Model &model, const gemmi::UnitCell &cell_in, + const gemmi::SpaceGroup &sg, double margin) { + RestraintSet out; + gemmi::UnitCell cell = cell_in; + cell.set_cell_images_from_spacegroup(&sg); + gemmi::Model copy = model; + float max_radius = 0; + for (float r : topo.vdw_radius) + max_radius = std::max(max_radius, r); + const double reach = 2 * max_radius + margin; + gemmi::NeighborSearch ns(copy, cell, std::max(reach, 5.0)); + ns.populate(false); + + std::vector> first(copy.chains.size()); + std::vector pos; + for (size_t c = 0; c < copy.chains.size(); c++) + for (const gemmi::Residue &r : copy.chains[c].residues) { + first[c].push_back(static_cast(pos.size())); + for (const gemmi::Atom &a : r.atoms) + pos.push_back(a.pos); + } + + for (size_t i = 0; i < pos.size(); i++) { + const gemmi::Fractional fi = cell.fractionalize(pos[i]); + ns.for_each(pos[i], '\0', reach, [&](gemmi::NeighborSearch::Mark &m, double) { + const int j = first[m.chain_idx][m.residue_idx] + m.atom_idx; + if (topo.rider_parent[i] >= 0 || topo.rider_parent[j] >= 0 || topo.element[i] == gemmi::El::H || + topo.element[j] == gemmi::El::H) + return; + if (!topo.refinable[i] && !topo.refinable[j]) + return; + if (m.image_idx == 0 && (static_cast(i) >= j || + std::binary_search(topo.excluded[i].begin(), topo.excluded[i].end(), j))) + return; + if (m.image_idx != 0 && static_cast(i) > j) + return; + if (topo.altloc[i] && topo.altloc[j] && topo.altloc[i] != topo.altloc[j]) + return; + // The image of j nearest to i, as a Cartesian x -> R x + t. + const gemmi::FTransform ft = ns.get_image_transformation(m.image_idx); + const gemmi::Fractional fj = ft.apply(cell.fractionalize(pos[j])); + const gemmi::Vec3 shift(std::round(fi.x - fj.x), std::round(fi.y - fj.y), std::round(fi.z - fj.z)); + if (m.image_idx == 0 && (shift.x != 0 || shift.y != 0 || shift.z != 0)) + return; // the same copy's own lattice translate: the identity term covers the contact + const gemmi::Mat33 rot = cell.orth.mat.multiply(ft.mat).multiply(cell.frac.mat); + const gemmi::Vec3 tran = cell.orth.mat.multiply(ft.vec + shift); + const gemmi::Position image(rot.multiply(pos[j]) + tran); + const double d = pos[i].dist(image); + + float d0 = topo.vdw_radius[i] + topo.vdw_radius[j]; + if (topo.metal[i] || topo.metal[j]) { + const gemmi::El other = topo.element[topo.metal[i] ? j : static_cast(i)]; + if (other == gemmi::El::N || other == gemmi::El::O || other == gemmi::El::S) + d0 = METAL_CONTACT; + } else if (topo.hbond[i] && topo.hbond[j]) + d0 = HBOND_CONTACT; + if (!(d < d0 + margin)) + return; + RestraintRecord r; + r.kind = static_cast(RestraintKind::Repulsion); + r.atom[0] = static_cast(i); + r.atom[1] = j; + r.ideal = d0; + r.sigma = REPULSION_SIGMA; + for (int a = 0; a < 3; a++) { + for (int b = 0; b < 3; b++) + r.rot[3 * a + b] = static_cast(rot[a][b]); + r.tran[a] = static_cast(tran.at(a)); + } + out.Add(r, 2); + }); + } + out.Finalize(pos.size()); + return out; +} + +void PlaceRidingHydrogens(RefinementTopology &topo) { + gemmi::place_hydrogens_on_all_atoms(*topo.topo); +} + +GeometryStatistics MeasureGeometry(const RestraintSet &geometry, const RestraintSet &repulsions, + const std::vector> &xyzb) { + GeometryStatistics s; + double sb = 0, sa = 0, sc = 0; + int nc = 0; + for (const RestraintRecord &r : geometry.records) { + const RestraintKind kind = static_cast(r.kind); + if (kind == RestraintKind::Bond) { + const double d = RestraintValue(geometry, r, xyzb) - r.ideal; + sb += d * d; + s.bonds++; + } else if (kind == RestraintKind::Angle) { + const double d = RestraintValue(geometry, r, xyzb) - r.ideal; + sa += d * d; + s.angles++; + } else if (kind == RestraintKind::Chiral) { + const double d = RestraintValue(geometry, r, xyzb) - r.ideal; + sc += d * d; + nc++; + } + } + for (const RestraintRecord &r : repulsions.records) + if (RestraintValue(repulsions, r, xyzb) < r.ideal - 0.4) + s.clashes++; + s.rmsd_bonds = s.bonds > 0 ? std::sqrt(sb / s.bonds) : 0; + s.rmsd_angles = s.angles > 0 ? std::sqrt(sa / s.angles) : 0; + s.rmsd_chirals = nc > 0 ? std::sqrt(sc / nc) : 0; + return s; +} diff --git a/image_analysis/structure_refinement/RefinementRestraints.h b/image_analysis/structure_refinement/RefinementRestraints.h new file mode 100644 index 000000000..0fcb13761 --- /dev/null +++ b/image_analysis/structure_refinement/RefinementRestraints.h @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include + +#include + +#include "gemmi/model.hpp" +#include "gemmi/monlib.hpp" +#include "gemmi/topo.hpp" +#include "gemmi/unitcell.hpp" + +#include "RefinementMath.h" // RestraintRecord + +// The geometry side of restrained refinement (Refinement.h): what the dictionary says each refinable atom's +// surroundings should look like, as flat lists of restraints the CPU and the GPU evaluate alike +// (RefinementMath.h). Atoms are numbered in model order, as ModelPositions() lists them. + +// A list of restraints and how their gradients reach the atoms: each restraint writes one gradient slot per +// atom it involves, and atom a sums the slots slot_index[slot_start[a] ... slot_start[a + 1]) in that order - +// a gather, so that a GPU, summing in the same order, needs no atomics and gives the same bits every run. +struct RestraintSet { + std::vector records; + std::vector plane_atoms; + int slots = 0; + std::vector slot_start; // n_atoms + 1 + std::vector slot_index; + + void Add(RestraintRecord r, int n_atoms_of_r); + void Append(const RestraintSet &other); // other's records after these; Finalize() again afterwards + void Finalize(size_t n_atoms); + // Which atom each slot belongs to (Finalize() works it out); -1 for none. + std::vector slot_atom; +}; + +// The value of one restraint's own quantity (a distance, an angle, a volume ...) at `xyzb`, for statistics. +double RestraintValue(const RestraintSet &set, const RestraintRecord &r, const std::vector> &xyzb); + +// The sum of E over the set at `xyzb` (x, y, z, B per atom) and, with `grad`, dE/d(x, y, z, B) per atom (added +// to it). On the CPU, in double. +double EvaluateRestraints(const RestraintSet &set, const std::vector> &xyzb, + std::vector> *grad); + +// What refinement knows of a model's chemistry. +struct RefinementTopology { + RestraintSet geometry; // bonds, angles, torsions, chiral volumes, planes + RestraintSet adp; // B of bonded and angle-related atoms alike + std::vector refinable; // per atom: its residue is described by the dictionary + // Per atom: the atoms the repulsion leaves out - itself and those up to three bonds away (sorted). + std::vector> excluded; + std::vector vdw_radius; // A + std::vector hbond; // donor, acceptor or both (water included) + std::vector metal; // a metal ion + std::vector altloc; + std::vector element; + // Per atom: the heavy atom a hydrogen rides on, -1 for every other atom. + std::vector rider_parent; + // The topology itself and the dictionary it points into, for placing the hydrogens again. + std::shared_ptr monlib; + std::shared_ptr topo; + int restrained_residues = 0; + int fixed_residues = 0; + std::vector fixed_names; // the residue names held fixed, each once + int bonds = 0, angles = 0, torsions = 0, chirals = 0, planes = 0; +}; + +// The topology of the first model of `st` (hydrogens already removed) from the embedded monomer library +// (MonomerLibrary.h), through gemmi's prepare_topology(): links between residues (peptide, cis-peptide, +// nucleic-acid backbone, disulfides, the model's LINK records the library describes) and their +// modifications included. A residue the library does not describe, or with an atom it does not know, is +// held fixed: it stays in the structure factors and the bulk-solvent mask, and it is restrained against. +// Torsions: those with an esd, except the main-chain phi/psi and the sugar puckers given as alternatives. +// With `hydrogens`, the dictionary's hydrogens are added to the residues it describes (waters excepted) and +// placed; they ride on their parent atoms and take part in no restraint. +RefinementTopology BuildRefinementTopology(gemmi::Structure &st, bool hydrogens = false); + +// The riding hydrogens placed again on their parents as they are now (gemmi's place_hydrogens_on_all_atoms). +void PlaceRidingHydrogens(RefinementTopology &topo); + +// The repulsions of the model as it is now: every pair of atoms, symmetry mates included, closer than its +// contact distance plus `margin` and not excluded, where at least one of the two is refinable and the two are +// not alternative conformations of each other. Contact distances: van der Waals radii summed, 2.6 A where +// both can hydrogen-bond, 1.9 A between a metal and N, O or S. +RestraintSet BuildRepulsions(const RefinementTopology &topo, const gemmi::Model &model, const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, double margin); + +// The usual summary of a model's geometry. +struct GeometryStatistics { + double rmsd_bonds = 0, rmsd_angles = 0, rmsd_chirals = 0; + int bonds = 0, angles = 0; + int clashes = 0; // repulsions overlapping by more than 0.4 A +}; +GeometryStatistics MeasureGeometry(const RestraintSet &geometry, const RestraintSet &repulsions, + const std::vector> &xyzb); diff --git a/image_analysis/structure_refinement/RefinementXray.cpp b/image_analysis/structure_refinement/RefinementXray.cpp new file mode 100644 index 000000000..5a3da3f4d --- /dev/null +++ b/image_analysis/structure_refinement/RefinementXray.cpp @@ -0,0 +1,396 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RefinementXray.h" + +#include +#include +#include + +#include + +#include "gemmi/dencalc.hpp" +#include "gemmi/it92.hpp" +#include "gemmi/math.hpp" + +#include "../../common/ParallelFor.h" +#include "ModelFFT.h" +#include "ModelGrid.h" +#include "RefinementMath.h" + +namespace { + +using Table = gemmi::IT92; + +// The free reflections a likelihood bin is fitted on, at least. +constexpr size_t FREE_PER_BIN = 100; +constexpr size_t MAX_BINS = 30; + +// The density calculator the refinement grids atoms with: DensityCalculator's settings for the grid of +// RigidBodyZoneGrid(), and the given blur. +gemmi::DensityCalculator Calculator(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, + double d_min, double blur) { + gemmi::DensityCalculator dc; + dc.d_min = d_min; + dc.rate = 1.5; // RigidBodyRefine.cpp's GRID_RATE, which RigidBodyZoneGrid sizes the grid with + dc.grid.unit_cell = cell; + dc.grid.spacegroup = &sg; + dc.blur = blur; + return dc; +} + +// -ln L summed over rows `idx` at D and beta. +double BinNegLogLikelihood(const RefinementReflections &refl, const std::vector &fc, + const std::vector &idx, double d, double beta) { + double sum = 0, dfc = 0; + for (size_t i : idx) { + const double var = refl.epsilon[i] * beta + double(refl.sigma[i]) * refl.sigma[i]; + sum += refine_math::AmplitudeNegLogLikelihood(refl.fo[i], fc[i], d, var, refl.centric[i], dfc); + } + return sum; +} + +// The minimum of f over [lo, hi] by golden-section search. +template +double GoldenMinimum(F f, double lo, double hi, int iterations) { + const double g = 0.5 * (std::sqrt(5.0) - 1.0); + double a = lo, b = hi; + double c = b - g * (b - a), d = a + g * (b - a); + double fc = f(c), fd = f(d); + for (int i = 0; i < iterations; i++) { + if (fc < fd) { + b = d; + d = c; + fd = fc; + c = b - g * (b - a); + fc = f(c); + } else { + a = c; + c = d; + fc = fd; + d = a + g * (b - a); + fd = f(d); + } + } + return 0.5 * (a + b); +} + +class RefinementEngineCPU : public RefinementEngine { +public: + RefinementEngineCPU(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double d_min, + const RefinementReflections &refl, size_t nthreads) + : cell_(cell), sg_(sg), d_min_(d_min), refl_(refl), nthreads_(nthreads), + grid_(RigidBodyZoneGrid(cell, sg, d_min)), composition_(grid_, d_min, refl.hkl), + orbit_leaders_(OrbitLeaders(grid_, nthreads)) {} + + void SetBlur(double blur) override { blur_ = blur; } + void SetRowModel(const XrayRowModel &rows) override { rows_ = rows; } + bool OnGPU() const override { return false; } + + void Fcalc(const gemmi::Model &model, std::vector> &f) override { + std::vector> fd; + Compose(model, fd); + f.assign(fd.begin(), fd.end()); + } + + void Fmask(const gemmi::Model &model, std::vector> &f) override { + gemmi::Grid mask = grid_; + PutMaskOnGrid(mask, model, orbit_leaders_, nthreads_); + const gemmi::FPhiGrid fm = MapToFPhi(mask); + f.clear(); + for (const gemmi::Miller &h : refl_.hkl) + f.push_back(fm.get_value_by_hkl(h)); + } + + double Evaluate(const gemmi::Model &model, std::vector> *grad) override { + std::vector> f; + Compose(model, f); + const size_t n = f.size(); + // The target and, per reflection, dT/dF of the atoms' structure factor (dT/dRe F + i dT/dIm F). + std::vector> dt_df(n, 0.0); + double sum = 0; + for (size_t m = 0; m < n; m++) { + if (refl_.free[m]) + continue; + const double k = rows_.k_total[m]; + const std::complex fm = k * (f[m] + std::complex(rows_.fmask[m])); + const double fc = std::abs(fm); + double dfc = 0; + sum += refine_math::AmplitudeNegLogLikelihood(refl_.fo[m], fc, rows_.d[m], rows_.var[m], + refl_.centric[m], dfc); + if (fc > 0) + dt_df[m] = k * dfc * fm / fc; + } + if (grad == nullptr) + return sum; + + // The FFT method's map, dT/drho(x) = (V/N) Re sum_m sum_ops conj(dT/dF_m) scale_m exp(2 pi i h.t) + // exp(2 pi i (hR).x), as the inverse real transform of a half-l coefficient grid: a term A at index k + // goes in as A/2 at k, or as conj(A)/2 at -k where k is in the half not stored; on the planes l = 0 and + // l = nw/2, which hold both, as both. + const int nu = grid_.nu, nv = grid_.nv, nw = grid_.nw, nwh = nw / 2 + 1; + const size_t ncomplex = static_cast(nu) * nv * nwh; + std::complex *in = reinterpret_cast *>(fftwf_alloc_complex(ncomplex)); + float *out = fftwf_alloc_real(static_cast(nu) * nv * nw); + std::fill(in, in + ncomplex, std::complex(0, 0)); + const std::vector &terms = composition_.Terms(); + const size_t ops = composition_.Ops(); + auto add = [&](int ku, int kv, int kw, std::complex value) { + in[gemmi::modulo(ku, nu) + static_cast(nu) * (gemmi::modulo(kv, nv) + static_cast(nv) * kw)] += + std::complex(value); + }; + for (size_t m = 0; m < n; m++) { + if (dt_df[m] == 0.0) + continue; + const double scale = composition_.Centring() * std::exp(blur_ * 0.25 * composition_.InvD2()[m]); + const std::complex c = std::conj(dt_df[m]) * scale; + for (size_t o = 0; o < ops; o++) { + const SymmetryComposition::Term &t = terms[m * ops + o]; + const std::complex a = 0.5 * c * t.phase; + const gemmi::Miller &k = t.k; + if (k[2] > 0 && 2 * k[2] != nw) + add(k[0], k[1], k[2], a); + else if (k[2] < 0 && -2 * k[2] != nw) + add(-k[0], -k[1], -k[2], std::conj(a)); + else { + const int l = k[2] < 0 ? -k[2] : k[2]; + add(k[0], k[1], l, a); + add(-k[0], -k[1], l, std::conj(a)); + } + } + } + MapFromFPhiExecute(nu, nv, nw, in, out); + gemmi::Grid map = grid_; + const float norm = static_cast(cell_.volume / static_cast(map.point_count())); + for (size_t i = 0; i < map.data.size(); i++) + map.data[i] = out[i] * norm; + fftwf_free(in); + fftwf_free(out); + AtomGradientsFromMap(map, model, blur_, nthreads_, *grad); + return sum; + } + +private: + void Compose(const gemmi::Model &model, std::vector> &f) const { + gemmi::DensityCalculator dc = Calculator(cell_, sg_, d_min_, blur_); + PutModelDensityOnGrid(dc, model, {}, nthreads_); // one copy: the symmetry is composed below + composition_.Compose(MapToFPhi(dc.grid), blur_, f, nullptr, nthreads_); + } + + gemmi::UnitCell cell_; + const gemmi::SpaceGroup &sg_; + double d_min_; + const RefinementReflections &refl_; + size_t nthreads_; + gemmi::Grid grid_; + SymmetryComposition composition_; + std::vector orbit_leaders_; + double blur_ = 0; + XrayRowModel rows_; +}; + +} // namespace + +RefinementReflections PrepareRefinementReflections(const std::vector &merged, + const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, + double d_min) { + const gemmi::GroupOps gops = sg.operations(); + const gemmi::ReciprocalAsu asu(&sg); + // ASU, last one wins where a reflection is listed twice (both hands of an anomalous merge) + std::map by_hkl; + for (const MergedReflection &r : merged) { + if (!std::isfinite(r.F) || r.F < 0) + continue; + gemmi::Miller h{{r.h, r.k, r.l}}; + if (!asu.is_in(h)) + h = asu.to_asu(h, gops).first; + by_hkl[h] = &r; + } + std::vector hkl; + for (const auto &[h, r] : by_hkl) + hkl.push_back(h); + const SymmetryComposition composition(RigidBodyZoneGrid(cell, sg, d_min), d_min, hkl); + RefinementReflections out; + for (size_t i = 0; i < hkl.size(); i++) { + if (composition.Row()[i] < 0) + continue; + const MergedReflection &r = *by_hkl[hkl[i]]; + out.hkl.push_back(hkl[i]); + out.fo.push_back(r.F); + out.sigma.push_back(std::isfinite(r.sigmaF) ? r.sigmaF : 0.0f); + out.free.push_back(r.rfree_flag); + out.centric.push_back(gops.is_reflection_centric(hkl[i])); + out.epsilon.push_back(static_cast(gops.epsilon_factor(hkl[i]))); + out.inv_d2.push_back(cell.calculate_1_d2(hkl[i])); + } + return out; +} + +void EstimateLikelihoodParameters(const RefinementReflections &refl, const std::vector> &fmodel, + XrayRowModel &rows) { + const size_t n = refl.Size(); + std::vector fc(n); + for (size_t i = 0; i < n; i++) + fc[i] = std::abs(fmodel[i]); + std::vector free; + for (size_t i = 0; i < n; i++) + if (refl.free[i] && fc[i] > 0) + free.push_back(i); + // Too few free reflections to bin: the working set, which says the model is better than it is, but + // still gives the likelihood a scale. + if (free.size() < FREE_PER_BIN) + for (size_t i = 0; i < n; i++) + if (!refl.free[i] && fc[i] > 0) + free.push_back(i); + std::sort(free.begin(), free.end(), [&](size_t a, size_t b) { return refl.inv_d2[a] < refl.inv_d2[b]; }); + const size_t bins = std::clamp(free.size() / FREE_PER_BIN, 1, MAX_BINS); + + std::vector centre(bins), bin_d(bins), bin_beta(bins); + for (size_t b = 0; b < bins; b++) { + const std::vector idx(free.begin() + b * free.size() / bins, free.begin() + (b + 1) * free.size() / bins); + double s2 = 0, sfo = 0, sfc2 = 0, sfofc = 0; + for (size_t i : idx) { + s2 += refl.inv_d2[i]; + sfo += double(refl.fo[i]) * refl.fo[i] / refl.epsilon[i]; + sfc2 += fc[i] * fc[i] / refl.epsilon[i]; + sfofc += refl.fo[i] * fc[i] / refl.epsilon[i]; + } + centre[b] = s2 / static_cast(idx.size()); + double d = sfc2 > 0 ? std::max(sfofc / sfc2, 0.05) : 1.0; + double beta = std::max((sfo - d * d * sfc2) / static_cast(idx.size()), 1e-3 * sfo / idx.size()); + // Alternating one-dimensional minimisations of -ln L over ln D and ln beta. + for (int round = 0; round < 4; round++) { + const double ld = GoldenMinimum([&](double x) { return BinNegLogLikelihood(refl, fc, idx, std::exp(x), beta); }, + std::log(d) - 2.0, std::log(std::min(d * 7.4, 3.0)), 40); + d = std::exp(ld); + const double lb = GoldenMinimum([&](double x) { return BinNegLogLikelihood(refl, fc, idx, d, std::exp(x)); }, + std::log(beta) - 3.0, std::log(beta) + 3.0, 40); + beta = std::exp(lb); + } + bin_d[b] = d; + bin_beta[b] = beta; + } + rows.d.resize(n); + rows.var.resize(n); + for (size_t i = 0; i < n; i++) { + // linear in 1/d^2 between the bins' centres, flat beyond the outermost + const double s = refl.inv_d2[i]; + double d = bin_d[0], beta = bin_beta[0]; + if (s >= centre[bins - 1]) { + d = bin_d[bins - 1]; + beta = bin_beta[bins - 1]; + } else if (s > centre[0]) { + const size_t b = std::upper_bound(centre.begin(), centre.end(), s) - centre.begin(); + const double t = (s - centre[b - 1]) / (centre[b] - centre[b - 1]); + d = bin_d[b - 1] + t * (bin_d[b] - bin_d[b - 1]); + beta = bin_beta[b - 1] + t * (bin_beta[b] - bin_beta[b - 1]); + } + rows.d[i] = static_cast(d); + rows.var[i] = static_cast(refl.epsilon[i] * beta + double(refl.sigma[i]) * refl.sigma[i]); + } +} + +RFactors ComputeRFactors(const RefinementReflections &refl, const std::vector> &fmodel) { + double nw = 0, dw = 0, nf = 0, df = 0; + RFactors r; + for (size_t i = 0; i < refl.Size(); i++) { + const double diff = std::fabs(refl.fo[i] - std::abs(fmodel[i])); + if (refl.free[i]) { + nf += diff; + df += refl.fo[i]; + r.n_free++; + } else { + nw += diff; + dw += refl.fo[i]; + r.n_work++; + } + } + r.r_work = dw > 0 ? nw / dw : 1; + r.r_free = df > 0 ? nf / df : 1; + return r; +} + +double RefinementBlur(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double d_min, double b_floor) { + // set_refmac_compatible_blur(): u_to_b / 1.1 * spacing^2 - b_min, not below 0, the spacing the one asked for + const gemmi::DensityCalculator dc = Calculator(cell, sg, d_min, 0); + const double spacing = dc.requested_grid_spacing(); + return std::max(0.0, gemmi::u_to_b() / 1.1 * spacing * spacing - b_floor); +} + +std::unique_ptr MakeRefinementEngineCPU(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, + double d_min, const RefinementReflections &refl, + size_t nthreads) { + return std::make_unique(cell, sg, d_min, refl, nthreads); +} + +void AtomGradientsFromMap(const gemmi::Grid &map, const gemmi::Model &model, double blur, size_t nthreads, + std::vector> &grad) { + const gemmi::DensityCalculator dc = Calculator(map.unit_cell, *map.spacegroup, 1.0, blur); + std::vector atoms; + for (const gemmi::Chain &ch : model.chains) + for (const gemmi::Residue &r : ch.residues) + for (const gemmi::Atom &a : r.atoms) + atoms.push_back(&a); + grad.assign(atoms.size(), {0, 0, 0, 0}); + const int nu = map.nu, nv = map.nv, nw = map.nw; + // As ModelGrid.cpp walks a density box: the orthogonalization over the grid size in single precision. + const gemmi::UpperTriangularMat33 &om = map.orth_n; + const float m00 = static_cast(om.a11), m01 = static_cast(om.a12), m02 = static_cast(om.a13), + m11 = static_cast(om.a22), m12 = static_cast(om.a23), m22 = static_cast(om.a33); + constexpr double FOUR_PI2 = 4 * refine_math::PI * refine_math::PI; + ParallelChunks(static_cast(atoms.size()), nthreads, [&](int lo, int hi) { + for (int i = lo; i < hi; i++) { + const gemmi::Atom &atom = *atoms[i]; + const float b = static_cast(atom.b_iso + blur); + const auto precal = Table::get(atom.element, atom.charge, atom.serial).precalculate_density_iso(b, 0.0f); + const double radius = dc.estimate_radius(precal, b); + const float max_r2 = static_cast(radius * radius); + const gemmi::Fractional fpos = map.unit_cell.fractionalize(atom.pos); + const double n3[3] = {fpos.x * nu, fpos.y * nv, fpos.z * nw}; + float nctr[3]; + int c[3], d[3]; + for (int k = 0; k < 3; k++) { + nctr[k] = static_cast(n3[k]); + c[k] = gemmi::iround(n3[k]); + } + d[0] = std::min(static_cast(std::ceil(radius / map.spacing[0])), nu - 1); + d[1] = std::min(static_cast(std::ceil(radius / map.spacing[1])), nv - 1); + d[2] = std::min(static_cast(std::ceil(radius / map.spacing[2])), nw - 1); + double gx = 0, gy = 0, gz = 0, gb = 0; + for (int w = c[2] - d[2]; w <= c[2] + d[2]; w++) { + const float fz = nctr[2] - static_cast(w); + const float z = m22 * fz; + const int w_ = gemmi::modulo(w, nw); + for (int v = c[1] - d[1]; v <= c[1] + d[1]; v++) { + const float fy = nctr[1] - static_cast(v); + const float y = m11 * fy + m12 * fz; + const float yz = y * y + z * z; + if (yz > max_r2) + continue; + const float x_yz = m01 * fy + m02 * fz; + const size_t row = static_cast(nu) * (gemmi::modulo(v, nv) + static_cast(nv) * w_); + for (int u = c[0] - d[0]; u <= c[0] + d[0]; u++) { + const float x = m00 * (nctr[0] - static_cast(u)) + x_yz; + const float r2 = yz + x * x; + if (r2 > max_r2) + continue; + const double value = map.data[row + gemmi::modulo(u, nu)]; + double dr2 = 0, db = 0; + for (size_t q = 0; q < std::size(precal.a); q++) { + const double e = precal.a[q] * gemmi::unsafe_expapprox(std::max(precal.b[q] * r2, -88.f)); + dr2 += e * precal.b[q]; + db += e * precal.b[q] * (1.5 + precal.b[q] * r2); + } + gx += value * dr2 * x; + gy += value * dr2 * y; + gz += value * dr2 * z; + gb += value * db; + } + } + } + // rho = occ sum_q a_q exp(b_q r^2): d rho / d(centre) = occ 2 (sum a_q b_q e_q) (centre - point), and + // with b_q = -4 pi^2 / (B_q + B + blur), d rho / dB = occ sum a_q e_q b_q (1.5 + b_q r^2) / (4 pi^2). + grad[i] = {2.0 * atom.occ * gx, 2.0 * atom.occ * gy, 2.0 * atom.occ * gz, atom.occ * gb / FOUR_PI2}; + } + }); +} diff --git a/image_analysis/structure_refinement/RefinementXray.h b/image_analysis/structure_refinement/RefinementXray.h new file mode 100644 index 000000000..9bbe976cd --- /dev/null +++ b/image_analysis/structure_refinement/RefinementXray.h @@ -0,0 +1,117 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include +#include +#include + +#include "gemmi/grid.hpp" +#include "gemmi/model.hpp" +#include "gemmi/symmetry.hpp" +#include "gemmi/unitcell.hpp" + +#include "../../common/Reflection.h" // MergedReflection +#include "RefinementRestraints.h" // RestraintSet +#include "RigidBodyRefine.h" // SymmetryComposition + +// The X-ray side of restrained refinement (Refinement.h): the observed amplitudes, the model's structure +// factors and the maximum-likelihood target that compares them, with its gradient with respect to every +// atom's position and B. + +// The reflections a refinement fits and scores: the observed amplitudes, in the group's reciprocal ASU, that +// the refinement grid composes (SymmetryComposition) - every observed one in practice. +struct RefinementReflections { + std::vector hkl; + std::vector fo, sigma; + std::vector free, centric; + std::vector epsilon; + std::vector inv_d2; + size_t Size() const { return hkl.size(); } +}; + +// The French-Wilson amplitudes of `merged` (NaN dropped) into the ASU of `sg`, those the grid of +// RigidBodyZoneGrid(cell, sg, d_min) composes. +RefinementReflections PrepareRefinementReflections(const std::vector &merged, + const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, + double d_min); + +// What turns the atoms' structure factors F into the model the target compares with the data, per reflection: +// F_model = k_total (F + fmask), +// with k_total the overall scale and anisotropic B and fmask the bulk solvent already scaled by k_sol +// exp(-b_sol s^2/4); and the two parameters of the likelihood, D and the variance. Fixed for one macro-cycle. +struct XrayRowModel { + std::vector k_total; + std::vector> fmask; + std::vector d, var; +}; + +// The ML parameters per reflection from the free reflections: D and beta fitted by maximum likelihood in +// resolution bins of the free set and interpolated between the bins' centres; the variance of a reflection is +// epsilon beta + sigma^2. `fmodel` is k_total (F + fmask), without D. +// Following Lunin & Skovoroda (1995) Acta Cryst. A51, 880-887, and Afonine et al. (2012) Acta Cryst. D68, 352-367 +void EstimateLikelihoodParameters(const RefinementReflections &refl, const std::vector> &fmodel, + XrayRowModel &rows); + +// R-work and R-free of k_total (F + fmask) against the observations. +struct RFactors { + double r_work = 1, r_free = 1; + int n_work = 0, n_free = 0; +}; +RFactors ComputeRFactors(const RefinementReflections &refl, const std::vector> &fmodel); + +// What evaluates the targets for a set of atom positions and B: the CPU below, or a GPU (RefinementGPU.h). The +// atoms are the model's, all of them, in model order; the grid and the reflections are fixed when the engine is +// made, the row model each macro-cycle, the blur where SetBlur is called. +class RefinementEngine { +public: + virtual ~RefinementEngine() = default; + // The blur the atoms are gridded with (DensityCalculator's), and the matching unblur of their transform. + // Every atom's B must stay above what the blur was chosen for (RefinementBlur) while it is in use. + virtual void SetBlur(double blur) = 0; + virtual void SetRowModel(const XrayRowModel &rows) = 0; + // F of the atoms at the reflections. + virtual void Fcalc(const gemmi::Model &model, std::vector> &f) = 0; + // The bulk-solvent mask's structure factors at the reflections (unscaled). + virtual void Fmask(const gemmi::Model &model, std::vector> &f) = 0; + // The sum of -ln L over the working reflections and, with `grad`, its derivatives with respect to every + // atom's x, y, z (Cartesian, A) and B (A^2), in model order. + virtual double Evaluate(const gemmi::Model &model, std::vector> *grad) = 0; + virtual bool OnGPU() const = 0; + + // Restraint set `which` (0: the geometry and the repulsions, 1: the B similarity) and its sum of E at xyzb + // (x, y, z, B per atom) with, given `grad`, dE/d(x, y, z, B) per atom. On the CPU unless the engine has its own. + virtual void SetRestraints(int which, const RestraintSet &set) { restraints_[which] = set; } + virtual double EvaluateRestraints(int which, const std::vector> &xyzb, + std::vector> *grad) { + if (grad != nullptr) + grad->assign(xyzb.size(), {0, 0, 0, 0}); + return ::EvaluateRestraints(restraints_[which], xyzb, grad); + } + +private: + RestraintSet restraints_[2]; +}; + +// The blur for a model whose smallest B may go as low as b_floor: DensityCalculator's +// set_refmac_compatible_blur() for that B, on the refinement grid of d_min. +double RefinementBlur(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double d_min, double b_floor); + +// The CPU engine: the density of one copy of the atoms on the grid of RigidBodyZoneGrid(cell, sg, d_min) +// (PutModelDensityOnGrid), its transform and the crystal's symmetry composed in reciprocal space +// (SymmetryComposition). The gradient by the FFT method: the derivative of the target with respect to each +// structure factor, taken back to real space by one inverse transform, is a map; each atom's derivatives are +// that map summed against the derivatives of its own density. +// Following Agarwal (1978) Acta Cryst. A34, 791-809 +std::unique_ptr MakeRefinementEngineCPU(const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, double d_min, + const RefinementReflections &refl, size_t nthreads); + +// The derivative map of the X-ray target on a grid (the FFT method's map), summed against each atom's density +// derivatives: dT/d(x, y, z, B) per atom. `map` is u fastest on the grid of RigidBodyZoneGrid(), the atoms +// gridded with `blur`. Exposed for the tests. +void AtomGradientsFromMap(const gemmi::Grid &map, const gemmi::Model &model, double blur, size_t nthreads, + std::vector> &grad); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cecfe9c5a..36e005beb 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -184,6 +184,7 @@ ADD_EXECUTABLE(jfjoch_test MolecularReplacementTest.cpp ModelMaskGPUTest.cpp ModelDensityGPUTest.cpp + RefinementTest.cpp SearchSpaceGroupTest.cpp SearchSpaceGroupTwinTest.cpp SyntheticMergedReflections.h diff --git a/tests/RefinementTest.cpp b/tests/RefinementTest.cpp new file mode 100644 index 000000000..ace1d7659 --- /dev/null +++ b/tests/RefinementTest.cpp @@ -0,0 +1,452 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include + +#include +#include +#include +#include + +#include + +#include "../common/CUDAWrapper.h" +#include "../common/Logger.h" +#include "../image_analysis/structure_refinement/MonomerLibrary.h" +#include "../image_analysis/structure_refinement/Refinement.h" +#include "../image_analysis/structure_refinement/RefinementMath.h" +#include "../image_analysis/structure_refinement/RefinementRestraints.h" +#include "../image_analysis/structure_refinement/RefinementXray.h" +#ifdef JFJOCH_USE_CUDA +#include "../image_analysis/structure_refinement/RefinementGPU.h" +#endif + +namespace { + +// Copies of residue `code` at the embedded dictionary's ideal coordinates (hydrogens left out), each turned and +// moved to a place of its own in the cell. +gemmi::Structure residue_crystal(const std::vector &codes, const gemmi::UnitCell &cell, const char *group, + unsigned seed) { + std::mt19937 rng(seed); + std::uniform_real_distribution frac(0.0, 1.0), angle(-3.1, 3.1); + gemmi::Structure st; + st.cell = cell; + st.spacegroup_hm = group; + st.setup_cell_images(); + gemmi::Model model(1); + gemmi::Chain chain("A"); + int seq = 1; + for (const std::string &code : codes) { + const gemmi::ChemComp &cc = EmbeddedMonomerLibrary().monomers.at(code); + gemmi::Residue res; + res.name = code; + res.seqid = gemmi::SeqId(seq++, ' '); + res.het_flag = 'H'; + res.entity_type = gemmi::EntityType::NonPolymer; + const gemmi::Position centre = cell.orthogonalize(gemmi::Fractional(frac(rng), frac(rng), frac(rng))); + const double ax = angle(rng), ay = angle(rng), az = angle(rng); + const gemmi::Mat33 rot = gemmi::Mat33(1, 0, 0, 0, std::cos(ax), -std::sin(ax), 0, std::sin(ax), std::cos(ax)) + .multiply(gemmi::Mat33(std::cos(ay), 0, std::sin(ay), 0, 1, 0, -std::sin(ay), 0, std::cos(ay))) + .multiply(gemmi::Mat33(std::cos(az), -std::sin(az), 0, std::sin(az), std::cos(az), 0, 0, 0, 1)); + for (const gemmi::ChemComp::Atom &ca : cc.atoms) { + if (ca.is_hydrogen()) + continue; + gemmi::Atom a; + a.name = ca.id; + a.element = ca.el; + a.pos = gemmi::Position(rot.multiply(ca.xyz)) + centre; + a.b_iso = 20.0f; + a.occ = 1.0f; + res.atoms.push_back(a); + } + chain.residues.push_back(res); + } + model.chains.push_back(chain); + st.models.push_back(model); + return st; +} + +// Atoms of a few elements scattered over the cell. +gemmi::Structure random_crystal(const gemmi::UnitCell &cell, const char *group, int n, unsigned seed) { + std::mt19937 rng(seed); + std::uniform_real_distribution frac(0.0, 1.0), b(10.0, 40.0); + const gemmi::El elements[] = {gemmi::El::C, gemmi::El::N, gemmi::El::O, gemmi::El::S}; + gemmi::Structure st; + st.cell = cell; + st.spacegroup_hm = group; + st.setup_cell_images(); + gemmi::Model model(1); + gemmi::Chain chain("A"); + gemmi::Residue res; + res.name = "UNK"; + res.seqid = gemmi::SeqId(1, ' '); + for (int i = 0; i < n; i++) { + gemmi::Atom a; + a.name = "X"; + a.element = elements[i % 4]; + a.pos = cell.orthogonalize(gemmi::Fractional(frac(rng), frac(rng), frac(rng))); + a.b_iso = static_cast(b(rng)); + a.occ = 1.0f; + res.atoms.push_back(a); + } + chain.residues.push_back(res); + model.chains.push_back(chain); + st.models.push_back(model); + return st; +} + +// Every reflection of the group's ASU to d_min, amplitude 1, one in twenty free. +std::vector asu_reflections(const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, double d_min) { + std::vector out; + const gemmi::ReciprocalAsu asu(&sg); + const gemmi::GroupOps gops = sg.operations(); + const gemmi::Miller lim = cell.get_hkl_limits(d_min); + int i = 0; + for (int h = -lim[0]; h <= lim[0]; h++) + for (int k = -lim[1]; k <= lim[1]; k++) + for (int l = -lim[2]; l <= lim[2]; l++) { + const gemmi::Miller m{{h, k, l}}; + if ((h == 0 && k == 0 && l == 0) || !asu.is_in(m) || gops.is_systematically_absent(m)) + continue; + const double d = cell.calculate_d(m); + if (d < d_min) + continue; + MergedReflection r; + r.h = h; + r.k = k; + r.l = l; + r.d = static_cast(d); + r.F = 1.0f; + r.sigmaF = 0.05f; + r.rfree_flag = (i++ % 20) == 0; + out.push_back(r); + } + return out; +} + +// The observations set to |F| of `truth`, and a row model with no scale, no solvent and the likelihood's +// parameters estimated against `model`. +void set_observations(RefinementEngine &engine, RefinementReflections &refl, const gemmi::Model &truth, + const gemmi::Model &model) { + std::vector> f; + engine.Fcalc(truth, f); + for (size_t m = 0; m < refl.Size(); m++) + refl.fo[m] = std::abs(f[m]); + engine.Fcalc(model, f); + XrayRowModel rows; + rows.k_total.assign(refl.Size(), 1.0f); + rows.fmask.assign(refl.Size(), {0, 0}); + EstimateLikelihoodParameters(refl, f, rows); + engine.SetRowModel(rows); +} + +gemmi::Model shaken(const gemmi::Model &model, double sigma, double b_sigma, unsigned seed) { + std::mt19937 rng(seed); + std::normal_distribution d(0, sigma), db(0, b_sigma); + gemmi::Model out = model; + for (gemmi::Chain &ch : out.chains) + for (gemmi::Residue &r : ch.residues) + for (gemmi::Atom &a : r.atoms) { + a.pos += gemmi::Position(d(rng), d(rng), d(rng)); + a.b_iso = static_cast(std::max(5.0, a.b_iso + db(rng))); + } + return out; +} + +std::vector atoms_of(gemmi::Model &model) { + std::vector out; + for (gemmi::Chain &ch : model.chains) + for (gemmi::Residue &r : ch.residues) + for (gemmi::Atom &a : r.atoms) + out.push_back(&a); + return out; +} + +// The engine's gradient of a few atoms against central differences of its own target. +void check_xray_gradient(RefinementEngine &engine, gemmi::Model model, double tolerance) { + std::vector> grad; + engine.Evaluate(model, &grad); + std::vector atoms = atoms_of(model); + const double hx = 2e-3, hb = 2e-2; + double max_g = 0; + for (const auto &g : grad) + for (int c = 0; c < 4; c++) + max_g = std::max(max_g, std::fabs(g[c])); + for (size_t i = 0; i < atoms.size(); i += atoms.size() / 7) { + for (int c = 0; c < 4; c++) { + const gemmi::Position p0 = atoms[i]->pos; + const float b0 = atoms[i]->b_iso; + const double h = c < 3 ? hx : hb; + auto set = [&](double s) { + atoms[i]->pos = p0; + atoms[i]->b_iso = b0; + if (c < 3) + atoms[i]->pos.at(c) += s; + else + atoms[i]->b_iso = static_cast(b0 + s); + }; + set(h); + const double fp = engine.Evaluate(model, nullptr); + set(-h); + const double fm = engine.Evaluate(model, nullptr); + set(0); + const double fd = (fp - fm) / (2 * h); + CAPTURE(i, c, fd, grad[i][c], max_g); + CHECK(std::fabs(fd - grad[i][c]) < tolerance * std::max(std::fabs(fd), 0.05 * max_g)); + } + } +} + +} // namespace + +TEST_CASE("RefinementLikelihood_derivative", "[Refinement]") { + for (bool centric : {false, true}) + for (double fc : {0.3, 2.0, 9.0}) { + double dfc = 0, dummy = 0; + const double f0 = refine_math::AmplitudeNegLogLikelihood(4.0, fc, 0.8, 2.5, centric, dfc); + const double h = 1e-5; + const double fp = refine_math::AmplitudeNegLogLikelihood(4.0, fc + h, 0.8, 2.5, centric, dummy); + const double fm = refine_math::AmplitudeNegLogLikelihood(4.0, fc - h, 0.8, 2.5, centric, dummy); + CAPTURE(centric, fc, f0); + CHECK(dfc == Catch::Approx((fp - fm) / (2 * h)).epsilon(1e-5)); + } + // the Bessel approximation on both sides of its switch + double l0, r0, l1, r1; + refine_math::BesselI0I1(3.75 * (1 - 1e-12), l0, r0); + refine_math::BesselI0I1(3.75 * (1 + 1e-12), l1, r1); + CHECK(l0 == Catch::Approx(l1).epsilon(1e-5)); + CHECK(r0 == Catch::Approx(r1).epsilon(1e-5)); +} + +TEST_CASE("RefinementMonomerLibrary_embedded", "[Refinement]") { + const gemmi::MonLib &monlib = EmbeddedMonomerLibrary(); + for (const char *code : {"ALA", "PRO", "MSE", "DA", "U", "ATP", "GOL", "SO4", "HOH", "ZN"}) + CHECK(InEmbeddedMonomerLibrary(code)); + CHECK_FALSE(InEmbeddedMonomerLibrary("XYZ")); + for (const char *link : {"TRANS", "CIS", "PTRANS", "p", "SS"}) + CHECK(monlib.links.count(link) == 1); + CHECK(monlib.modifications.count("NH3") == 1); + CHECK(monlib.ener_lib.atoms.count("CH1") == 1); +} + +TEST_CASE("RefinementRestraints_ideal_residues", "[Refinement]") { + const gemmi::UnitCell cell(60, 65, 70, 90, 90, 90); + gemmi::Structure st = residue_crystal({"PHE", "DA", "ATP", "HOH", "ZN"}, cell, "P 21 21 21", 3); + const RefinementTopology topo = BuildRefinementTopology(st); + CHECK(topo.restrained_residues == 5); + CHECK(topo.fixed_residues == 0); + CHECK(topo.bonds > 60); + CHECK(topo.planes >= 3); + CHECK(topo.chirals >= 4); + std::vector> xyzb; + for (gemmi::Atom *a : atoms_of(st.models[0])) + xyzb.push_back({a->pos.x, a->pos.y, a->pos.z, a->b_iso}); + const GeometryStatistics g = MeasureGeometry(topo.geometry, {}, xyzb); + CHECK(g.rmsd_bonds < 0.02); + CHECK(g.rmsd_angles < 2.5); + CHECK(g.rmsd_chirals < 0.2); +} + +TEST_CASE("RefinementRestraints_gradient", "[Refinement]") { + const gemmi::UnitCell cell(14, 15, 16, 90, 90, 90); + gemmi::Structure st = residue_crystal({"TYR", "DG"}, cell, "P 21 21 21", 5); + st.models[0] = shaken(st.models[0], 0.15, 3.0, 2); + const RefinementTopology topo = BuildRefinementTopology(st); + // the geometry, the B similarity and the repulsions (symmetry mates included, at a contact distance that + // makes every pair within reach count) + RestraintSet set = topo.geometry; + set.Append(topo.adp); + RefinementTopology wide = topo; + for (float &r : wide.vdw_radius) + r = 2.5f; + std::fill(wide.hbond.begin(), wide.hbond.end(), 0); + const RestraintSet rep = BuildRepulsions(wide, st.models[0], cell, *st.find_spacegroup(), 0.0); + REQUIRE(rep.records.size() > 10); + bool image = false; + for (const RestraintRecord &r : rep.records) + image = image || r.rot[0] != 1.0f || r.tran[0] != 0.0f || r.tran[1] != 0.0f || r.tran[2] != 0.0f; + CAPTURE(rep.records.size()); + CHECK(image); + set.Append(rep); + set.Finalize(atoms_of(st.models[0]).size()); + + std::vector> xyzb; + for (gemmi::Atom *a : atoms_of(st.models[0])) + xyzb.push_back({a->pos.x, a->pos.y, a->pos.z, a->b_iso}); + // each kind of restraint on its own, against central differences + for (int kind = 0; kind <= static_cast(RestraintKind::BSimilarity); kind++) { + RestraintSet one; + for (const RestraintRecord &r : set.records) + if (r.kind == kind) { + RestraintRecord copy = r; + if (kind == static_cast(RestraintKind::Plane)) { + copy.atom[0] = static_cast(one.plane_atoms.size()); + for (int k = 0; k < r.atom[1]; k++) + one.plane_atoms.push_back(set.plane_atoms[r.atom[0] + k]); + } + one.Add(copy, kind == static_cast(RestraintKind::Plane) ? r.atom[1] : 4); + } + CAPTURE(kind, one.records.size()); + std::vector> grad(xyzb.size(), {0, 0, 0, 0}); + EvaluateRestraints(one, xyzb, &grad); + const double h = 1e-6; + for (size_t i = 0; i < xyzb.size(); i++) + for (int c = 0; c < 4; c++) { + auto x = xyzb; + x[i][c] += h; + const double fp = EvaluateRestraints(one, x, nullptr); + x[i][c] -= 2 * h; + const double fm = EvaluateRestraints(one, x, nullptr); + CAPTURE(i, c); + CHECK(grad[i][c] == Catch::Approx((fp - fm) / (2 * h)).epsilon(1e-4).margin(1e-3)); + } + } + +#ifdef JFJOCH_USE_CUDA + if (get_gpu_count() > 0) { + // the GPU's float evaluation of the same set + std::vector merged = asu_reflections(cell, *st.find_spacegroup(), 3.0); + RefinementReflections refl = PrepareRefinementReflections(merged, cell, *st.find_spacegroup(), 3.0); + auto gpu = MakeRefinementEngineGPU(0, cell, *st.find_spacegroup(), 3.0, refl, st.models[0], 100.0, SIZE_MAX); + REQUIRE(gpu); + gpu->SetRestraints(0, set); + std::vector> ggpu; + const double egpu = gpu->EvaluateRestraints(0, xyzb, &ggpu); + std::vector> gcpu(xyzb.size(), {0, 0, 0, 0}); + const double ecpu = EvaluateRestraints(set, xyzb, &gcpu); + CHECK(egpu == Catch::Approx(ecpu).epsilon(1e-4)); + for (size_t i = 0; i < xyzb.size(); i++) + for (int c = 0; c < 4; c++) + CHECK(ggpu[i][c] == Catch::Approx(gcpu[i][c]).epsilon(2e-3).margin(2e-2)); + } +#endif +} + +TEST_CASE("RefinementXray_gradient_CPU", "[Refinement]") { + for (const char *group : {"P 1", "P 21 21 21", "C 1 2 1", "P 61 2 2"}) { + CAPTURE(group); + const gemmi::SpaceGroup &sg = *gemmi::find_spacegroup_by_name(group); + const gemmi::UnitCell cell = sg.crystal_system() == gemmi::CrystalSystem::Hexagonal + ? gemmi::UnitCell(30, 30, 45, 90, 90, 120) + : gemmi::UnitCell(28, 31, 34, 90, sg.number == 5 ? 104 : 90, 90); + gemmi::Structure truth = random_crystal(cell, group, 240, 7); + gemmi::Model model = shaken(truth.models[0], 0.3, 4.0, 8); + RefinementReflections refl = PrepareRefinementReflections(asu_reflections(cell, sg, 2.2), cell, sg, 2.2); + REQUIRE(refl.Size() > 500); + auto cpu = MakeRefinementEngineCPU(cell, sg, 2.2, refl, 4); + cpu->SetBlur(RefinementBlur(cell, sg, 2.2, 5.0)); + set_observations(*cpu, refl, truth.models[0], model); + check_xray_gradient(*cpu, model, 0.03); + } +} + +#ifdef JFJOCH_USE_CUDA +TEST_CASE("RefinementXray_gradient_GPU", "[Refinement]") { + if (get_gpu_count() == 0) + return; + for (const char *group : {"P 1", "P 21 21 21", "C 1 2 1", "P 61 2 2"}) { + CAPTURE(group); + const gemmi::SpaceGroup &sg = *gemmi::find_spacegroup_by_name(group); + const gemmi::UnitCell cell = sg.crystal_system() == gemmi::CrystalSystem::Hexagonal + ? gemmi::UnitCell(30, 30, 45, 90, 90, 120) + : gemmi::UnitCell(28, 31, 34, 90, sg.number == 5 ? 104 : 90, 90); + gemmi::Structure truth = random_crystal(cell, group, 240, 7); + gemmi::Model model = shaken(truth.models[0], 0.3, 4.0, 8); + RefinementReflections refl = PrepareRefinementReflections(asu_reflections(cell, sg, 2.2), cell, sg, 2.2); + auto cpu = MakeRefinementEngineCPU(cell, sg, 2.2, refl, 4); + cpu->SetBlur(RefinementBlur(cell, sg, 2.2, 5.0)); + set_observations(*cpu, refl, truth.models[0], model); + // the GPU engine sees the same observations: it is made after they are set + auto gpu = MakeRefinementEngineGPU(0, cell, sg, 2.2, refl, model, 300.0, SIZE_MAX); + REQUIRE(gpu); + gpu->SetBlur(RefinementBlur(cell, sg, 2.2, 5.0)); + std::vector> f; + cpu->Fcalc(model, f); + XrayRowModel rows; + rows.k_total.assign(refl.Size(), 1.0f); + rows.fmask.assign(refl.Size(), {0, 0}); + EstimateLikelihoodParameters(refl, f, rows); + cpu->SetRowModel(rows); + gpu->SetRowModel(rows); + + std::vector> fg; + gpu->Fcalc(model, fg); + double num = 0, den = 0; + for (size_t m = 0; m < f.size(); m++) { + num += std::abs(f[m] - fg[m]); + den += std::abs(f[m]); + } + CHECK(num / den < 1e-3); + + std::vector> gc, gg; + const double tc = cpu->Evaluate(model, &gc); + const double tg = gpu->Evaluate(model, &gg); + CHECK(tg == Catch::Approx(tc).epsilon(1e-4)); + double max_g = 0; + for (const auto &g : gc) + for (int c = 0; c < 4; c++) + max_g = std::max(max_g, std::fabs(g[c])); + for (size_t i = 0; i < gc.size(); i++) + for (int c = 0; c < 4; c++) { + CAPTURE(i, c); + CHECK(std::fabs(gg[i][c] - gc[i][c]) < 0.01 * max_g); + } + check_xray_gradient(*gpu, model, 0.05); + } +} +#endif + +TEST_CASE("Refinement_restrained_recovers_model", "[Refinement]") { + const gemmi::UnitCell cell(36, 40, 44, 90, 90, 90); + const gemmi::SpaceGroup &sg = *gemmi::find_spacegroup_by_name("P 21 21 21"); + gemmi::Structure truth = residue_crystal({"PHE", "TRP", "DA", "DG", "TYR", "HOH", "HOH", "HOH"}, cell, + "P 21 21 21", 11); + gemmi::Structure start = truth; + start.models[0] = shaken(truth.models[0], 0.25, 5.0, 12); + std::vector merged = asu_reflections(cell, sg, 1.8); + { + RefinementReflections refl = PrepareRefinementReflections(merged, cell, sg, 1.8 * 0.999); + auto cpu = MakeRefinementEngineCPU(cell, sg, 1.8 * 0.999, refl, 4); + cpu->SetBlur(RefinementBlur(cell, sg, 1.8, 5.0)); + std::vector> f; + cpu->Fcalc(truth.models[0], f); + std::map amplitude; + for (size_t m = 0; m < refl.Size(); m++) + amplitude[refl.hkl[m]] = std::abs(f[m]); + std::mt19937 rng(3); + std::normal_distribution noise(0.0, 0.03); + for (MergedReflection &r : merged) { + const auto it = amplitude.find(gemmi::Miller{{r.h, r.k, r.l}}); + r.F = it == amplitude.end() ? NAN : static_cast(it->second * (1 + noise(rng))); + r.sigmaF = 0.03f * r.F + 0.01f; + } + } + Logger logger("RefinementTest"); + for (bool gpu : {false, true}) { + if (gpu && get_gpu_count() == 0) + continue; + CAPTURE(gpu); + RefinementSettings settings; + settings.gpu = gpu; + settings.nthreads = 4; + settings.macro_cycles = 3; + settings.weight_ladder = {0.0625, 0.25}; + settings.adp_ladder = {4.0}; + settings.riding_hydrogens = false; // the data were made without them + const RefinementResult r = RefineModel(start, merged, cell, sg, 1.0, logger, settings); + REQUIRE(r.ok); + CHECK(r.on_gpu == gpu); + CHECK(r.restrained_residues == 8); + CHECK(r.r_free < 0.6 * r.r_free_start); + CHECK(r.geometry.rmsd_bonds < r.geometry_start.rmsd_bonds); + double rms = 0; + std::vector refined = atoms_of(r.model->models[0]); + std::erase_if(refined, [](const gemmi::Atom *a) { return a->is_hydrogen(); }); // the riding hydrogens + const std::vector ref = atoms_of(truth.models[0]); + REQUIRE(refined.size() == ref.size()); + for (size_t i = 0; i < ref.size(); i++) + rms += refined[i]->pos.dist_sq(ref[i]->pos); + rms = std::sqrt(rms / ref.size()); + CHECK(rms < 0.15); + } +} diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index b6754ec31..1ee3ad665 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -12,6 +12,11 @@ TARGET_LINK_LIBRARIES(jfjoch_extract_hkl JFJochReader) # rugnux, the single offline analysis CLI, lives in rugnux/ next to its library. +# Developer utility, not installed: refines a model against a finished run's merged MTZ (Refinement.h), for +# measuring the refinement on battery outputs without processing anything again. +ADD_EXECUTABLE(rugnux_refine_test rugnux_refine_test.cpp) +TARGET_LINK_LIBRARIES(rugnux_refine_test JFJochStructureRefinement JFJochCommon gemmi) + # In-place re-compress /entry/data/data of a _data file from bitshuffle/LZ4 to bitshuffle/zstd. ADD_EXECUTABLE(jfjoch_recompress jfjoch_recompress.cpp) TARGET_LINK_LIBRARIES(jfjoch_recompress JFJochHDF5Wrappers) diff --git a/tools/rugnux_refine_test.cpp b/tools/rugnux_refine_test.cpp new file mode 100644 index 000000000..4350d9b7a --- /dev/null +++ b/tools/rugnux_refine_test.cpp @@ -0,0 +1,151 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +// Refinement (image_analysis/structure_refinement/Refinement.h) of a model against a rugnux merged MTZ, without +// processing anything: for measuring the refinement on finished runs (a battery run's p.mtz and p_model.cif) +// against another program on the same files. Prints the outcome, and one JSON line for scripts. + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "../common/CUDAWrapper.h" +#include "../common/Logger.h" +#include "../image_analysis/structure_refinement/Refinement.h" + +namespace { + +void usage() { + std::cout << "Usage: rugnux_refine_test [options] \n" + " -N CPU threads (default 8)\n" + " --no-gpu the CPU engine\n" + " --placement-only rigid bodies and group B only\n" + " --cycles macro-cycles per weight (default as in RefinementSettings)\n" + " --xyz-iterations , --b-iterations L-BFGS iterations per macro-cycle\n" + " --ladder the weight ladder, times the gradient-balanced weight\n" + " -o write the refined model\n"; +} + +std::vector ParseList(const std::string &s) { + std::vector out; + std::stringstream ss(s); + std::string item; + while (std::getline(ss, item, ',')) + out.push_back(std::stod(item)); + return out; +} + +} // namespace + +int main(int argc, char **argv) { + RefinementSettings settings; + settings.nthreads = 8; + std::string out_path; + std::vector files; + for (int i = 1; i < argc; i++) { + const std::string a = argv[i]; + if (a == "-N" && i + 1 < argc) + settings.nthreads = std::stoul(argv[++i]); + else if (a == "--no-gpu") { + settings.gpu = false; + hide_gpus(); + } else if (a == "--placement-only") + settings.restrained = false; + else if (a == "--cycles" && i + 1 < argc) + settings.macro_cycles = std::stoi(argv[++i]); + else if (a == "--xyz-iterations" && i + 1 < argc) + settings.xyz_iterations = std::stoi(argv[++i]); + else if (a == "--adp-ladder" && i + 1 < argc) + settings.adp_ladder = ParseList(argv[++i]); + else if (a == "--b-iterations" && i + 1 < argc) + settings.b_iterations = std::stoi(argv[++i]); + else if (a == "--ladder" && i + 1 < argc) + settings.weight_ladder = ParseList(argv[++i]); + else if (a == "-o" && i + 1 < argc) + out_path = argv[++i]; + else if (!a.empty() && a[0] == '-') { + usage(); + return EXIT_FAILURE; + } else + files.push_back(a); + } + if (files.size() != 2) { + usage(); + return EXIT_FAILURE; + } + + gemmi::Mtz mtz = gemmi::read_mtz_file(files[0]); + const gemmi::SpaceGroup *sg = mtz.spacegroup; + if (sg == nullptr) { + std::cerr << "No space group in " << files[0] << std::endl; + return EXIT_FAILURE; + } + const int ih = mtz.column_with_label("H")->idx, ik = mtz.column_with_label("K")->idx, + il = mtz.column_with_label("L")->idx, iF = mtz.column_with_label("F")->idx, + isF = mtz.column_with_label("SIGF")->idx, ifree = mtz.column_with_label("FreeR_flag")->idx; + const gemmi::Mtz::Column *fp = mtz.column_with_label("F(+)"), *fm = mtz.column_with_label("F(-)"); + std::vector merged; + for (size_t r = 0; r < static_cast(mtz.nreflections); r++) { + const float *row = &mtz.data[r * mtz.columns.size()]; + MergedReflection m; + m.h = static_cast(row[ih]); + m.k = static_cast(row[ik]); + m.l = static_cast(row[il]); + m.F = row[iF]; + m.sigmaF = row[isF]; + m.rfree_flag = row[ifree] == 0; + m.d = static_cast(mtz.cell.calculate_d({{m.h, m.k, m.l}})); + if (fp != nullptr && fm != nullptr) { + m.F_plus = row[fp->idx]; + m.F_minus = row[fm->idx]; + } + merged.push_back(m); + } + gemmi::Structure st = gemmi::read_structure_gz(files[1]); + + Logger logger("rugnux_refine_test"); + const RefinementResult r = RefineModel(st, merged, mtz.cell, *sg, 1.0, logger, settings); + if (!r.ok) { + std::cerr << "Refinement failed: " << r.failure_reason << std::endl; + return EXIT_FAILURE; + } + if (!out_path.empty()) + { + std::ofstream f(out_path); + gemmi::cif::write_cif_to_stream(f, gemmi::make_mmcif_document(*r.model)); + } + + int kinds[5] = {0, 0, 0, 0, 0}; + for (const DensityBlob &b : r.blobs) + kinds[static_cast(b.kind)]++; + nlohmann::json blobs = nlohmann::json::array(); + for (const DensityBlob &b : r.blobs) + blobs.push_back({{"kind", DensityBlobKindName(b.kind)}, {"x", b.centroid.x}, {"y", b.centroid.y}, + {"z", b.centroid.z}, {"peak", b.peak_sigma}, {"volume", b.volume}, {"score", b.score}, + {"nearest", b.nearest_atom}, {"distance", b.nearest_atom_distance}, + {"anomalous", b.anomalous_sigma}}); + nlohmann::json j = {{"d_min", r.d_min}, {"gpu", r.on_gpu}, {"seconds", r.seconds}, + {"r_work_start", r.r_work_start}, {"r_free_start", r.r_free_start}, + {"r_work_placement", r.r_work_placement}, {"r_free_placement", r.r_free_placement}, + {"r_work", r.r_work}, {"r_free", r.r_free}, {"weight", r.weight}, {"adp_weight", r.adp_weight}, + {"rmsd_bonds", r.geometry.rmsd_bonds}, {"rmsd_angles", r.geometry.rmsd_angles}, + {"rmsd_bonds_start", r.geometry_start.rmsd_bonds}, + {"rmsd_angles_start", r.geometry_start.rmsd_angles}, {"clashes", r.geometry.clashes}, + {"atoms", r.atoms}, {"refined_atoms", r.refined_atoms}, {"fixed_residues", r.fixed_residues}, + {"blobs", blobs}}; + nlohmann::json trials = nlohmann::json::array(); + for (const RefinementWeightTrial &t : r.trials) + trials.push_back({{"weight", t.weight}, {"adp_weight", t.adp_weight}, {"r_work", t.r_work}, {"r_free", t.r_free}, + {"rmsd_bonds", t.geometry.rmsd_bonds}, {"rmsd_angles", t.geometry.rmsd_angles}}); + j["trials"] = trials; + std::cout << "JSON " << j.dump() << std::endl; + return EXIT_SUCCESS; +} -- 2.54.0 From 7759643d4cb8c42db0512dac0f7d564ca6bce019 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sun, 25 Oct 2026 01:31:35 +0200 Subject: [PATCH 019/122] rugnux --refine: refine the placed model, list its difference-map blobs, report under REFINE_ keys Opt-in. After the model's placement and everything it decides (setting, indexing, enantiomorph, MR, twin choice), the placed model is refined against the merge it was placed on (RefineModel) and the blobs of the refined mFo-DFc map are listed (FindDensityBlobs). Nothing reads the outcome: the reflection files, the space group and R_WORK/R_FREE of the model as given are those of a run without --refine. Writes _refined_model.cif/.pdb, _refined_maps.mtz (FP FC PHIC FWT PHWT DELFWT PHDELWT FOM FREE) and _blobs.json; the report's model section gains REFINE_* keys (start, placement and restrained R-factors, rmsd bonds/angles, clashes, fixed residues, weights, blob counts by kind) and the five strongest blobs. Documented in RUGNUX_MODEL_AND_REFERENCE.md and CPU_DATA_ANALYSIS.md. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_015CeEGgpKdfkCTJb3YNMJcu (cherry picked from commit aaee92711a205bf6a575a47c4db4555d34e7e8fe) --- docs/CPU_DATA_ANALYSIS.md | 7 ++++ docs/RUGNUX_MODEL_AND_REFERENCE.md | 17 ++++++++ rugnux/ResultReport.cpp | 64 ++++++++++++++++++++++++++++++ rugnux/Rugnux.h | 12 ++++++ rugnux/RugnuxCommandLine.cpp | 2 + rugnux/RugnuxOutputFiles.cpp | 32 +++++++++++++++ rugnux/RugnuxScaleMerge.cpp | 37 +++++++++++++++-- rugnux/rugnux_cli.cpp | 12 ++++++ 8 files changed, 180 insertions(+), 3 deletions(-) diff --git a/docs/CPU_DATA_ANALYSIS.md b/docs/CPU_DATA_ANALYSIS.md index 7189d903c..b91125dfa 100644 --- a/docs/CPU_DATA_ANALYSIS.md +++ b/docs/CPU_DATA_ANALYSIS.md @@ -18,6 +18,7 @@ This document describes the crystallographic algorithms implemented in Jungfrauj 12. auxiliary statistics (Wilson plot, ⟨I/σ(I)⟩, CC1/2, CCref), 13. amplitude estimation (French–Wilson) and R-free test-set flagging, 14. optional model-based validation: rigid-body placement of a supplied model (molecular replacement where the rigid body does not place it, or for a predicted model), R-free against it, sigma_A-weighted 2mFo−DFc / mFo−DFc electron-density maps, and an anomalous difference map with the strongest anomalous sites named. +15. optional restrained refinement of the placed model (`--refine`): rigid bodies and group B, then positions and B against a maximum-likelihood amplitude target with the dictionary's geometry, the X-ray weight chosen by R-free within geometry bounds, and the unexplained blobs of the refined difference map. The reference is split into four parts, in pipeline order; the section numbers run continuously @@ -59,6 +60,12 @@ The methods draw on, and in places reimplement, solutions from: - P. H. C. Eilers, "A perfect smoother", *Anal. Chem.* **75** (2003), 3631-3636, after E. T. Whittaker, "On a new method of graduation", *Proc. Edinburgh Math. Soc.* **41** (1923), 63-75 (the penalised smoother of the fulls' per-frame scale, §10.6). - H. F. Walker & P. Ni, "Anderson acceleration for fixed-point iterations", *SIAM J. Numer. Anal.* **49** (2011), 1715-1735, after D. G. Anderson, "Iterative procedures for nonlinear integral equations", *J. ACM* **12** (1965), 547-560 (the acceleration of the per-frame scaling loops, §10.6). - R. A. Fisher, "Frequency distribution of the values of the correlation coefficient in samples from an indefinitely large population", *Biometrika* **10** (1915), 507-521 (the z-transformation on which the correction surfaces' held-out half-set CC1/2 is compared). +- R. C. Agarwal, "A new least-squares refinement technique based on the fast Fourier transform algorithm", *Acta Cryst.* **A34** (1978), 791-809 (the gradient of the refinement target, §15). +- N. S. Pannu & R. J. Read, "Improved structure refinement through maximum likelihood", *Acta Cryst.* **A52** (1996), 659-668, and G. N. Murshudov, A. A. Vagin & E. J. Dodson, *Acta Cryst.* **D53** (1997), 240-255 (the maximum-likelihood amplitude target and the B restraints, §15). +- V. Y. Lunin & T. P. Skovoroda, *Acta Cryst.* **A51** (1995), 880-887 (the likelihood parameters from the free set, §15). +- A. A. Vagin et al., "REFMAC5 dictionary: organization of prior chemical knowledge and guidelines for its use", *Acta Cryst.* **D60** (2004), 2184-2195 (the restraint dictionary, §15). +- P. V. Afonine et al., "Towards automated crystallographic structure refinement with phenix.refine", *Acta Cryst.* **D68** (2012), 352-367 (the weight chosen among refinements by R-free, §15). +- D. C. Liu & J. Nocedal, "On the limited memory BFGS method for large scale optimization", *Math. Program.* **45** (1989), 503-528 (the minimiser, §15). - M. Wojdyr, "GEMMI: A library for structural biology", *J. Open Source Softw.* **7** (2022), 4200 (model / structure-factor / map machinery used in §14). - J. P. Wright, "Experiences with GPU decompression for bitshuffle + LZ4 data", HDF5 User Group meeting (2021), and [github.com/jonwright/bslz4decoders](https://github.com/jonwright/bslz4decoders) (device-side decoding of bitshuffle+LZ4 images, §0). - A. Thorn & G. M. Sheldrick, "ANODE: anomalous and heavy-atom density calculation", *J. Appl. Cryst.* **44** (2011), 1285-1287 (anomalous difference density read at the model's sites). diff --git a/docs/RUGNUX_MODEL_AND_REFERENCE.md b/docs/RUGNUX_MODEL_AND_REFERENCE.md index 65b32d536..5a6f51a25 100644 --- a/docs/RUGNUX_MODEL_AND_REFERENCE.md +++ b/docs/RUGNUX_MODEL_AND_REFERENCE.md @@ -44,6 +44,7 @@ the rest walks through a run step by step. | *(none)* | — | Everything from the data | — | | `--model ` | An atomic model, PDB or mmCIF, gzipped or not, recognised by content: an experimental structure or a prediction | Validation after the merge (R-work/R-free, CC(model, data), maps, the placed model); a rigid-body placement checked against a null, with molecular replacement where the rigid body does not place it, and straight away for a prediction | Labels only (hand, indexing, axes), and only where the model fits. Other space groups → `_mr.*` | | `--mr ` | The same kinds of model | As `--model`, but molecular replacement straight away, without the rigid body. `--mode mx` only, not together with `--model` | Hand label only. Other space groups → `_mr.*` | +| `--refine` | Nothing more (with `--model` or `--mr`) | Refines the placed model against the merge it was placed on - each chain as a rigid body and a B per residue, then every atom's position (and, where R-free says so, its B) restrained by the dictionary carried in rugnux, against a maximum-likelihood target - and lists the unexplained blobs of its difference map. Writes `_refined_model.cif`, `_refined_maps.mtz`, `_blobs.json`; reported under `REFINE_` keys | No - it runs after everything is decided and decides nothing | | PAE file beside a prediction | `AF--F1-predicted_aligned_error_v.json` next to `AF--F1-model_v.cif` (read automatically, no option) | Cuts the prediction into rigid domains for molecular replacement | No (a domain alone can only confirm the answer's group) | | `-z, --reference ` (`--reference-mtz`) | Merged data of the same crystal form: an MTZ, or a PDB structure-factor mmCIF (`-sf.cif`) | Fixes the space group (in its own setting) and the cell (softly), puts the merge on its axes, resolves the indexing ambiguity, hands over its R-free set, reports CCref on stills. Never a scale anchor | **Yes**: the space group, the axes, the indexing and the free set are the reference's | | `--reference-column