Rôle des types structurés (Classe) QTLMap¶
def:
type structuré : contient seulement des données membres
classe : contient des données et fonctions membres.
Par abus de languages, j'utilise le terme "type structuré" partout.
Les types structurés permettent d'organiser les structures de bases (tableaux d'entier,...) entre elles et apporte de la sémantique.
exemple : le tableau nmp
appartient au type GENEALOGY_BASE. Sans savoir le rôle de ce tableau, on sait qu'il intervient dans l'organisation familiale qu'utilise QTLMap.
L'utilisation de types structurés permet également de diminuer l'appel des paramètres des fonctions et de diminuer l'utilisation de variables globales.
Exemple:
- ngp,nrgm,np,nmp,ndm,...
subroutine maroutine(ngp,nrgm,np,nmp,ndm,...) integer ,intent(in) :: ngp ...
il était donc plus simple de mettre en variable globale ces tableaux mais on perdait en sémantique (que contient ndm ?) plus les autres raisons pour ne pas utiliser de variables globales dans un programme.
Dans la version QTLMap-Types, le prototype de la fonction serait :
subroutine maroutine(genealogy)
type(GENEALOGY_BASE) ,intent(in) :: genealogy
do ip=1,genealogy%np
...
end do
La version actuelle de QTLMap permet donc de fabriquer un "super type" QTLMAP_DATASET contenant l'ensemble des informations utilisateurs (fichiers, paramètres, ligne de commande) et de passer en paramètre
l'objet de ce type nommé par convention dans les sources dataset
Pour éviter d'écrire des nom de variables trop longs, nous pouvons utiliser des pointeurs.
Exemple
subroutine myroutine(dataset)
type(QTLMAP_DATASET) ,target ,intent(in) :: dataset
type(GENEALOGY_BASE) , pointer :: dg
type(GENEALOGY_RACE) , pointer :: dgr
dg => dataset%genea
dgr => dataset%geneaRace
do ip=1,dg%np
...
end do
Exemple
voici un schéma qui montre :- la création de l'objet
dataset
à partir du packageINPUT
et des fichiers utilisateurs - la création d'un objet
spt
à partir du packageHAPLOTYPE
- l'utilisation des objets dataset et spt par le package
ANALYSE
pour créer les objetslrtsol
etincsol
- l'utilisation d'un objet
shp
à chaque position pour les analyses LD et LDLA