2015-11-09 13:11:54 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
2015-11-08 14:28:57 +01:00
|
|
|
source "${THIS_DIR}/../../../scripts/bash_init.sh"
|
2015-10-08 17:38:01 -03:00
|
|
|
|
|
|
|
SELECTIR="${PROG_DIR}/../../normalize/lib/selectIR.py"
|
|
|
|
|
|
|
|
function lookForIR {
|
|
|
|
|
|
|
|
local QUERY="$1"
|
|
|
|
local MATCHES=$(basename ${QUERY})
|
|
|
|
MATCHES="${MATCHES/.*/}.matches"
|
|
|
|
|
|
|
|
local REPEATS="${MATCHES/.*/}.repseek"
|
|
|
|
|
2015-11-09 17:03:22 +01:00
|
|
|
# Blast columns:
|
|
|
|
# query id, subject id, % identity, alignment length, mismatches, gap opens, q. start, q. end, s. start, s. end, evalue, bit score
|
|
|
|
# We keep blast matches if :
|
|
|
|
# The match is longer than 1000
|
|
|
|
# The identity is higher than 80%
|
|
|
|
#
|
|
|
|
# The match file has the following format:
|
|
|
|
# LSC/SSC begin end same_strand=1/diff_strand=0
|
|
|
|
|
2015-10-08 17:38:01 -03:00
|
|
|
loginfo "Locating SSC and LSC by similarity..."
|
|
|
|
blastn -db ${SCDB} \
|
|
|
|
-query ${QUERY} \
|
|
|
|
-outfmt 6 \
|
2023-04-29 07:06:07 +02:00
|
|
|
-max_target_seqs 10000 | \
|
|
|
|
awk -v id_match=80 -v lmin=100 \
|
2025-03-05 21:56:39 +01:00
|
|
|
'($4+0 > lmin) && (($3+0)>id_match) {
|
|
|
|
SAME=(($7+0 < $8+0) && ($9+0 < $10+0)) || (($7+0 > $8+0) && ($9+0 > $10+0));
|
|
|
|
if ($7+0 < $8+0)
|
2023-04-29 07:06:07 +02:00
|
|
|
{print substr($2,1,3),$7,$8,SAME}
|
|
|
|
else
|
|
|
|
{print substr($2,1,3),$8,$7,SAME}
|
|
|
|
}' | \
|
2015-10-08 17:38:01 -03:00
|
|
|
sort -nk 2 > ${MATCHES}
|
2023-04-29 07:06:07 +02:00
|
|
|
loginfo "Done $(wc -l ${MATCHES} | awk '{print $1}') matches identified"
|
2015-11-09 15:27:32 +01:00
|
|
|
|
2015-10-08 17:38:01 -03:00
|
|
|
loginfo "Looking for long inverted repeats..."
|
|
|
|
repseek -c -p 0.001 -i ${QUERY} 2>> /dev/null > ${REPEATS}
|
2016-05-02 15:32:28 +02:00
|
|
|
nrepeat="$(wc -l ${REPEATS} | awk '{print $1}')"
|
2015-10-08 17:38:01 -03:00
|
|
|
loginfo "Done"
|
2015-11-09 17:03:22 +01:00
|
|
|
|
2016-05-02 15:32:28 +02:00
|
|
|
if (( nrepeat == 0 )) ; then
|
|
|
|
logwarning "No inverted repeat identified"
|
|
|
|
return 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
loginfo " --> ${nrepeat} repeats identified"
|
|
|
|
|
2015-10-08 17:38:01 -03:00
|
|
|
loginfo "Marking and selecting the best inverted repeat..."
|
|
|
|
local IR=( $(${SELECTIR} ${MATCHES} ${REPEATS}) )
|
|
|
|
loginfo "Done"
|
|
|
|
|
|
|
|
loginfo " --> IR size : IRa = ${IR[5]} / IRb = ${IR[7]}"
|
|
|
|
loginfo " --> IR Score: ${IR[8]}"
|
|
|
|
|
2023-05-15 15:03:36 +02:00
|
|
|
deltaIR=$((IR[5] - IR[7]))
|
2015-10-08 17:38:01 -03:00
|
|
|
|
2023-05-15 15:03:36 +02:00
|
|
|
if (( deltaIR < -10 )) || (( deltaIR > 10 )); then
|
2015-10-08 17:38:01 -03:00
|
|
|
logwarning "Differences between IR lengths ($deltaIR) is greater than 10"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
echo "${IR[@]}"
|
|
|
|
}
|
|
|
|
|
|
|
|
SCDB="${IR_DATA_DIR}/SC_RefDB"
|
|
|
|
|
2015-10-11 10:39:59 -03:00
|
|
|
if [[ ! "$1" =~ ^/ ]]; then
|
|
|
|
QUERY="${CALL_DIR}/$1"
|
|
|
|
else
|
|
|
|
QUERY="$1"
|
|
|
|
fi
|