====== Auxiliary programs for WOMBAT ====== This page collects a small number of simple, stand-alone programs to be used in conjunction with WOMBAT. Change the output statements as you please. \\ NB: You need a FORTRAN 95 compiler to be able to generate `executables' from the source code given here; e.g. `gfortran' is free and available for most common operating systems. ===== Reading binary output files ===== ==== NRM inverse ==== ! ==================== program read_nrminv ! ==================== ! auxiliary program to WOMBAT to examine contents of binary file(s) ! "nrmivers_.bin" -> inverse of numerator relationship matrix implicit none integer :: i, ii, nan, nnrm, jj real(8) :: detl, xx character(len=14) :: nrmfile ='nrminvers1.bin' ! set no. 1, 2,... as required ! open file & read header open(44,file = nrmfile, status ='old', form = 'unformatted', action ='read') read(44) nan read(44) nnrm, detl read(44) xx ! read elements of lower triangle, row-wise & write to screen do i = 1, nnrm read(44) ii, jj, xx write(*,'(2i10,f12.4)') ii, jj, xx end do close(44) stop 'end of READ_NRMINV' end program read_nrminv ! @C K.M. ==== Inbreeding coefficients ==== ! ==================== program read_inbreed ! ==================== ! auxiliary program to WOMBAT to examine contents of binary file ! "inbreed.bin" -> inbreeding coefficients (in %) implicit none integer :: m, n, ii, i, m1, n1 integer, dimension(:), allocatable :: nannew integer, dimension(:,:), allocatable :: idwec real(8), dimension(:,:), allocatable :: inbreed character(len=11) :: inbrdfile = 'inbreed.bin' character(len=30) :: pedfile logical :: lex, ids ! does the file exist? inquire(file = inbrdfile, exist = lex) if( .not. lex ) then write(*,*)'Binary file "',inbrdfile,'" does not seem to exist'; stop end if ! open file & read header open(1,file = inbrdfile, status ='old', form = 'unformatted', action ='read') read(1) m, n ! ... allocate arrays allocate( nannew(m), stat = ii); if(ii /= 0 ) stop 'alloc nannew' rewind(1); read(1) m, n, nannew, pedfile allocate(inbreed(n,m), stat=ii); if(ii/=0) stop 'alloc inbreed' ! ... read inbreeding coefficients read(1) inbreed ! ... look for list of IDs read(1,iostat = ii ) m1, n1 if( ii /= 0 ) then ids = .false.; go to 10 end if allocate( idwec(m1,n1), stat = ii ); if( ii /= 0 ) stop 'alloc idwec' read(1,iostat=ii) idwec; if( ii == 0 ) ids = .true. 10 close(1) ! now ready to write out information - modify to your requirements write(*,'(5a)')'Information from WOMBAT binary file "',inbrdfile,'"' write(*,'(5a)')' ... inbreeding for pedigree file "',trim(pedfile),'"' write(*,'(a,i8)')' ... no. of genetic effects =',m write(*,'(a,8i8)')' ... no. of levels =',nannew ! ... list of inbreeding coefficients if( ids ) then do i = 1, n write(*,'(i8,i12,f9.3)') i, idwec(i,1), 100.d0*inbreed(i,1) end do else ! no. ids (older version of wombat) do i = 1, n write(*,'(i8,f9.3)') i, 100.d0*inbreed(i,1) end do end if stop 'end of READ_INBREED' end program read_inbreed ! @(C) K.M. 2009