def setAlignments( seqs = None, profiles = None, run_id = None, ali_type = 'struct', **kwargs ): ''' Make N structural alignemnts for each of N profiles having the same M sequences apiece. ''' assert seqs; assert run_id; assert profiles ns = len(profiles) nq = len(seqs) rutils = utils if ali_type == 'struct': ali_out = [infernal.alignment(seqs, p, run_id) for p in profiles] alignments = [a[0] for a in ali_out] refs = [[a[1]]*nq for a in ali_out] stks = [a[2] for a in ali_out] pairs = [[rutils.stk_pairs(stk)]*nq for stk in stks] elif ali_type == 'muscle': alignment = muscle.align(seqs) alignments = [alignment] * ns refs = None pairs = None stks = None #raise Exception('MUSCLE ALIGNMENT NOT YET IMPLEMENTED... SORRY :(') #ONCE IMPLEMENTED, WILL FIND HOMOLOGOUS STRUCTURES FOR EACH #PROFILE IN THE GIVEN MULTIPLE SEQUENCE ALIGNMENT. #IT REMAINS UNCLEAR HOW I WILL PUT THESE INTO A TREE AND TRACK THE #STRUCTURAL ELEMENTS THROUGH IT! #all_refs = [] #all_pairs = [] #for i, profile in enumerate(profiles): # these_refs = [] # these_pairs = [] # for j, q in enumerate(seqs): # ali_out = [infernal.alignment([q],profile, run_id)] # these_refs.append(ali_out[0][1]) # stk = ali_out[0][2] # # this_ali = ali_out[0][0] # this_seq = this_ali[0] # all_seqs.append(this_seq) # these_pairs.append( rutils.stk_pairs(stk)) # raise Exception() # all_refs.append(these_refs) # all_pairs.append(these_pairs) refs = None pairs = None else: raise Exception('sorry not implemented') return alignments, refs, pairs
def align_seqnodes(recs,**kwargs): align = muscle.align(recs) return align