Wiki GWAS - Obtention des Seuils par la methode Muller

Récupérer une version de dev au CTIG

svn co https://forge-dga.jouy.inra.fr/svn/ldmuller/trunk muller-dev

Compilation au CTIG Mode Debug (Pour du Dev)

mkdir build
cd build
cmake -DCMAKE_Fortran_COMPILER=ifort -DCMAKE_BUILD_TYPE=Debug ../
make

Compilation au CTIG Release

mkdir build
cd build
cmake -DCMAKE_Fortran_COMPILER=ifort ../
make

Spécifications techniques

Organisation des sources

Le repertoire src contient
  • le module cli pour la gestion des options en ligne de commande
  • la fonction prob.f routine pour le tirage des simuls
  • le programme main.f90 : Appel des Blups successifs pour chaque position testée puis obtention des seuils par la méthode Muller et al
  • le repertoire blupf90 contenant le module blupf90 (Misztal/Tsuruta/Aguilar)

Module BlupF90

Le programme blupf90 (Misztal/Tsuruta/Aguilar) a été transformé en module pour ameliorer l'execution du GWAS.

Contenu du module module_blupf90.f90

Modifications du programme (module BLUPF90 : source:trunk/src/blupf90/module_blupf90.f90) :

  • La lecture du fichier parametre est remplacé par l'utilisation du type structuré type(Param_blupf90)
  • Les solutions du blup sont stoquées dans le type structuré type(Solution_blupf90)
  • Support du multithreading OMP (modification des modules fspack90.f et fspak.f pour "privatiser" les variables statiques)
  • Exemple d'utilisation du module : subroutine test_subroutine_blupf90 source:trunk/src/blupf90/PROG_TESTMODBLUPF90.f90

type(Param_blupf90)

    type Param_blupf90
        integer             :: ntrait=0,&      !//number of traits
                               neff=0,&        !//number of effects
                               miss=0          !//value of missing trait/effect

        integer,allocatable :: pos_y(:)        !//positions of observations
        integer ::             pos_weight      !//position of weight of records; zero if none

        integer,allocatable :: pos_eff(:,:),&  !//positions of effects for each trait
                               nlev(:),&       !//number of levels
                               effecttype(:),& !//type of effects
                               nestedcov(:,:),&!//position of nesting effect for each trait  if the effect is nested covariable
                               randomtype(:),& !//status of each effect, as above
                               randomnumb(:),& !//number of consecutive correlated effects
                               offset(:)
        real (rh), allocatable :: r(:,:),&     !//residual (co)variance matrix
                                  gcov(:,:,:)  !//The random (co)variance matrix for each trait

        real               :: conv_crit = -1
        integer            :: maxrounds = -1
        character (20)     :: solv_method = "PCG" 
        real               :: r_factor = -1
        integer            :: blksize = -1
        integer            :: mis = 0
        logical            :: lchk_lev = .true.

    end type  Param_blupf90

type(Solution_blupf90)

type Solution_blupf90

        real , dimension(:,:),pointer :: A
        real , dimension(:,:),pointer :: B
        real , dimension(:,:),pointer :: C
        !// D is a sparse matrix...seulement les individus phenotype et genotypé ont une valeur
        real , dimension(:,:),pointer :: D
        integer , dimension(:),pointer :: Dani

        integer :: nlevtot = 0                !// nombre total d'effet
        integer :: nhaplo  = 0                !// nombre d'haplotype
        integer :: nani    = 0                !// nombre d'animaux pour les effets polygenique

        real :: test=0.d0
        real :: pvalue=0.d0
        real , dimension(:),pointer :: sol    !// Solution pour chaque niveau d'haplotype (dim 1 dans le cas de 1 unique SNP)
        real :: solmu=0.d0
        real , dimension(:),pointer :: std    !// STD Solution pour chaque niveau d'haplotype (dim 1 dans le cas de 1 unique SNP)
        real :: stdmu=0.d0

    end type Solution_blupf90

Déroulement du programme

Initialisation des options en ligne de commande

!==================================================================================================================
    !
    ! Lecture des options en entrée de l'application
    !
    ! Initialisations des parametres suivants
    !
    ! genotypeFile   : fichier contenant les genotypes
    ! modelFile      : fichier decrivant le fichier de phenotypes et des effets de nuisance
    ! pedigFile      : fichier pedigree
    ! dataFile       : fichier des phenotypes et effets fixé
    ! sizeid         : nombre de caracteres du codage de l'ID dans le fichier de genotype
    ! startpos       : premiere position à testé dans le GWAS
    ! endpos         : derniere position
    ! npostotal      : nombre de position total
    ! vary           : variance phenotypique
    ! h2             : heritabilité
    ! vare           : variance residuelle déduit de h2 et vary
    ! varg           : variance genetique deduit de h2 et vary
    ! invvare        : inverse de la variance residuelle
    ! minmaf         : minimum MAF autorisé pour l'analyse GWAS
    ! nsim
    !
    !
    call set_options_gwas

Note sur Blupf90 et import de la routine dans le logiciel

Routine read_parameter

localisé dans lib/blupf1.f90
  • datafile <- snpregX.dat
  • ntrait <- number of trait (a priori 1 dans l'appli)
  • neff <- nombre d effet dans le model (nombre de colonne de snpregX.dat + ID + phenotype + genotype au QTL)
Init des variables suivantes :
  • pos_y (ntrait) position du phenotype dans le fichier de donnees
  • pos_eff(neff) position de l'effet dans le fichier des donnees
  • nlev(neff) : nombre de niveau par effet (1 si covariable)
  • effecttype(neff) : cross,cov,...
  • nestedcov :
  • r(1,1) : variance residuelle
  • random group curr_eff=5,randomnumb(curr_eff)=1 ...
  • RANDOM_TYPE etant add_animal, on a curr_eff=5, avec randomtype(curr_eff)=g_A
Structure rempli pour la categorie FILE
  • randomfile(curr_eff)
COVARIANCE
  • g(curr_eff,1,1)

Implementation/ correspondances des colonne dans le modele

Description du fichier performance generé pour blupf90
Fichier test_ généré par blupf90
Fichier solu_ généré par blupf90