From b3f34004278c17ca9e0fd1e5b5ae2c0d20b33034 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 27 Oct 2021 13:32:11 +0200 Subject: [PATCH 01/21] Add first draft of OpenCADD-KLIFS paper --- papers/opencadd-klifs/opencadd_klifs_toc.png | Bin 0 -> 60474 bytes papers/opencadd-klifs/paper.bib | 135 +++++++++++++++++++ papers/opencadd-klifs/paper.md | 68 ++++++++++ 3 files changed, 203 insertions(+) create mode 100644 papers/opencadd-klifs/opencadd_klifs_toc.png create mode 100644 papers/opencadd-klifs/paper.bib create mode 100644 papers/opencadd-klifs/paper.md diff --git a/papers/opencadd-klifs/opencadd_klifs_toc.png b/papers/opencadd-klifs/opencadd_klifs_toc.png new file mode 100644 index 0000000000000000000000000000000000000000..785734541eed081070e10d2edaa793bb3b987222 GIT binary patch literal 60474 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 + +Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2001]. +The immense research on kinases has lead to an increasing amount of kinase resources [@Kooistra:2017]. +Among them is the KLIFS database, which focuses on storing and analyzing structural data on the binding of drugs and other small molecules to kinases [@Kanev:2021]. +Convienent integration of the KLIFS data into workflows is the aim of the OpenCADD-KLIFS Python module presented here. + +# Statement of need + + + +OpenCADD is a collection of Python modules for structural cheminformatics; OpenCADD-KLIFS is one of them (``opencadd.databases.klifs``). +This module offers access to KLIFS data such as information about kinases, structures, ligands, +interaction fingerprints, and bioactivities. +With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. +The tool provides identical APIs for the remote and local queries and streamlines all output into +standardized Pandas DataFrames to allow for an easy and quick downstream data manipulation (Figure \autoref{fig:opencadd_klifs_toc}). + + +![OpenCADD-KLIFS fetches KLIFS [@Kanev:2021] data offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas [@pandas] DataFrames.\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) + +The KLIFS database offers a REST API including an OpenAPI specification. We use bravado [@bravado] to dynamically generate a Python client based on the OpenAPI definitions. With OpenCADD-KLIFS, we offer a Python wrapper around this client to add the following functionalities: +- Format the query results obtained with bravado into Pandas [@pandas] DataFrames with standardized column names and data types. +- Streamline the query results obtained from the KLIFS webserver with those obtained from a local KLIFS download. +- TBA + +OpenCADD-KLIFS is especially useful whenever users are interested in multiple or more complex queries (e.g. fetch all interaction profiles of kinases bound to Gefitinib). The output Pandas DataFrames allow easy filtering steps and DataFrame merges in case of mulitple queries for different data sources. +OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], and KiSSim [@kissim]. + +TODO +- Comment on structure file download +- Great for Jupyter notebooks + +# Acknowledgements + +We thank Albert Kooistra for his help with questions and wishes regarding the KLIFS database. +We acknowledge the contributors involved in software programs and packages used by OpenCADD, such as bravado, RDKit, Pandas, Jupyter, and Pytest, and Sphinx. + +# References \ No newline at end of file From 5d1b0149cc0e94a9c8a940c697e8da0d30090383 Mon Sep 17 00:00:00 2001 From: Unknown Date: Wed, 27 Oct 2021 16:08:04 +0200 Subject: [PATCH 02/21] Resolve TODOs in paper draft --- papers/opencadd-klifs/paper.bib | 23 +++++++++++++++++++---- papers/opencadd-klifs/paper.md | 26 ++++++++++++-------------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index bd9c21e8..d48741ed 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -122,6 +122,24 @@ @misc{opencadd_pocket url = {https://github.com/volkamerlab/opencadd}, } +@misc{kinoml, + author = {{OpenKinome}}, + title = {{KinoML: Structure-informed machine learning for kinase modeling}}, + year = 2021, + publisher = {GitHub}, + journal = {GitHub repository} + url = {https://github.com/openkinome/kinoml}, +} + +@misc{plipify, + author = {{Volkamer Lab}}, + title = {{PLIPify: Protein-ligand interaction frequencies across multiple structures}}, + year = 2021, + publisher = {GitHub}, + journal = {GitHub repository} + url = {https://github.com/volkamerlab/plipify}, +} + @misc{volkamerlab, author = {{Volkamer Lab}}, title = {{Volkamer Lab website}}, @@ -129,7 +147,4 @@ @misc{volkamerlab publisher = {Volkamer Lab}, journal = {Volkamer Lab website} url = {https://volkamerlab.org/}, -} - - - +} \ No newline at end of file diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 1ad3778e..512c4ec4 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -28,9 +28,9 @@ A summary describing the high-level functionality and purpose of the software fo --> Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2001]. -The immense research on kinases has lead to an increasing amount of kinase resources [@Kooistra:2017]. +The immense research on kinases has led to an increasing amount of kinase resources [@Kooistra:2017]. Among them is the KLIFS database, which focuses on storing and analyzing structural data on the binding of drugs and other small molecules to kinases [@Kanev:2021]. -Convienent integration of the KLIFS data into workflows is the aim of the OpenCADD-KLIFS Python module presented here. +Convenient integration of the KLIFS data into workflows is the aim of the OpenCADD-KLIFS Python module presented here. # Statement of need @@ -43,26 +43,24 @@ This module offers access to KLIFS data such as information about kinases, struc interaction fingerprints, and bioactivities. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. The tool provides identical APIs for the remote and local queries and streamlines all output into -standardized Pandas DataFrames to allow for an easy and quick downstream data manipulation (Figure \autoref{fig:opencadd_klifs_toc}). +standardized Pandas [@pandas] DataFrames to allow for an easy and quick downstream data manipulation (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with Jupyter notebooks [@jupyterhub; @Kluyver:2016]. ![OpenCADD-KLIFS fetches KLIFS [@Kanev:2021] data offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas [@pandas] DataFrames.\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including an OpenAPI specification. We use bravado [@bravado] to dynamically generate a Python client based on the OpenAPI definitions. With OpenCADD-KLIFS, we offer a Python wrapper around this client to add the following functionalities: -- Format the query results obtained with bravado into Pandas [@pandas] DataFrames with standardized column names and data types. -- Streamline the query results obtained from the KLIFS webserver with those obtained from a local KLIFS download. -- TBA +The KLIFS database offers a REST API including an OpenAPI specification. OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on the OpenAPI definitions and add wrappers to enable the following functionalities: -OpenCADD-KLIFS is especially useful whenever users are interested in multiple or more complex queries (e.g. fetch all interaction profiles of kinases bound to Gefitinib). The output Pandas DataFrames allow easy filtering steps and DataFrame merges in case of mulitple queries for different data sources. -OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], and KiSSim [@kissim]. +- A session is set up, which allows access to various KLIFS data sources by different identifiers with the API ``session.data_source.by_identifier``; for example ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. Data sources currently include kinases, ligands, structures, drugs, pockets, bioactivities, structural conformations, modified residues, and coordinates; identifiers refer to kinase names, PDB IDs, KLIFS IDs, and more. +- Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. +- All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. +- Structural files deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or the RDKit [@rdkit]. -TODO -- Comment on structure file download -- Great for Jupyter notebooks +OpenCADD-KLIFS is especially useful whenever users are interested in multiple or more complex queries such as "fetch all interaction profiles of kinases bound to the drug Gefitinib". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. +OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plifify]. # Acknowledgements -We thank Albert Kooistra for his help with questions and wishes regarding the KLIFS database. -We acknowledge the contributors involved in software programs and packages used by OpenCADD, such as bravado, RDKit, Pandas, Jupyter, and Pytest, and Sphinx. +We thank Albert Kooistra for his help with questions and wishes regarding the KLIFS database, and David Schaller for his feedback on the OpenCADD-KLIFS module. +We acknowledge the contributors involved in software programs and packages used by OpenCADD-KLIFS, such as bravado, RDKit, Pandas, Jupyter, and Pytest, and Sphinx. # References \ No newline at end of file From a7fe13cc60388c867ce786ee26201548d5204ce9 Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 29 Oct 2021 15:57:36 +0200 Subject: [PATCH 03/21] Move superposer student paper to new paper folder --- paper.md => papers/opencadd-superposition/paper.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename paper.md => papers/opencadd-superposition/paper.md (100%) diff --git a/paper.md b/papers/opencadd-superposition/paper.md similarity index 100% rename from paper.md rename to papers/opencadd-superposition/paper.md From 9b1294ea0cda685a049ac073c7ed257e4993a30a Mon Sep 17 00:00:00 2001 From: Unknown Date: Fri, 29 Oct 2021 16:53:29 +0200 Subject: [PATCH 04/21] Resolve AV's comments on paper draft --- papers/opencadd-klifs/paper.bib | 15 ++++++++++++++- papers/opencadd-klifs/paper.md | 34 +++++++++++++++------------------ 2 files changed, 29 insertions(+), 20 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index d48741ed..a5f4207b 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -30,6 +30,19 @@ @article{Kanev:2021 doi = {10.1093/nar/gkaa895}, } +@article{vanLinden:2014, + author={van Linden, Oscar P. J. and Kooistra, Albert J. and Leurs, Rob and de Esch, Iwan J. P. and de Graaf, Chris}, + title={KLIFS: A Knowledge-Based Structural Database To Navigate Kinase--Ligand Interaction Space}, + journal={Journal of Medicinal Chemistry}, + volume={57}, + number={2}, + pages={249-277}, + year={2014}, + doi={10.1021/jm400378w}, +} + + + @article{Raschka:2017, title = {BioPandas: Working with molecular structures in pandas DataFrames}, author = {Sebastian Raschka}, @@ -147,4 +160,4 @@ @misc{volkamerlab publisher = {Volkamer Lab}, journal = {Volkamer Lab website} url = {https://volkamerlab.org/}, -} \ No newline at end of file +} diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 512c4ec4..3e960e6e 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -23,44 +23,40 @@ bibliography: paper.bib # Summary - - Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2001]. The immense research on kinases has led to an increasing amount of kinase resources [@Kooistra:2017]. -Among them is the KLIFS database, which focuses on storing and analyzing structural data on the binding of drugs and other small molecules to kinases [@Kanev:2021]. -Convenient integration of the KLIFS data into workflows is the aim of the OpenCADD-KLIFS Python module presented here. +Among them is the KLIFS database, which focuses on storing and analyzing structural data on kinases and interacting drugs and other small molecules [@Kanev:2021]. +The OpenCADD-KLIFS Python module offeres a convenient integration of the KLIFS data into workflows to facilitate computational kinase research. # Statement of need - - -OpenCADD is a collection of Python modules for structural cheminformatics; OpenCADD-KLIFS is one of them (``opencadd.databases.klifs``). -This module offers access to KLIFS data such as information about kinases, structures, ligands, +[OpenCADD-KLIFS](https://opencadd.readthedocs.io/en/latest/databases_klifs.html) (``opencadd.databases.klifs``) is a part of the [OpenCADD](https://opencadd.readthedocs.io/) package, a collection of Python modules for structural cheminformatics. +This module offers access to KLIFS [@Kanev:2021] data such as information about kinases, structures, ligands, interaction fingerprints, and bioactivities. +KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [vanLinden:2014]. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. -The tool provides identical APIs for the remote and local queries and streamlines all output into -standardized Pandas [@pandas] DataFrames to allow for an easy and quick downstream data manipulation (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with Jupyter notebooks [@jupyterhub; @Kluyver:2016]. +The presented module provides identical APIs for the remote and local queries for KLIFS data and streamlines all output into +standardized Pandas [@pandas] DataFrames to allow for easy and quick downstream data analyses (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. ![OpenCADD-KLIFS fetches KLIFS [@Kanev:2021] data offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas [@pandas] DataFrames.\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including an OpenAPI specification. OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on the OpenAPI definitions and add wrappers to enable the following functionalities: +The KLIFS database offers a REST API including an OpenAPI specification. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these OpenAPI definitions and adds wrappers to enable the following functionalities: -- A session is set up, which allows access to various KLIFS data sources by different identifiers with the API ``session.data_source.by_identifier``; for example ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. Data sources currently include kinases, ligands, structures, drugs, pockets, bioactivities, structural conformations, modified residues, and coordinates; identifiers refer to kinase names, PDB IDs, KLIFS IDs, and more. +- A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, ligands, structures, drugs, pockets, bioactivities, structural conformations, modified residues, and coordinates; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. +For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. - Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. - All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. -- Structural files deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or the RDKit [@rdkit]. +- Structural files deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. -OpenCADD-KLIFS is especially useful whenever users are interested in multiple or more complex queries such as "fetch all interaction profiles of kinases bound to the drug Gefitinib". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. +OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all interaction profiles of kinases bound to the drug Gefitinib". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plifify]. +For example, OpenCADD-KLIFS is applied in a [TeachOpenCADD tutorial](https://projects.volkamerlab.org/teachopencadd/talktorials/T012_query_klifs.html) to demonstrate how to fetch all kinase-ligand interaction profiles for all available EGFR kinase structures in order to visualize the per-residue interaction types and frequencies with only a few lines of code. # Acknowledgements -We thank Albert Kooistra for his help with questions and wishes regarding the KLIFS database, and David Schaller for his feedback on the OpenCADD-KLIFS module. +We thank the whole KLIFS team for providing such a great kinase resource with an easy-to-use API and especially Albert Kooistra for his help with questions and wishes regarding the KLIFS database. +We thank David Schaller for his feedback on the OpenCADD-KLIFS module. We acknowledge the contributors involved in software programs and packages used by OpenCADD-KLIFS, such as bravado, RDKit, Pandas, Jupyter, and Pytest, and Sphinx. # References \ No newline at end of file From eb008f82b562ec6fb50f8a36d0f69dd8f5e68f5f Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 08:53:00 +0100 Subject: [PATCH 05/21] Resolve AV's comments on paper draft II --- papers/opencadd-klifs/paper.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 3e960e6e..d07113ae 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -26,7 +26,7 @@ bibliography: paper.bib Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2001]. The immense research on kinases has led to an increasing amount of kinase resources [@Kooistra:2017]. Among them is the KLIFS database, which focuses on storing and analyzing structural data on kinases and interacting drugs and other small molecules [@Kanev:2021]. -The OpenCADD-KLIFS Python module offeres a convenient integration of the KLIFS data into workflows to facilitate computational kinase research. +The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS data into workflows to facilitate computational kinase research. # Statement of need @@ -43,15 +43,15 @@ standardized Pandas [@pandas] DataFrames to allow for easy and quick downstream The KLIFS database offers a REST API including an OpenAPI specification. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these OpenAPI definitions and adds wrappers to enable the following functionalities: -- A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, ligands, structures, drugs, pockets, bioactivities, structural conformations, modified residues, and coordinates; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. +- A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. - Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. - All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. - Structural files deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. -OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all interaction profiles of kinases bound to the drug Gefitinib". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. +OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all structures for the kinase EGFR in the DFG-in conformation" or "fetching the measured bioactivity profiles for all ligands that are structurally resolved in complex with EGFR". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plifify]. -For example, OpenCADD-KLIFS is applied in a [TeachOpenCADD tutorial](https://projects.volkamerlab.org/teachopencadd/talktorials/T012_query_klifs.html) to demonstrate how to fetch all kinase-ligand interaction profiles for all available EGFR kinase structures in order to visualize the per-residue interaction types and frequencies with only a few lines of code. +For example, OpenCADD-KLIFS is applied in a [TeachOpenCADD tutorial](https://projects.volkamerlab.org/teachopencadd/talktorials/T012_query_klifs.html) to demonstrate how to fetch all kinase-ligand interaction profiles for all available EGFR kinase structures to visualize the per-residue interaction types and frequencies with only a few lines of code. # Acknowledgements From 9fc37a2fbe278ec6804a825a61a267e4d3e931df Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 08:58:36 +0100 Subject: [PATCH 06/21] Add KLIFS API/website references; minor text edits --- papers/opencadd-klifs/paper.bib | 14 ++++++++++---- papers/opencadd-klifs/paper.md | 10 +++++----- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index a5f4207b..f38d4362 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -41,8 +41,6 @@ @article{vanLinden:2014 doi={10.1021/jm400378w}, } - - @article{Raschka:2017, title = {BioPandas: Working with molecular structures in pandas DataFrames}, author = {Sebastian Raschka}, @@ -64,12 +62,20 @@ @inproceedings{Kluyver:2016 url = {https://eprints.soton.ac.uk/403913/}, } +@misc{klifs_website, + author = {KLIFS}, + title = {{KLIFS website}}, + year = 2021, + publisher = {https://dev.klifs.net}, + url = {https://dev.klifs.net}, +} + @misc{klifs_swagger, author = {KLIFS}, title = {{KLIFS OpenAPI}}, year = 2021, - publisher = {https://klifs.net}, - url = {https://klifs.net/swagger/}, + publisher = {https://dev.klifs.net}, + url = {https://dev.klifs.net/swagger_v2/}, } @misc{bravado, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index d07113ae..158f6628 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -31,23 +31,23 @@ The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS da # Statement of need [OpenCADD-KLIFS](https://opencadd.readthedocs.io/en/latest/databases_klifs.html) (``opencadd.databases.klifs``) is a part of the [OpenCADD](https://opencadd.readthedocs.io/) package, a collection of Python modules for structural cheminformatics. -This module offers access to KLIFS [@Kanev:2021] data such as information about kinases, structures, ligands, +This module offers access to KLIFS data [@Kanev:2021; @klifs_website] such as information about kinases, structures, ligands, interaction fingerprints, and bioactivities. KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [vanLinden:2014]. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. The presented module provides identical APIs for the remote and local queries for KLIFS data and streamlines all output into -standardized Pandas [@pandas] DataFrames to allow for easy and quick downstream data analyses (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. +standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. -![OpenCADD-KLIFS fetches KLIFS [@Kanev:2021] data offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas [@pandas] DataFrames.\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) +![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including an OpenAPI specification. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these OpenAPI definitions and adds wrappers to enable the following functionalities: +The KLIFS database offers a REST API including an OpenAPI specification [@klifs_swagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these OpenAPI definitions and adds wrappers to enable the following functionalities: - A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. - Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. - All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. -- Structural files deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. +- Files with the structural 3D coordinates deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all structures for the kinase EGFR in the DFG-in conformation" or "fetching the measured bioactivity profiles for all ligands that are structurally resolved in complex with EGFR". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plifify]. From 642ef9a0daee2556759ca435edb5d920216fde94 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 09:00:00 +0100 Subject: [PATCH 07/21] Fix ref typos --- papers/opencadd-klifs/paper.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 158f6628..30038215 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -50,7 +50,7 @@ For example, ``session.structures.by_kinase_name`` fetches information on all st - Files with the structural 3D coordinates deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all structures for the kinase EGFR in the DFG-in conformation" or "fetching the measured bioactivity profiles for all ligands that are structurally resolved in complex with EGFR". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. -OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencaddpocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plifify]. +OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencadd_pocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plipify]. For example, OpenCADD-KLIFS is applied in a [TeachOpenCADD tutorial](https://projects.volkamerlab.org/teachopencadd/talktorials/T012_query_klifs.html) to demonstrate how to fetch all kinase-ligand interaction profiles for all available EGFR kinase structures to visualize the per-residue interaction types and frequencies with only a few lines of code. # Acknowledgements From 9e8e7e314f774f643d5167ccfa325d67b20f24a8 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 11:09:31 +0100 Subject: [PATCH 08/21] Rename OpenAPI > Swagger API (termed used in KLIFS) --- papers/opencadd-klifs/paper.bib | 2 +- papers/opencadd-klifs/paper.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index f38d4362..3818966c 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -72,7 +72,7 @@ @misc{klifs_website @misc{klifs_swagger, author = {KLIFS}, - title = {{KLIFS OpenAPI}}, + title = {{KLIFS Swagger API}}, year = 2021, publisher = {https://dev.klifs.net}, url = {https://dev.klifs.net/swagger_v2/}, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 30038215..80e1376c 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -41,7 +41,7 @@ standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream ![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including an OpenAPI specification [@klifs_swagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these OpenAPI definitions and adds wrappers to enable the following functionalities: +The KLIFS database offers a REST API including a Swagger API specification [@klifs_swagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these Swagger API definitions and adds wrappers to enable the following functionalities: - A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. From 1774ab83d711c24c7d81276917e6f752d4b5a8fa Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 11:09:55 +0100 Subject: [PATCH 09/21] Update KLIFS documentation --- docs/databases_klifs.rst | 57 +++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/docs/databases_klifs.rst b/docs/databases_klifs.rst index 1b262760..79898358 100644 --- a/docs/databases_klifs.rst +++ b/docs/databases_klifs.rst @@ -1,36 +1,39 @@ -Databases: KLIFS +OpenCADD-KLIFS ================ -Once you have installed the package, you will have access (among others) -to the ``opencadd.databases.klifs`` module. +Once you have installed the ``opencadd`` package, you will have access (among others) +to the ``opencadd.databases.klifs`` module (OpenCADD-KLIFS). +In case you wish to install only the dependencies relevant to OpenCADD-KLIFS, please follow the installation instructions `here `_. -This module offers a simple API to interact with data from KLIFS remotely and locally. +OpenCADD-KLIFS offers a simple API to interact with data from KLIFS remotely and locally. +Find a detailed tutorial at the `TeachOpenCADD platform `_ on the KLIFS database (including its Swagger API) and on how to apply the module OpenCADD-KLIFS to an example research question. What is KLIFS and who created it? --------------------------------- -"KLIFS is a kinase database that dissects experimental structures of catalytic kinase domains and the way kinase inhibitors interact with them. The KLIFS structural alignment enables the comparison of all structures and ligands to each other. Moreover, the KLIFS residue numbering scheme capturing the catalytic cleft with 85 residues enables the comparison of the interaction patterns of kinase-inhibitors, for example, to identify crucial interactions determining kinase-inhibitor selectivity." + KLIFS is a kinase database that dissects experimental structures of catalytic kinase domains and the way kinase inhibitors interact with them. The KLIFS structural alignment enables the comparison of all structures and ligands to each other. Moreover, the KLIFS residue numbering scheme capturing the catalytic cleft with 85 residues enables the comparison of the interaction patterns of kinase-inhibitors, for example, to identify crucial interactions determining kinase-inhibitor selectivity. -- KLIFS database: https://klifs.net -- KLIFS online service: https://klifs.net/swagger +- KLIFS database: https://klifs.net (official), https://dev.klifs.net/ (developmental) +- KLIFS online service: https://klifs.net/swagger (official), https://dev.klifs.net/swagger_v2 (developmental, used here) - KLIFS citation: `Nucleic Acids Res. (2021), 49, D1, D562–D569 `_ What does ``opencadd.databases.klifs`` offer? --------------------------------------------- -This module allows you to access KLIFS data such as information about kinases, structures, ligands, interaction fingerprints, bioactivities. -On the one hand, you can query the KLIFS webserver directly. +This module allows you to access KLIFS data such as information about +kinases, structures, structural conformations, modified residues, ligands, drugs, interaction fingerprints, and bioactivities. +On the one hand, you can query the KLIFS webserver directly. On the other hand, you can query your local KLIFS download. -We provide identical APIs for the remote and local queries and streamline all output into standardized ``pandas`` DataFrames for easy and quick downstream manipulation. +We provide identical APIs for the remote and local queries and streamline all output into standardized ``pandas`` DataFrames for easy and quick downstream data analyses. Work with KLIFS data from KLIFS server (remotely) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The ``opencadd.databases.klifs.remote`` submodule offers you to access KLIFS data from the KLIFS server. -Our API relies on the REST API and OpenAPI (Swagger) specification at https://dev.klifs.net/swagger_v2/ to dynamically generate a Python client with ``bravado``. +Our API relies on the REST API and Swagger API (Swagger) specification at https://dev.klifs.net/swagger_v2/ to dynamically generate a Python client with ``bravado``. Example for ``opencadd``'s API to access remote data: @@ -39,13 +42,13 @@ Example for ``opencadd``'s API to access remote data: from opencadd.databases.klifs import setup_remote # Set up remote session - remote = setup_remote() + session = setup_remote() # Get all kinases that are available remotely - remote.kinases.all_kinases() + session.kinases.all_kinases() # Get kinases by kinase name - remote.kinases.by_kinase_name(["EGFR", "BRAF"]) + session.kinases.by_kinase_name(["EGFR", "BRAF"]) Work with KLIFS data from disc (locally) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -76,19 +79,19 @@ Example for ``opencadd``'s API to access local data: from opencadd.databases.klifs import setup_local # Set up local session - local = setup_local("../../opencadd/tests/databases/data/KLIFS_download") + session = setup_local("../../opencadd/tests/databases/data/KLIFS_download") # Get all kinases that are available locally - local.kinases.all_kinases() + session.kinases.all_kinases() # Get kinases by kinase name - local.kinases.by_kinase_name(["EGFR", "BRAF"]) + session.kinases.by_kinase_name(["EGFR", "BRAF"]) How is ``opencadd.databases.klifs`` structured? ---------------------------------------------------------- -The module's structure looks like this, trying to use the same API for both modules ``local`` and ``remote`` whenever possible: +The module's structure looks like this, using the same API for both modules ``local`` and ``remote`` whenever possible: .. code-block:: console @@ -110,46 +113,46 @@ This structure mirrors the KLIFS Swagger API structure in the following way to a - ``kinases`` - Get information about kinases (groups, families, names). - - In KLIFS swagger API called ``Information``: https://dev.klifs.net/swagger_v2/#/Information + - In KLIFS Swagger API called ``Information``: https://dev.klifs.net/swagger_v2/#/Information - ``ligands`` - Get ligand information. - - In KLIFS swagger API called ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands + - In KLIFS Swagger API called ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands - ``structures`` - Get structure information. - - In KLIFS swagger API called ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures + - In KLIFS Swagger API called ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures - ``bioactivities`` - Get bioactivity information. - - In KLIFS swagger API part of ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands + - In KLIFS Swagger API part of ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands - ``interactions`` - Get interaction information. - - In KLIFS swagger API called ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions + - In KLIFS Swagger API called ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions - ``pocket`` - Get interaction information. - - In KLIFS swagger API part of ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions + - In KLIFS Swagger API part of ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions/get_interactions_match_residues - ``coordinates`` - Get structural data (structure coordinates). - - In KLIFS swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures + - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures - ``conformations`` - Get information on structure conformations. - - In KLIFS swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_conformation + - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_conformation - ``modified_residues`` - Get information on residue modifications in structures. - - In KLIFS swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_modified_residues + - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_modified_residues From 45480f52457a9c30dc2028f4aa1258964592372e Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 11:10:17 +0100 Subject: [PATCH 10/21] Update installation instructions in documentation (OpenCADD-KLIFS only) --- docs/index.rst | 9 +++++---- docs/installing_opencadd_klifs.rst | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 docs/installing_opencadd_klifs.rst diff --git a/docs/index.rst b/docs/index.rst index 2dd89243..adf4f8d2 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -35,17 +35,18 @@ OpenCADD is a Python package for structural cheminformatics! :caption: User guide installing + installing_opencadd_klifs .. toctree:: :maxdepth: 1 - :caption: Input/output formats + :caption: IO formats io tutorials/io .. toctree:: :maxdepth: 1 - :caption: Structure: Superposition + :caption: OpenCADD-superposition superposition tutorials/mda @@ -54,14 +55,14 @@ OpenCADD is a Python package for structural cheminformatics! .. toctree:: :maxdepth: 1 - :caption: Structure: Pocket + :caption: OpenCADD-pocket structure_pocket tutorials/structure_pocket .. toctree:: :maxdepth: 1 - :caption: Databases: KLIFS + :caption: OpenCADD-KLIFS databases_klifs tutorials/databases_klifs diff --git a/docs/installing_opencadd_klifs.rst b/docs/installing_opencadd_klifs.rst new file mode 100644 index 00000000..9bb5877c --- /dev/null +++ b/docs/installing_opencadd_klifs.rst @@ -0,0 +1,29 @@ +Installing OpenCADD-KLIFS only +============================== + +In case you would like to install the dependencies for the OpenCADD-KLIFS module only, please follow these instructions. + +.. note:: + + We are assuming you have a working ``mamba`` installation in your computer. + If this is not the case, please refer to their `official documentation `_. + + +Install from the conda package +------------------------------ + +1. Create a new conda environment called ``opencadd-klifs`` with the ``opencadd`` package and all its dependencies installed:: + + mamba create -n opencadd-klifs bravado pandas tqdm rdkit biopandas + +2. Activate the new conda environment:: + + conda activate opencadd-klifs + +3. Install ``opencadd`` without any dependencies (all ``opencadd-klifs`` relevant dependencies have been installed in step 1):: + + mamba install opencadd --no-deps + + If you are planning on working with Jupyter notebooks, install JupyterLab:: + + mamba install jupyterlab From fe672e745fc086a5a4e0c71e80e5f681c71fcbde Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 11:59:18 +0100 Subject: [PATCH 11/21] Try: Copy paper to paper/ folder at root dir --- paper/opencadd_klifs_toc.png | Bin 0 -> 60474 bytes paper/paper.bib | 169 +++++++++++++++++++++++++++++++++++ paper/paper.md | 62 +++++++++++++ 3 files changed, 231 insertions(+) create mode 100644 paper/opencadd_klifs_toc.png create mode 100644 paper/paper.bib create mode 100644 paper/paper.md diff --git a/paper/opencadd_klifs_toc.png b/paper/opencadd_klifs_toc.png new file mode 100644 index 0000000000000000000000000000000000000000..785734541eed081070e10d2edaa793bb3b987222 GIT binary patch literal 60474 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 Date: Mon, 1 Nov 2021 16:32:15 +0100 Subject: [PATCH 12/21] Revert last commit; keep only one paper.md --- paper/opencadd_klifs_toc.png | Bin 60474 -> 0 bytes paper/paper.bib | 169 ------------------ paper/paper.md | 62 ------- .../{paper.md => paper-superposer.md} | 0 4 files changed, 231 deletions(-) delete mode 100644 paper/opencadd_klifs_toc.png delete mode 100644 paper/paper.bib delete mode 100644 paper/paper.md rename papers/opencadd-superposition/{paper.md => paper-superposer.md} (100%) diff --git a/paper/opencadd_klifs_toc.png b/paper/opencadd_klifs_toc.png deleted file mode 100644 index 785734541eed081070e10d2edaa793bb3b987222..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60474 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 Date: Mon, 1 Nov 2021 16:33:25 +0100 Subject: [PATCH 13/21] Fix bib typo --- papers/opencadd-klifs/paper.bib | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index 3818966c..1f2ead86 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -83,7 +83,7 @@ @misc{bravado title = {{bravado}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/Yelp/bravado}, } From 31517f4056eded14b1b015ecd064659b04bd86c2 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 16:34:06 +0100 Subject: [PATCH 14/21] Fix more bib typos --- papers/opencadd-klifs/paper.bib | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index 1f2ead86..e7b33f36 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -119,7 +119,7 @@ @misc{kissim title = {{KiSSim: Subpocket-based fingerprint for kinase pocket comparison}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/volkamerlab/kissim}, } @@ -128,7 +128,7 @@ @misc{teachopencadd title = {{TeachOpenCADD: a teaching platform for computer-aided drug design (CADD) using open source packages and data}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/volkamerlab/teachopencadd}, } @@ -137,7 +137,7 @@ @misc{opencadd_pocket title = {{OpenCADD-Pocket: Identification and analysis of protein (sub)pockets}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/volkamerlab/opencadd}, } @@ -146,7 +146,7 @@ @misc{kinoml title = {{KinoML: Structure-informed machine learning for kinase modeling}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/openkinome/kinoml}, } @@ -155,7 +155,7 @@ @misc{plipify title = {{PLIPify: Protein-ligand interaction frequencies across multiple structures}}, year = 2021, publisher = {GitHub}, - journal = {GitHub repository} + journal = {GitHub repository}, url = {https://github.com/volkamerlab/plipify}, } @@ -164,6 +164,6 @@ @misc{volkamerlab title = {{Volkamer Lab website}}, year = 2021, publisher = {Volkamer Lab}, - journal = {Volkamer Lab website} + journal = {Volkamer Lab website}, url = {https://volkamerlab.org/}, } From 17b1a69ed1e33e4b0df6cadb9d19560ac34d9e68 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 16:45:15 +0100 Subject: [PATCH 15/21] Fix issues seen in Whedon-compiled draft --- papers/opencadd-klifs/paper.bib | 12 ++++++------ papers/opencadd-klifs/paper.md | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index e7b33f36..dddf6141 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -62,7 +62,7 @@ @inproceedings{Kluyver:2016 url = {https://eprints.soton.ac.uk/403913/}, } -@misc{klifs_website, +@misc{klifswebsite, author = {KLIFS}, title = {{KLIFS website}}, year = 2021, @@ -70,7 +70,7 @@ @misc{klifs_website url = {https://dev.klifs.net}, } -@misc{klifs_swagger, +@misc{klifsswagger, author = {KLIFS}, title = {{KLIFS Swagger API}}, year = 2021, @@ -115,7 +115,7 @@ @misc{jupyterhub } @misc{kissim, - author = {{Volkamer Lab}}, + author = {{KiSSim}}, title = {{KiSSim: Subpocket-based fingerprint for kinase pocket comparison}}, year = 2021, publisher = {GitHub}, @@ -124,7 +124,7 @@ @misc{kissim } @misc{teachopencadd, - author = {{Volkamer Lab}}, + author = {{TeachOpenCADD}}, title = {{TeachOpenCADD: a teaching platform for computer-aided drug design (CADD) using open source packages and data}}, year = 2021, publisher = {GitHub}, @@ -133,7 +133,7 @@ @misc{teachopencadd } @misc{opencadd_pocket, - author = {{Volkamer Lab}}, + author = {{OpenCADD}}, title = {{OpenCADD-Pocket: Identification and analysis of protein (sub)pockets}}, year = 2021, publisher = {GitHub}, @@ -151,7 +151,7 @@ @misc{kinoml } @misc{plipify, - author = {{Volkamer Lab}}, + author = {{PLIPify}}, title = {{PLIPify: Protein-ligand interaction frequencies across multiple structures}}, year = 2021, publisher = {GitHub}, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 80e1376c..dce0bb64 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -23,7 +23,7 @@ bibliography: paper.bib # Summary -Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2001]. +Protein kinases are involved in most aspects of cell life due to their role in signal transduction. Dysregulated kinases can cause severe diseases such as cancer, inflammatory and neurodegenerative diseases, which has made them a frequent target in drug discovery for the last decades [@Cohen:2021]. The immense research on kinases has led to an increasing amount of kinase resources [@Kooistra:2017]. Among them is the KLIFS database, which focuses on storing and analyzing structural data on kinases and interacting drugs and other small molecules [@Kanev:2021]. The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS data into workflows to facilitate computational kinase research. @@ -31,23 +31,23 @@ The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS da # Statement of need [OpenCADD-KLIFS](https://opencadd.readthedocs.io/en/latest/databases_klifs.html) (``opencadd.databases.klifs``) is a part of the [OpenCADD](https://opencadd.readthedocs.io/) package, a collection of Python modules for structural cheminformatics. -This module offers access to KLIFS data [@Kanev:2021; @klifs_website] such as information about kinases, structures, ligands, +This module offers access to KLIFS data [@Kanev:2021; @klifswebsite] such as information about kinases, structures, ligands, interaction fingerprints, and bioactivities. KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [vanLinden:2014]. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. The presented module provides identical APIs for the remote and local queries for KLIFS data and streamlines all output into -standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (Figure \autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. +standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (\autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. -![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output in user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) +![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output as user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including a Swagger API specification [@klifs_swagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these Swagger API definitions and adds wrappers to enable the following functionalities: +The KLIFS database offers a REST API including a Swagger API specification [@klifsswagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these Swagger API definitions and adds wrappers to enable the following functionalities: - A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. - Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. - All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. -- Files with the structural 3D coordinates deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [@biopandas] or RDKit [@rdkit]. +- Files with the structural 3D coordinates deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [Raschka:2017] or RDKit [@rdkit]. OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all structures for the kinase EGFR in the DFG-in conformation" or "fetching the measured bioactivity profiles for all ligands that are structurally resolved in complex with EGFR". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. OpenCADD-KLIFS is currently used in several projects from the Volkamer Lab [@volkamerlab] including TeachOpenCADD [@teachopencadd], OpenCADD-pocket [@opencadd_pocket], KiSSim [@kissim], KinoML [@kinoml], and PLIPify [@plipify]. From 806bdc7667a330d1c768e4a56813c96d8475c593 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 17:04:03 +0100 Subject: [PATCH 16/21] Fix more issues --- papers/opencadd-klifs/paper.bib | 8 -------- papers/opencadd-klifs/paper.md | 4 ++-- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index dddf6141..01846183 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -62,14 +62,6 @@ @inproceedings{Kluyver:2016 url = {https://eprints.soton.ac.uk/403913/}, } -@misc{klifswebsite, - author = {KLIFS}, - title = {{KLIFS website}}, - year = 2021, - publisher = {https://dev.klifs.net}, - url = {https://dev.klifs.net}, -} - @misc{klifsswagger, author = {KLIFS}, title = {{KLIFS Swagger API}}, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index dce0bb64..6a75bbc9 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -31,12 +31,12 @@ The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS da # Statement of need [OpenCADD-KLIFS](https://opencadd.readthedocs.io/en/latest/databases_klifs.html) (``opencadd.databases.klifs``) is a part of the [OpenCADD](https://opencadd.readthedocs.io/) package, a collection of Python modules for structural cheminformatics. -This module offers access to KLIFS data [@Kanev:2021; @klifswebsite] such as information about kinases, structures, ligands, +This module offers access to KLIFS data [Kanev:2021] such as information about kinases, structures, ligands, interaction fingerprints, and bioactivities. KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [vanLinden:2014]. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. The presented module provides identical APIs for the remote and local queries for KLIFS data and streamlines all output into -standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (\autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; @Kluyver:2016]. +standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (\autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; Kluyver:2016]. ![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output as user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) From e64c27a663096c340f362145a3303642ca9ea0c8 Mon Sep 17 00:00:00 2001 From: dominiquesydow Date: Mon, 1 Nov 2021 17:06:29 +0100 Subject: [PATCH 17/21] Fix more issues --- papers/opencadd-klifs/paper.bib | 9 --------- papers/opencadd-klifs/paper.md | 6 +++--- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index 01846183..c8953220 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -97,15 +97,6 @@ @misc{rdkit url = {http://www.rdkit.org}, } -@misc{jupyterhub, - author = {{Project Jupyter}}, - title = {{Jupyter Hub}}, - year = 2021, - publisher = {Jupyter}, - journal = {Jupyter website}, - url = {https://jupyter.org/hub}, -} - @misc{kissim, author = {{KiSSim}}, title = {{KiSSim: Subpocket-based fingerprint for kinase pocket comparison}}, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 6a75bbc9..330ca11b 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -31,12 +31,12 @@ The OpenCADD-KLIFS Python module offers a convenient integration of the KLIFS da # Statement of need [OpenCADD-KLIFS](https://opencadd.readthedocs.io/en/latest/databases_klifs.html) (``opencadd.databases.klifs``) is a part of the [OpenCADD](https://opencadd.readthedocs.io/) package, a collection of Python modules for structural cheminformatics. -This module offers access to KLIFS data [Kanev:2021] such as information about kinases, structures, ligands, +This module offers access to KLIFS data [@Kanev:2021] such as information about kinases, structures, ligands, interaction fingerprints, and bioactivities. -KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [vanLinden:2014]. +KLIFS thereby focuses especially on the ATP binding site, defined as a set of 85 residues and aligned across all structures using a multiple sequence alignment (MSA) [@vanLinden:2014]. With OpenCADD-KLIFS, KLIFS data can be queried either locally from a KLIFS download or remotely from the KLIFS webserver. The presented module provides identical APIs for the remote and local queries for KLIFS data and streamlines all output into -standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (\autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@jupyterhub; Kluyver:2016]. +standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream data analyses (\autoref{fig:opencadd_klifs_toc}). This Pandas-focused setup is ideal to work with in Jupyter notebooks [@Kluyver:2016]. ![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output as user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) From 331f39c980f7389c71feb0630aaa4160a151c48a Mon Sep 17 00:00:00 2001 From: dominiquesydow Date: Mon, 1 Nov 2021 17:40:08 +0100 Subject: [PATCH 18/21] Update OpenCADD-KLIFS installation --- docs/installing_opencadd_klifs.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installing_opencadd_klifs.rst b/docs/installing_opencadd_klifs.rst index 9bb5877c..6ebeb851 100644 --- a/docs/installing_opencadd_klifs.rst +++ b/docs/installing_opencadd_klifs.rst @@ -26,4 +26,4 @@ Install from the conda package If you are planning on working with Jupyter notebooks, install JupyterLab:: - mamba install jupyterlab + mamba install jupyterlab ipywidgets From 205821ea5c45fa8d15866e2c7f9bcc39ada6e459 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 17:50:21 +0100 Subject: [PATCH 19/21] Update OpenCADD-KLIFS installation II --- docs/installing_opencadd_klifs.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installing_opencadd_klifs.rst b/docs/installing_opencadd_klifs.rst index 6ebeb851..379a291d 100644 --- a/docs/installing_opencadd_klifs.rst +++ b/docs/installing_opencadd_klifs.rst @@ -24,6 +24,6 @@ Install from the conda package mamba install opencadd --no-deps - If you are planning on working with Jupyter notebooks, install JupyterLab:: + If you are planning on working with Jupyter notebooks, install JupyterLab and IPyWidgets:: mamba install jupyterlab ipywidgets From b8a67f625d40d60e94d406d4a13a60654908a724 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 1 Nov 2021 21:23:22 +0100 Subject: [PATCH 20/21] Apply Jaime's suggestions --- docs/databases_klifs.rst | 24 +++++++++---------- opencadd/databases/klifs/core.py | 2 +- .../databases/test_sync_klifs_and_opencadd.py | 2 +- papers/opencadd-klifs/paper.bib | 2 +- papers/opencadd-klifs/paper.md | 9 ++++--- 5 files changed, 19 insertions(+), 20 deletions(-) diff --git a/docs/databases_klifs.rst b/docs/databases_klifs.rst index 79898358..229adaf6 100644 --- a/docs/databases_klifs.rst +++ b/docs/databases_klifs.rst @@ -7,7 +7,7 @@ In case you wish to install only the dependencies relevant to OpenCADD-KLIFS, pl OpenCADD-KLIFS offers a simple API to interact with data from KLIFS remotely and locally. -Find a detailed tutorial at the `TeachOpenCADD platform `_ on the KLIFS database (including its Swagger API) and on how to apply the module OpenCADD-KLIFS to an example research question. +Find a detailed tutorial at the `TeachOpenCADD platform `_ on the KLIFS database and on how to apply the module OpenCADD-KLIFS to an example research question. What is KLIFS and who created it? --------------------------------- @@ -33,7 +33,7 @@ Work with KLIFS data from KLIFS server (remotely) The ``opencadd.databases.klifs.remote`` submodule offers you to access KLIFS data from the KLIFS server. -Our API relies on the REST API and Swagger API (Swagger) specification at https://dev.klifs.net/swagger_v2/ to dynamically generate a Python client with ``bravado``. +Our API relies on the REST API and OpenAPI (formerly Swagger API) specification at https://dev.klifs.net/swagger_v2/ to dynamically generate a Python client with ``bravado``. Example for ``opencadd``'s API to access remote data: @@ -108,51 +108,51 @@ The module's structure looks like this, using the same API for both modules ``lo ├── utils.py # Defines utility functions. └── exceptions.py # Defines exceptions. -This structure mirrors the KLIFS Swagger API structure in the following way to access different kinds of information both remotely and locally: +This structure mirrors the KLIFS OpenAPI structure in the following way to access different kinds of information both remotely and locally: - ``kinases`` - Get information about kinases (groups, families, names). - - In KLIFS Swagger API called ``Information``: https://dev.klifs.net/swagger_v2/#/Information + - In KLIFS OpenAPI called ``Information``: https://dev.klifs.net/swagger_v2/#/Information - ``ligands`` - Get ligand information. - - In KLIFS Swagger API called ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands + - In KLIFS OpenAPI called ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands - ``structures`` - Get structure information. - - In KLIFS Swagger API called ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures + - In KLIFS OpenAPI called ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures - ``bioactivities`` - Get bioactivity information. - - In KLIFS Swagger API part of ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands + - In KLIFS OpenAPI part of ``Ligands``: https://dev.klifs.net/swagger_v2/#/Ligands - ``interactions`` - Get interaction information. - - In KLIFS Swagger API called ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions + - In KLIFS OpenAPI called ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions - ``pocket`` - Get interaction information. - - In KLIFS Swagger API part of ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions/get_interactions_match_residues + - In KLIFS OpenAPI part of ``Interactions``: https://dev.klifs.net/swagger_v2/#/Interactions/get_interactions_match_residues - ``coordinates`` - Get structural data (structure coordinates). - - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures + - In KLIFS OpenAPI part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures - ``conformations`` - Get information on structure conformations. - - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_conformation + - In KLIFS OpenAPI part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_conformation - ``modified_residues`` - Get information on residue modifications in structures. - - In KLIFS Swagger API part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_modified_residues + - In KLIFS OpenAPI part of ``Structures``: https://dev.klifs.net/swagger_v2/#/Structures/get_structure_modified_residues diff --git a/opencadd/databases/klifs/core.py b/opencadd/databases/klifs/core.py index bd61ac30..37378f69 100644 --- a/opencadd/databases/klifs/core.py +++ b/opencadd/databases/klifs/core.py @@ -1443,7 +1443,7 @@ class DrugsProvider(BaseProvider): """ Class for drugs requests. - From the KLIFS Swagger API: + From the KLIFS OpenAPI: https://dev.klifs.net/swagger_v2/#/Ligands/get_drug_list > The drug list endpoint returns a list of all annotated kinase ligands that are either > approved or are/have been in clinical trials. diff --git a/opencadd/tests/databases/test_sync_klifs_and_opencadd.py b/opencadd/tests/databases/test_sync_klifs_and_opencadd.py index ec359b58..b2d47830 100644 --- a/opencadd/tests/databases/test_sync_klifs_and_opencadd.py +++ b/opencadd/tests/databases/test_sync_klifs_and_opencadd.py @@ -9,7 +9,7 @@ class TestSyncKlifsSwaggerWithOpencadd: """ - Test if opencadd is up-to-date with the KLIFS Swagger API (remote!). + Test if opencadd is up-to-date with the KLIFS OpenAPI (remote!). """ def _test_klifs_model(self, data_opencadd, data_klifs): diff --git a/papers/opencadd-klifs/paper.bib b/papers/opencadd-klifs/paper.bib index c8953220..d1ea7459 100644 --- a/papers/opencadd-klifs/paper.bib +++ b/papers/opencadd-klifs/paper.bib @@ -64,7 +64,7 @@ @inproceedings{Kluyver:2016 @misc{klifsswagger, author = {KLIFS}, - title = {{KLIFS Swagger API}}, + title = {{KLIFS OpenAPI}}, year = 2021, publisher = {https://dev.klifs.net}, url = {https://dev.klifs.net/swagger_v2/}, diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 330ca11b..4daa3bfe 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -41,12 +41,11 @@ standardized Pandas DataFrames [@pandas] to allow for easy and quick downstream ![OpenCADD-KLIFS fetches KLIFS data [@Kanev:2021] offline from a KLIFS download or online from the KLIFS database and formats the output as user-friendly Pandas DataFrames [@pandas].\label{fig:opencadd_klifs_toc}](opencadd_klifs_toc.png) -The KLIFS database offers a REST API including a Swagger API specification [@klifsswagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on these Swagger API definitions and adds wrappers to enable the following functionalities: +The KLIFS database offers a REST API compliant with the OpenAPI specification [@klifsswagger]. Our module OpenCADD-KLIFS uses bravado [@bravado] to dynamically generate a Python client based on the OpenAPI definitions and adds wrappers to enable the following functionalities: -- A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. -For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. -- Query results obtained from the remote KLIFS webserver are streamlined with those obtained from a local KLIFS download using the same API. -- All results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. +- A session is set up, which allows access to various KLIFS *data sources* by different *identifiers* with the API ``session.data_source.by_identifier``. *Data sources* currently include kinases, structures and annotated conformations, modified residues, pockets, ligands, drugs, and bioactivities; *identifiers* refer to kinase names, PDB IDs, KLIFS IDs, and more. For example, ``session.structures.by_kinase_name`` fetches information on all structures for a query kinase. +- The same API is used for local and remote sessions. +- The returned data follows the same schema regardless of the session type (local/remote); all results obtained with bravado are formatted as Pandas DataFrames with standardized column names, data types, and handling of missing data. - Files with the structural 3D coordinates deposited on KLIFS include full complexes or selections such as proteins, pockets, ligands, and more. These files can be downloaded to disc or loaded via biopandas [Raschka:2017] or RDKit [@rdkit]. OpenCADD-KLIFS is especially convenient whenever users are interested in multiple or more complex queries such as "fetching all structures for the kinase EGFR in the DFG-in conformation" or "fetching the measured bioactivity profiles for all ligands that are structurally resolved in complex with EGFR". Formatting the output as DataFrames facilitates subsequent filtering steps and DataFrame merges in case multiple KLIFS datasets need to be combined. From ee3488c1ed7ac5a1d9f55ad828778b23d182935c Mon Sep 17 00:00:00 2001 From: dominiquesydow Date: Mon, 1 Nov 2021 21:40:49 +0100 Subject: [PATCH 21/21] Add ORCIDs --- papers/opencadd-klifs/paper.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/papers/opencadd-klifs/paper.md b/papers/opencadd-klifs/paper.md index 4daa3bfe..250c1686 100644 --- a/papers/opencadd-klifs/paper.md +++ b/papers/opencadd-klifs/paper.md @@ -9,14 +9,14 @@ authors: orcid: 0000-0003-4205-8705 affiliation: 1 - name: Jaime Rodríguez-Guerra - affiliation: 2 + orcid: 0000-0001-8974-1566 + affiliation: 1 - name: Andrea Volkamer affiliation: 1 + orcid: 0000-0002-3760-580X affiliations: - name: _In Silico_ Toxicology and Structural Bioinformatics, Institute of Physiology, Charité – Universitätsmedizin Berlin, corporate member of Freie Universität Berlin and Humboldt-Universität zu Berlin, Augustenburger Platz 1, 13353 Berlin, Germany index: 1 - - name: Institution Name - index: 2 date: 27 October 2021 bibliography: paper.bib ---