bash-toys/toys/dna.sh

1008 lines
57 KiB
Bash
Executable File

#!/bin/bash
#
# dna - Is a fasta file to ascii art converter that adapts to terminal sizes.
# Based on https://biosyntax.org/drawHelix.sh By A. Babaian <artem@rRNA.ca>
#
usage() {
usage_text=$(cat <<'END_HEREDOC'
Usage:
THIB_S_SCRIPT [-f <file>] [-t <A|B|Z>] [-c <number>] [-s <decimal>]
A script to print an ascii DNA helix given a Fasta file.
Options:
-f file Defaults to demo. The file in Fasta format to read.
-t type Defaults to "B". The type of DNA.
-c columns Defaults to column number. Size of the ascii helix.
-s speed Defaults to 0.1 seconds
The demo is a cytochrome b [Elephas maximus maximus].
END_HEREDOC
);
thiB_S_script=`basename "$0"`
echo "${usage_text/THIB_S_SCRIPT/$thiB_S_script}"
exit 1;
}
# Options
fasta_data='>gi|5524211|gb|AAD44166.1| cytochrome b [Elephas maximus maximus]
LCLYTHIGRNIYYGSYLYSETWNTGIMLLLITMATAFMGYVLPWGQMSFWGATVITNLFSAIPYIGTNLV
EWIWGGFSVDKATLNRFFAFHFILPFTMVALAGVHLTFLHETGSNNPLGLTSDSDKIPFHPYYTIKDFLG
LLILILLLLLLALLSPDMLGDPDNHMPADPLNTPLHIKPEWYFLFAYAILRSVPNKLGGVLALFLSIVIL
GLMPFLHTSKHRSMMLRPLSQALFWTLTMDLLTLTWIGSQPVEYPYTIIGQMASILYFSIILAFLPIAGX
IENY';
type="B";
cols=$(tput cols);
speed="0.05s"
file="elephas-maximus-maximus.fasta"
while getopts ":f:t:c:s:" o; do
case "${o}" in
f) # Fasta file
file=${OPTARG}
if ! [ -f "${OPTARG}" ]; then
echo -e "\nFile not found: ${OPTARG}\n";
usage;
else
fasta_data=$(< "${OPTARG}");
fi
;;
t) # DNA Type
type=${OPTARG}
re='[Aa|Bb|Zz]'
if ! [[ $type =~ $re ]]; then
echo -e "\nERROR: Invalid DNA type: ${type}\n";
usage;
else
type=$(echo "${type}" | tr '[:lower:]' '[:upper:]');
fi
;;
c) # Columns
cols="${OPTARG}"
re='^[0-9]+$'
if ! [[ $cols =~ $re ]] ; then
echo -e "\nERROR: Columns must be a number.\n";
usage;
fi
;;
s) # Speed
speed="${OPTARG}"
re='^[0-9]+(\.[0-9]+)?$'
if ! [[ $speed =~ $re ]] ; then
echo -e "\nERROR: Speed must be a number.\n";
usage;
else
speed="${speed}s"
fi
;;
?)
usage;
;;
esac
done
shift $((OPTIND-1))
# Terminal Color Palette
reset="$(tput sgr0)"
if [[ $(tput colors) == '256' ]]; then
# Color Definitions (ANSI_256 Supported)
colA="$(tput setaf 10)"
colT="$(tput setaf 33)"
colG="$(tput setaf 214)"
colC="$(tput setaf 9)"
colN="$(tput setaf 87)"
else
# System Color Definitions (System Colors)
colA="$(tput setaf 2)"
colT="$(tput setaf 4)"
colG="$(tput setaf 3)"
colC="$(tput setaf 1)"
colN="$(tput setaf 6)"
fi
# OUTPUT
echo "file = ${file}"
echo "type = ${type}"
echo "speed = ${speed}"
echo "columns = ${cols}"
echo ""
# ASCII Art
A_XS_bond_weak='_';
A_XS_bond_strong='-';
A_XS_bond_unknown='_';
A_XS_base_T='T';
A_XS_base_C='C';
A_XS_base_G='G';
A_XS_base_A='A';
A_XS_base_X='X';
A_XS_base_E='E';
A_XS_base_O='O';
A_XS_frame_00=$(cat <<'HEREDOC'
..../$WB BC$\...
HEREDOC
);
A_XS_frame_01=$(cat <<'HEREDOC'
...($WBB BBC$)..
HEREDOC
);
A_XS_frame_02=$(cat <<'HEREDOC'
...\$CBB BBW$/...
HEREDOC
);
A_XS_frame_03=$(cat <<'HEREDOC'
....\$WB BC$/....
HEREDOC
);
A_XS_frame_04=$(cat <<'HEREDOC'
.....\ BC$/......
HEREDOC
);
A_XS_frame_05=$(cat <<'HEREDOC'
...../ B$W\......
HEREDOC
);
A_XS_frame_06=$(cat <<'HEREDOC'
..../$CB BW$\....
HEREDOC
);
A_XS_frame_07=$(cat <<'HEREDOC'
...($CBB BBW$\..
HEREDOC
);
A_XS_frame_08=$(cat <<'HEREDOC'
....\$CBB BBW$).
HEREDOC
);
A_XS_frame_09=$(cat <<'HEREDOC'
.....\$CB BW$/...
HEREDOC
);
A_XS_frame_10=$(cat <<'HEREDOC'
.......\ W$/.....
HEREDOC
);
A_XS_frame_11=$(cat <<'HEREDOC'
....../$W/C$\....
HEREDOC
);
B_L_bond_weak='▒';
B_L_bond_strong='▓';
B_L_bond_unknown='░';
B_L_base_T="\n";
B_L_base_C="\n";
B_L_base_G="\n";
B_L_base_A="\n";
B_L_base_X="\n";
B_L_base_E="\n";
B_L_base_O="\n";
B_L_frame_00=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██ ██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_01=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░ ░░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░░░ ░░░░██ ██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░ ░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_02=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░░░░░░░ ░░░░██ ██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░ ░░░░░░██BBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_03=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░░░▒▒ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒░░░░░░░░░░░░░░░░░▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒░░░░░░░░░░░░░░░▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒░░░░░░░░░░░░░░░▓▓▒▒▒▒░░░░░░░░░░░░░ ░░▒▒▓▓
██▒▒▒░░░░░░░░░░░░░░░██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒░░░░░░░░░░░██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒░░░░░░░░░░░██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒░░░░░░░░░██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒░░░░░░░░░██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒░░░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓░░░░░░░▒▒▒████▓▓▓▓▓▓▓▓▓▓▓▓████
██████▒▒▒▒▒▒ ██████████▓▓
HEREDOC
);
B_L_frame_04=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓
HEREDOC
);
B_L_frame_05=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓▓▓░░░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓░░░░░░░░░░░░░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██░░░░░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████░░░░░▒▒▒▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_06=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░ ░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░░░ ░░░░██ ██▒▒▒▒░░░░░░░░░░░░░░░ ░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░░ ░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░ ░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_07=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██ ██▒▒▒▒░░░░░░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_08=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░ ░░░▒▒▓▓ ▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░░░██ ██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBB██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██ ██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██BBBBBBBBBBBBBBBBBBBBBBB██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██ ██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██ ██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████ ████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_L_frame_09=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░░░▒▒ ▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒░░░░░░░░░░░░░░░░░▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒░░░░░░░░░░░░░░░▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒░░░░░░░░░░░░░░░▓▓▒▒▒▒░░░░░░░░░░░░░ ░░▒▒▓▓
██▒▒▒░░░░░░░░░░░░░░░██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░░ ░░░░░░░██
██▓▓▒▒▒░░░░░░░░░░░░░██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒░░░░░░░░░░░██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒░░░░░░░░░░░██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒░░░░░░░░░██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒░░░░░░░░░██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒░░░░░░░░██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓░░░░░░░▒▒▒████▓▓▓▓▓▓▓▓▓▓▓▓████
██████▒▒▒▒▒▒ ██████████▓▓
HEREDOC
);
B_L_frame_10=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████
██████████▓▓
HEREDOC
);
B_L_frame_11=$(cat <<'HEREDOC'
▓▓▓▓▓▓▓▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓▓
▓▓▓▓░░░░░░░░░░▒▒▓▓▓▓▓▓░░░░░░░░░░░░▒▒▓▓▓▓
▓▓▒▒░░░░░░░░░░░░░░░░░░▓▓░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░▓▓░░░░░░░░░░░░░░░░░░▓▓
▓▓▒▒▒▒░░░░░░░░░░░░░░ ░░░░▒▒▓▓░░░░░░░░░░░░░░░░▒▒▓▓
██▒▒▒▒░░░░░░░░░░░░ ░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░ ░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▒▒▒▒▒▒░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒░░░░░░░░░░▒▒▒▒██░░░░░░░░░░░░░░▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
██▓▓▓▓▓▓▒▒▒▒▒▒▒▒▒▒▒▒▒▒██░░░▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒██
████▓▓▓▓▓▓▓▓▓▓▓▓████░░░░░▒▒▒▓▓▓▓▓▓▓▓████
██████████▓▓ ██████████▓▓
HEREDOC
);
B_M_bond_weak='=';
B_M_bond_strong='#';
B_M_bond_unknown='=';
B_M_base_T=$(cat <<'HEREDOC'
TTTTTTTT
...TT...
...TT...
...TT...
...TT...
HEREDOC
);
B_M_base_C=$(cat <<'HEREDOC'
..CCCC.
.C.....
C......
.C.....
..CCCC.
HEREDOC
);
B_M_base_G=$(cat <<'HEREDOC'
.GGGGG..
G.......
G...GGG.
G.....G.
.GGGGG..
HEREDOC
);
B_M_base_A=$(cat <<'HEREDOC'
..AAAA..
.A....A.
AAAAAAAA
A......A
A......A
HEREDOC
);
B_M_base_X=$(cat <<'HEREDOC'
X......X
.X....X.
...XX...
.X....X.
X......X
HEREDOC
);
B_M_base_E=$(cat <<'HEREDOC'
EEEEEEE
E......
EEEEE..
E......
EEEEEEE
HEREDOC
);
B_M_base_O=$(cat <<'HEREDOC'
..OOOO..
O......O
O......O
O......O
..OOOO..
HEREDOC
);
B_M_frame_00=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBBBBBBBBBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBBBBBBBBBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_01=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBBBBBBBBBBBBBBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBBBBBBBBBBBBBBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_02=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBBBBBBBBBBBBBBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBBBBBBBBBBBBBBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_03=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBBBBBBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBBBBBBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_04=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_05=$(cat <<'HEREDOC'
. ---- .
/.CCCCCCCC\\
/..CCCCCCCC.\\
(...CCCCCCCC..))
\..CCCCCCCC.//
\.CCCCCCCC//
'- .... -'
HEREDOC
);
B_M_frame_06=$(cat <<'HEREDOC'
. ---- . . ---- .
//CCCCCCCC.\ /.WWWWWWWW\\
//.CCCCCCCC..\BBBBBBBBBB/..WWWWWWWW.\\
((..CCCCCCCC...) (...WWWWWWWW..))
\\.CCCCCCCC../BBBBBBBBBB\..WWWWWWWW.//
\\CCCCCCCC./ \.WWWWWWWW//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_07=$(cat <<'HEREDOC'
. ---- . . ---- .
//CCCCCCCC.\ /.WWWWWWWW\\
//.CCCCCCCC..\BBBBBBBBBBBBBBBBB/..WWWWWWWW.\\
((..CCCCCCCC...) (...WWWWWWWW..))
\\.CCCCCCCC../BBBBBBBBBBBBBBBBB\..WWWWWWWW.//
\\CCCCCCCC./ \.WWWWWWWW//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_08=$(cat <<'HEREDOC'
. ---- . . ---- .
//CCCCCCCC.\ /.WWWWWWWW\\
//.CCCCCCCC..\BBBBBBBBBBBBBBBBBBBBBB/..WWWWWWWW.\\
((..CCCCCCCC...) (...WWWWWWWW..))
\\.CCCCCCCC../BBBBBBBBBBBBBBBBBBBBBB\..WWWWWWWW.//
\\CCCCCCCC./ \.WWWWWWWW//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_09=$(cat <<'HEREDOC'
. ---- . . ---- .
//CCCCCCCC.\ /.WWWWWWWW\\
//.CCCCCCCC..\BBBBBBBBBBBBBBBBBB/..WWWWWWWW.\\
((..CCCCCCCC...) (...WWWWWWWW..))
\\.CCCCCCCC../BBBBBBBBBBBBBBBBBB\..WWWWWWWW.//
\\CCCCCCCC./ \.WWWWWWWW//
'- .... -' '- .... -'
HEREDOC
);
B_M_frame_10=$(cat <<'HEREDOC'
. ---- .
//WWWWWWWW.\
//.WWWWWWWW..\
((..WWWWWWWW...)
\\.WWWWWWWW../
\\WWWWWWWW./
'- .... -'
HEREDOC
);
B_M_frame_11=$(cat <<'HEREDOC'
. ---- . . ---- .
//WWWWWWWW.\ /.CCCCCCCC\\
//.WWWWWWWW..\BBBBBBBBBB/..CCCCCCCC.\\
((..WWWWWWWW...) (...CCCCCCCC..))
\\.WWWWWWWW../BBBBBBBBBB\..CCCCCCCC.//
\\WWWWWWWW./ \.CCCCCCCC//
'- .... -' '- .... -'
HEREDOC
);
B_S_bond_weak='_';
B_S_bond_strong=':';
B_S_bond_unknown='_';
B_S_base_T='T';
B_S_base_C='C';
B_S_base_G='G';
B_S_base_A='A';
B_S_base_X='X';
B_S_base_E='E';
B_S_base_O='O';
B_S_frame_00=$(cat <<'HEREDOC'
_/ / \ \_
/ W \ B / C \
|| |B| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_01=$(cat <<'HEREDOC'
/ / \ \
/ W \ BBBBB / C \
|| |BBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_02=$(cat <<'HEREDOC'
/ / | |
/ W \ BBBBBBBB / C \
|| |BBBBBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_03=$(cat <<'HEREDOC'
/ / | |
/ C \ BBBBBBBB / C \
|| |BBBBBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_04=$(cat <<'HEREDOC'
| | / /
/ W \ BBBBBBB / C \
|| |BBBBBBB| ||
\ __ / /\ __ /
HEREDOC
);
B_S_frame_05=$(cat <<'HEREDOC'
\ \ __ / /
\/ C \/ /
| ||
\ __ /
HEREDOC
);
B_S_frame_06=$(cat <<'HEREDOC'
_/ / \ \_
/ C \ BB / W \
|| |BB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_07=$(cat <<'HEREDOC'
/ / | |
/ C \ BBBBBB / W \
|| |BBBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_08=$(cat <<'HEREDOC'
| | | |
/ C \ BBBBBBBB / W \
|| |BBBBBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_09=$(cat <<'HEREDOC'
| | | |
/ C \ BBBBBB / W \
|| |BBBBBB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_10=$(cat <<'HEREDOC'
| | _/ /
/ C \ / W \
|| |BB| ||
\ __ / \ __ /
HEREDOC
);
B_S_frame_11=$(cat <<'HEREDOC'
\ \ / /
/ W \
|| |
\ __ /
HEREDOC
);
B_XS_bond_weak='-';
B_XS_bond_strong='=';
B_XS_bond_unknown='-';
B_XS_base_T="T";
B_XS_base_C="C";
B_XS_base_G="G";
B_XS_base_A="A";
B_XS_base_X="X";
B_XS_base_E="E";
B_XS_base_O="O";
B_XS_frame_00=$(cat <<'HEREDOC'
... ($W)BBB(C$) .
HEREDOC
);
B_XS_frame_01=$(cat <<'HEREDOC'
.. ($W)BBBB(C$) .
HEREDOC
);
B_XS_frame_02=$(cat <<'HEREDOC'
. ($W)BBBB(C$) ..
HEREDOC
);
B_XS_frame_03=$(cat <<'HEREDOC'
. ($W)BBB(C$) ...
HEREDOC
);
B_XS_frame_04=$(cat <<'HEREDOC'
... ($W) ........
HEREDOC
);
B_XS_frame_05=$(cat <<'HEREDOC'
.. ($C)B(W$) ....
HEREDOC
);
B_XS_frame_06=$(cat <<'HEREDOC'
. ($C)BBB(W$) ...
HEREDOC
);
B_XS_frame_07=$(cat <<'HEREDOC'
. ($C)BBBB(W$) ..
HEREDOC
);
B_XS_frame_08=$(cat <<'HEREDOC'
.. ($C)BBBB(W$) .
HEREDOC
);
B_XS_frame_09=$(cat <<'HEREDOC'
... ($C)BBB(W$) .
HEREDOC
);
B_XS_frame_10=$(cat <<'HEREDOC'
..... (W$) ......
HEREDOC
);
B_XS_frame_11=$(cat <<'HEREDOC'
.... ($W)B(C$) ..
HEREDOC
);
##############
# Draw Helix #
##############
# Choose Type
if [ "$type" == "A" ] ; then
bond_weak="${A_XS_bond_weak}"
bond_strong="${A_XS_bond_strong}"
bond_unknown="${A_XS_bond_unknown}"
frames=(
"${A_XS_frame_00}"
"${A_XS_frame_01}"
"${A_XS_frame_02}"
"${A_XS_frame_03}"
"${A_XS_frame_04}"
"${A_XS_frame_05}"
"${A_XS_frame_06}"
"${A_XS_frame_07}"
"${A_XS_frame_08}"
"${A_XS_frame_09}"
"${A_XS_frame_10}"
"${A_XS_frame_11}"
);
base_T="${A_XS_base_T}";
base_C="${A_XS_base_C}";
base_G="${A_XS_base_G}";
base_A="${A_XS_base_A}";
base_X="${A_XS_base_X}";
base_E="${A_XS_base_E}";
base_O="${A_XS_base_O}";
elif [ "$type" == "Z" ] ; then
echo "Type Z is yet to be unsupported, sorry."
exit 1
elif [ "$type" == "B" ] ; then
# Choose size
if [ "$cols" -gt 123 ] ; then
bond_weak="${B_L_bond_weak}"
bond_strong="${B_L_bond_strong}"
bond_unknown="${B_L_bond_unknown}"
frames=(
"${B_L_frame_00}"
"${B_L_frame_01}"
"${B_L_frame_02}"
"${B_L_frame_03}"
"${B_L_frame_04}"
"${B_L_frame_05}"
"${B_L_frame_06}"
"${B_L_frame_07}"
"${B_L_frame_08}"
"${B_L_frame_09}"
"${B_L_frame_10}"
"${B_L_frame_11}"
);
base_T="${B_L_base_T}";
base_C="${B_L_base_C}";
base_G="${B_L_base_G}";
base_A="${B_L_base_A}";
base_X="${B_L_base_X}";
base_E="${B_L_base_E}";
base_O="${B_L_base_O}";
elif [ "$cols" -gt 55 ] ; then
bond_weak="${B_M_bond_weak}"
bond_strong="${B_M_bond_strong}"
bond_unknown="${B_M_bond_unknown}"
frames=(
"${B_M_frame_00}"
"${B_M_frame_01}"
"${B_M_frame_02}"
"${B_M_frame_03}"
"${B_M_frame_04}"
"${B_M_frame_05}"
"${B_M_frame_06}"
"${B_M_frame_07}"
"${B_M_frame_08}"
"${B_M_frame_09}"
"${B_M_frame_10}"
"${B_M_frame_11}"
);
base_T="${B_M_base_T}";
base_C="${B_M_base_C}";
base_G="${B_M_base_G}";
base_A="${B_M_base_A}";
base_X="${B_M_base_X}";
base_E="${B_M_base_E}";
base_O="${B_M_base_O}";
elif [ "$cols" -gt 25 ] ; then
bond_weak="${B_S_bond_weak}"
bond_strong="${B_S_bond_strong}"
bond_unknown="${B_S_bond_unknown}"
frames=(
"${B_S_frame_00}"
"${B_S_frame_01}"
"${B_S_frame_02}"
"${B_S_frame_03}"
"${B_S_frame_04}"
"${B_S_frame_05}"
"${B_S_frame_06}"
"${B_S_frame_07}"
"${B_S_frame_08}"
"${B_S_frame_09}"
"${B_S_frame_10}"
"${B_S_frame_11}"
);
base_T="${B_S_base_T}";
base_C="${B_S_base_C}";
base_G="${B_S_base_G}";
base_A="${B_S_base_A}";
base_X="${B_S_base_X}";
base_E="${B_S_base_E}";
base_O="${B_S_base_O}";
elif [ "$cols" -gt 15 ] ; then
bond_weak="${B_XS_bond_weak}"
bond_strong="${B_XS_bond_strong}"
bond_unknown="${B_XS_bond_unknown}"
frames=(
"${B_XS_frame_00}"
"${B_XS_frame_01}"
"${B_XS_frame_02}"
"${B_XS_frame_03}"
"${B_XS_frame_04}"
"${B_XS_frame_05}"
"${B_XS_frame_06}"
"${B_XS_frame_07}"
"${B_XS_frame_08}"
"${B_XS_frame_09}"
"${B_XS_frame_10}"
"${B_XS_frame_11}"
);
base_T="${B_XS_base_T}";
base_C="${B_XS_base_C}";
base_G="${B_XS_base_G}";
base_A="${B_XS_base_A}";
base_X="${B_XS_base_X}";
base_E="${B_XS_base_E}";
base_O="${B_XS_base_O}";
else
echo "Not enough space."
exit 0
fi
fi
# Make array with the file data lines
declare -a data_arr
while read -r data_line; do
data_arr+=("$data_line")
done <<< "$fasta_data"
frame_current=0;
frame_max=11;
for line in "${data_arr[@]}"
do
if [[ $line =~ '^N+$' ]]; then # if all N line; skip
continue;
fi
for (( fastaIdx=0; fastaIdx<${#line}; fastaIdx++ )); do
base="${line:$fastaIdx:1}";
# Declare Watson and Crick bases
if [[ $base =~ [Aa] ]]; then # A
color="${colA}"
W="${base_A}"
C="${base_T}"
bond="${bond_weak}"
elif [[ $base =~ [TtUu] ]]; then # T or U
color="${colT}"
W="${base_T}"
C="${base_A}"
bond="${bond_weak}"
elif [[ $base =~ [Gg] ]]; then # G
color="${colG}"
W="${base_G}"
C="${base_C}"
bond="${bond_strong}"
elif [[ $base =~ [Cc] ]]; then # C
color="${colC}"
W="${base_C}"
C="${base_G}"
bond="${bond_strong}"
else # Non-standard base
color="${colN}"
W="${base_O}"
C="${base_X}"
bond="${bond_unknown}"
fi
SAVEIFS=$IFS # Save current IFS (Internal Field Separator)
IFS=$'\n' # Change IFS to newline char
asciiLines=(${frames[$frame_current]})
cLines=($C)
wLines=($W)
IFS=$SAVEIFS # Restore original IFS
for (( asciiIdx=0; asciiIdx<${#asciiLines[@]}; asciiIdx++ ))
do
cLine="${cLines[$asciiIdx-1]}"
wLine="${wLines[$asciiIdx-1]}"
aLine="${color}${asciiLines[$asciiIdx]}${reset}"
echo "${aLine}" \
| sed -r "s/([C]+)/${cLine}/" \
| sed -r "s/([W]+)/${wLine}/" \
| sed -r "s/B/${bond}/g";
done
# echo "$W $bond $C - $frame_current";
sleep "$speed"
if [ "$frame_current" == "$frame_max" ] ; then
frame_current=0;
else
frame_current=$(($frame_current+1));
fi
done
done