def test_extendHelix(self): """StructureNode extendHelix should extend the helix as far as possible """ #single paired node is root[4] op_str = ViennaStructure('....(......)...') op = op_str.toTree() #can't extend if base pairs not allowed op[4].extendHelix(Rna('AAAAAAAAAAAAAAA')) self.assertEqual(str(op), op_str) #should extend a pair 5' op[4].extendHelix(Rna('AAACCAAAAAAGGAA')) self.assertEqual(str(op), '...((......))..') #should extend multiple pairs 5' op = op_str.toTree() op[4].extendHelix(Rna('CCCCCUUUUUUGGGG')) self.assertEqual(str(op), '.((((......))))') #should extend a pair 3', but must leave > 2-base loop op = op_str.toTree() op[4].extendHelix(Rna('AAAACCCCGGGGAAA')) self.assertEqual(str(op), '....((....))...') op[4][0].insert(1, StructureNode(Data=Stem(Start=1, End=1, Length=1))) op.renumber() self.assertEqual(str(op), '....((.()...))...') op[4][0].extendHelix(Rna('AAAACCCUACGGGGAAA')) self.assertEqual(str(op), '....(((()..)))...') #should extend a pair in both directions if possible op = op_str.toTree() op[4].extendHelix(Rna('AAACCCAAAAGGGAA')) self.assertEqual(str(op), '...(((....)))..')
def test_extendHelix(self): """StructureNode extendHelix should extend the helix as far as possible """ #single paired node is root[4] op_str = ViennaStructure('....(......)...') op = op_str.toTree() #can't extend if base pairs not allowed op[4].extendHelix(Rna('AAAAAAAAAAAAAAA')) self.assertEqual(str(op), op_str) #should extend a pair 5' op[4].extendHelix(Rna('AAACCAAAAAAGGAA')) self.assertEqual(str(op), '...((......))..') #should extend multiple pairs 5' op = op_str.toTree() op[4].extendHelix(Rna('CCCCCUUUUUUGGGG')) self.assertEqual(str(op), '.((((......))))') #should extend a pair 3', but must leave > 2-base loop op = op_str.toTree() op[4].extendHelix(Rna('AAAACCCCGGGGAAA')) self.assertEqual(str(op), '....((....))...') op[4][0].insert(1, StructureNode(Data=Stem(Start=1,End=1,Length=1))) op.renumber() self.assertEqual(str(op), '....((.()...))...') op[4][0].extendHelix(Rna( 'AAAACCCUACGGGGAAA')) self.assertEqual(str(op), '....(((()..)))...') #should extend a pair in both directions if possible op = op_str.toTree() op[4].extendHelix(Rna('AAACCCAAAAGGGAA')) self.assertEqual(str(op), '...(((....)))..')
def test_fitSeq(self): """StructureNode fitSeq should adjust structure to match sequence""" #this is just a minimal test, since we know that both breakBadPairs() #and extendHelices() work fine with more extensive tests. s = ViennaStructure('..(((.....)))......(((.....)))...') r = Rna('UCCCCACUGAGGGGUUUGGGGGGUUUUCGCCCU') t = s.toTree() t.fitSeq(r) self.assertEqual(str(t), '.((((.....))))...(((.((...)).))).')
def test_fitSeq(self): """StructureNode fitSeq should adjust structure to match sequence""" #this is just a minimal test, since we know that both breakBadPairs() #and extendHelices() work fine with more extensive tests. s = ViennaStructure('..(((.....)))......(((.....)))...') r = Rna( 'UCCCCACUGAGGGGUUUGGGGGGUUUUCGCCCU') t = s.toTree() t.fitSeq(r) self.assertEqual(str(t), '.((((.....))))...(((.((...)).))).')
def test_breakBadPairs(self): """StructureNode breakBadPairs should eliminate mispaired bases.""" oh_str = ViennaStructure(self.OneHelixStr) #no change if all pairs valid oh = oh_str.toTree() oh.breakBadPairs(Rna('CCCCCGGGGG')) self.assertEqual(str(oh), str(oh_str)) #break everything if all pairs invalid oh.breakBadPairs(Rna('CCCCCAAAAA')) self.assertEqual(str(oh), '..........') #break a single pair oh = oh_str.toTree() oh.breakBadPairs(Rna('GCCCCGGGGG')) self.assertEqual(str(oh), '.(((()))).') #break two pairs oh = oh_str.toTree() oh.breakBadPairs(Rna('GCCCCCGGGG')) self.assertEqual(str(oh), '.(((..))).') #break internal pairs oh = oh_str.toTree() oh.breakBadPairs(Rna('GCCGCGGGGG')) self.assertEqual(str(oh), '.((.().)).') #repeat with multiple independent helices th_str = ViennaStructure('((.)).((.))') th = th_str.toTree() th.breakBadPairs(Rna('CCUGGCUUCGG')) self.assertEqual(str(th), th_str) th.breakBadPairs(Rna('CGUAGCAGUUU')) self.assertEqual(str(th), '(...).((.))') th = th_str.toTree() th.breakBadPairs(Rna('UUUUUUUUUUU')) self.assertEqual(str(th), '...........')
def test_extendHelices(self): """StructureNode extendHelices should extend all helices""" e = ViennaStructure('........') t = e.toTree() t.extendHelices(Rna('CCCCCCCCCC')) self.assertEqual(str(t), e) #no pairs if sequence can't form them s = ViennaStructure('(.....(...)..)...((.....))...') r = Rna('AAAAAAAAAAAAAAAAAAAAAAAAAAAAA') t = s.toTree() t.extendHelices(r) self.assertEqual(str(t), s) #should be able to extend a single helix s = ViennaStructure('(.....(...)..)...((.....))...') r = Rna('CAAAAACAAAGAAGCCCCCCCAGGGGGGG') t = s.toTree() t.extendHelices(r) self.assertEqual(str(t), '(.....(...)..)((((((...))))))') #should be able to extend multiple helices s = ViennaStructure('(.....(...)..)...((.....))...') r = Rna('AAAAACCCAGGGUUCCCCCAUAAAGGGAA') t = s.toTree() t.extendHelices(r) self.assertEqual(str(t), '((...((...))))..(((.....)))..')