2010-07-22 12 views
2

J'apprends JBoss Drools et je joue avec les données génétiques du projet hapmap: (http://hapmap.ncbi.nlm.nih.gov/genotypes/latest/forward/non-redundant/). Chaque fichier dans ce répertoire est un tableau avec les individus en haut, les positions sur le génome à gauche, et les mutations observées pour chaque individu/position.Apprendre JBoss bave: quel devrait être mon modèle

Ici, je voudrais trouver quelques erreurs potentielles dans le fichier (par exemple, un enfant n'a pas de mutation de ses parents) en utilisant Drools.

1) Je veux charger ces données dans Drools. Cela peut être une grande quantité de données (par exemple, genotypes_chr2_YRI_r27_nr.b36_fwd.txt.gz est 20Mo gzipped) Ces données seront-elles stockées en mémoire? ou est-ce que Drools le stocke quelque part? ou devrais-je utiliser un système de persistance?

2) sur le modèle:

Je pensais à mettre les classes suivantes dans un StatefulKnowledgeSession:

class Individual 
{ 
private String name; 
//constructor, getters, setters etc... 
} 

class Position 
{ 
private String name; 
private String chromosome; 
private int position; 
//constructor, getters, setters etc... 
} 

class ObservedMutation 
{ 
private String individualName; 
private String positionName; 
private String observed; 
//constructor, getters, setters etc... 
} 

ou devrait ObservedMutation être:

class ObservedMutation 
{ 
private Individual individual; 
private Position position; 
private String observed; 
//constructor, getters, setters etc... 
} 

Merci pour votre suggestions

Pierre

mise à jour: mon test sapins: http://plindenbaum.blogspot.com/2010/07/rules-engine-for-bioinformatics-playing.html

Répondre

2

Oui, lorsque vous insérez la grande quantité de données, Drools les stocke en mémoire. 20 Mo n'est probablement pas un problème - essayez-le.

Il devrait être facile d'écrire des règles pour les classes de modèles que vous proposez - les règles de l'exemple hapmap.drl de votre premier test semblent raisonnables. Le choix entre vos deux classes ObservatedMutation relève autant du goût que de toute autre chose, car il en résultera différentes syntaxes de règles DRL. Je voudrais commencer par la deuxième version et voir comment vous allez: peut-être la chose non évidente si vous avez des propriétés d'objet (comme dans la deuxième version de ObservedMutation) est que vous devrez utiliser this pour se référer à un objet lié, par exemple. $p dans:

when 
    ObservedMutation($p : position) 
    Position(this == $p) 
1

Je pense que ce devrait être le deuxième. Je préfère les objets aux primitives comme String.