Giter Site home page Giter Site logo

fragalysis-backend's People

Contributors

abradle avatar alanbchristie avatar boriskovar-m2ms avatar dependabot[bot] avatar duncanpeacock avatar kaliif avatar matej-vavrek avatar reskyner avatar roman-pis-compote avatar rsanchezgarc avatar tdudgeon avatar tibor-postek-m2ms avatar waztom avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

fragalysis-backend's Issues

Wonka: port code from xchem/fragalysis-wonka

Port the scientific code from the refactored Wonka repo into the fragalysis-backend (or fragalysis) codebase.

This will enable:

  • clustering of ligands by pharmacophores: conservation of pharmacophore-based interactions

  • clustering of waters: analysis of conserved water interactions, key waters for binding, water displacement

  • clustering of residues: local analysis of flexibility or conformational changes induced by binding

  • Move code over

  • Add tables to Django models to accommodate cluster information

  • Construct endpoints via. views

Update CompoundMoleculesView to ComputedMoleculesView

Needs updating to reflect recent changes to the db

endpoint: /api/compound-molecules

returns:

"results": [
        {
            "id": 251,
            "sdf_info": "PAU-WEI-b9b69149-9\n     RDKit          3D\n\n 38 41  0  0  1  0  0  0  0  0999 V2000\n    6.3480   -7.5080   33.2000 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.2830   -6.6860   31.9240 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.7580   -5.5850   31.8940 O   0  0  0  0  0  0  0  0  0  0  0  0\n    5.6810   -7.2030   30.8060 N   0  0  0  0  0  0  0  0  0  0  0  0\n    5.6180   -6.4080   29.5710 C   0  0  0  0  0  0  0  0  0  0  0  0\n    7.0260   -6.0320   29.1390 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.9620   -4.8630   28.1680 C   0  0  0  0  0  0  0  0  0  0  0  0\n    5.9460   -3.9550   28.0940 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.2570   -3.0700   27.1030 N   0  0  0  0  0  0  0  0  0  0  0  0\n    7.4620   -3.4230   26.5640 C   0  0  0  0  0  0  0  0  0  0  0  0\n    8.1810   -2.8260   25.5360 C   0  0  0  0  0  0  0  0  0  0  0  0\n    7.6440   -1.5880   24.8360 C   0  0  0  0  0  0  0  0  0  0  0  0\n    8.4850   -0.3830   25.2240 C   0  0  0  0  0  0  0  0  0  0  0  0\n    9.8240   -0.4480   24.5090 C   0  0  0  0  0  0  0  0  0  0  0  0\n   10.4070    0.9520   24.3960 C   0  0  0  0  0  0  0  0  0  0  0  0\n   11.7760    1.1090   24.2010 C   0  0  0  0  0  0  0  0  0  0  0  0\n   12.3140    2.3870   24.0950 C   0  0  0  0  0  0  0  0  0  0  0  0\n   11.4750    3.4930   24.1850 C   0  0  0  0  0  0  0  0  0  0  0  0\n   12.0580    4.8920   24.0700 C   0  0  0  0  0  0  0  0  0  0  0  0\n   13.3000    4.8170   23.6010 F   0  0  0  0  0  0  0  0  0  0  0  0\n   11.3130    5.6150   23.2380 F   0  0  0  0  0  0  0  0  0  0  0  0\n   12.0700    5.4680   25.2680 F   0  0  0  0  0  0  0  0  0  0  0  0\n   10.1070    3.3370   24.3810 C   0  0  0  0  0  0  0  0  0  0  0  0\n    9.5690    2.0580   24.4880 C   0  0  0  0  0  0  0  0  0  0  0  0\n    7.7070   -1.7820   23.3810 N   0  0  0  0  0  0  0  0  0  0  0  0\n    6.9560   -3.0120   23.0780 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.9100   -3.2950   21.5840 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.5860   -2.0830   20.8140 N   0  0  0  0  0  0  0  0  0  0  0  0\n    5.8520   -2.2200   19.6310 C   0  0  0  0  0  0  0  0  0  0  0  0\n    5.5020   -3.3080   19.2650 O   0  0  0  0  0  0  0  0  0  0  0  0\n    5.4980   -0.9920   18.8090 C   0  0  0  0  0  0  0  0  0  0  0  0\n    6.9460    0.0220   18.6030 Cl  0  0  0  0  0  0  0  0  0  0  0  0\n    6.9910   -0.7360   21.2480 C   0  0  0  0  0  0  0  0  0  0  0  0\n    7.0390   -0.6240   22.7640 C   0  0  0  0  0  0  0  0  0  0  0  0\n    9.4040   -3.3490   25.1300 C   0  0  0  0  0  0  0  0  0  0  0  0\n    9.9020   -4.4830   25.7650 C   0  0  0  0  0  0  0  0  0  0  0  0\n    9.1670   -5.0650   26.7920 C   0  0  0  0  0  0  0  0  0  0  0  0\n    7.9430   -4.5440   27.2020 C   0  0  0  0  0  0  0  0  0  0  0  0\n  1  2  1  0\n  2  3  2  0\n  2  4  1  0\n  4  5  1  0\n  5  6  1  0\n  6  7  1  0\n  7  8  2  0\n  7 38  1  0\n  8  9  1  0\n  9 10  1  0\n 10 11  1  0\n 10 38  2  0\n 11 12  1  0\n 11 35  2  0\n 12 13  1  0\n 12 25  1  0\n 13 14  1  0\n 14 15  1  0\n 15 16  2  0\n 15 24  1  0\n 16 17  1  0\n 17 18  2  0\n 18 19  1  0\n 18 23  1  0\n 19 20  1  0\n 19 21  1  0\n 19 22  1  0\n 23 24  2  0\n 25 26  1  0\n 25 34  1  0\n 26 27  1  0\n 27 28  1  0\n 28 29  1  0\n 28 33  1  0\n 29 30  2  0\n 29 31  1  0\n 31 32  1  0\n 33 34  1  0\n 35 36  1  0\n 36 37  2  0\n 37 38  1  0\nM  CHG  1  25   1\nM  END\n",
            "name": "PAU-WEI-b9b69149-9",
            "smiles": "CC(=O)NCCc1c[nH]c2c(C(CCc3ccc(C(F)(F)F)cc3)[NH+]3CCN(C(=O)CCl)CC3)cccc12",
            "original_smiles": "CC(=O)NCCc1c[nH]c2c(C(CCc3ccc(C(F)(F)F)cc3)N3CCN(C(=O)CCl)CC3)cccc12",
            "pdb_info": "http://fragalysis-tibor.apps.xchem.diamond.ac.uk/media/pdbs/Mpro-x0830_0_apo.pdb",
            "compound_set": 8,
            "inspiration_frags": []
        },

...
  • point to the correct table.

  • Check with @tibor-postek-m2ms which smiles (original smiles or smiles) are being passed to the mol_img view to generate image.

  • get inspiration frags from molecules table (from design set)

Port loader code

Port loader code so that uploads can be achieved by PUT request

  • move loader code into backend
  • add celery tasks to wrap around loader steps
  • create endpoints for celery task monitoring
  • create form models to specify data for upload
  • add form to a template
  • add js code for task url retrieval from upload template
  • add upload task endpoint to check upload task status
  • add endpoint for upload through views

Store state/button clicks as actions for hypotheses context

For tracking hypotheses, state or button clicks should be given 'scientific' context in the form of a list of interface interactions.

e.g.

Turned on Benzotriazole site
Turned on x0107 ligand
Turned on x0107 interactions
Turned on x0107 vectors
Enumerated graph network for CC(=O)Nc1cncc1[Xe] - 3 molecules found
Displayed ligand-based conformation estimate for molecule 3
Added molecule 3 to shopping cart

These actions could be linked to ELN/external db to store reasoning behind decisions

Replace http URLs by relative URLs

This is a follow on from issue #226 and relates to new security rules built into the latest version of Chrome.

In the Fragalysis Backend, all formatted URLS that have http in them should be changed to relative URLs.
These will likely affect models that that Filefields in them (it's default the serialization behaviour for these) - for example, the ones ending in /media/target/xxxx.zip and /media/target/metadata.csv.

Note that this change should be coordinated with the frontend as some URLs from the backend are modified in transit. We don't want to break these.

Download links not working

DRF passes back http links for file downloads. These should be https links, or chrome won't allow download. Might be some nginx/django settings that need adjusting

Error: Mixed Content: The site at ‘<URL>’ was loaded over a secure connection, but the file at ‘<URL>’ was redirected through an insecure connection. This file should be served over HTTPS. This download has been blocked. See <URL> for more details.

State breaks when data updated (json object)

State is saved in a json object for rendering in the front-end. The format of the object is quite complex, so we should assess wether there is a better way to do this.

options:

  • save state in a more robust way (tables)
  • consider if state can be represented by URL - better routing
  • fix loader (xchem/fragalysis-loader) issues - db keys changing when data updated?

Global protein flexibility - to map onto template

Calculate a map/surface constructed either from WONKA clusters or from all known protein conformations to demonstrate global areas of protein flexibility. (based on backbone flexibility - with 'local' flexibility demonstrated by Wonka clusters)

e.g.:

Screenshot 2020-09-03 at 14 32 17

Later:

  • include flexibility from MD

  • Algorithm - how to calculate flexibility (average movement after alignment/RMSD on alignment of alpha-C backbone)

  • Port algorithm into back-end/fragalysis code

  • Add tables to django models

  • Construct endpoints from views

Requirements.txt

Requirements.txt has mysql-connector==2.1.7, mysql-connector-python==8.0.21, pymysql – As the DB is now postgres, these should all be removed at a suitable opportunity.

Tag official releases

The backend image is used as a FROM in downstream container images like the fragalysis-loader (https://github.com/xchem/fragalysis-loader) and fragalysis-stack (https://github.com/xchem/fragalysis-stack) but, at the moment we only publish a "latest" image.

Currently, if you introduce a new migration or behaviour change (for example) - and you re-build an older stack or loader (say 1.0.7) - then the stack or loader you build may contain unexpected migrations or behaviour changes.

Recommended pattern:

When a stable backend is available...

  1. Create a GitHub tag (or release) in the backend repo (like 1.0.0)
  2. Travis will push the image automatically to Docker (i.e. as xchem/fragalysis-backend:1.0.0)
  3. When the backend has been pushed update each downstream repo's Dockerfile and replace the ARG BE_IMAGE_TAG="latest" with ARG BE_IMAGE_TAG="1.0.0"

Upload task should return json

Upload task currently re-renders page. Need to pass json to .html template

  • Return json for table when data is not validated in views

  • Return json links when data is uploaded

  • Return json string if upload fails

Endpoint to trigger a workflow

Add a view to trigger a workflow.

Info needed:

  • zipped input(?) or json object containing required data
  • workflow name
  • workflow type

With that info, we should be able to send the data to a specific workflow (wherever that is) to be executed

Workflow code should be written and maintained in a separate repository (e.g. a collection of nextflow, galaxy, squonk etc. workflows) that contains all of the code needed to execute the workflow in/on the correct container/serrvice - the endpoint should return:

  1. A success/fail notification for if the workflow has started
  2. An id for the workflow/task

The ID should then be able to be used at an additional endpoint to examine the status
When the workflow is complete, a final endpoint will be used to import/download the data

Ligand/protein complementarity - pharmacophore/ESP

Mapping of complementarity onto surface for protein & ligand individually - colour regions of protein/ligand by complementarity based on whatever metric - e.g. electrostatic complementarity (similarly to cresset)

e.g. protein:
image

e.g. protein or ligand SAS vs. ESP:
image

  • Algorithm - find open source version and map onto SAS
  • Models - add to hypothesis tables
  • Endpoints - via. views

Track provenance of data

Django history currently used on Molecules model, but nowhere else. We should track the provenance of our data, even if the feature is not currently used on front-end

Update CompoundSetView to ComputedSetView

The current CompoundSetView looks at the old db schema. This needs updating to reflect recent db changes.

endpoint: /api/compound-sets/

returns:

{
    "count": 4,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 8,
            "name": "continiYsZu7FD",
            "submitted_sdf": "http://fragalysis-tibor.apps.xchem.diamond.ac.uk/media/code/media/compound_sets/compound-set_contini_YsZu7FD.sdf",
            "spec_version": 1.2,
            "method_url": "https://discuss.postera.ai/t/results-from-nwat-mmgbsa-workflow-on-covalent-warheads/1225",
            "target": 55,
            "submitter": 11
        },
...

name

  • change to use unique_name instead

submitted_sdf - no changes needed
spec_verison - no changes needed
method_url - no changes needed
target - no changes needed
submitter - no changes needed

Optional initialisation of Sentry - and avoid exposing the DSN?

Sentry's cool but its initialisation in the backend is not optional. Consequently if you run a migration on your desktop and it fails then you get an alarm in your chosen Sentry recipient (slack in this case).

  1. Do you really want every build problem from everyone around the world whose forked the repo written to Slack?
  2. Do you want to give the world your DSN key? i.e. anyone anywhere can send alerts to your Sentry account.

Suggest: -

  • Pull Sentry DSN from an environment variable (e.g. FRAGALYSIS_BACKEND_SENTRY_DNS) rather than have it hard-coded
  • Add logic that prevents the intitialisation of Sentry if the variable is -blank- or not defined
  • Default value provided by encrypted variable in the Kubernetes Ansible code (separate repo) so "official" stacks report errors

An added advantage:

Different stack deployments can use different DSN keys - so you know the alert belongs to deployment/customer X, Y or Z.

Endpoint to retrieve workflow status

Add a view to retrieve workflow status - this should be standardised across however many workflow execution systems we use to: Queueing, running, success, fail

Info needed:

  • task id

Workflow code should be written and maintained in a separate repository (e.g. a collection of nextflow, galaxy, squonk etc. workflows) that contains all of the code needed to execute the workflow in/on the correct container/serrvice - the endpoint should return:

When the workflow is complete, a final endpoint will be used to import/download the data

Update NumericalScoresView to include compound properties

Every ComputedMolecule now has an associated Compound. In the Compound object, there are a number of computed descriptors (as there are for the Molecules on the LHS). These need to be added to the NumericalScoresView so that these properties can be added/sorted/filtered on the front-end

Validate task should return json

Validate task currently re-renders page. Need to pass json to .html template

  • Return json for table when data is not validated in views

  • Return json string when data is validated

Migrate the codebase to py3

Codebase is currently still running on py2.7, which has been deprecated for some time. We need to upgrade.

  • change docker build to use a py3 image

  • run py2to3

  • upgrade packages

  • change packages to use latest compatible py3 versions

Ligand model confidence atom selections: Upload/store/serve

Use-case:

  • Crystallographer selects part of a ligand that they are not confident in - e.g. the ligand doesn't fit the e density well, or there is no e density to model part of the ligand into
  • On fragalysis, the user can visualise this

Technical:

  • atom selection saved in review app, using the same .mol file used for sdf_info in the fragalysis molecule table
  • this selection (plus additional comments) is uploaded to fragalysis when new data is added
  • the selection is put into a model confidence table linked to a fragalysis molecule
  • a button or mode in the front-end uses this info to render an alternative representation of parts of the molecule selected as low confidence

To do:

  • Add models
  • Add mechanism for upload via. loader
  • Serve data at endpoint - views

Document fragment network

Documentation for

a) the fragment network is used to calculate new molecules in the loader
b) if/how the fragment network is queried to look for new molecules (not found in the loader stage in the back-end)
c) how the cypher queries are wrapped in the back-end
d) how to add new queries as endpoints (some minimal info about the schema needed to allow building of queries)

ForeignKey(unique=True) warnings in initial migrations

Noticed the following four warnings repeated during initial stack database migrations. They might be harmless but they do clutter the initial output: -

xchem_db.DataProcessing.crystal_name: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
	HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
xchem_db.Dimple.crystal_name: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
	HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
xchem_db.Lab.crystal_name: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
	HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
xchem_db.ProasisLeads.reference_pdb: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
	HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.
xchem_db.Refinement.crystal_name: (fields.W342) Setting unique=True on a ForeignKey has the same effect as using a OneToOneField.
	HINT: ForeignKey(unique=True) is usually better served by a OneToOneField.

Add vendor compound-id to Cipher queries

Add the compound-id from the vendor to the information currently returned from the Neo4j database (currently is smiles) so this can be displayed on the React Front end in fragalysis.

Initial Analysis:

This looks like the area concerned - maybe confirm with Boris:
VectorsView

Check use of fragalysis function: decorate.py -> get_3d_vects_for_mol.
This is used in the VectorsSerializer for VectorsView -> api call api/vectors.
On first look, the comp-id is included in the information, so it might be how the frontend uses the info, but check.

Problems with F button with fragments bound to multiple chains

I have uploaded to nsp13 target a few compounds. All inspirational fragments belong to chain B, but Fragalysis is selecting two of them from chain A and one from chain B.

I am pasting the sdf file.
################################

ver_1.2
RDKit 2D

1 0 0 0 0 0 0 0 0 0999 V2000
0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0
M END

<submitter_name> (1)
Ruben Sanchez Garcia

<submitter_email> (1)
[email protected]

<submitter_institution> (1)
University of Oxford

<generation_date> (1)
2021-02-11

(1)
Fragmenstein

<ref_url> (1)
https://github.com/matteoferla/Fragmenstein

(1)
The name of the compound

(1)
The SMILES of the compound

<ref_pdb> (1)
A pdb inlcuded in fragalysis or uploaded. E.g. x0830_0

<ref_mols> (1)
The inspirational fragments usded to propose the compound

<fragmensteinOld_score> (1)
Score

<LE_score> (1)
Score

<comRMSD_score> (1)
Score

<fragmensteinNew_score> (1)
Score

$$$$
x0020_0B_0-x0020_0B_1-x0020_0B_3-x0020_0B_4-x0029_
RDKit 3D

17 18 0 0 0 0 0 0 0 0999 V2000
-27.3110 40.2800 -57.4680 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.7820 41.5570 -57.5990 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.3330 42.4350 -58.7040 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.3510 39.8000 -58.5920 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.5560 40.1980 -56.1850 N 0 0 0 0 0 0 0 0 0 0 0 0
-28.4250 39.3630 -57.0970 N 0 0 0 0 0 0 0 0 0 0 0 0
-26.5110 40.5040 -59.9400 C 0 0 1 0 0 0 0 0 0 0 0 0
-26.8300 38.9820 -55.5650 C 0 0 0 0 0 0 0 0 0 0 0 0
-28.0170 38.4690 -56.1440 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.3370 41.9790 -59.7430 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.5790 39.9900 -60.9260 O 0 0 0 0 0 0 0 0 0 0 0 0
-24.7210 39.0260 -60.5150 C 0 0 0 0 0 0 0 0 0 0 0 0
-24.5570 38.8100 -59.2520 N 0 0 0 0 0 0 0 0 0 0 0 0
-24.1160 38.4060 -61.5660 N 0 0 0 0 0 0 0 0 0 0 0 0
-23.6700 37.8220 -58.8990 N 0 0 0 0 0 0 0 0 0 0 0 0
-24.1570 37.0090 -58.0360 C 0 0 0 0 0 0 0 0 0 0 0 0
-23.4860 35.9480 -57.5380 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
1 4 1 0
1 5 1 0
1 6 1 0
4 7 1 0
5 8 1 0
6 9 1 0
8 9 2 0
3 10 1 0
7 10 1 0
7 11 1 6
11 12 1 0
12 13 2 3
12 14 1 0
13 15 1 0
15 16 2 3
16 17 1 0
M END

(2)
NC(=NN=CO)OC1CC=CC2(C1)NC=CN2

(2)

(2)
full

<∆∆G> (2)
-5.134296315835306

<∆G_bound> (2)
-4.412044765972153

<∆G_unbound> (2)
0.7222515498631529

(2)
0.9106801328390915

<N_constrained_atoms> (2)
16

<N_unconstrained_atoms> (2)
1

(2)
47.41563105583191

(2)
[]

(2)
[]

<fragmensteinOld_score> (2)
-1.516179

<LE_score> (2)
-0.302017

<comRMSD_score> (2)
0.91068

<fragmensteinNew_score> (2)
0.225068

<ref_mols> (2)
x0020_0B,x0029_0B,x0257_0B

<ref_pdb> (2)
x0020

(2)
NC(=NN=CO)O[C@@h]1CC=CC2(C1)NC=CN2

$$$$
x0020_0B_0-x0020_0B_3-x0020_0B_4-x0029_0B_3-x0257_
RDKit 3D

15 16 0 0 0 0 0 0 0 0999 V2000
-27.4400 40.4070 -57.4060 N 0 0 0 0 0 0 0 0 0 0 0 0
-27.9190 41.6780 -57.7450 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.5770 42.3430 -58.8590 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.5430 39.7210 -58.3910 C 0 0 1 0 0 0 0 0 0 0 0 0
-28.0850 39.5520 -56.5060 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.1390 40.5440 -59.6200 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.5260 38.3980 -56.0760 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.7010 38.6680 -57.6630 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.6690 41.7730 -59.8100 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.2170 38.0520 -56.5680 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.2500 39.9890 -60.5880 O 0 0 0 0 0 0 0 0 0 0 0 0
-25.5350 37.0960 -55.8920 F 0 0 0 0 0 0 0 0 0 0 0 0
-24.2270 39.1350 -60.2650 C 0 0 0 0 0 0 0 0 0 0 0 0
-23.6330 39.0260 -59.2070 O 0 0 0 0 0 0 0 0 0 0 0 0
-23.9080 38.3630 -61.3300 N 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
1 4 1 0
1 5 1 0
4 6 1 0
5 7 2 0
4 8 1 1
3 9 1 0
6 9 2 0
7 10 1 0
8 10 2 0
6 11 1 0
10 12 1 0
11 13 1 0
13 14 2 0
13 15 1 0
M END

(3)
NC(=O)OC1=CC=CN2C=CC(F)=CC12

(3)

(3)
full

<∆∆G> (3)
-3.2125426166164672

<∆G_bound> (3)
-2.8300333773251842

<∆G_unbound> (3)
0.3825092392912831

(3)
0.7860765441948585

<N_constrained_atoms> (3)
14

<N_unconstrained_atoms> (3)
1

(3)
40.579734325408936

(3)
[]

(3)
[]

<fragmensteinOld_score> (3)
-1.056432

<LE_score> (3)
-0.21417

<comRMSD_score> (3)
0.786077

<fragmensteinNew_score> (3)
0.458834

<ref_mols> (3)
x0020_0B,x0029_0B,x0257_0B

<ref_pdb> (3)
x0020

(3)
NC(=O)OC1=CC=CN2C=CC(F)=C[C@H]12

$$$$
x0020_0B_0-x0020_0B_1-x0020_0B_2-x0020_0B_3-x0029_
RDKit 3D

17 18 0 0 0 0 0 0 0 0999 V2000
-27.2700 40.4190 -57.1050 C 0 0 2 0 0 0 0 0 0 0 0 0
-26.5910 40.0480 -56.0010 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.0620 38.8240 -55.4190 C 0 0 0 0 0 0 0 0 0 0 0 0
-28.2500 39.3150 -57.2190 N 0 0 0 0 0 0 0 0 0 0 0 0
-25.9390 40.6350 -58.3040 S 0 0 2 0 0 0 0 0 0 0 0 0
-28.0180 41.7820 -57.1890 C 0 0 0 0 0 0 0 0 0 0 0 0
-28.1080 38.3320 -56.1100 O 0 0 0 0 0 0 0 0 0 0 0 0
-27.5710 42.5230 -58.4370 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.5280 42.0340 -59.0640 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.1670 39.4870 -59.5480 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.2460 39.5500 -60.6150 N 0 0 0 0 0 0 0 0 0 0 0 0
-24.2790 38.6120 -60.6320 C 0 0 0 0 0 0 0 0 0 0 0 0
-23.6950 38.1170 -59.5800 N 0 0 0 0 0 0 0 0 0 0 0 0
-23.9470 38.2160 -61.8680 N 0 0 0 0 0 0 0 0 0 0 0 0
-24.1470 38.6520 -58.3780 N 0 0 0 0 0 0 0 0 0 0 0 0
-24.1940 37.7880 -57.4310 C 0 0 0 0 0 0 0 0 0 0 0 0
-23.8220 36.5210 -57.6540 O 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 1
2 3 2 0
1 4 1 0
1 5 1 0
1 6 1 0
3 7 1 0
4 7 1 0
6 8 1 0
5 9 1 0
8 9 2 0
5 10 1 6
10 11 1 0
11 12 1 0
12 13 2 3
12 14 1 0
13 15 1 0
15 16 2 3
16 17 1 0
M END

(4)
NC(=NN=CO)NC[SH]1C=CCC12C=CON2

(4)

(4)
full

<∆∆G> (4)
-1.4751787574132826

<∆G_bound> (4)
0.3709133769006228

<∆G_unbound> (4)
1.8460921343139054

(4)
0.998671641541427

<N_constrained_atoms> (4)
16

<N_unconstrained_atoms> (4)
1

(4)
40.927430391311646

(4)
[]

(4)
[]

<fragmensteinOld_score> (4)
-0.696364

<LE_score> (4)
-0.086775

<comRMSD_score> (4)
0.998672

<fragmensteinNew_score> (4)
0.616293

<ref_mols> (4)
x0020_0B,x0029_0B,x0257_0B

<ref_pdb> (4)
x0020

(4)
NC(=NN=CO)NC[S@H]1C=CC[C@]12C=CON2

$$$$
x0020_0B_0-x0020_0B_1-x0020_0B_4-x0029_0B_0-x0029_
RDKit 3D

11 12 0 0 0 0 0 0 0 0999 V2000
-27.3860 40.3310 -57.5180 N 0 0 0 0 0 0 0 0 0 0 0 0
-27.9220 41.5010 -58.0580 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.3310 42.2230 -59.0390 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.4010 39.6210 -58.4010 C 0 0 1 0 0 0 0 0 0 0 0 0
-28.1020 39.5340 -56.6130 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.5930 40.5630 -59.2850 C 0 0 0 0 0 0 0 0 0 0 0 0
-27.6280 38.3730 -56.1240 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.7070 38.5150 -57.6090 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.0600 41.7930 -59.5830 C 0 0 0 0 0 0 0 0 0 0 0 0
-26.3190 37.9390 -56.5450 C 0 0 0 0 0 0 0 0 0 0 0 0
-25.7270 36.9440 -55.8500 F 0 0 0 0 0 0 0 0 0 0 0 0
1 2 1 0
2 3 2 0
1 4 1 0
1 5 1 0
4 6 1 1
5 7 2 0
4 8 1 0
3 9 1 0
6 9 2 0
7 10 1 0
8 10 2 0
10 11 1 0
M END

(5)
FC1=CC2C=CC=CN2C=C1

(5)

(5)
full

<∆∆G> (5)
-3.2838353846670283

<∆G_bound> (5)
-3.263028341871855

<∆G_unbound> (5)
0.020807042795173373

(5)
0.8433382363870275

<N_constrained_atoms> (5)
11

<N_unconstrained_atoms> (5)
0

(5)
31.971383333206177

(5)
[]

(5)
[]

<fragmensteinOld_score> (5)
-0.913429

<LE_score> (5)
-0.29853

<comRMSD_score> (5)
0.843338

<fragmensteinNew_score> (5)
0.681693

<ref_mols> (5)
x0020_0B,x0029_0B,x0257_0B

<ref_pdb> (5)
x0020

(5)
FC1=C[C@@h]2C=CC=CN2C=C1

$$$$

Link ideas into ELNs (Scarab)

There should be an option to associate an idea from fragalysis with an ELN page/db entry. We will use Scarab for this

Export context data (linked to #197)

Export the data linked to a particular breadcrumb trail - allow user to download or transfer the data from the current context to an external application - e.g. a squint workflow, Jupyter notebook or ELN page

Specific interactions v.s. pharmacophores/features/clusters

Store specific interactions (e.g. PLIP/oddt) - check Wonka/oommppaa for clustering of interactions

Identifying specific interactions occurring in existing ligands that satisfy pharmacophores/pharmacophore clusters (+ representation)

  • Algorithm - implement plip or oddt interactions (check what's already in fragalysis/wonka/oommppaa)
  • Models - add models to molecule/interactions table
  • Endpoints - views

Snapshot JSON field is Text in the snapshot Model -> JSONField

Snapshot JSON field is actually Text -> Now that we are using a Postgres database, it would make sense to migrate the data to a proper JSONfield allowing use of the Postgres JSON SQL functions, Django JSONField serializers and JSON functionality for improved flexibility for queries/validation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.