def test_lipid_abbreviation(): l = Lipid(LipidClass('CE'), ResidueList([Residue(16, 2)])) assert l.abbreviation() == 'CE(16:2)' l = Lipid(LipidClass('CE'), ResidueList([Residue(16, 2), Residue(18, 1)])) assert l.abbreviation() == 'CE(16:2/18:1)' assert l.abbreviation(summed=True) == 'CE(34:3)' l = Lipid( LipidClass('CE'), ResidueList([ Residue(16, 2, modification=ResidueModification('O-')), Residue(18, 1) ])) assert l.abbreviation() == 'CE(O-16:2/18:1)' assert l.abbreviation(summed=True) == 'CE(O-34:3)' # no residues, assure that abbreviation/summed fails with AttributeError l = Lipid(LipidClass('CE')) assert l.abbreviation() == 'CE' assert l.abbreviation(summed=True) == 'CE'
def test_residuelist_sum(): r1 = Residue(18, 2) r2 = Residue(12, 3) residuelist = ResidueList([r1, r2]) assert residuelist.total_double_bonds == 5 assert residuelist.total_carbon_atoms == 30
def test_lipid_check_consistency(): l = Lipid(LipidClass('Cer'), ResidueList([Residue(16, 2), Residue(18, 1)])) # check inconsistent state assert l.residueslist[0].modification == None l.check_consistency() # check consistent state assert l.residueslist[0].modification == CLASS_DEFAULT_MODIFICATION['Cer']
def test_residue_parse(): r = Residue.parse("15:3") assert r.carbon_atoms == 15 r = Residue.parse("d15:3") assert r.carbon_atoms == 15 assert str(r.modification) == 'd' r = Residue.parse("15:3(6Z)") assert r.carbon_atoms == 15 assert len(r.zstatelist) == 1 assert str(r.zstatelist[0]) == '6Z'
def test_residue_string(): r = Residue(15, 3) assert r.residue_string == "15:3" r = Residue(15, 3, 2) assert r.residue_string == '15:3;2' r = Residue(15, 3, 2, ResidueModification('O-')) assert r.residue_string == 'O-15:3;2' r = Residue(15, 3, 2, ResidueModification('d')) assert r.residue_string == 'd15:3;2'
def parse(cls, string: str) -> ResidueList: """ Parse a string and return a list of Residues. :param string: Input string. :return: ResidueList instance. """ string = string.strip() # remove brackets log.debug(f'Parse input: {string}') # if string.count('(') > 1 or string.count(')') > 1: # raise NotImplementedError('alternative chains not implemented') string = remove_outside_brackets(string) # check for residue splitter splittable = False split_char = None if '/' in string: splittable = True split_char = '/' elif '_' in string: splittable = True split_char = '_' residues = [] residue_string_list = string.split(split_char) for residue_string in residue_string_list: residues.append(Residue.parse(residue_string)) return cls(residues)
def some_lipids_plain_list(): """ A handful of well formatted lipids, using all annotation elements. Return as Python list, not as LipidList Object """ # lists of names to draw from lipidclass_names = ['CE', 'Cer', 'TG'] modifications = ['d', 'O-', None, None] lipidlist = [] for i in range(10): lipidclass = LipidClass(random.choice(lipidclass_names)) num_of_residues = random.choice([1, 2, 3]) residuelist = ResidueList() for i in range(0, num_of_residues): residuelist.residues.append( Residue(random.randint(6, 50), random.randint(0, 10), modification=ResidueModification( random.choice(modifications)))) lipidlist.append(Lipid(lipidclass, residuelist)) return lipidlist
def test_residuelist_string(): r1 = Residue(18, 2) r2 = Residue(12, 3) residuelist = ResidueList([r1, r2]) assert residuelist.residuelist_string == '18:2/12:3'
def sum(self): """ Return sum of carbon atoms and double bonds of all Residues in this ResidueList as a Residue. """ return Residue(self.total_carbon_atoms, self.total_double_bonds)