Skip to content

Commit c3ee2fe

Browse files
committed
similarity + substructure + smarts search endpoints created
1 parent 47e7e1a commit c3ee2fe

19 files changed

+623
-1
lines changed

src/genui/apps.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
'genui.qsar',
1919
'genui.generators',
2020
'genui.maps',
21+
'genui.search',
2122
]
2223

2324
def extensions():

src/genui/compounds/initializers/base.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88

99
from django.db import transaction, IntegrityError
1010
from rdkit import Chem
11+
from rdkit.Chem import AllChem
12+
from rdkit.Chem import MACCSkeys
13+
1114

1215
from genui.compounds.initializers.exceptions import SMILESParsingError, StandardizationError, \
1316
InconsistentIdentifiersException
@@ -102,6 +105,8 @@ def createChemicalEntity(self, smiles):
102105
canon_smiles = Chem.MolToSmiles(rdmol_std, isomericSmiles=True, canonical=True, allHsExplicit=False)
103106
inchi = Chem.MolToInchi(rdmol_std)
104107
inchi_key = Chem.InchiToInchiKey(inchi)
108+
morganFP = AllChem.GetMorganFingerprintAsBitVect(rdmol_std)
109+
maccsFP = MACCSkeys.GenMACCSKeys(rdmol_std)
105110
if ChemicalEntity.objects.filter(inchiKey=inchi_key).exists():
106111
ret = ChemicalEntity.objects.get(
107112
inchiKey=inchi_key
@@ -117,7 +122,9 @@ def createChemicalEntity(self, smiles):
117122
canonicalSMILES=canon_smiles,
118123
inchi=inchi,
119124
inchiKey=inchi_key,
120-
rdMol=canon_smiles
125+
rdMol=canon_smiles,
126+
morganFP=morganFP,
127+
maccsFP=maccsFP
121128
)
122129
except IntegrityError as exp:
123130
attempted = {
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 5.1.3 on 2026-01-14 13:41
2+
3+
import django_rdkit.models.fields
4+
from django.db import migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('compounds', '0002_initial'),
11+
]
12+
13+
operations = [
14+
migrations.AddField(
15+
model_name='chemicalentity',
16+
name='maccsFP',
17+
field=django_rdkit.models.fields.BfpField(null=True),
18+
),
19+
]
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Generated by Django 5.1.3 on 2026-01-14 14:26
2+
3+
import django.contrib.postgres.indexes
4+
from django.db import migrations
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('compounds', '0003_add_compound_fingerprints'),
11+
]
12+
13+
operations = [
14+
migrations.AddIndex(
15+
model_name='chemicalentity',
16+
index=django.contrib.postgres.indexes.GistIndex(fields=['rdMol'], name='compounds_c_rdMol_19154a_gist'),
17+
),
18+
migrations.AddIndex(
19+
model_name='chemicalentity',
20+
index=django.contrib.postgres.indexes.GistIndex(fields=['morganFP'], name='compounds_c_morganF_b5466a_gist'),
21+
),
22+
migrations.AddIndex(
23+
model_name='chemicalentity',
24+
index=django.contrib.postgres.indexes.GistIndex(fields=['maccsFP'], name='compounds_c_maccsFP_9a9ce4_gist'),
25+
),
26+
]

src/genui/compounds/models.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.db.models import Count
22
from django_rdkit import models
3+
from django.contrib.postgres.indexes import GistIndex
34
from djcelery_model.models import TaskMixin
45
from polymorphic.models import PolymorphicModel
56
from rdkit import Chem
@@ -93,9 +94,15 @@ class ChemicalEntity(models.Model):
9394
# from django-rdkit
9495
rdMol = models.MolField()
9596
morganFP = models.BfpField(null=True)
97+
maccsFP = models.BfpField(null=True)
9698

9799
class Meta:
98100
unique_together = ('canonicalSMILES', 'inchiKey')
101+
indexes = [
102+
GistIndex(fields=['rdMol']),
103+
GistIndex(fields=['morganFP']),
104+
GistIndex(fields=['maccsFP']),
105+
]
99106

100107
def __str__(self):
101108
return '%s object <%s>' % (self.__class__.__name__, self.inchiKey)

src/genui/search/__init__.py

Whitespace-only changes.

src/genui/search/admin.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from django.contrib import admin
2+
3+
# Register your models here.

src/genui/search/apps.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
from django.apps import AppConfig
2+
3+
4+
class SearchConfig(AppConfig):
5+
default_auto_field = 'django.db.models.BigAutoField'
6+
name = 'genui.search'

src/genui/search/genuisetup.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
"""
2+
genuisetup.py in src/genui/search/
3+
4+
"""
5+
6+
PARENT = 'genui'
7+
8+
def setup(*args, **kwargs):
9+
from . import models
10+
from genui.utils.init import createGroup
11+
createGroup(
12+
"GenUI_Users",
13+
[
14+
models.SearchMolecule,
15+
models.SearchMolSet
16+
]
17+
)

src/genui/search/initializer.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"""
2+
initializer.py in src/genui/search/
3+
4+
"""
5+
from genui.search.models import SearchMolecule
6+
from genui.compounds.models import ActivitySet, Activity, ActivityTypes, ActivityUnits
7+
8+
9+
class SearchSetInitializer():
10+
pass

0 commit comments

Comments
 (0)