def Prepare_file(self, request,build=False): self.Tree = PrepareTree(build) a=Alignment() sets = ProteinSet.objects.all() #### Get additional data #### crysts=[] for n in sets: if n.id==1: for prot in n.proteins.all(): crysts.append(prot.entry_name) ############################# # get the user selection from session if build != False: ################################## FOR BUILDING STATISTICS ONLY########################## build_proteins=[] if build == '001': cons_prots = [] for prot in Protein.objects.filter(sequence_type__slug='consensus', species_id=1): if prot.family.slug.startswith('001') and len(prot.family.slug.split('_'))==3: build_proteins.append(prot) for set in sets: if set.id==1: for prot in set.proteins.all(): if prot.family.slug.startswith('001_') and prot.species.latin_name=='H**o sapiens': build_proteins.append(prot) else: for prot in Protein.objects.filter(sequence_type__slug='wt', species_id=1): if prot.family.slug.startswith(build): build_proteins.append(prot) a.load_proteins(build_proteins) segments = ProteinSegment.objects.all() a.load_segments(segments) self.bootstrap,self.UPGMA,self.branches,self.ttype=[0,1,1,0] ################################################################## else: simple_selection=request.session.get('selection', False) a.load_proteins_from_selection(simple_selection) a.load_segments_from_selection(simple_selection) self.bootstrap,self.UPGMA,self.branches,self.ttype = map(int,simple_selection.tree_settings) if self.bootstrap!=0: self.bootstrap=pow(10,self.bootstrap) #### Create an alignment object a.build_alignment() a.calculate_statistics() a.calculate_similarity() self.total = len(a.proteins) total_length = 0 for chain in a.proteins[0].alignment: total_length += len(a.proteins[0].alignment[chain]) families = ProteinFamily.objects.all() self.famdict = {} for n in families: self.famdict[self.Tree.trans_0_2_A(n.slug)]=n.name dirname = unique_filename = uuid.uuid4() os.mkdir('/tmp/%s' %dirname) infile = open('/tmp/%s/infile' %dirname,'w') infile.write(' '+str(self.total)+' '+str(total_length)+'\n') if len(a.proteins) < 3: return 'More_prots',None, None, None, None,None,None,None,None ####Get additional protein information accesions = {} for n in a.proteins: fam = self.Tree.trans_0_2_A(n.protein.family.slug) if n.protein.sequence_type.slug == 'consensus': fam+='_CON' entry_name = n.protein.entry_name name = n.protein.name.replace('<sub>','').replace('</sub>','').replace('<i>','').replace('</i>','') if '&' in name and ';' in name: name = name.replace('&','').replace(';',' ') acc = n.protein.accession if acc: acc = acc.replace('-','_') else: acc = link.replace('-','_')[:6] spec = str(n.protein.species) fam += '_'+n.protein.species.common_name.replace(' ','_').upper() desc = name if entry_name in crysts: if not fam in self.Additional_info['crystal']['proteins']: self.Additional_info['crystal']['proteins'].append(fam) if len(name)>25: name=name[:25]+'...' self.family[entry_name] = {'name':name,'family':fam,'description':desc,'species':spec,'class':'','accession':acc,'ligand':'','type':'','link': entry_name} accesions[acc]=entry_name ####Write PHYLIP input sequence = '' for chain in n.alignment: for residue in n.alignment[chain]: sequence += residue[2].replace('_','-') infile.write(acc+' '*9+sequence+'\n') infile.close() ####Run bootstrap if self.bootstrap: ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('\n'.join(['r',str(self.bootstrap),'y','77','y'])+'\n') inp.close() ### try: subprocess.check_output(['phylip seqboot<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=300) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big","too big" ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: inp.write('\n'.join(['m','d',str(self.bootstrap),'y'])+'\n') else: inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip protdist<temp>>log'], shell=True, cwd = '/tmp/%s' %dirname, timeout=300) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big","too big" os.rename('/tmp/%s/infile' %dirname, '/tmp/%s/dupa' %dirname) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: ### Write phylip input options if self.UPGMA: inp.write('\n'.join(['N','m',str(self.bootstrap),'111','y'])+'\n') else: inp.write('\n'.join(['m',str(self.bootstrap),'111','y'])+'\n') else: if self.UPGMA: inp.write('N\ny\n') else: inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip neighbor<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=300) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" if self.bootstrap: os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) os.rename('/tmp/%s/outtree' %dirname, '/tmp/%s/intree' %dirname) ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip consense<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=300) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" self.phylip = open('/tmp/%s/outtree' %dirname).read() for acc in accesions.keys(): self.phylip=self.phylip.replace(acc,accesions[acc]) # self.phylogeny_output = self.phylip self.outtree = open('/tmp/%s/outfile' %dirname).read().lstrip() phylogeny_input = self.get_phylogeny('/tmp/%s/' %dirname) shutil.rmtree('/tmp/%s' %dirname) if build != False: open('static/home/images/'+build+'_legend.svg','w').write(str(self.Tree.legend)) open('static/home/images/'+build+'_tree.xml','w').write(phylogeny_input) else: return phylogeny_input, self.branches, self.ttype, self.total, str(self.Tree.legend), self.Tree.box, self.Additional_info, self.buttons, a.proteins
class Treeclass: family = {} def __init__(self): self.Additional_info={"crystal": {"include":"False", "order":6, "colours":{"crystal_true":"#6dcde1","crystal_false":"#EEE"}, "color_type":"single", "proteins":[], "parent":None, "child": None, "name":"Crystals"}, "class": {"include":"True", "order":0, "colours":{}, "proteins":[], "color_type":"grayscale", "parent":[], "child": ["family,ligand"], "name":"Class"}, "family": {"include":"True", "order":1, "colours":{}, "proteins":[], "color_type":"spectrum", "parent":[], "child": ["ligand"], "name":"Ligand type"}, "ligand": {"include":"True", "order":2, "colours":{}, "proteins":[], "color_type":"spectrum", "parent":["family","class"], "child": [], "name":"Receptor type"}, "mutant": {"include":"False", "order":3, "colours":{"mutant_true":"#6dcde1","mutant_false":"#EEE"}, "color_type":"single", "proteins":[], "parent":[], "child": ["mutant_plus","mutant_minus"], "name":"Mutated proteins"}, "mutant_plus": {"include":"False", "order":4, "colours":{"mutant_plus_true":"#6dcde1","mutant_plus_false":"#EEE"}, "color_type":"single", "proteins":[], "parent":"mutant", "child": [], "name":"Positive affinity mutants"}, "mutant_minus": {"include":"False", "order":5, "colours":{"mutant_minus_true":"#6dcde1","mutant_minus_false":"#EEE"}, "color_type":"single", "proteins":[], "parent":"mutant", "child": [], "name":"Negative affinity mutants"} } self.buttons = [(x[1]['order'],x[1]['name']) for x in sorted(self.Additional_info.items(), key= lambda x: x[1]['order']) if x[1]['include']=='True'] self.family = {} self.phylip = None self.outtree = None self.dir = '' def Prepare_file(self, request,build=False): self.Tree = PrepareTree(build) a=Alignment() sets = ProteinSet.objects.all() #### Get additional data #### crysts=[] for n in sets: if n.id==1: for prot in n.proteins.all(): crysts.append(prot.entry_name) ############################# # get the user selection from session if build != False: ################################## FOR BUILDING STATISTICS ONLY########################## build_proteins=[] if build == '001': cons_prots = [] for prot in Protein.objects.filter(sequence_type__slug='consensus', species_id=1): if prot.family.slug.startswith('001') and len(prot.family.slug.split('_'))==3: build_proteins.append(prot) for set in sets: if set.id==1: for prot in set.proteins.all(): if prot.family.slug.startswith('001_') and prot.species.latin_name=='H**o sapiens': build_proteins.append(prot) else: for prot in Protein.objects.filter(sequence_type__slug='wt', species_id=1): if prot.family.slug.startswith(build): build_proteins.append(prot) a.load_proteins(build_proteins) segments = ProteinSegment.objects.all() a.load_segments(segments) self.bootstrap,self.UPGMA,self.branches,self.ttype=[0,1,1,0] ################################################################## else: simple_selection=request.session.get('selection', False) a.load_proteins_from_selection(simple_selection) a.load_segments_from_selection(simple_selection) self.bootstrap,self.UPGMA,self.branches,self.ttype = map(int,simple_selection.tree_settings) if self.bootstrap!=0: self.bootstrap=pow(10,self.bootstrap) #### Create an alignment object a.build_alignment() a.calculate_statistics() a.calculate_similarity() self.total = len(a.proteins) total_length = 0 for chain in a.proteins[0].alignment: total_length += len(a.proteins[0].alignment[chain]) families = ProteinFamily.objects.all() self.famdict = {} for n in families: self.famdict[self.Tree.trans_0_2_A(n.slug)]=n.name dirname = unique_filename = uuid.uuid4() os.mkdir('/tmp/%s' %dirname) infile = open('/tmp/%s/infile' %dirname,'w') infile.write(' '+str(self.total)+' '+str(total_length)+'\n') if len(a.proteins) < 3: return 'More_prots',None, None, None, None,None,None,None ####Get additional protein information accesions = {} for n in a.proteins: fam = self.Tree.trans_0_2_A(n.protein.family.slug) if n.protein.sequence_type.slug == 'consensus': fam+='_CON' entry_name = n.protein.entry_name name = n.protein.name.replace('<sub>','').replace('</sub>','').replace('<i>','').replace('</i>','') if '&' in name and ';' in name: name = name.replace('&','').replace(';',' ') acc = n.protein.accession if acc: acc = acc.replace('-','_') else: acc = link.replace('-','_')[:6] spec = str(n.protein.species) fam += '_'+n.protein.species.common_name.replace(' ','_').upper() desc = name if entry_name in crysts: if not fam in self.Additional_info['crystal']['proteins']: self.Additional_info['crystal']['proteins'].append(fam) if len(name)>25: name=name[:25]+'...' self.family[entry_name] = {'name':name,'family':fam,'description':desc,'species':spec,'class':'','accession':acc,'ligand':'','type':'','link': entry_name} accesions[acc]=entry_name ####Write PHYLIP input sequence = '' for chain in n.alignment: for residue in n.alignment[chain]: sequence += residue[2].replace('_','-') infile.write(acc+' '*9+sequence+'\n') infile.close() ####Run bootstrap if self.bootstrap: ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('\n'.join(['r',str(self.bootstrap),'y','77','y'])+'\n') inp.close() ### try: subprocess.check_output(['phylip seqboot<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=60) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: inp.write('\n'.join(['m','d',str(self.bootstrap),'y'])+'\n') else: inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip protdist<temp>>log'], shell=True, cwd = '/tmp/%s' %dirname, timeout=60) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" os.rename('/tmp/%s/infile' %dirname, '/tmp/%s/dupa' %dirname) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: ### Write phylip input options if self.UPGMA: inp.write('\n'.join(['N','m',str(self.bootstrap),'111','y'])+'\n') else: inp.write('\n'.join(['m',str(self.bootstrap),'111','y'])+'\n') else: if self.UPGMA: inp.write('N\ny\n') else: inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip neighbor<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=60) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" if self.bootstrap: os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) os.rename('/tmp/%s/outtree' %dirname, '/tmp/%s/intree' %dirname) ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('y\n') inp.close() ### try: subprocess.check_output(['phylip consense<temp'], shell=True, cwd = '/tmp/%s' %dirname, timeout=60) except: kill_phylo() #FIXME, needs better way of handling this! return "too big","too big","too big","too big","too big","too big","too big","too big" self.phylip = open('/tmp/%s/outtree' %dirname).read() for acc in accesions.keys(): self.phylip=self.phylip.replace(acc,accesions[acc]) # self.phylogeny_output = self.phylip self.outtree = open('/tmp/%s/outfile' %dirname).read().lstrip() phylogeny_input = self.get_phylogeny('/tmp/%s/' %dirname) shutil.rmtree('/tmp/%s' %dirname) if build != False: open('static/home/images/'+build+'_legend.svg','w').write(str(self.Tree.legend)) open('static/home/images/'+build+'_tree.xml','w').write(phylogeny_input) else: return phylogeny_input, self.branches, self.ttype, self.total, str(self.Tree.legend), self.Tree.box, self.Additional_info, self.buttons def get_phylogeny(self, dirname): self.Tree.treeDo(dirname, self.phylip,self.branches,self.family,self.Additional_info, self.famdict) phylogeny_input = open('%s/out.xml' %dirname,'r').read().replace('\n','') return phylogeny_input def get_data(self): return self.branches, self.ttype, self.total, str(self.Tree.legend), self.Tree.box, self.Additional_info, self.buttons
class Treeclass: family = {} def __init__(self): self.Additional_info = { "crystal": { "include": "False", "order": 6, "colours": { "crystal_true": "#6dcde1", "crystal_false": "#EEE" }, "color_type": "single", "proteins": [], "parent": None, "child": None, "name": "Crystals" }, "class": { "include": "True", "order": 0, "colours": {}, "proteins": [], "color_type": "grayscale", "parent": [], "child": ["family,ligand"], "name": "Class" }, "family": { "include": "True", "order": 1, "colours": {}, "proteins": [], "color_type": "spectrum", "parent": [], "child": ["ligand"], "name": "Ligand type" }, "ligand": { "include": "True", "order": 2, "colours": {}, "proteins": [], "color_type": "spectrum", "parent": ["family", "class"], "child": [], "name": "Receptor type" }, "mutant": { "include": "False", "order": 3, "colours": { "mutant_true": "#6dcde1", "mutant_false": "#EEE" }, "color_type": "single", "proteins": [], "parent": [], "child": ["mutant_plus", "mutant_minus"], "name": "Mutated proteins" }, "mutant_plus": { "include": "False", "order": 4, "colours": { "mutant_plus_true": "#6dcde1", "mutant_plus_false": "#EEE" }, "color_type": "single", "proteins": [], "parent": "mutant", "child": [], "name": "Positive affinity mutants" }, "mutant_minus": { "include": "False", "order": 5, "colours": { "mutant_minus_true": "#6dcde1", "mutant_minus_false": "#EEE" }, "color_type": "single", "proteins": [], "parent": "mutant", "child": [], "name": "Negative affinity mutants" } } self.buttons = [(x[1]['order'], x[1]['name']) for x in sorted(self.Additional_info.items(), key=lambda x: x[1]['order']) if x[1]['include'] == 'True'] self.family = {} self.phylip = None self.outtree = None self.dir = '' def Prepare_file(self, request, build=False): self.Tree = PrepareTree(build) a = Alignment() sets = ProteinSet.objects.all() #### Get additional data #### crysts = [] for n in sets: if n.id == 1: for prot in n.proteins.all(): crysts.append(prot.accession) ############################# # get the user selection from session if build != False: ################################## FOR BUILDING STATISTICS ONLY########################## build_proteins = [] if build == '001': cons_prots = [] for prot in Protein.objects.filter( sequence_type__slug='consensus', species_id=1): if prot.family.slug.startswith('001') and len( prot.family.slug.split('_')) == 3: build_proteins.append(prot) for set in sets: if set.id == 1: for prot in set.proteins.all(): if prot.family.slug.startswith( '001_' ) and prot.species.latin_name == 'H**o sapiens': build_proteins.append(prot) else: for prot in Protein.objects.filter(sequence_type__slug='wt', species_id=1): if prot.family.slug.startswith(build): build_proteins.append(prot) a.load_proteins(build_proteins) segments = ProteinSegment.objects.all() a.load_segments(segments) self.bootstrap, self.UPGMA, self.branches, self.ttype = [ 0, 1, 1, 0 ] ################################################################## else: simple_selection = request.session.get('selection', False) a.load_proteins_from_selection(simple_selection) a.load_segments_from_selection(simple_selection) self.bootstrap, self.UPGMA, self.branches, self.ttype = map( int, simple_selection.tree_settings) if self.bootstrap != 0: self.bootstrap = pow(10, self.bootstrap) #### Create an alignment object a.build_alignment() a.calculate_statistics() a.calculate_similarity() self.total = len(a.proteins) total_length = 0 for chain in a.proteins[0].alignment: total_length += len(a.proteins[0].alignment[chain]) families = ProteinFamily.objects.all() self.famdict = {} for n in families: self.famdict[self.Tree.trans_0_2_A(n.slug)] = n.name dirname = unique_filename = uuid.uuid4() os.mkdir('/tmp/%s' % dirname) infile = open('/tmp/%s/infile' % dirname, 'w') infile.write(' ' + str(self.total) + ' ' + str(total_length) + '\n') if len(a.proteins) < 3: return 'More_prots', None, None, None, None, None, None, None ####Get additional protein information for n in a.proteins: fam = self.Tree.trans_0_2_A(n.protein.family.slug) if n.protein.sequence_type.slug == 'consensus': fam += '_CON' link = n.protein.entry_name name = n.protein.name.replace('<sub>', '').replace('</sub>', '').replace( '<i>', '').replace('</i>', '') if '&' in name and ';' in name: name = name.replace('&', '').replace(';', ' ') acc = n.protein.accession if acc: acc = acc.replace('-', '_') else: acc = link.replace('-', '_')[:6] spec = str(n.protein.species) fam += '_' + n.protein.species.common_name.replace(' ', '_').upper() desc = name if acc in crysts: if not fam in self.Additional_info['crystal']['proteins']: self.Additional_info['crystal']['proteins'].append(fam) if len(name) > 25: name = name[:25] + '...' self.family[acc] = { 'name': name, 'family': fam, 'description': desc, 'species': spec, 'class': '', 'ligand': '', 'type': '', 'link': link } ####Write PHYLIP input sequence = '' for chain in n.alignment: for residue in n.alignment[chain]: sequence += residue[2].replace('_', '-') infile.write(acc + ' ' * 9 + sequence + '\n') infile.close() ####Run bootstrap if self.bootstrap: ### Write phylip input options inp = open('/tmp/%s/temp' % dirname, 'w') inp.write('\n'.join(['r', str(self.bootstrap), 'y', '77', 'y']) + '\n') inp.close() ### subprocess.check_output(['phylip seqboot<temp'], shell=True, cwd='/tmp/%s' % dirname) os.rename('/tmp/%s/outfile' % dirname, '/tmp/%s/infile' % dirname) ### Write phylip input options inp = open('/tmp/%s/temp' % dirname, 'w') if self.bootstrap: inp.write('\n'.join(['m', 'd', str(self.bootstrap), 'y']) + '\n') else: inp.write('y\n') inp.close() ### subprocess.check_output(['phylip protdist<temp>>log'], shell=True, cwd='/tmp/%s' % dirname) os.rename('/tmp/%s/infile' % dirname, '/tmp/%s/dupa' % dirname) os.rename('/tmp/%s/outfile' % dirname, '/tmp/%s/infile' % dirname) inp = open('/tmp/%s/temp' % dirname, 'w') if self.bootstrap: ### Write phylip input options if self.UPGMA: inp.write('\n'.join( ['N', 'm', str(self.bootstrap), '111', 'y']) + '\n') else: inp.write('\n'.join(['m', str(self.bootstrap), '111', 'y']) + '\n') else: if self.UPGMA: inp.write('N\ny\n') else: inp.write('y\n') inp.close() ### subprocess.check_output(['phylip neighbor<temp'], shell=True, cwd='/tmp/%s' % dirname) if self.bootstrap: os.rename('/tmp/%s/outfile' % dirname, '/tmp/%s/infile' % dirname) os.rename('/tmp/%s/outtree' % dirname, '/tmp/%s/intree' % dirname) ### Write phylip input options inp = open('/tmp/%s/temp' % dirname, 'w') inp.write('y\n') inp.close() ### subprocess.check_output(['phylip consense<temp'], shell=True, cwd='/tmp/%s' % dirname) self.phylip = open('/tmp/%s/outtree' % dirname).read() self.outtree = open('/tmp/%s/outfile' % dirname).read().lstrip() phylogeny_input = self.get_phylogeny('/tmp/%s/' % dirname) shutil.rmtree('/tmp/%s' % dirname) if build != False: open('static/home/images/' + build + '_legend.svg', 'w').write(str(self.Tree.legend)) open('static/home/images/' + build + '_tree.xml', 'w').write(phylogeny_input) else: return phylogeny_input, self.branches, self.ttype, self.total, str( self.Tree.legend ), self.Tree.box, self.Additional_info, self.buttons def get_phylogeny(self, dirname): self.Tree.treeDo(dirname, self.phylip, self.branches, self.family, self.Additional_info, self.famdict) phylogeny_input = open('%s/out.xml' % dirname, 'r').read().replace('\n', '') return phylogeny_input def get_data(self): return self.branches, self.ttype, self.total, str( self.Tree.legend ), self.Tree.box, self.Additional_info, self.buttons
def Prepare_file(self, request,build=False): self.Tree = PrepareTree(build) a=Alignment() sets = ProteinSet.objects.all() #### Get additional data #### crysts=[] for n in sets: if n.id==1: for prot in n.proteins.all(): crysts.append(prot.entry_name) ############################# # get the user selection from session if build != False: ################################## FOR BUILDING STATISTICS ONLY########################## build_proteins=[] if build == '001': cons_prots = [] for prot in Protein.objects.filter(sequence_type__slug='consensus', species_id=1): if prot.family.slug.startswith('001') and len(prot.family.slug.split('_'))==3: build_proteins.append(prot) for set in sets: if set.id==1: for prot in set.proteins.all(): if prot.family.slug.startswith('001_') and prot.species.latin_name=='H**o sapiens': build_proteins.append(prot) else: for prot in Protein.objects.filter(sequence_type__slug='wt', species_id=1): if prot.family.slug.startswith(build): build_proteins.append(prot) a.load_proteins(build_proteins) segments = ProteinSegment.objects.all() a.load_segments(segments) self.bootstrap,self.UPGMA,self.branches,self.ttype=[0,1,1,0] ################################################################## else: simple_selection=request.session.get('selection', False) a.load_proteins_from_selection(simple_selection) a.load_segments_from_selection(simple_selection) self.bootstrap,self.UPGMA,self.branches,self.ttype = map(int,simple_selection.tree_settings) if self.bootstrap!=0: self.bootstrap=pow(10,self.bootstrap) #### Create an alignment object a.build_alignment() a.calculate_statistics() a.calculate_similarity() self.total = len(a.proteins) total_length = 0 for chain in a.proteins[0].alignment: total_length += len(a.proteins[0].alignment[chain]) families = ProteinFamily.objects.all() self.famdict = {} for n in families: self.famdict[self.Tree.trans_0_2_A(n.slug)]=n.name dirname = unique_filename = uuid.uuid4() os.mkdir('/tmp/%s' %dirname) infile = open('/tmp/%s/infile' %dirname,'w') infile.write(' '+str(self.total)+' '+str(total_length)+'\n') if len(a.proteins) < 3: return 'More_prots',None, None, None, None,None,None,None ####Get additional protein information accesions = {} for n in a.proteins: fam = self.Tree.trans_0_2_A(n.protein.family.slug) if n.protein.sequence_type.slug == 'consensus': fam+='_CON' entry_name = n.protein.entry_name name = n.protein.name.replace('<sub>','').replace('</sub>','').replace('<i>','').replace('</i>','') if '&' in name and ';' in name: name = name.replace('&','').replace(';',' ') acc = n.protein.accession if acc: acc = acc.replace('-','_') else: acc = link.replace('-','_')[:6] spec = str(n.protein.species) fam += '_'+n.protein.species.common_name.replace(' ','_').upper() desc = name if entry_name in crysts: if not fam in self.Additional_info['crystal']['proteins']: self.Additional_info['crystal']['proteins'].append(fam) if len(name)>25: name=name[:25]+'...' self.family[entry_name] = {'name':name,'family':fam,'description':desc,'species':spec,'class':'','accession':acc,'ligand':'','type':'','link': entry_name} accesions[acc]=entry_name ####Write PHYLIP input sequence = '' for chain in n.alignment: for residue in n.alignment[chain]: sequence += residue[2].replace('_','-') infile.write(acc+' '*9+sequence+'\n') infile.close() ####Run bootstrap if self.bootstrap: ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('\n'.join(['r',str(self.bootstrap),'y','77','y'])+'\n') inp.close() ### subprocess.check_output(['phylip seqboot<temp'], shell=True, cwd = '/tmp/%s' %dirname) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: inp.write('\n'.join(['m','d',str(self.bootstrap),'y'])+'\n') else: inp.write('y\n') inp.close() ### subprocess.check_output(['phylip protdist<temp>>log'], shell=True, cwd = '/tmp/%s' %dirname) os.rename('/tmp/%s/infile' %dirname, '/tmp/%s/dupa' %dirname) os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) inp = open('/tmp/%s/temp' %dirname,'w') if self.bootstrap: ### Write phylip input options if self.UPGMA: inp.write('\n'.join(['N','m',str(self.bootstrap),'111','y'])+'\n') else: inp.write('\n'.join(['m',str(self.bootstrap),'111','y'])+'\n') else: if self.UPGMA: inp.write('N\ny\n') else: inp.write('y\n') inp.close() ### subprocess.check_output(['phylip neighbor<temp'], shell=True, cwd = '/tmp/%s' %dirname) if self.bootstrap: os.rename('/tmp/%s/outfile' %dirname, '/tmp/%s/infile' %dirname) os.rename('/tmp/%s/outtree' %dirname, '/tmp/%s/intree' %dirname) ### Write phylip input options inp = open('/tmp/%s/temp' %dirname,'w') inp.write('y\n') inp.close() ### subprocess.check_output(['phylip consense<temp'], shell=True, cwd = '/tmp/%s' %dirname) self.phylip = open('/tmp/%s/outtree' %dirname).read() for acc in accesions.keys(): self.phylip=self.phylip.replace(acc,accesions[acc]) # self.phylogeny_output = self.phylip self.outtree = open('/tmp/%s/outfile' %dirname).read().lstrip() phylogeny_input = self.get_phylogeny('/tmp/%s/' %dirname) shutil.rmtree('/tmp/%s' %dirname) if build != False: open('static/home/images/'+build+'_legend.svg','w').write(str(self.Tree.legend)) open('static/home/images/'+build+'_tree.xml','w').write(phylogeny_input) else: return phylogeny_input, self.branches, self.ttype, self.total, str(self.Tree.legend), self.Tree.box, self.Additional_info, self.buttons