#
# read summary map and extract requested markers
#
DATA=/var/www/Mapview
AWK=gawk
if [ "$1" = "" ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]
then
echo "Usage: mastermap (.in [ordered.in]|"
echo " -merlin .dat [ordered.map]) "
echo " -merlinmap .map [ordered.map]) "
echo " -mlt2 .mlt2 [ordered.mlt2]) "
echo " Extracts positions of markers described in sib-pair"
echo " script or pedtool mlt2 script from master map."
echo " Creates a reordered script, if requested."
echo " e.g. mastermap chrom1.in ordered1.in"
exit
fi
TYP="sib-pair"
switch=1
while [ $switch = 1 ]
do case "$1" in
-mlt2) TYP="mlt2"; shift ;;
-merlin) TYP="merlin"; shift ;;
-merlinmap) TYP="merlinmap"; shift ;;
-*) echo "Flag not recognised: $1" ; shift ;;
*) switch=0 ;;
esac
done
if ! [ -f $1 ]
then
grep $1 $DATA/master_map.dat | $AWK '
BEGIN{print "Locus Chr Pos (Mb) Ave cM"
}
{ printf "%10s %3s %7.3f %6s\n", \
$1, $7, ($19)/1000000, $20
}'
exit
fi
$AWK -v typ=$TYP -v loci=$1 -v fil=order$$ '
BEGIN{OFS="\t"
if (typ=="sib-pair") {
while (getline < loci) {
if($1=="set" && substr($2,1,3)=="loc" && \
(substr($4,1,3)=="mar" || substr($4,1,3)=="xma")) {
ldbloci[$3]++
}
}
}else if (typ=="merlin") {
while (getline < loci) {
if($1=="M") {
ldbloci[$2]++
}
}
}else if (typ=="merlinmap") {
while (getline < loci) {
ldbloci[$2]++
}
}else if (typ=="mlt2") {
while (getline < loci) {
if($3!="ZYGOSITY" && $3!="QUANTITATIVE" && $3!="QUANT" && $3!="AFF") {
ldbloci[$1]++
}
}
}
delete ldbloci[""]
delete ldbloci[" "]
nmar=0
}
$1 in ldbloci || $2 in ldbloci || $3 in ldbloci {
delete ldbloci[$1]
delete ldbloci[$2]
delete ldbloci[$3]
nmar++
locus[nmar]=$1
comp[nmar]=$19
sex_av[nmar]=$20
chr[nmar]=$7
}
END { print "Locus Chr Pos (Mb) Ave cM Theta"
clo=0
last_chr=""
for(i=1;i<=nmar;i++) {
d=0.04*(sex_av[i]-clo)
if(d>=0){ theta=substr(0.5*(exp(d)-1)/(exp(d)+1),1,4) }
if (chr[i]!=last_chr) theta=0.5
printf "%10s %3s %7.3f %6s %5.2f\n", \
locus[i],chr[i],comp[i]/1000000,sex_av[i], theta
print locus[i],chr[i],comp[i],sex_av[i] > fil
clo=sex_av[i]
last_chr=chr[i]
}
printf "\nUnable to match:"
n=7
for(i in ldbloci) {
n++
if (n>7) { n=1; printf "\n" }
printf " " i
}
printf "\n"
}' $DATA/master_map.dat
if [ "$2" != "" ]
then
$AWK '
BEGIN { missing="."
nmar=0
nmar2=0
}
{ nmar++
loc[nmar]=$1; chr[nmar]=$2; pos[nmar]=$3; link[nmar]=$4
}
END { i=1
slope=1
while (i<=nmar) {
while(link[i]!=missing && i <=nmar) {
d1=pos[i]
x1=link[i]
i++
}
sta=i
while(link[i]==missing && i<=nmar) {
i++
}
fin=i-1
d2=pos[i] ; x2=link[i]
if ((d2-d1)>0) slope=(x2-x1)/(d2-d1)
for(i=sta; i<=fin; i++) {
link[i]=x1+slope*(pos[i]-d1)
}
}
for(i=1;i<=nmar;i++) {
print loc[i], pos[i], link[i], chr[i]
}
}' order$$ | sort -n -k 4,4 -k 3,3 > tmp$$
mv tmp$$ order$$
$AWK -v typ=$TYP -v fil=order$$ '
BEGIN { namr=0
nmar2=0
while(getline < fil) {
nmar++
loc[nmar]=$1; pos[nmar]=$2; link[nmar]=$3
}
if (typ=="merlin" || typ=="merlinmap") print "CHR MARKER POS"
}
{ if (typ=="sib-pair") {
if($1=="set" && substr($2,1,3)=="loc" && \
substr($4,1,3)=="mar") {
nmar2++
if (link[nmar2]!="") {
if (nmar2>1 && pos[nmar2] $2
fi
rm -f order$$