def SelectionSchemesToggle(request): """Updates the selected numbering schemes arbitrary selections""" numbering_scheme_id = request.GET['numbering_scheme_id'] gns = ResidueNumberingScheme.objects.filter(pk=numbering_scheme_id) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # add the selected items to the selection for gn in gns: exists = selection.remove('numbering_schemes', 'numbering_schemes', numbering_scheme_id) if not exists: selection_object = SelectionItem('numbering_schemes', gn) selection.add('numbering_schemes', 'numbering_schemes', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) context = selection.dict('numbering_schemes') context['gns'] = ResidueNumberingScheme.objects.exclude(slug=settings.DEFAULT_NUMBERING_SCHEME) return render(request, 'common/selection_filters_numbering_schemes.html', context)
def SelectionAnnotation(request): """Updates the selected level of annotation""" protein_source = request.GET['protein_source'] if protein_source == 'All': pss = ProteinSource.objects.all() else: pss = ProteinSource.objects.filter(name=protein_source) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # reset the annotation selection selection.clear('annotation') # add the selected items to the selection for ps in pss: selection_object = SelectionItem('annotation', ps) selection.add('annotation', 'annotation', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_filters_annotation.html', selection.dict('annotation'))
def SelectionSpeciesToggle(request): """Updates the selected species arbitrary selections""" species_id = request.GET['species_id'] all_sps = Species.objects.all() sps = Species.objects.filter(pk=species_id) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # add the selected items to the selection for sp in sps: exists = selection.remove('species', 'species', species_id) if not exists: selection_object = SelectionItem('species', sp) selection.add('species', 'species', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) context = selection.dict('species') context['sps'] = Species.objects.all() return render(request, 'common/selection_filters_species_selector.html', context)
def SelectResidueGroup(request): """Receives a selection request, updates the active residue group, and returns the updated selection""" selection_type = request.GET['selection_type'] group_id = int(request.GET['group_id']) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # update the selected group selection.active_site_residue_group = group_id # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) # template to load template = 'common/selection_lists_sitesearch.html' return render(request, template, context)
def SelectAlignableSegments(request): """Adds all alignable segments to the selection""" selection_type = request.GET['selection_type'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # get all segments # get all segments if "protein_type" in request.GET: gsegments = definitions.G_PROTEIN_SEGMENTS preserved = Case(*[When(slug=pk, then=pos) for pos, pk in enumerate(gsegments['Structured'])]) segments = ProteinSegment.objects.filter(slug__in = gsegments['Structured'], partial=False).order_by(preserved) else: segments = ProteinSegment.objects.filter(partial=False, slug__startswith='TM') for segment in segments: selection_object = SelectionItem(segment.category, segment) # add the selected item to the selection selection.add(selection_type, segment.category, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def SelectAlignableSegments(request): """Adds all alignable segments to the selection""" selection_type = request.GET['selection_type'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # get all segments segments = ProteinSegment.objects.filter(partial=False, slug__startswith='TM') for segment in segments: selection_object = SelectionItem(segment.category, segment) # add the selected item to the selection selection.add(selection_type, segment.category, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def site_upload(request): # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'segments' selection_subtype = 'site_residue' if request.FILES == {}: return render(request, 'common/selection_lists_sitesearch.html', '') #Overwriting the existing selection selection.clear(selection_type) print(type(request.FILES['xml_file'].file)) wb=load_workbook(filename=request.FILES['xml_file'].file) ws=wb.active for row in ws.rows: if len(row) < 5: continue group_id = int(row[0].value) min_match = int(row[1].value) try: position = ResidueGenericNumberEquivalent.objects.get(label=row[2].value, scheme__slug=row[3].value) except e: print(e) continue feature = row[4].value # update the selected group selection.active_site_residue_group = group_id print(selection.site_residue_groups) if not selection.site_residue_groups: selection.site_residue_groups = [[]] selection.site_residue_groups[selection.active_site_residue_group - 1].append(1) if len(selection.site_residue_groups) < group_id: for x in group_id - len(selection.site_residue_groups): selection.site_residue_groups.append([]) selection.site_residue_groups[group_id - 1][0] = min_match selection_object = SelectionItem(selection_subtype, position) selection_object.properties['feature'] = feature selection_object.properties['site_residue_group'] = selection.active_site_residue_group selection_object.properties['amino_acids'] = ','.join(definitions.AMINO_ACID_GROUPS[feature]) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists_sitesearch.html', selection.dict(selection_type))
def ResiduesUpload(request): """Receives a file containing generic residue positions along with numbering scheme and adds those to the selection.""" # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'segments' if request.FILES == {}: return render(request, 'common/selection_lists.html', '') #Overwriting the existing selection selection.clear(selection_type) #The excel file o = [] workbook = xlrd.open_workbook( file_contents=request.FILES['xml_file'].read()) worksheets = workbook.sheet_names() for worksheet_name in worksheets: worksheet = workbook.sheet_by_name(worksheet_name) for row in worksheet.get_rows(): if len(row) < 2: continue try: if row[0].value == 'residue': position = ResidueGenericNumberEquivalent.objects.get( label=row[2].value, scheme__slug=row[1].value) o.append(position) elif row[0].value == 'helix': o.append(ProteinSegment.objects.get(slug=row[2].value)) except Exception as msg: print(msg) continue for obj in o: # add the selected item to the selection if obj.__class__.__name__ == 'ResidueGenericNumberEquivalent': selection_subtype = 'residue' else: selection_subtype = 'helix' selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def SelectionGproteinPredefined(request): """Updates the selected g proteins to predefined sets (Gi/Go and all)""" g_protein = request.GET['g_protein'] preferred = request.GET['preferred'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) all_gprots = ProteinGProtein.objects.all() gprots = False if g_protein == 'All': gprots = [] if g_protein != 'All' and g_protein: gprots = ProteinGProtein.objects.filter(name=g_protein) if gprots != False: # reset the g proteins selection if preferred == 'true': selection.clear('pref_g_proteins') else: selection.clear('g_proteins') # add the selected items to the selection for gprot in gprots: selection_object = SelectionItem('g_protein', gprot) if preferred == 'true': selection.add('pref_g_proteins', 'g_protein', selection_object) else: selection.add('g_proteins', 'g_protein', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) if preferred == 'true': context = selection.dict('pref_g_proteins') else: context = selection.dict('g_proteins') context['gprots'] = ProteinGProtein.objects.all() if preferred == 'true': return render(request, 'common/selection_filters_pref_gproteins.html', context) else: return render(request, 'common/selection_filters_gproteins.html', context)
def SelectionGproteinToggle(request): """Updates the selected g proteins arbitrary selections""" g_protein_id = request.GET['g_protein_id'] preferred = request.GET['preferred'] all_gprots = ProteinGProtein.objects.all() gprots = ProteinGProtein.objects.filter(pk=g_protein_id) print("'{}'".format(ProteinGProtein.objects.get(pk=g_protein_id).name)) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # add the selected items to the selection for gprot in gprots: if preferred == 'true': exists = selection.remove('pref_g_proteins', 'g_protein', g_protein_id) else: exists = selection.remove('g_proteins', 'g_protein', g_protein_id) if not exists: selection_object = SelectionItem('g_protein', gprot) if preferred == 'true': selection.add('pref_g_proteins', 'g_protein', selection_object) else: selection.add('g_proteins', 'g_protein', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) if preferred == 'true': context = selection.dict('pref_g_proteins') else: context = selection.dict('g_proteins') context['gprots'] = ProteinGProtein.objects.all() if preferred == 'true': print(request.session['selection']) return render(request, 'common/selection_filters_pref_gproteins_selector.html', context) else: return render(request, 'common/selection_filters_gproteins_selector.html', context)
def signature_selection(request): # create full selection and import simple selection (if it exists) simple_selection = request.session.get('selection', False) selection_pos = Selection() selection_pos.importer(deepcopy(simple_selection)) selection_pos.clear('targets') selection_neg = Selection() selection_neg.importer(deepcopy(simple_selection)) selection_neg.clear('targets') if 'group1' in request.POST and 'group2' in request.POST: up_names = request.POST['group1'].split('\r') for up_name in up_names: try: selection_object = SelectionItem( 'protein', Protein.objects.get(entry_name=up_name.strip().lower())) selection_pos.add('targets', 'protein', selection_object) except: continue down_names = request.POST['group2'].split('\r') for down_name in down_names: try: selection_object = SelectionItem( 'protein', Protein.objects.get(entry_name=down_name.strip().lower())) selection_neg.add('targets', 'protein', selection_object) except: continue # Set both the positive and negative target selections request.session['targets_pos'] = selection_pos.exporter() request.session['selection'] = selection_neg.exporter() return JsonResponse({"response": "ok"}) else: return JsonResponse({"response": "error"})
def ResiduesUpload(request): """Receives a file containing generic residue positions along with numbering scheme and adds those to the selection.""" # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'segments' if request.FILES == {}: return render(request, 'common/selection_lists.html', '') #Overwriting the existing selection selection.clear(selection_type) #The excel file o = [] workbook = xlrd.open_workbook(file_contents=request.FILES['xml_file'].read()) worksheets = workbook.sheet_names() for worksheet_name in worksheets: worksheet = workbook.sheet_by_name(worksheet_name) for row in worksheet.get_rows(): if len(row) < 2: continue try: if row[0].value == 'residue': position = ResidueGenericNumberEquivalent.objects.get(label=row[2].value, scheme__slug=row[1].value) o.append(position) elif row[0].value == 'helix': o.append(ProteinSegment.objects.get(slug=row[2].value)) except Exception as msg: print(msg) continue for obj in o: # add the selected item to the selection if obj.__class__.__name__ == 'ResidueGenericNumberEquivalent': selection_subtype = 'residue' else: selection_subtype = 'helix' selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def UpdateSiteResidueFeatures(request): """Updates the selected features of a site residue""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = request.GET['selection_id'] o = [] if selection_type == 'reference' or selection_type == 'targets': if selection_subtype == 'protein': o.append(Protein.objects.get(pk=selection_id)) elif selection_subtype == 'protein_set': selection_subtype = 'protein' pset = ProteinSet.objects.get(pk=selection_id) for protein in pset.proteins.all(): o.append(protein) elif selection_subtype == 'family': o.append(ProteinFamily.objects.get(pk=selection_id)) elif selection_subtype == 'set': o.append(ProteinSet.objects.get(pk=selection_id)) elif selection_subtype == 'structure': o.append(Protein.objects.get(entry_name=selection_id.lower())) elif selection_type == 'segments': if selection_subtype == 'residue': o.append( ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) elif selection_subtype == 'residue_with_properties': # used in site search o.append( ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) else: o.append(ProteinSegment.objects.get(pk=selection_id)) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) for obj in o: # add the selected item to the selection selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def post(self, request, *args, **kwargs): context = super(PDBClean, self).get_context_data(**kwargs) self.posted = True pref = True water = False hets = False if 'pref_chain' not in request.POST.keys(): pref = False if 'water' in request.POST.keys(): water = True if 'hets' in request.POST.keys(): hets = True # get simple selection from session simple_selection = request.session.get('selection', False) selection = Selection() if simple_selection: selection.importer(simple_selection) out_stream = BytesIO() io = PDBIO() zipf = zipfile.ZipFile(out_stream, 'w', zipfile.ZIP_DEFLATED) if selection.targets != []: for selected_struct in [x for x in selection.targets if x.type == 'structure']: struct_name = '{}_{}.pdb'.format(selected_struct.item.protein_conformation.protein.parent.entry_name, selected_struct.item.pdb_code.index) if hets: lig_names = [x.pdb_reference for x in StructureLigandInteraction.objects.filter(structure=selected_struct.item, annotated=True)] else: lig_names = None gn_assigner = GenericNumbering(structure=PDBParser(QUIET=True).get_structure(struct_name, StringIO(selected_struct.item.get_cleaned_pdb(pref, water, lig_names)))[0]) tmp = StringIO() io.set_structure(gn_assigner.assign_generic_numbers()) request.session['substructure_mapping'] = gn_assigner.get_substructure_mapping_dict() io.save(tmp) zipf.writestr(struct_name, tmp.getvalue()) del gn_assigner, tmp for struct in selection.targets: selection.remove('targets', 'structure', struct.item.id) # export simple selection that can be serialized simple_selection = selection.exporter() request.session['selection'] = simple_selection request.session['cleaned_structures'] = out_stream attributes = inspect.getmembers(self, lambda a:not(inspect.isroutine(a))) for a in attributes: if not(a[0].startswith('__') and a[0].endswith('__')): context[a[0]] = a[1] return render(request, self.template_name, context)
def UpdateSiteResidueFeatures(request): """Updates the selected features of a site residue""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = request.GET['selection_id'] o = [] if selection_type == 'reference' or selection_type == 'targets': if selection_subtype == 'protein': o.append(Protein.objects.get(pk=selection_id)) elif selection_subtype == 'protein_set': selection_subtype = 'protein' pset = ProteinSet.objects.get(pk=selection_id) for protein in pset.proteins.all(): o.append(protein) elif selection_subtype == 'family': o.append(ProteinFamily.objects.get(pk=selection_id)) elif selection_subtype == 'set': o.append(ProteinSet.objects.get(pk=selection_id)) elif selection_subtype == 'structure': o.append(Protein.objects.get(entry_name=selection_id.lower())) elif selection_type == 'segments': if selection_subtype == 'residue': o.append(ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) elif selection_subtype == 'residue_with_properties': # used in site search o.append(ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) else: o.append(ProteinSegment.objects.get(pk=selection_id)) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) for obj in o: # add the selected item to the selection selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def SetTreeSelection(request): """Adds all alignable segments to the selection""" option_no = request.GET['option_no'] option_id = request.GET['option_id'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection.tree_settings[int(option_no)]=option_id simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/tree_options.html', selection.dict('tree_settings'))
def get_context_data(self, **kwargs): """get context from parent class (really only relevant for children of this class, as TemplateView does not have any context variables)""" context = super().get_context_data(**kwargs) # get selection from session and add to context # get simple selection from session simple_selection = self.request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() # on the first page of a workflow, clear the selection (or dont' import from the session) if self.step is not 1: if simple_selection: selection.importer(simple_selection) # default species selection if self.default_species: sp = Species.objects.get(common_name=self.default_species) o = SelectionItem('species', sp) selection.species = [o] # update session simple_selection = selection.exporter() self.request.session['selection'] = simple_selection context['selection'] = {} for selection_box, include in self.selection_boxes.items(): if include: context['selection'][selection_box] = selection.dict( selection_box)['selection'][selection_box] if self.filters: context['selection']['species'] = selection.species context['selection']['annotation'] = selection.annotation context['selection']['g_proteins'] = selection.g_proteins context['selection']['pref_g_proteins'] = selection.pref_g_proteins # get attributes of this class and add them to the context attributes = inspect.getmembers(self, lambda a: not (inspect.isroutine(a))) for a in attributes: if not (a[0].startswith('__') and a[0].endswith('__')): context[a[0]] = a[1] return context
def preserve_targets(request): request.session['targets_pos'] = deepcopy(request.session.get('selection', False)) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection.clear('targets') # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return redirect('/seqsign/negativegroupselection',)
def SelectResidueFeature(request): """Receives a selection request, add a feature selection to an item, and returns the updated selection""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = int(request.GET['selection_id']) feature = request.GET['feature'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # process selected object if selection_type == 'segments' and selection_subtype == 'site_residue': for obj in selection.segments: if int(obj.item.id) == selection_id: obj.properties['feature'] = feature obj.properties['amino_acids'] = ','.join( definitions.AMINO_ACID_GROUPS[feature]) break # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) # template to load template = 'common/selection_lists_sitesearch.html' return render(request, template, context)
def get_context_data(self, **kwargs): """get context from parent class (really only relevant for children of this class, as TemplateView does not have any context variables)""" context = super().get_context_data(**kwargs) # get selection from session and add to context # get simple selection from session simple_selection = self.request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() # on the first page of a workflow, clear the selection (or dont' import from the session) if self.step is not 1: if simple_selection: selection.importer(simple_selection) # default species selection if self.default_species: sp = Species.objects.get(common_name=self.default_species) o = SelectionItem('species', sp) selection.species = [o] # update session simple_selection = selection.exporter() self.request.session['selection'] = simple_selection context['selection'] = {} for selection_box, include in self.selection_boxes.items(): if include: context['selection'][selection_box] = selection.dict(selection_box)['selection'][selection_box] if self.filters: context['selection']['species'] = selection.species context['selection']['annotation'] = selection.annotation context['selection']['g_proteins'] = selection.g_proteins context['selection']['pref_g_proteins'] = selection.pref_g_proteins # get attributes of this class and add them to the context attributes = inspect.getmembers(self, lambda a:not(inspect.isroutine(a))) for a in attributes: if not(a[0].startswith('__') and a[0].endswith('__')): context[a[0]] = a[1] return context
def RemoveResidueGroup(request): """Receives a selection request, removes a residue group, and returns the updated selection""" selection_type = request.GET['selection_type'] group_id = int(request.GET['group_id']) # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # find all positions in the group and delete them for position in selection.segments: if position.type == 'site_residue': if position.properties['site_residue_group'] == group_id: selection.remove(selection_type, position.type, position.item.id) else: if position.properties['site_residue_group'] > group_id: position.properties['site_residue_group'] -= 1 # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) # template to load template = 'common/selection_lists_sitesearch.html' return render(request, template, context)
def SelectionSchemesPredefined(request): """Updates the selected numbering_schemes to predefined sets (GPCRdb and All)""" numbering_schemes = request.GET['numbering_schemes'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) all_gns = ResidueNumberingScheme.objects.exclude( slug=settings.DEFAULT_NUMBERING_SCHEME) gns = False if numbering_schemes == 'All': print(len(selection.numbering_schemes), all_gns.count()) if len(selection.numbering_schemes) == all_gns.count(): gns = [] else: gns = all_gns # reset the species selection selection.clear('numbering_schemes') # add the selected items to the selection for gn in gns: selection_object = SelectionItem('numbering_schemes', gn) selection.add('numbering_schemes', 'numbering_schemes', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) context = selection.dict('numbering_schemes') context['gns'] = all_gns return render(request, 'common/selection_filters_numbering_schemes.html', context)
def ConvertStructuresToProteins(request): "For alignment from structure browser" simple_selection = request.session.get('selection', False) selection = Selection() if simple_selection: selection.importer(simple_selection) if selection.targets != []: for struct in selection.targets: prot = struct.item.protein_conformation.protein.parent selection.remove('targets', 'structure', struct.item.id) selection.add('targets', 'protein', SelectionItem('protein', prot)) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return HttpResponseRedirect('/alignment/segmentselection')
def SelectResidueFeature(request): """Receives a selection request, add a feature selection to an item, and returns the updated selection""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = int(request.GET['selection_id']) feature = request.GET['feature'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # process selected object if selection_type == 'segments' and selection_subtype == 'site_residue': for obj in selection.segments: if int(obj.item.id) == selection_id: obj.properties['feature'] = feature obj.properties['amino_acids'] = ','.join(definitions.AMINO_ACID_GROUPS[feature]) break # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) # template to load template = 'common/selection_lists_sitesearch.html' return render(request, template, context)
def SelectAlignableSegments(request): """Adds all alignable segments to the selection""" selection_type = request.GET['selection_type'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # get all segments # get all segments if "protein_type" in request.GET: gsegments = definitions.G_PROTEIN_SEGMENTS preserved = Case(*[ When(slug=pk, then=pos) for pos, pk in enumerate(gsegments['Structured']) ]) segments = ProteinSegment.objects.filter( slug__in=gsegments['Structured'], partial=False).order_by(preserved) else: segments = ProteinSegment.objects.filter(partial=False, slug__startswith='TM') for segment in segments: selection_object = SelectionItem(segment.category, segment) # add the selected item to the selection selection.add(selection_type, segment.category, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def SelectionSchemesPredefined(request): """Updates the selected numbering_schemes to predefined sets (GPCRdb and All)""" numbering_schemes = request.GET['numbering_schemes'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) all_gns = ResidueNumberingScheme.objects.exclude(slug=settings.DEFAULT_NUMBERING_SCHEME) gns = False if numbering_schemes == 'All': print(len(selection.numbering_schemes), all_gns.count()) if len(selection.numbering_schemes) == all_gns.count(): gns = [] else: gns = all_gns # reset the species selection selection.clear('numbering_schemes') # add the selected items to the selection for gn in gns: selection_object = SelectionItem('numbering_schemes', gn) selection.add('numbering_schemes', 'numbering_schemes', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) context = selection.dict('numbering_schemes') context['gns'] = all_gns return render(request, 'common/selection_filters_numbering_schemes.html', context)
def ReadTargetInput(request): """Receives the data from the input form nd adds the listed targets to the selection""" # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'targets' selection_subtype = 'protein' if request.POST == {}: return render(request, 'common/selection_lists.html', '') o = [] up_names = request.POST['input-targets'].split('\r') for up_name in up_names: try: o.append(Protein.objects.get(entry_name=up_name.strip().lower())) except: continue for obj in o: # add the selected item to the selection selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) return render(request, 'common/selection_lists.html', context)
def ReadTargetInput(request): """Receives the data from the input form nd adds the listed targets to the selection""" # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'targets' selection_subtype = 'protein' if request.POST == {}: return render(request, 'common/selection_lists.html', '') o = [] up_names = request.POST['input-targets'].split('\r') for up_name in up_names: try: o.append(Protein.objects.get(entry_name=up_name.strip())) except: continue for obj in o: # add the selected item to the selection selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) return render(request, 'common/selection_lists.html', context)
def SelectionSpeciesPredefined(request): """Updates the selected species to predefined sets (Human and all)""" species = request.GET['species'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) all_sps = Species.objects.all() sps = False if species == 'All': sps = [] if species != 'All' and species: sps = Species.objects.filter(common_name=species) if sps != False: # reset the species selection selection.clear('species') # add the selected items to the selection for sp in sps: selection_object = SelectionItem('species', sp) selection.add('species', 'species', selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # add all species objects to context (for comparison to selected species) context = selection.dict('species') context['sps'] = all_sps return render(request, 'common/selection_filters_species.html', context)
def ClearSelection(request): """Clears all selected items of the selected type from the session""" selection_type = request.GET['selection_type'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # remove the selected item to the selection selection.clear(selection_type) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection return render(request, 'common/selection_lists.html', selection.dict(selection_type))
def RemoveFromSelection(request): """Removes one selected item from the session""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = request.GET['selection_id'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # remove the selected item to the selection selection.remove(selection_type, selection_subtype, selection_id) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # template to load if selection_subtype == 'site_residue': template = 'common/selection_lists_sitesearch.html' amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) else: template = 'common/selection_lists.html' return render(request, template, context)
def site_upload(request): # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'segments' selection_subtype = 'site_residue' if request.FILES == {}: return render(request, 'common/selection_lists_sitesearch.html', '') #Overwriting the existing selection selection.clear(selection_type) workbook = xlrd.open_workbook(file_contents=request.FILES['xml_file'].read()) worksheets = workbook.sheet_names() for worksheet_name in worksheets: worksheet = workbook.sheet_by_name(worksheet_name) for row in worksheet.get_rows(): #for row in ws.rows: if len(row) < 5: continue group_id = int(row[0].value) min_match = int(row[1].value) try: position = ResidueGenericNumberEquivalent.objects.get(label=row[2].value, scheme__slug=row[3].value) except e: print(e) continue feature = row[4].value # update the selected group if not selection.active_site_residue_group: selection.active_site_residue_group = group_id if not selection.site_residue_groups: selection.site_residue_groups = [[]] if len(selection.site_residue_groups) < group_id: for x in group_id - len(selection.site_residue_groups): selection.site_residue_groups[x].append([]) # selection.site_residue_groups[group_id - 1].append(1) properties = {} properties['feature'] = feature properties['site_residue_group'] = selection.active_site_residue_group properties['amino_acids'] = ','.join(definitions.AMINO_ACID_GROUPS[feature]) if feature != 'custom' else row[5].value selection_object = SelectionItem(selection_subtype, position, properties) selection.add(selection_type, selection_subtype, selection_object) selection.site_residue_groups[group_id - 1][0] = min_match # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) return render(request, 'common/selection_lists_sitesearch.html', context)
def AddToSelection(request): """Receives a selection request, adds the selected item to session, and returns the updated selection""" selection_type = request.GET['selection_type'] selection_subtype = request.GET['selection_subtype'] selection_id = request.GET['selection_id'] # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) # process selected object o = [] if selection_type == 'reference' or selection_type == 'targets': if selection_subtype == 'protein': o.append(Protein.objects.get(pk=selection_id)) elif selection_subtype == 'protein_set': selection_subtype = 'protein' pset = ProteinSet.objects.get(pk=selection_id) for protein in pset.proteins.all(): o.append(protein) elif selection_subtype == 'family': o.append(ProteinFamily.objects.get(pk=selection_id)) elif selection_subtype == 'set': o.append(ProteinSet.objects.get(pk=selection_id)) elif selection_subtype == 'structure': o.append(Structure.objects.get(pdb_code__index=selection_id.upper())) elif selection_type == 'segments': if selection_subtype == 'residue': o.append(ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) elif selection_subtype == 'residue_position_set': selection_subtype = 'residue' rset = ResiduePositionSet.objects.get(pk=selection_id) for residue in rset.residue_position.all(): o.append(residue) elif selection_subtype == 'site_residue': # used in site search o.append(ResidueGenericNumberEquivalent.objects.get(pk=selection_id)) else: o.append(ProteinSegment.objects.get(pk=selection_id)) for obj in o: # add the selected item to the selection selection_object = SelectionItem(selection_subtype, obj) selection.add(selection_type, selection_subtype, selection_object) # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection # context context = selection.dict(selection_type) # template to load if selection_subtype == 'site_residue': template = 'common/selection_lists_sitesearch.html' amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) else: template = 'common/selection_lists.html' # amino acid groups return render(request, template, context)
def site_upload(request): # get simple selection from session simple_selection = request.session.get('selection', False) # create full selection and import simple selection (if it exists) selection = Selection() if simple_selection: selection.importer(simple_selection) selection_type = 'segments' selection_subtype = 'site_residue' if request.FILES == {}: return render(request, 'common/selection_lists_sitesearch.html', '') #Overwriting the existing selection selection.clear(selection_type) workbook = xlrd.open_workbook( file_contents=request.FILES['xml_file'].read()) worksheets = workbook.sheet_names() for worksheet_name in worksheets: worksheet = workbook.sheet_by_name(worksheet_name) for row in worksheet.get_rows(): #for row in ws.rows: if len(row) < 5: continue group_id = int(row[0].value) min_match = int(row[1].value) try: position = ResidueGenericNumberEquivalent.objects.get( label=row[2].value, scheme__slug=row[3].value) except e: print(e) continue feature = row[4].value # update the selected group if not selection.active_site_residue_group: selection.active_site_residue_group = group_id if not selection.site_residue_groups: selection.site_residue_groups = [[]] if len(selection.site_residue_groups) < group_id: for x in group_id - len(selection.site_residue_groups): selection.site_residue_groups[x].append([]) # selection.site_residue_groups[group_id - 1].append(1) properties = {} properties['feature'] = feature properties[ 'site_residue_group'] = selection.active_site_residue_group properties['amino_acids'] = ','.join( definitions.AMINO_ACID_GROUPS[feature] ) if feature != 'custom' else row[5].value selection_object = SelectionItem(selection_subtype, position, properties) selection.add(selection_type, selection_subtype, selection_object) selection.site_residue_groups[group_id - 1][0] = min_match # export simple selection that can be serialized simple_selection = selection.exporter() # add simple selection to session request.session['selection'] = simple_selection context = selection.dict(selection_type) # amino acid groups amino_acid_groups = { 'amino_acid_groups': definitions.AMINO_ACID_GROUPS, 'amino_acid_group_names': definitions.AMINO_ACID_GROUP_NAMES } context.update(amino_acid_groups) return render(request, 'common/selection_lists_sitesearch.html', context)