IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage C++ Discussion :

Comment créer une nouvelle grammaire (pour l'ADN)


Sujet :

Langage C++

  1. #1
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut Comment créer une nouvelle grammaire (pour l'ADN)
    Salut!

    Je m'aventure gentiment vers le codage de modèles d'évolution de l'ADN (après pas mal de temps passé à coder tout ce qu'il y a autour c'est pas trop tôt me direz vous lol).
    L'idée générale c'est de définir quelques concepts de base:

    - les éléments de bases sont les quatres bases de la molecule d'ADN: adenine (A), cytosine (C), guanine (G), and thymine (T).
    - Une séquence d'ADN est un motif répété de ces bases qui a une longueur n
    - Si on laisse passer un temps t, un motif est soumis à des probabilités de modifications ( de A -> T, de T <- A etc)
    - L'alphabet ADN (ATGC) peut etre traduit vers un second alphabet (ARN) en remplaçant le T (thymine) par un U (uracile).
    - Puis après il y a des correspondances qui traduisent des triplets d'ARN (eg AUU) vers des acides aminés (eg la leucine bien connue de nos potes de musculation adeptes de shakers protéinés).
    - Tout ça est blindé de redondances (les traductions ne sont pas uniques)

    L'idée (en commençant très simple) c'est de prendre une séquence de lettres et de les muter aléatoirement au cours du temps. Fastoche.
    Plus tard faudra commencer à recombiner les séquences en découpant/recollant des morceaux de taille variable.

    Quels sont les pièges évidents qui vous viennent à l'esprit et que vous éviteriez et les outils évidents de C++20 pour rester sympa du coté des performances ?

    Je pense à:
    - utiliser des enums plutôt que des strings/char
    - bien sur éviter de copier la séquence tout partout
    - definir constexpr certains objets connus à la compilation (comme les matrices de transitions A <-> T <-> G <-> C qui sont connues empiriquement).
    - c'est pour les futurs découpages que je suis moins confortable. On veut j'imagine éviter de litteralement tout en petits bouts en mode std::string::substr et std::string::replace ?

    Plus généralement, ça vous évoque une ressource évidente à utiliser pour ce genre de problème?

  2. #2
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Tu as très bien décris et découper ton problème, tu as donc fait 80% du boulot, il ne te reste plus qu'à suivre ce que tu as écris.
    On peut le voir comme ça du coup:

    class base -> ton élément de base qui contient un enum pour définir son type et tes paramètres de mutation par exemple
    class sequence -> un enchainement de base (penser à std::list de base par exemple)
    class modifier -> une classe qui va lire un brin et modifier les bases selon les critères de mutation
    class converter -> une classe qui lit un brin et le transforme en ARN (c'est cette classe qui connait saura reconnaitre un enchainement de plusieurs base, pour ça fait toi une matrice en deux dimension)


    pour la matrice en deux dimensions, tu pourrais avoir ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    A
    -A
    --A
    --C
    --G
    --T -> donne un acide aminé quelquonque
    -C
    -G
    -T
    C
    -A
    -C
    -G
    -T
    ...
    Pour ça tu peux utiliser des map de map:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::map<char, std::map<char, std::map<char, std::string>>> map;
    map['A']['T']['C'] = "acide quelquonque";
    Voilà pour les quelques idées que j'avais ^^


    Et ne pas oublié 2 principes de bases:
    1) KISS -> Keep it simple, stupid
    2) On code d'abord un truc qui marche avant de l'optimiser

  3. #3
    Membre éclairé Avatar de Seabirds
    Homme Profil pro
    Post-doctoral fellow
    Inscrit en
    Avril 2015
    Messages
    294
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Post-doctoral fellow
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2015
    Messages : 294
    Par défaut
    Oui mais les maps, c'est pas effica ... je plaisante, je plaisante
    Ok donc c'est conceptually approved!
    Merci beaucoup, on se retrousse les manches et on y passe le week end ahaha!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2019, 15h48
  2. Comment créer une nouvelle IHM pour la création de classes
    Par walid0577 dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 22/08/2011, 15h14
  3. Réponses: 16
    Dernier message: 09/10/2006, 10h12
  4. Comment créer une nouvelle fenetre pour recherche
    Par RaimS dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2006, 16h02
  5. Réponses: 10
    Dernier message: 02/11/2005, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo