#
# 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