diff --git a/conekt/controllers/admin/controls/clades.py b/conekt/controllers/admin/controls/clades.py index f1d732b..dc348d7 100644 --- a/conekt/controllers/admin/controls/clades.py +++ b/conekt/controllers/admin/controls/clades.py @@ -1,6 +1,6 @@ import json -from flask import flash, url_for, request +from flask import flash, url_for, request, Markup from conekt.extensions import admin_required from werkzeug.exceptions import abort from werkzeug.utils import redirect @@ -8,6 +8,7 @@ from conekt.controllers.admin.controls import admin_controls from conekt.forms.admin.add_clades import AddCladesForm from conekt.models.clades import Clade +from conekt.models.expression.coexpression_clusters import CoexpressionCluster @admin_controls.route('/update/clades') @@ -52,4 +53,23 @@ def add_clades(): flash('Unable to validate data, potentially missing fields', 'danger') return redirect(url_for('admin.index')) else: - abort(405) \ No newline at end of file + abort(405) + + +@admin_controls.route('/calculate_clade_enrichment/correctly formatted' + + ' and update the counts if necessary'), 'warning') + finally: + flash('Successfully calculated clade enrichment for co-expression clusters', 'success') + + return redirect(url_for('admin.controls.index')) diff --git a/conekt/controllers/admin/views/expression_clusters.py b/conekt/controllers/admin/views/expression_clusters.py index 5c0a4a9..74ee21f 100644 --- a/conekt/controllers/admin/views/expression_clusters.py +++ b/conekt/controllers/admin/views/expression_clusters.py @@ -22,7 +22,7 @@ class CoexpressionClusteringMethodAdminView(MyModelView): class ClusterSimilaritiesView(AdminBaseView): """ - Control panel for administrators. Contains links to + Control panel for administrators. Contains links to start computing cluster similarities """ @expose('/') def index(self): diff --git a/conekt/models/expression/coexpression_clusters.py b/conekt/models/expression/coexpression_clusters.py index 304b596..6fda7f5 100644 --- a/conekt/models/expression/coexpression_clusters.py +++ b/conekt/models/expression/coexpression_clusters.py @@ -16,6 +16,7 @@ from conekt.models.relationships.sequence_family import SequenceFamilyAssociation from conekt.models.relationships.sequence_go import SequenceGOAssociation from conekt.models.relationships.cluster_go import ClusterGOEnrichment +from conekt.models.relationships.cluster_clade import ClusterCladeEnrichment from conekt.models.sequences import Sequence from conekt.models.expression.profiles import ExpressionProfile @@ -472,6 +473,28 @@ def calculate_enrichment(empty=True): # print(i, "\t cluster: ", cluster.method_id, cluster.name) cluster.__calculate_enrichment() + @staticmethod + def calculate_clade_enrichment(gene_family_method_id, empty=True): + """ + Calculates clade enrichment for co-expression clusters + + :param gene_family_method_id: + :param empty: + :return: + """ + if empty: + try: + pass + except Exception as e: + db.session.rollback() + print(e) + + # get background distribution + + # calculate enrichment + + + @staticmethod def delete_enrichment(): """ diff --git a/conekt/models/relationships/__init__.py b/conekt/models/relationships/__init__.py index fbfbe03..9174c03 100644 --- a/conekt/models/relationships/__init__.py +++ b/conekt/models/relationships/__init__.py @@ -78,5 +78,7 @@ cluster_clade_enrichment = db.Table('cluster_clade_enrichment', db.Column('id', db.Integer, primary_key=True), db.Column('cluster_id', db.Integer, db.ForeignKey('coexpression_clusters.id'), index=True), - db.Column('clade_id', db.Integer, db.ForeignKey('clades.id'), index=True) + db.Column('clade_id', db.Integer, db.ForeignKey('clades.id'), index=True), + db.Column('gene_family_methods_id', db.Integer, + db.ForeignKey('gene_family_methods.id'), index=True) ) diff --git a/conekt/models/relationships/cluster_clade.py b/conekt/models/relationships/cluster_clade.py index 91fff47..b2fa02a 100644 --- a/conekt/models/relationships/cluster_clade.py +++ b/conekt/models/relationships/cluster_clade.py @@ -9,6 +9,8 @@ class ClusterCladeEnrichment(db.Model): cluster_id = db.Column(db.Integer, db.ForeignKey('coexpression_clusters.id', ondelete='CASCADE')) clade_id = db.Column(db.Integer, db.ForeignKey('clade.id', ondelete='CASCADE')) + gene_family_methods_id = db.Column(db.Integer, db.ForeignKey('gene_family_methods.id', ondelete='CASCADE')) + cluster = db.relationship('CoexpressionCluster', backref=db.backref('clade_enrichment', lazy='dynamic', passive_deletes=True), diff --git a/docs/building_conekt.md b/docs/building_conekt.md index 60fc05a..d5c0450 100644 --- a/docs/building_conekt.md +++ b/docs/building_conekt.md @@ -171,8 +171,4 @@ data and add everything to the database. ### Computing enrichments, similarities, and counts ... -*UNDER CONSTRUCTION* - -## Using the build script - *UNDER CONSTRUCTION* \ No newline at end of file diff --git a/migrations/versions/cdcd89b3d017_.py b/migrations/versions/cdcd89b3d017_.py deleted file mode 100644 index 9634298..0000000 --- a/migrations/versions/cdcd89b3d017_.py +++ /dev/null @@ -1,92 +0,0 @@ -"""empty message - -Revision ID: cdcd89b3d017 -Revises: -Create Date: 2017-09-28 14:55:45.516344 - -""" -from alembic import op -import sqlalchemy as sa -from sqlalchemy.dialects import mysql - -# revision identifiers, used by Alembic. -revision = 'cdcd89b3d017' -down_revision = None -branch_labels = None -depends_on = None - - -def upgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_table('migrate_version') - op.create_index(op.f('ix_cluster_clade_enrichment_clade_id'), 'cluster_clade_enrichment', ['clade_id'], unique=False) - op.create_index(op.f('ix_cluster_clade_enrichment_cluster_id'), 'cluster_clade_enrichment', ['cluster_id'], unique=False) - op.create_foreign_key(None, 'cluster_clade_enrichment', 'clades', ['clade_id'], ['id']) - op.create_foreign_key(None, 'cluster_clade_enrichment', 'coexpression_clusters', ['cluster_id'], ['id']) - op.alter_column('conditions_tissue', 'in_tree', - existing_type=mysql.TINYINT(display_width=1), - nullable=True, - existing_server_default=sa.text("'0'")) - op.alter_column('expression_network_methods', 'enable_second_level', - existing_type=mysql.TINYINT(display_width=1), - nullable=True, - existing_server_default=sa.text("'0'")) - op.alter_column('expression_network_methods', 'hrr_cutoff', - existing_type=mysql.INTEGER(display_width=11), - nullable=True, - existing_server_default=sa.text("'30'")) - op.alter_column('expression_network_methods', 'pcc_cutoff', - existing_type=mysql.FLOAT(), - nullable=True, - existing_server_default=sa.text("'-2'")) - op.create_index(op.f('ix_family_go_gene_family_id'), 'family_go', ['gene_family_id'], unique=False) - op.create_index(op.f('ix_family_go_go_id'), 'family_go', ['go_id'], unique=False) - op.create_foreign_key(None, 'family_go', 'go', ['go_id'], ['id'], ondelete='CASCADE') - op.create_foreign_key(None, 'family_go', 'gene_families', ['gene_family_id'], ['id'], ondelete='CASCADE') - op.create_index(op.f('ix_family_interpro_gene_family_id'), 'family_interpro', ['gene_family_id'], unique=False) - op.create_index(op.f('ix_family_interpro_interpro_id'), 'family_interpro', ['interpro_id'], unique=False) - op.create_foreign_key(None, 'family_interpro', 'interpro', ['interpro_id'], ['id'], ondelete='CASCADE') - op.create_foreign_key(None, 'family_interpro', 'gene_families', ['gene_family_id'], ['id'], ondelete='CASCADE') - # ### end Alembic commands ### - - -def downgrade(): - # ### commands auto generated by Alembic - please adjust! ### - op.drop_constraint(None, 'family_interpro', type_='foreignkey') - op.drop_constraint(None, 'family_interpro', type_='foreignkey') - op.drop_index(op.f('ix_family_interpro_interpro_id'), table_name='family_interpro') - op.drop_index(op.f('ix_family_interpro_gene_family_id'), table_name='family_interpro') - op.drop_constraint(None, 'family_go', type_='foreignkey') - op.drop_constraint(None, 'family_go', type_='foreignkey') - op.drop_index(op.f('ix_family_go_go_id'), table_name='family_go') - op.drop_index(op.f('ix_family_go_gene_family_id'), table_name='family_go') - op.alter_column('expression_network_methods', 'pcc_cutoff', - existing_type=mysql.FLOAT(), - nullable=False, - existing_server_default=sa.text("'-2'")) - op.alter_column('expression_network_methods', 'hrr_cutoff', - existing_type=mysql.INTEGER(display_width=11), - nullable=False, - existing_server_default=sa.text("'30'")) - op.alter_column('expression_network_methods', 'enable_second_level', - existing_type=mysql.TINYINT(display_width=1), - nullable=False, - existing_server_default=sa.text("'0'")) - op.alter_column('conditions_tissue', 'in_tree', - existing_type=mysql.TINYINT(display_width=1), - nullable=False, - existing_server_default=sa.text("'0'")) - op.drop_constraint(None, 'cluster_clade_enrichment', type_='foreignkey') - op.drop_constraint(None, 'cluster_clade_enrichment', type_='foreignkey') - op.drop_index(op.f('ix_cluster_clade_enrichment_cluster_id'), table_name='cluster_clade_enrichment') - op.drop_index(op.f('ix_cluster_clade_enrichment_clade_id'), table_name='cluster_clade_enrichment') - op.create_table('migrate_version', - sa.Column('repository_id', mysql.VARCHAR(collation='latin1_general_ci', length=250), nullable=False), - sa.Column('repository_path', mysql.TEXT(collation='latin1_general_ci'), nullable=True), - sa.Column('version', mysql.INTEGER(display_width=11), autoincrement=False, nullable=True), - sa.PrimaryKeyConstraint('repository_id'), - mysql_collate='latin1_general_ci', - mysql_default_charset='latin1', - mysql_engine='InnoDB' - ) - # ### end Alembic commands ###