La gestion des noms de résidus est quelque chose qui peut se révéler plus compliqué que prévu si on prends en compte tous les résidus que l’on peut trouver dans des fichiers PDB. Par exemple on peut trouver les molécules d’eau sous plusieurs formes: ‘W’, ‘H2O’, ‘WAT’, ‘HOH’ … toutes aussi acceptables l’une que l’autre. Il faut donc disposer de fonctions assez souples et c’est ce qui a justifié la mise en place d’un module resname.py distinct du module residues.py (voir les articles portant sur la structure de données resmap) dans le paquetage buildez.pdb.
Publication initiale sur buidez.fr (2024) – Article mis à jour en Mai 2025.
Navigation dans le guide
Guide [ Composants : buildez.pdb ]
1. Pour des résidus standards
Une premier groupe de fonctions est utilisé pour des conversions (pdb_aa2c1l, pdb_aa2c3l) vers des noms de résidus à 3 lettres ou à 1 lettre, et l’identification de résidus standards (pdb_isaaname, pdb_iswatname, pdb_isaatype). Par exemple le code suivant:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
print("*** Test standard amino acid names conversion/types") print("=> use internal default dictionary") print("'ALA' in 1 letter code = ", pdb_aa2c1l('ALA')) print("'ALA' is known with %d letters" % (pdb_isaaname('ALA'))) print("'ALA' is a residue of type = ", pdb_isaatype('ALA')) print("But ... 'Ala' is a residue of type = ", pdb_isaatype('Ala')) print("'BAF' in 1 letter code = ", pdb_aa2c1l('BAF')) print("'BAF' is known with %d letters" % (pdb_isaaname('BAF'))) print("'F' in 3 letters code = ", pdb_aa2c3l('F')) print("'F' is known with %d letters" % (pdb_isaaname('F'))) print("'Z' in 3 letters code = ", pdb_aa2c3l('Z')) print("'Z' is known with %d letters" % (pdb_isaaname('Z'))) |
Donnera le résultat suivant :
*** Test standard amino acid names conversion/types=> use internal default dictionary'ALA' in 1 letter code = A'ALA' is known with 3 letters'ALA' is a residue of type = aaBut ... 'Ala' is a residue of type = ukn'BAF' in 1 letter code ='BAF' is known with 0 letters'F' in 3 letters code = PHE'F' is known with 1 letters'Z' in 3 letters code ='Z' is known with 0 letters |
Il s’agit de fonctions simplistes mais qui sont utilisées très souvent en tant que primitives par d’autres codes, donc il fallait les implémenter.
2. Résidus non-standard et ligands
Il existe d’autres résidus qui ne correspondent pas à des acides aminés standards, par exemple de la sélénométhionine (Se-Met, SEM) que l’on trouve parfois dans des structures PDB. Il y a aussi les ions, et les composés issus du tampon et co-cristallisés, sans compter les ‘vrais’ ligands (molécules d’intérêt, j’utilise le terme euligands pour ces derniers). Dans ce cas, il faut créer un dictionnaire qui fait la liste de ces résidus avec obligatoirement un alphabet à 3 lettres. Le plus simple est de le coder au format CSVM ce qui permet d’embarquer d’autres informations et de l’utiliser comme source de données.
Il est possible de faire son propre dictionnaire si des résidus ou des composés chimiques inédits, sont susceptibles d’être présents dans la structure. S’il s’agit de composés déjà connus (dans des structures de la PDB) il est possible d’utiliser un document de la PDB qui fait la correspondance entre le nom chimique et celui utilisé dans la PDB (hetcompound dictionary). Une fonction pdb_csvm2resdico permet de charger le fichier CSVM et revoir un dictionnaire Python utilisable par une fonction d’identification des résidus. Par exemple le code suivant :
|
1 2 3 4 5 |
print("=> use external default dictionary") print("Load a dictionary for 3-letters code names") rdict3t = pdb_csvm2resdico('', 'RNAME', 'TYPE') print("found %d entries" % (len(rdict3t))) print(rdict3t) |
Donnera un résultat du type :
|
1 2 3 4 |
=> use external default dictionary Load a dictionary for 3-letters code names found 241 entries {'3CO': 'ion', 'BA': 'ion', 'OAA': 'ion', 'RH3': 'ion', 'ZNO': 'ion', 'NAO': 'ion', 'GD3': 'ion', 'NAW': 'ion', 'BR': 'ion', 'NI2': 'ion', 'NI3': 'ion', 'NI1': 'ion', 'AL': 'ion', 'TAU': 'nsr', 'ACE': 'nsr', 'LYS': 'aa', 'PRO': 'aa', '3OF': 'ion', 'OF2': 'ion', '543': 'ion', 'OF1': 'ion', 'RB': 'ion', 'BF4': 'ion', 'SAR': 'nsr', 'IOD': 'ion', 'HAI': 'ion', 'THY': 'nsr', 'THR': 'aa', 'CHT': 'ion', 'PER': 'ion', 'GA': 'ion', 'THE': 'ion', '118': 'ion', 'SMO': 'ion', 'TMA': 'ion', 'OH': 'ion', 'BO4': 'ion', 'PHE': 'aa', 'MH3': 'ion', 'NA2': 'ion', 'ZN2': 'ion', 'MAC': 'ion', 'NA6': 'ion', 'NA5': 'ion', 'OS': 'ion', 'RHD': 'ion', 'TYR': 'aa', 'CD1': 'ion', 'DTI': 'ion', 'OCM': 'ion', 'OCL': 'ion', 'OCO': 'ion', 'OCN': 'ion', 'MO3': 'ion', 'MO2': 'ion', 'MO1': 'ion', 'ACT': 'ion', 'BEF': 'ion', 'MO6': 'ion', 'MO5': 'ion', 'MO4': 'ion', 'VO4': 'ion', 'CSB': 'ion', 'PCA': 'nsr', '119': 'ion', 'HG': 'ion', 'BET': 'nsr', 'NO3': 'ion', 'PR': 'ion', 'ORN': 'nsr', 'SCN': 'ion', 'AZI': 'ion', 'PT': 'ion', 'WO5': 'ion', 'YT3': 'ion', 'PB': 'ion', 'ZO3': 'ion', 'PD': 'ion', 'PI': 'ion', 'PO4': 'ion', 'ZN': 'ion', 'IR': 'ion', 'O4M': 'ion', 'FOR': 'nsr', 'RU': 'ion', 'TRA': 'ion', '2HP': 'ion', 'K': 'ion', 'MN3': 'ion', 'MN5': 'ion', 'MN6': 'ion', 'OS4': 'ion', 'OXL': 'ion', 'W': 'ion', 'EU': 'ion', 'TRP': 'aa', 'PT4': 'ion', 'DSC': 'ion', 'MW3': 'ion', 'MW2': 'ion', 'MW1': 'ion', 'T1A': 'ion', 'LCP': 'ion', 'NH4': 'ion', 'MOS': 'ion', 'YB2': 'ion', '3MT': 'ion', 'MOW': 'ion', 'ATH': 'ion', 'OC8': 'ion', 'MOO': 'ion', 'NA': 'ion', 'OC1': 'ion', 'LCO': 'ion', 'OC3': 'ion', 'BTN': 'nsr', 'OC5': 'ion', 'OC4': 'ion', 'OC7': 'ion', 'SO4': 'ion', 'ILE': 'aa', 'GLN': 'aa', 'ACD': 'alt', 'IN': 'ion', '2OF': 'ion', 'GLX': 'alt', 'GLY': 'aa', 'FE': 'ion', 'PBM': 'ion', 'CD3': 'ion', 'BCT': 'ion', 'NET': 'ion', 'GLU': 'aa', 'EMC': 'ion', 'CON': 'ion', 'NI': 'ion', 'ASP': 'aa', 'CU3': 'ion', 'SER': 'aa', 'CU1': 'ion', 'OF3': 'ion', 'TEA': 'ion', 'ASX': 'alt', 'AU3': 'ion', 'FE2': 'ion', 'DMI': 'ion', 'SEC': 'alt', 'TER': 'naa', 'SEK': 'ion', 'ASN': 'aa', 'EU3': 'ion', 'HET': 'het', 'AUC': 'ion', 'SE4': 'ion', 'CO': 'ion', 'CL': 'ion', 'UNX': 'ion', 'PDV': 'ion', 'CA': 'ion', 'TCN': 'ion', 'CUZ': 'ion', 'CE': 'ion', 'CD': 'ion', 'CUA': 'ion', 'V': 'ion', 'CS': 'ion', 'CR': 'ion', 'WAT': 'wat', 'CU': 'ion', 'CO3': 'ion', 'CO5': 'ion', '1CU': 'ion', 'ALI': 'alt', 'ALF': 'ion', 'SR': 'ion', 'ALB': 'nsr', 'ALA': 'aa', 'EDR': 'ion', 'MET': 'aa', 'H2O': 'wat', 'LEU': 'aa', 'SM': 'ion', 'SB': 'ion', 'MMC': 'ion', 'YH': 'ion', 'MN': 'ion', 'BAS': 'alt', '6MO': 'ion', 'DG': 'dna', 'YB': 'ion', 'HYL': 'nsr', 'DC': 'dna', 'DA': 'dna', 'HYP': 'nsr', 'UKN': 'ukn', 'CAC': 'ion', 'DT': 'dna', 'MSE': 'alt', 'CYS': 'aa', 'F': 'ion', 'HIS': 'aa', 'VAL': 'aa', 'LA': 'ion', 'IR3': 'ion', 'TBA': 'ion', 'LI': 'ion', 'TL': 'ion', 'LU': 'ion', 'NO2': 'ion', 'ZN3': 'ion', 'NSR': 'naa', 'TB': 'ion', 'CYN': 'ion', 'OC6': 'ion', 'DME': 'ion', 'AG': 'ion', 'PTN': 'ion', 'FPO': 'ion', 'MLI': 'ion', 'PO3': 'ion', 'HOH': 'wat', '3NI': 'ion', 'IRI': 'ion', 'SO3': 'ion', 'GEP': 'ion', 'AU': 'ion', 'ABU': 'nsr', 'MLT': 'ion', '1AL': 'ion', 'IUM': 'ion', 'OC2': 'ion', 'ER3': 'ion', 'CD5': 'ion', 'MG': 'ion', 'ARG': 'aa', 'Y1': 'ion', 'HSE': 'nsr', '4MO': 'ion', 'KO4': 'ion', 'NRU': 'ion', 'ARO': 'alt'} |
Il s’agit d’un petit dictionnaire qui recense 241 composés et que l’on peut faire afficher en fonction du nom PDB, par exemple 'ACT' pour un acide acétique chargé et qui contient aussi un type moléculaire: ion, aa (amino acid), nsr (non standard residue) … Le même dictionnaire peut être affiché en fonction du nom chimique, par exemple :
|
1 2 3 4 |
print("Load a dictionary for names") rdict3n = pdb_csvm2resdico('', 'RNAME', 'MOLNAME') print("found %d entries" % (len(rdict3n))) print(rdict3n) |
Ce qui donnera un résultat plus explicite :
|
1 2 3 |
Load a dictionary for names found 241 entries {'3CO': 'cobalt (iii) ion', 'BA': 'barium ion', 'OAA': 'oxaloacetate ion', 'RH3': 'rhodium(iii) ion', 'ZNO': 'zinc ion, 2 waters coordinated', 'NAO': 'sodium ion, 1 water coordinated', 'GD3': 'gadolinium ion', 'NAW': 'sodium ion, 3 waters coordinated', 'BR': 'bromide ion', 'NI2': 'nickel (ii) ion, 2 waters coordinated', 'NI3': 'nickel (ii) ion, 3 waters coordinated', 'NI1': 'nickel ion, 1 water coordinated', 'AL': 'aluminum ion', 'TAU': 'Taurine', 'ACE': 'Acetyl', 'LYS': 'Lysine', 'PRO': 'Proline', '3OF': 'hydrated fe (iii) ion, 2 waters coordinated', 'OF2': '2 ferric ion, 1 bridging oxygen', '543': 'calcium ion, 6 waters plus ethanol coordinated', 'OF1': 'ferrous ion, 1 water coordinated', 'RB': 'rubidium ion', 'BF4': 'beryllium tetrafluoride ion', 'SAR': 'Sarcosine', 'IOD': 'iodide ion', 'HAI': 'cyclohexylammonium ion', 'THY': 'Thyroxine', 'THR': 'Threonine', 'CHT': 'choline ion', 'PER': 'peroxide ion', 'GA': 'gallium (iii) ion', 'THE': 'threonate ion', '118': 'tetraphenylantimonium ion', 'SMO': 'dioxosulfidomolybdenum(vi) ion', 'TMA': 'tetramethylammonium ion', 'OH': 'hydroxide ion', 'BO4': 'borate ion', 'PHE': 'Phenylalanine', 'MH3': 'manganese ion, 1 hydroxyl coordinated', 'NA2': 'sodium ion, 2 water coordinated', 'ZN2': 'zinc ion on 3-fold crystal axis', 'MAC': 'mercury acetate ion', 'NA6': 'sodium ion, 6 waters coordinated', 'NA5': 'sodium ion, 5 waters coordinated', 'OS': 'osmium ion', 'RHD': 'rhodium hexamine ion', 'TYR': 'Tyrosine', 'CD1': 'cadmium ion, 1 water coordinated', 'DTI': '3,4-dimethylthiazolium ion', 'OCM': 'cobalt ion, 3 waters coordinated', 'OCL': 'cobalt ion, 1 water coordinated', 'OCO': 'cobalt ion,6 waters coordinated', 'OCN': 'cobalt ion, 2 waters coordinated', 'MO3': 'magnesium ion, 3 waters coordinated', 'MO2': 'magnesium ion, 2 waters coordinated', 'MO1': 'magnesium ion, 1 water coordinated', 'ACT': 'acetate ion', 'BEF': 'beryllium trifluoride ion', 'MO6': 'magnesium ion, 6 waters coordinated', 'MO5': 'magnesium ion, 5 waters coordinated', 'MO4': 'magnesium ion, 4 waters coordinated', 'VO4': 'vanadate ion', 'CSB': 'cys bound to lead ion', 'PCA': 'Pyrollidone carboxylic acid', '119': 'tetraphenylphosphonium ion', 'HG': 'mercury (ii) ion', 'BET': 'Betaine', 'NO3': 'nitrate ion', 'PR': 'praseodymium ion', 'ORN': 'Ornithine', 'SCN': 'thiocyanate ion', 'AZI': 'azide ion', 'PT': 'platinum (ii) ion', 'WO5': 'tungstate(vi) ion', 'YT3': 'yttrium (iii) ion', 'PB': 'lead (ii) ion', 'ZO3': 'zinc ion, 3 waters coordinated', 'PD': 'palladium ion', 'PI': 'hydrogenphosphate ion', 'PO4': 'phosphate ion', 'ZN': 'zinc ion', 'IR': 'iridium ion', 'O4M': 'manganese tetrahydrate ion', 'FOR': 'Formyl', 'RU': 'ruthenium ion', 'TRA': 'aconitate ion', '2HP': 'dihydrogenphosphate ion', 'K': 'potassium ion', 'MN3': 'manganese (iii) ion', 'MN5': 'manganese ion, 5 waters coordinated', 'MN6': 'manganese ion, 6 waters coordinated', 'OS4': 'osmium 4+ ion', 'OXL': 'oxalate ion', 'W': 'tungsten ion', 'EU': 'europium ion', 'TRP': 'Tryptophan', 'PT4': 'platinum (iv) ion', 'DSC': 'dodecanesulfonate ion', 'MW3': 'manganese ion, 3 waters coordinated', 'MW2': 'manganese dihydrate ion', 'MW1': 'manganese ion, 1 water coordinated', 'T1A': 'tetraethylarsonium ion', 'LCP': 'perchlorate ion', 'NH4': 'ammonium ion', 'MOS': 'dioxothiomolybdenum(vi) ion', 'YB2': 'ytterbium (ii) ion', '3MT': '3-methylthiazolium ion', 'MOW': 'oxo(sulfanyl)molybdenum(iv) ion', 'ATH': '4-hydroxy-aconitate ion', 'OC8': 'calcium ion, 8 waters coordinated', 'MOO': 'molybdate ion', 'NA': 'sodium ion', 'OC1': 'calcium ion, 1 water coordinated', 'LCO': 'chlorate ion', 'OC3': 'calcium ion, 3 waters coordinated', 'BTN': 'Biotine', 'OC5': 'calcium ion, 5 waters coordinated', 'OC4': 'calcium ion, 4 waters coordinated', 'OC7': 'calcium ion, 7 waters coordinated', 'SO4': 'sulfate ion', 'ILE': 'Isoleucine', 'GLN': 'Glutamine', 'ACD': 'Acidic unknown', 'IN': 'indium (iii) ion', '2OF': 'ferrous ion, 2 waters coordinated', 'GLX': 'GLU/GLN ambiguous', 'GLY': 'Glycine', 'FE': 'fe (iii) ion', 'PBM': 'trimethyl lead ion', 'CD3': 'cadmium ion, 3 waters coordinated', 'BCT': 'bicarbonate ion', 'NET': 'tetraethylammonium ion', 'GLU': 'Glutamic acid', 'EMC': 'ethyl mercury ion', 'CON': 'cobalt tetraammine ion', 'NI': 'nickel (ii) ion', 'ASP': 'Aspartic acid', 'CU3': 'copper (iii) ion', 'SER': 'Serine', 'CU1': 'copper (i) ion', 'OF3': 'ferric ion, 1 water coordinated', 'TEA': 'triethylammonium ion', 'ASX': 'ASP/ASN ambiguous', 'AU3': 'gold 3+ ion', 'FE2': 'fe (ii) ion', 'DMI': '2,3-dimethylimidazolium ion', 'SEC': 'Selenocysteine', 'TER': 'Terminator', 'SEK': 'selenocyanate ion', 'ASN': 'Asparagine', 'EU3': 'europium (iii) ion', 'HET': 'Heterogen', 'AUC': 'gold (i) cyanide ion', 'SE4': 'selenate ion', 'CO': 'cobalt (ii) ion', 'CL': 'chloride ion', 'UNX': 'unknown atom or ion', 'PDV': 'divanadate ion', 'CA': 'calcium ion', 'TCN': 'tetracyanonickelate ion', 'CUZ': '(mu-4-sulfido)-tetra-nuclear copper ion', 'CE': 'cerium (iii) ion', 'CD': 'cadmium ion', 'CUA': 'dinuclear copper ion', 'V': 'vanadium ion', 'CS': 'cesium ion', 'CR': 'chromium ion', 'WAT': 'Water', 'CU': 'copper (ii) ion', 'CO3': 'carbonate ion', 'CO5': 'cobalt ion,5 waters coordinated', '1CU': 'copper ion, 1 water coordinated', 'ALI': 'Aliphatic unknown', 'ALF': 'tetrafluoroaluminate ion', 'SR': 'strontium ion', 'ALB': 'beta-Alanine', 'ALA': 'Alanine', 'EDR': 'edrophonium ion', 'MET': 'Methionine', 'H2O': 'Water', 'LEU': 'Leucine', 'SM': 'samarium (iii) ion', 'SB': 'antimony (iii) ion', 'MMC': 'methyl mercury ion', 'YH': 'yttrium ion, 1 water coordinated', 'MN': 'manganese (ii) ion', 'BAS': 'Basic unknown', '6MO': 'molybdenum(vi) ion', 'DG': 'Guanine', 'YB': 'ytterbium (iii) ion', 'HYL': 'Hydroxylysine', 'DC': 'Cytosine', 'DA': 'Adenine', 'HYP': 'Hydroxyproline', 'UKN': 'Unknown', 'CAC': 'cacodylate ion', 'DT': 'Thymine', 'MSE': 'Selenomethionine', 'CYS': 'Cysteine', 'F': 'fluoride ion', 'HIS': 'Histidine', 'VAL': 'Valine', 'LA': 'lanthanum (iii) ion', 'IR3': 'iridium (iii) ion', 'TBA': 'tetrabutylammonium ion', 'LI': 'lithium ion', 'TL': 'thallium (i) ion', 'LU': 'lutetium (iii) ion', 'NO2': 'nitrite ion', 'ZN3': 'zinc ion, 1 water coordinated', 'NSR': 'Non-Standard residue', 'TB': 'terbium(iii) ion', 'CYN': 'cyanide ion', 'OC6': 'calcium ion, 6 waters coordinated', 'DME': 'decamethonium ion', 'AG': 'silver ion', 'PTN': 'platinum triamine ion', 'FPO': 'fluoro-phosphite ion', 'MLI': 'malonate ion', 'PO3': 'phosphite ion', 'HOH': 'Water', '3NI': 'nickel (iii) ion', 'IRI': 'iridium hexammine ion', 'SO3': 'sulfite ion', 'GEP': 'n-methyl-n-(para-glutaramidophenyl-ethyl)-piperidinium ion', 'AU': 'gold ion', 'ABU': 'gamma-Aminobutyric acid', 'MLT': 'malate ion', '1AL': 'allantoate ion', 'IUM': 'uranyl (vi) ion', 'OC2': 'calcium ion, 2 waters coordinated', 'ER3': 'erbium (iii) ion', 'CD5': 'cadmium ion, 5 waters coordinated', 'MG': 'magnesium ion', 'ARG': 'Arginine', 'Y1': 'yttrium ion', 'HSE': 'Homoserine', '4MO': 'molybdenum(iv) ion', 'KO4': 'potassium ion, 4 waters coordinated', 'NRU': 'ruthenium (iii) hexaamine ion', 'ARO': 'Aromatic unknown'} |
A partir de ce moment il est assez facile de proposer un code pour déterminer rapidement l’origine de tel ou tel résidu dans un fichier/chaine/table PDB d’après son nom. La fonction pdb_isres3type permet de réaliser simplement ce travail connaissant le nom à 3 lettres du résidu, le dictionnaire Python, et un type par défaut (par exemple 'ukn' ou '-'). On saura immédiatement si le résidu est inconnu (ukn, -) ou s’il est identifiable et dans ce cas quel est son type. Dans l’exemple suivant on va utiliser une liste testn de noms de résidus arbitraires et tester si les correspondances existent :
|
1 2 3 4 5 6 7 8 |
testn = ['ALA', 'VAL', 'Ala', 'BAF', 'MSE', 'GLX', 'HOH', 'UKN', 'TER', 'HET', 'ACD', 'NSR', 'ACE', 'ORN', 'SO4'] print("=> Testing following residue names") print(testn) print() for i in range (0, len(testn), 1): st = pdb_isres3type(testn[i], rdict3t, 'ukn') sn = pdb_isres3type(testn[i], rdict3n, '-') print("%s (%s) is of type %s" % (testn[i], sn, st)) |
Ce qui donnera comme résultat la séquence suivante:
=> Testing following residue names['ALA', 'VAL', 'Ala', 'BAF', 'MSE', 'GLX', 'HOH', 'UKN', 'TER', 'HET', 'ACD', 'NSR', 'ACE', 'ORN', 'SO4']ALA (Alanine) is of type aaVAL (Valine) is of type aaAla (-) is of type uknBAF (-) is of type uknMSE (Selenomethionine) is of type altGLX (GLU/GLN ambiguous) is of type altHOH (Water) is of type watUKN (Unknown) is of type uknTER (Terminator) is of type naaHET (Heterogen) is of type hetACD (Acidic unknown) is of type altNSR (Non-Standard residue) is of type naaACE (Acetyl) is of type nsrORN (Ornithine) is of type nsrSO4 (sulfate ion) is of type ion |
Attention ! Le système est sensible à la casse (cf. cas du résidu ‘Ala’) qui apparaît être de type inconnu. Cela peut être un avantage ou un inconvénient, en fonction du contexte. En tout cas, rien n’empêche de convertir en majuscules systématiquement le nom du résidu avant la recherche dans le dictionnaire.
Nous y retrouvons la sélénométhionine, et nous constatons que dans la nomenclature PDB, elle est identifiée par MSE et non SEM. Cet identifiant est pris par un autre acide aminé modifié la O-benzyl-L-serine :
![]() |
![]() |
MSE (Sélénométhionine)Présent en tant que ligand dans 20 entrées PDB, présent en tant qu’acide aminé (dans les chaines polypeptidiques) dans 10177 entrées PDB (mars 2025). [ https://www.rcsb.org/ligand/MSE ] |
SEM (O-Benzyl-L-serine)Présent dans 1 entrée PDB en (mars 2025). [ https://www.rcsb.org/ligand/SEM ] |
3. Référentiel
Fonctions du module resname.py en mode abrégé (mai 2025).
| Fonction | Utilisation |
pdb_isaaname |
A partir d’une chaine (string) en majuscules, renvoie 1 ou 3 s’il y a correspondance avec un nom d’AA (acide aminé) standard à 1 lettre ou 3 lettres (sinon zéro). Utilise le dictionnaire interne au module. |
pdb_iswatname |
A partir d’une chaine (string) en majuscules, renvoie 1 s’il y a correspondance avec le nom (au sens PDB) d’une molécule d’eau (sinon zéro). Utilise le dictionnaire interne au module. |
pdb_isaatype |
Interface aux fonctions pdb_isaaname et pdb_iswatname mais renvoie une chaine 'aa' ou 'wat' s’il y a correspondance avec un AA standard ou une molécule d’eau. S’il n’y a pas de match, renvoie la chaine 'ukn' (nom inconnu). |
pdb_aa2c1l |
A partir d’une chaine (string) en majuscules correspondant à un code d’AA à 3 lettres, renvoie le code à 1 lettre (sinon une chaine vide). |
pdb_aa2c3l |
A partir d’une chaine (string) en majuscules correspondant à un code d’AA à 1 lettre, renvoie le code à 3 lettres, sinon une chaine vide). |
pdb_csvm2resdico |
Lit un fichier CSVM incluant des données sur des noms de résidus et le convertir en dictionnaire (Python, pas CSVM) utilisable par le module. Un CSVM de base aa-names.csvm est fourni dans le dossier \pdb\data mais on peut utiliser un autre CSVM. |
pdb_dict_resname2restype |
Laissé pour compatibilité, appelle fonction pdb_isres3type. |
pdb_isres3type |
A partir d’un nom de résidu à 3 lettres, utilise un dictionnaire python pour caractériser le résidu correspondant. Renvoie une chaine : 'aa', 'w', 'het', 'alt' … en fonction du contenu du dictionnaire. Sinon renvoie le caractère blank (blank='-' défini par défaut) que l’on peut choisir en tant qu’argument. Si un dictionnaire externe (ex: aa-names.csvm) est utilisé, la fonction pdb_csvm2resdico est un préalable. |
4. Données additionnelles
Le fichier CSVM aa-names.csvm peut être étendu au fur et à mesure des besoins, dans sa version 1.03 (mars 2017) il inclue d’autres noms de résidus que les acides aminés, standards ou non, les TABs sont utilisés en tant que caractère délimiteurs (comme dans un fichier CSV).
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
#================================================================================ # VERSIONS # 1.03 Fred Data from 05mar17. # 1.02 Fred Added Pyrrolysine and checked cystine. # 1.01 Fred Added ions (188 entries) 27jul2010 using data v:1.00. # 1.00 Fred Data from 20jul2010. #================================================================================ # Standard Amino Acids aa A Alanine ALA #TEXT 50 aa R Arginine ARG #TEXT 50 aa N Asparagine ASN #TEXT 50 aa D Aspartic acid ASP #TEXT 50 aa C Cysteine CYS #TEXT 50 aa E Glutamic acid GLU #TEXT 50 aa Q Glutamine GLN #TEXT 50 aa G Glycine GLY #TEXT 50 aa H Histidine HIS #TEXT 50 aa O Isoleucine ILE #TEXT 50 aa L Leucine LEU #TEXT 50 aa K Lysine LYS #TEXT 50 aa M Methionine MET #TEXT 50 aa F Phenylalanine PHE #TEXT 50 aa P Proline PRO #TEXT 50 aa S Serine SER #TEXT 50 aa T Threonine THR #TEXT 50 aa W Tryptophan TRP #TEXT 50 aa Y Tyrosine TYR #TEXT 50 aa V Valine VAL #TEXT 50 # Alternative forms of standard amino acids alt - Selenocysteine SEC #TEXT 50 alt - Selenomethionine MSE #TEXT 50 alt - GLU/GLN ambiguous GLX #TEXT 50 alt - ASP/ASN ambiguous ASX #TEXT 50 #aa C Cystine CYS #TEXT 50 #alt O Pyrrolysine PYL #TEXT 50 # DNA and RNA residues dna - Adenine DA #TEXT 50 dna - Thymine DT #TEXT 50 dna - Guanine DG #TEXT 50 dna - Cytosine DC #TEXT 50 # Generic residues ukn - Unknown UKN #TEXT 50 het - Heterogen HET #TEXT 50 naa - Terminator TER #TEXT 50 alt - Acidic unknown ACD #TEXT 50 alt - Aliphatic unknown ALI #TEXT 50 alt - Aromatic unknown ARO #TEXT 50 alt - Basic unknown BAS #TEXT 50 naa - Non-Standard residue NSR #TEXT 50 # Non-Standard Amino Acids nsr - Homoserine HSE #TEXT 50 nsr - Acetyl ACE #TEXT 50 nsr - Hydroxyproline HYP #TEXT 50 nsr - Hydroxylysine HYL #TEXT 50 nsr - beta-Alanine ALB #TEXT 50 nsr - gamma-Aminobutyric acid ABU #TEXT 50 nsr - Ornithine ORN #TEXT 50 nsr - Pyrollidone carboxylic acid PCA #TEXT 50 nsr - Sarcosine SAR #TEXT 50 nsr - Betaine BET #TEXT 50 nsr - Taurine TAU #TEXT 50 nsr - Formyl FOR #TEXT 50 nsr - Thyroxine THY #TEXT 50 nsr - Biotine BTN #TEXT 50 # Water and ions wat - Water HOH #TEXT 50 wat - Water H2O #TEXT 50 wat - Water WAT #TEXT 50 wat - Water W #TEXT 50 ion - sodium ion, 2 water coordinated NA2 #TEXT 50 ion - cobalt ion,6 waters coordinated OCO #TEXT 50 ion - lead (ii) ion PB #TEXT 50 ion - manganese tetrahydrate ion O4M #TEXT 50 ion - oxaloacetate ion OAA #TEXT 50 ... ion - calcium ion, 4 waters coordinated OC4 #TEXT 50 ion - sodium ion, 1 water coordinated NAO #TEXT 50 ion - uranyl (vi) ion IUM #TEXT 50 ion - nickel (ii) ion, 3 waters coordinated NI3 #TEXT 50 ion - chlorate ion LCO #TEXT 50 #TITLE Local dictionary of standard residue names/types #HEADER TYPE 1LET MOLNAME RNAME #TYPE #WIDTH #TYPE TEXT TEXT TEXT TEXT #TEXT #TEXT #WIDTH 50 50 50 50 #50 #50 #META Generated 05mar17 |
Il s’agit d’un fichier CSVM de type dictionnaire. Nous trouvons les champs #TITLE, #HEADER, #TYPE, #WIDTH, #META et des commentaires, tous marqués par un caractère #. Ces lignes sont des remarques ou des métadonnées, mais ne seront pas prises en compte dans la table de données (self.DATA au sens CSVM). Mais nous voyons aussi des commentaires en fin de ligne, ils permettent l’utilisation du fichier en tant qu’outil d’interconversion de données dans l’espace CSVM. Avec ce mécanisme, les colonnes MOLNAME et RNAME (voir la ligne #HEADER à la fin du fichier) sont interchangeables. Par exemple, un fichier CSVM n’incluant que des noms longs, de type MOLNAME (cf. 'Alanine') dans une colonne, peut être converti en une seule opération (voir le paquetage buildez.parsers et le module csvmdict.py), la colonne MOLNAME n’inclura que des noms courts (cf. 'ALA').
Explication – Les dictionnaires CSVM ne sont pas limités qu’à deux colonnes, ils sont conçus pour de l’interconversion de données CSVM pendant la phase de collecte ou de dépôt (‘data museum‘) avant l’intégration dans une ‘vraie’ base de données (typiquement un SGBDR).
Ainsi il est possible que chaque collecteur de données fasse son travail sans s’occuper de la définition d’une norme (ex: noms de colonnes, unités de mesure …) pour collecter des données CSVM (ou CSV annoté). Il suffit de définir un dictionnaire CSVM qui pourra servir de support pour transformer (selon la norme) les différents ilots de données CSVM et ainsi de pouvoir les fusionner, avant curation et intégration dans le SGBDR.
5. Conclusion
A partir d’un concept assez simple nous avons décliné ne série de fonctions assez flexibles et utiles dans des opérations qui mettent en jeu une identification des résidus basés sur le leur nom. C’est un élément important à prendre en compte car il arrive que le bloc PDB de connectivité pour des ligands soit absent ou ambigu (correct pour la cristallographie mais pas forcément vis à vis de la formule chimique). Dans ce cas, nous avons un moyen simple pour le regénérer, avant de faire le nécessaire pour l’intégrer dans la structure (numéros d’atomes, rotamères, éventuellement minimisation locale).
Liens et lectures
- PDB Chemical Component Dictionary [ https://www.wwpdb.org/data/ccd ].
- Fermeture de PDB Ligand expo en 2025 – Ligand Expo Downloads [ http://ligand-expo.rcsb.org/ld-download.html ].
- PDB FORMAT: (CCP4: Formats) [ https://www.ccp4.ac.uk/html/pdbformat.html ].
- Amino Acid [ https://en.wikipedia.org/wiki/Amino_acid ].
- Non-proteinogenic amino acids [ https://en.wikipedia.org/wiki/Non-proteinogenic_amino_acids ].
- Expanded genetic code [ https://en.wikipedia.org/wiki/Expanded_genetic_code ].

