# # Read inher.out produced by Allegro # AWK=/usr/bin/awk if [ $# = 0 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ] then echo "Usage: readinh [-012zd[123]] [inheritance_file]" echo " Reads a Allegro inheritance file (defaulting to inher.out)" echo " and a corresponding Linkage style locus file." echo echo " -0 Print all haplotype information." echo " -1 Print haplotype information if 1 or more recombinants." echo " -2 Print haplotype information if 2 or more recombinants." echo " -dn Print list of doubly recombinant loci for deletion." echo " as likely typing error, where n is the number of" echo " consecutive markers between the recombination sites," echo " defaulting to 2." echo " -zn Print list of individuals carrying more" echo " than n recombinants for removal from data." exit fi INHERITANCE=inher.out RECCNT=0 for i do case $i in --double|-d) RECCNT=-d2 ;; -[0-9dz]*) RECCNT=$i ;; *) if [ -f "$i" ] then INHERITANCE=$i fi esac done if ! [ -f $INHERITANCE ] then echo "$INHERITANCE not found!" exit fi $AWK -v reccnt=$RECCNT ' BEGIN { nloci=6 width=0 while(getline && NF>0) { if (width0) { nloci++ locus[nloci]=col[i] } delete col[i] } reccnt=substr(reccnt,2) edit_script=0 del_script=0 long_error=3 if (substr(reccnt,1,1)=="z") { del_script=1 long_error=substr(reccnt,2,1) } if (substr(reccnt,1,1)=="d") { edit_script=1 long_error=substr(reccnt,2,1)+1 } name[2]="double " name[3]="triple " name[4]="quadruple " name[5]="quintuple " name[6]="6-" name[7]="7-" name[8]="8-" name[9]="9-" name[10]="10-" first=7 start=first+1 } substr($0,1,1)!=" " && NF>0 { ped=$1 cid=$2 fid=$3 mid=$4 plist="" plast="" last_rec_pos="" prec=0 origin=$first pchrom=origin for(i=start;i<=NF;i++) { if ($i!=origin) { prec++ origin=$i if (last_rec_pos!="") gap["m",i-last_rec_pos]++ last_rec_pos=i if (locus[i-1]==plast) { plist=plist "//" locus[i] }else{ plist=plist " " locus[i-1] "//" locus[i] } plast=locus[i] ploc[prec]=i } pchrom=pchrom $i } getline mlist="" mlast="" last_rec_pos="" mrec=0 origin=$first mchrom=origin for(i=start;i<=NF;i++) { if ($i!=origin) { mrec++ origin=$i if (last_rec_pos!="") gap["f",i-last_rec_pos]++ last_rec_pos=i if (locus[i-1]==mlast) { mlist=mlist "//" locus[i] }else{ mlist=mlist " " locus[i-1] "//" locus[i] } mlast=locus[i] mloc[mrec]=i } mchrom=mchrom $i } dummy=prec; if (dummy>9) dummy=9; pcount[dummy]++ dummy=mrec; if (dummy>9) dummy=9; mcount[dummy]++ # Write output if (del_script && (mrec>long_error || prec>long_error)) { print "!" if (mrec>long_error) { print "! Maternal " name[mrec] "recombinant in " ped "-" cid } if (prec>long_error) { print "! Paternal " name[prec] "recombinant in " ped "-" cid } print "!" print "delete",ped,cid }else if (edit_script) { if (mrec>1) { for(maxrec=2;maxrec<=mrec;maxrec++) { if ((mloc[maxrec]-mloc[maxrec-1])1) { for(maxrec=2;maxrec<=prec;maxrec++) { if ((ploc[maxrec]-ploc[maxrec-1])=reccnt || mrec>=reccnt) { if (ped!=lastped) { print "Pedigree " ped ":" lastped=ped } printf "%10s %10s %10s %10s %3d %s %s\n%43s %3d %s %s\n", \ ped, cid, fid, mid, prec, pchrom, plist, " ", mrec, mchrom, mlist } } END { print " " print "!" print "! Number of recombination events in haplotype file" print "!" print "!----------------------------------------------------------" print "! Number: 0 1 2 3 4 5 6 7 8 9+" print "!----------------------------------------------------------" printf "! Male:" for(i=0;i<=9;i++) { if (pcount[i]=="") pcount[i]=0 printf " %4d",pcount[i] } printf "\n!Female:" for(i=0;i<=9;i++) { if (mcount[i]=="") mcount[i]=0 printf " %4d",mcount[i] } printf "\n" print "!" print "! Number of markers between sequential recombination events" print "!" print "!----------------------------------------------------------" print "! Number: 1 2 3 4 5 6 7 8 9 10" print "!----------------------------------------------------------" printf "! Male:" for(i=1;i<=10;i++) { if (gap["m",i]=="") gap["m",i]=0 printf " %4d",gap["m",i] } printf "\n!Female:" for(i=1;i<=10;i++) { if (gap["f",i]=="") gap["f",i]=0 printf " %4d",gap["f",i] } printf "\n!\n\n" }' $INHERITANCE