SwiftLib

But

Ce programme optimise une bibliothèque de codon dégénérés pour couvrir l’ensemble souhaité d’acides aminés à plusieurs positions tout en restant dans une limite de diversité pour la bibliothèque. C’est un moyen rapide de générer de petites bibliothèques.

Le cas typique pour lequel nous imaginons que SwiftLib soit utile est le suivant: imaginez que vous ayez construit 100 modèles redessinés d’une protéine particulière où vous avez laissé 15 résidus muter. Pour la position 82 (l’un des résidus que vous avez laissé muter), l’alanine est apparue 10 fois, l’arginine 35 fois, la lysine 25 fois, la leucine 20 fois, l’asparagine 5 fois, le tryptophane 3 fois et la valine deux fois et des distributions similaires ont été observées aux 14 autres positions. (Vous devez entrer tous ces comptes dans le tableau de SwiftLib ci-dessous.) Supposons que vous visiez à créer une bibliothèque pour l’affichage des levures et que vous souhaitiez vous assurer de ne pas dépasser une diversité (d’ADN) de 1e7. Dans ce cas, vous préférez avoir une bibliothèque qui exclut le tryptophane à la position 82 plutôt qu’une bibliothèque qui exclut l’arginine. L’exclusion du Trypotophane représente une erreur: vous vouliez quelque chose, mais vous ne pouviez pas l’obtenir. L’objectif de ce programme est de trouver l’attribution de codons dégénérés dans la limite de diversité donnée qui donne l’erreur minimale sur toutes les positions à être modifiées.

De plus, il est possible de demander à l’algorithme d’autoriser plusieurs modèles dégénérés à une ou plusieurs positions. Vous indiquez simplement les limites de l’amorce etcombien d’oligos que vous êtes prêt à acheter. L’algorithme choisira quelles positions utiliser plusieurs codons dégénérés pour obtenir la meilleure couverture. Le nombre d’oligostats qui doivent être achetés pour couvrir les résidus randomisés qui se trouvent à l’intérieur des mêmes limites d’amorce est le produit du nombre de codons dégénérés utilisés à chacune de ces positions. Par exemple, s’il y a trois résidus qui font partie du même étirement en utilisant, 2, 3 et 4 codons dégénérés, alors pour couvrir toutes les combinaisons,2*3*4 = 24 oligos devraient être achetés. L’une des parties les plus coûteuses de la prise en compte de plusieurs codons dégénérés consiste à énumérer toutes les combinaisons de codons dégénérés; autoriser les codons dégénérés à une seule position nécessite de regarder (153) combinaisons i. Pour cette raison, nous ne recommandons pas d’utiliser plus de 4 codons dégénérés à une position donnée.

Algorithme

Le programme fonctionne par programmation dynamique. Si toutes les erreurs sont des entiers, alors il est possible de demander, pour chaque position, quel codon dégénéré a la plus petite diversité étant donné qu’il produit une erreur donnée. La plus petite bibliothèque pour les positions avec une erreur particulière peut être facilement calculée à l’aide d’une simple récurrence. La meilleure bibliothèque est celle avec la plus petite erreur avec une diversité inférieure au plafond souhaité. Le temps d’exécution est O (n2m2) pour n positions et m gradations d’erreur. Dans le cas ci-dessus, n = 15 et m = 100 (l’erreur maximale serait de 100 donnée par un codon qui ne contient aucun des acides aminés souhaités; plus l’erreur maximale est grande, plus le temps d’exécution est long).L’analyse de l’algorithme de codon dégénéré multiple est légèrement plus compliquée et sera publiée sous peu.

Confidentialité ? Ce programme est implémenté en JavaScript et s’exécute donc dans votre navigateur. Il n’envoie aucune donnée nulle part. Vous n’avez pas à vous soucier du décodage de la bibliothèque que vous créez.

Input

L’entrée pour SwiftLib est une table de positions pour lesquelles vous souhaitez varier dans votre bibliothèque, et une préférence numérique pour chaque acide aminé à ces positions que vous souhaitez privilégier ou défavoriser. Ainsi, compte tenu de l’exemple ci-dessus, l’entrée serait un tableau avec 15 colonnes (1 pour chaque résidu), et la préférence numérique pour chaque acide aminé serait le nombre d’occurrences de cet acide aminé à cette position. En plus d’utiliser des entiers positifs pour favoriser un acide aminé, on peut également utiliser des entiers négatifs pour défavoriser un acide aminé à une position donnée. De plus, on peut utiliser le ‘*’ et ‘!’caractères génériques pour spécifier que l’acide aminé est requis (‘*’) ou interdit (‘!’) à la position donnée. Les champs vides de la table seront traités comme s’ils contenaient un ‘0’ Pour plus de commodité, SwiftLib permet la création de cette table manuellement, via un format CSV ou via une collection de séquences formatées FASTA.

Code source

SwiftLib est implémenté en JavaScript, de sorte que le code source peut être téléchargé en ouvrant la console JavaScript dans votre navigateur (par exemple sur un Mac dans Chrome, alt-command-j). Vous pouvez également télécharger le code depuis githubhere. Si vous êtes intéressé par la solution de programmation linéaire entière (ILP) décrite dans le papier, une archive tar avec un ensemble de scripts python pouvant être utilisés pour générer les entrées d’ILP et pour traiter les sorties du solveur GLPK peut être téléchargée ici.

Citation

Si vous utilisez ce programme dans votre travail, veuillez citer:
Jacobs, Yumerefendi, Kuhlman &Leaver-Fay SwiftLib: rapid degenerate-codon-library optimization through dynamic programming (2014) Nucleic Acids Research, doi: 10.1093/nar/gku1323

Veuillez adresser vos questions à: leaverfa par e-mail point unc point edu.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.