<p>So I didn't find an answer,but I did find a way around if it anyone else has this problem. It does involve modifying the source code, but even if you don't understand c (I barely do) its still easy to do. </p>

<p>1) Download source code from github 
<a href="https://github.com/cbcrg/tcoffee" rel="nofollow noreferrer">https://github.com/cbcrg/tcoffee</a>
Source code is here, view the dependency list - you will need all these libraries to compile the code for the change to take effect. </p>

<p>2) Add your custom matrix to source code.
Search <code>matrices.h</code>. In this version it is <code>t_coffee/lib/matrices.h</code>
You will see how they are defining their default matrices. Just add your matrix with the same format and give it a name. For example:</p>

<pre><code>int customMT[]={
  4,
  0,  5,
 -3, -2, 17,
  0,  5, -3,  9,
  0,  0,  1,  1,  6,
 -2, -3, -3, -5, -4, 10,
  0,  0, -4, -1, -2, -3,  8,
 -2, -2, -5, -2,  0, -3, -3, 14,
  0, -2, -2, -4, -3,  0, -1, -2,  6,
  0,  0, -3,  0,  2, -1, -1, -2, -2,  4,
 -1, -1,  0, -1, -1,  2, -2, -1,  2, -2,  4,
  1, -2, -2, -3, -1, -2, -2,  2,  1,  2,  2,  6,
  0,  4, -1,  1, -1, -1,  0, -1,  0,  0, -2,  0,  8,
 -1, -2, -3, -1,  1, -4, -1,  1, -3,  1, -3, -4, -3, 11,
  1, -1, -2, -1,  2, -3, -2,  0, -2,  0, -2, -1, -1,  0,  8,
 -1, -2, -2, -1, -1, -1, -2, -1, -3,  1, -2,  0, -2, -1,  3,  8,
  1,  0, -2,  0,  0, -1,  0, -1, -1,  0, -2, -2,  0, -1, -1, -1,  4,
  1,  0, -2, -1, -2, -2, -2, -2,  0, -1,  0,  0,  1,  0,  0, -3,  2,  5,
  1, -2, -2, -2, -3,  1, -3, -3,  4, -2,  1,  0, -2, -4, -3, -1, -1,  1,  5,
 -5, -5, -2, -4, -1,  1,  1, -5, -3, -2, -2, -3, -7, -3, -1,  0, -3, -5, -3, 20,
  0, -1, -2, -1, -1, -1, -1, -1,  0,  0,  0,  0,  0, -1,  0, -1,  0,  0,  0, -2, -1,
 -4, -3, -6, -1, -2,  3, -3,  0, -1, -1,  3, -1, -4, -2, -1,  0, -2, -1,  1,  5, -1,  9,
  0,  0,  0,  0,  5, -4, -2,  0, -3,  1, -1, -1, -1,  0,  4,  0, -1, -1, -3, -1,  0, -2,  4};
</code></pre>

<p>Then, search for file <code>tcoffee/lib/io_lib/io_func.c</code> Find the function </p>

<pre><code>int ** read_matrices( char *mat_name_in)
</code></pre>

<p>You will see a long list of if else clauses, add the name of your custom matrix using the same pattern as they do. </p>

<pre><code>/*Read Header Matrices*/
if (strm(mat_name, "pam250mt"))vector=pam250mt;
else if (strm(mat_name, "idmat"))vector=idmat;
else if (strm(mat_name, "dna_idmat"))vector=idmat;

/*add custom matrix here*/
else if (strm(mat_name, "customMT"))vector=customMT;
</code></pre>

<p>3) Save the files, move into tcoffee/src/. Rebuild the files using the make file as described on the github installation. It is here you need make, g++, perl, and whatever else on the list as dependencies</p>

<pre><code>make t_coffee
</code></pre>

<p>4) Now, align your file! The only thing here is to use the t_coffee of the source code you just edited, and not t_coffee that might already be on your path. So change t_coffee/src/t_coffee to whatever the relative path to this folder is. </p>

<pre><code>tcoffee/src/t_coffee rhomboids.fasta -matrix customMT
</code></pre>

<p>And that's it!</p>

CC BY-SA 4.0
2022-03-01T20:09:54.587Z
Its a great question and presentation of the solution. It is an old last resort way of doing it, change the matrix and then re-compile. Reading the parsing code is the underlying issue. The only thing I would have suggested is get it working with the sample data first. It is a complicated table and if the parsing is sub-optimal and table not perfect it can trip the code. It only takes one part of the matrix to be missed and the whole thing falls over
M__
CC BY-SA 4.0
2022-03-01T20:12:34.490Z
Personally what I think has happened is the custom DNA matrix is probably heavily beta tested but the protein matrix much less so and I think thats what is being encountered here. Just to finally mention its also a good use of the custom distance matrix and interesting approach.
M__
CC BY-SA 4.0
2020-05-07T19:40:13.340Z
2020-05-08T00:14:46.237Z
2020-05-08T00:14:46.237Z
sin tribu
<p>I am passing a custom distance matrix to T_Coffee (written in C), as per the docs, but can't seem to get it to work.</p>
<p>The documentation says to pass a matrix like this using BLAST format
<a href="https://tcoffee.readthedocs.io/en/latest/tcoffee_technical_documentation.html#blast-format-recommended" rel="nofollow noreferrer">https://tcoffee.readthedocs.io/en/latest/tcoffee_technical_documentation.html#blast-format-recommended</a></p>
<pre><code># BLAST_MATRIX FORMAT
# ALPHABET=AGCT
A G C T
A 0 1 2 3
G 0 2 3 4
C 1 1 2 3
...
</code></pre>
<p>I've tried all combinations (with and without the leading # comments, and with and without the trailing) ..., but no matter what I keep getting this error:</p>
<blockquote>
<p>Parsing_error when reading blast_matrix doolittle: A C 0</p>
</blockquote>
<p>Here, my distance matrix file is titled doolittle because it is the difference between the hydropathy indices of amino acids based on the Kyte-Doolittle scale * 10 to make them all integers. I've pasted the full matrix below.</p>
<p>I am calling the command from linux 18.08 ubuntu terminal (although I've tried most other combinations.)</p>
<pre><code>t_coffee -in=rhomboids.fasta -matrix doolittle

</code></pre>
<p>Any help would be appreciated. Thank you!</p>
<p>doolittle</p>
<pre><code># BLAST_MATRIX FORMAT
# ALPHABET=ACDEFGHIKLMNPQRSTVWY
A C D E F G H I K L M N P Q R S T V W Y
A 0 7 53 53 10 22 50 27 57 20 1 53 34 53 58 26 25 24 27 31
C 7 0 60 60 3 29 57 20 64 13 6 60 41 60 65 33 32 17 34 38
D 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
E 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
F 10 3 63 63 0 32 60 17 67 10 9 63 44 63 68 36 35 14 37 41
G 22 29 31 31 32 0 28 49 35 42 23 31 12 31 36 4 3 46 5 9
H 50 57 3 3 60 28 0 77 7 70 51 3 16 3 8 24 25 74 23 19
I 27 20 80 80 17 49 77 0 84 7 26 80 61 80 85 53 52 3 54 58
K 57 64 4 4 67 35 7 84 0 77 58 4 23 4 1 31 32 81 30 26
L 20 13 73 73 10 42 70 7 77 0 19 73 54 73 78 46 45 4 47 51
M 1 6 54 54 9 23 51 26 58 19 0 54 35 54 59 27 26 23 28 32
N 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
P 34 41 19 19 44 12 16 61 23 54 35 19 0 19 24 8 9 58 7 3
Q 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
R 58 65 5 5 68 36 8 85 1 78 59 5 24 5 0 32 33 82 31 27
S 26 33 27 27 36 4 24 53 31 46 27 27 8 27 32 0 1 50 1 5
T 25 32 28 28 35 3 25 52 32 45 26 28 9 28 33 1 0 49 2 6
V 24 17 77 77 14 46 74 3 81 4 23 77 58 77 82 50 49 0 51 55
W 27 34 26 26 37 5 23 54 30 47 28 26 7 26 31 1 2 51 0 4
Y 31 38 22 22 41 9 19 58 26 51 32 22 3 22 27 5 6 55 4 0
</code></pre>

CC BY-SA 4.0
2020-05-06T14:53:04.877Z
I'm sorry that I am only able to give you non specific advice, but have you tried the most recent version of t-coffee? Which version are you using? Maybe you could try a smaller sized matrix to test (like a 4x4). You could also submit an issue on their github.
PlasmaBinturong
CC BY-SA 4.0
2020-05-07T18:07:18.260Z
Could this be a simple line ending issue? Are you using Windows to generate the file by any chance?
terdon
CC BY-SA 4.0
2020-05-07T19:40:56.917Z
@terdon I am using Ubuntu, but good suggestion. Definitely been stung by the \r\n windows bug/feature before.
sin tribu
<phylogenetics><covid-19>
Passing custom distance matrix to T_Coffee
# Passing custom distance matrix to T_Coffee

(Asked by: username_0 on 2020-05-06)

I am passing a custom distance matrix to T_Coffee (written in C), as per the docs, but can't seem to get it to work.
The documentation says to pass a matrix like this using BLAST format
https://tcoffee.readthedocs.io/en/latest/tcoffee_technical_documentation.html#blast-format-recommended
# BLAST_MATRIX FORMAT
# ALPHABET=AGCT
A G C T
A 0 1 2 3
G 0 2 3 4
C 1 1 2 3
...

I've tried all combinations (with and without the leading # comments, and with and without the trailing) ..., but no matter what I keep getting this error:

Parsing_error when reading blast_matrix doolittle: A C 0

Here, my distance matrix file is titled doolittle because it is the difference between the hydropathy indices of amino acids based on the Kyte-Doolittle scale * 10 to make them all integers. I've pasted the full matrix below.
I am calling the command from linux 18.08 ubuntu terminal (although I've tried most other combinations.)
t_coffee -in=rhomboids.fasta -matrix doolittle


Any help would be appreciated. Thank you!
doolittle
# BLAST_MATRIX FORMAT
# ALPHABET=ACDEFGHIKLMNPQRSTVWY
A C D E F G H I K L M N P Q R S T V W Y
A 0 7 53 53 10 22 50 27 57 20 1 53 34 53 58 26 25 24 27 31
C 7 0 60 60 3 29 57 20 64 13 6 60 41 60 65 33 32 17 34 38
D 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
E 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
F 10 3 63 63 0 32 60 17 67 10 9 63 44 63 68 36 35 14 37 41
G 22 29 31 31 32 0 28 49 35 42 23 31 12 31 36 4 3 46 5 9
H 50 57 3 3 60 28 0 77 7 70 51 3 16 3 8 24 25 74 23 19
I 27 20 80 80 17 49 77 0 84 7 26 80 61 80 85 53 52 3 54 58
K 57 64 4 4 67 35 7 84 0 77 58 4 23 4 1 31 32 81 30 26
L 20 13 73 73 10 42 70 7 77 0 19 73 54 73 78 46 45 4 47 51
M 1 6 54 54 9 23 51 26 58 19 0 54 35 54 59 27 26 23 28 32
N 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
P 34 41 19 19 44 12 16 61 23 54 35 19 0 19 24 8 9 58 7 3
Q 53 60 0 0 63 31 3 80 4 73 54 0 19 0 5 27 28 77 26 22
R 58 65 5 5 68 36 8 85 1 78 59 5 24 5 0 32 33 82 31 27
S 26 33 27 27 36 4 24 53 31 46 27 27 8 27 32 0 1 50 1 5
T 25 32 28 28 35 3 25 52 32 45 26 28 9 28 33 1 0 49 2 6
V 24 17 77 77 14 46 74 3 81 4 23 77 58 77 82 50 49 0 51 55
W 27 34 26 26 37 5 23 54 30 47 28 26 7 26 31 1 2 51 0 4
Y 31 38 22 22 41 9 19 58 26 51 32 22 3 22 27 5 6 55 4 0

**Tags:** phylogenetics, covid-19
> **Comments:**
> **username_1**: I'm sorry that I am only able to give you non specific advice, but have you tried the most recent version of t-coffee? Which version are you using? Maybe you could try a smaller sized matrix to test (like a 4x4). You could also submit an issue on their github.  
> **username_2**: Could this be a simple line ending issue? Are you using Windows to generate the file by any chance?  
> **username_0**: @terdon I am using Ubuntu, but good suggestion. Definitely been stung by the \r\n windows bug/feature before.  

---

## 1 answers

### Answer by username_0 on 2020-05-07. Score: 3

So I didn't find an answer,but I did find a way around if it anyone else has this problem. It does involve modifying the source code, but even if you don't understand c (I barely do) its still easy to do. 
1) Download source code from github 
https://github.com/cbcrg/tcoffee
Source code is here, view the dependency list - you will need all these libraries to compile the code for the change to take effect. 
2) Add your custom matrix to source code.
Search matrices.h. In this version it is t_coffee/lib/matrices.h
You will see how they are defining their default matrices. Just add your matrix with the same format and give it a name. For example:
int customMT[]={
  4,
  0,  5,
 -3, -2, 17,
  0,  5, -3,  9,
  0,  0,  1,  1,  6,
 -2, -3, -3, -5, -4, 10,
  0,  0, -4, -1, -2, -3,  8,
 -2, -2, -5, -2,  0, -3, -3, 14,
  0, -2, -2, -4, -3,  0, -1, -2,  6,
  0,  0, -3,  0,  2, -1, -1, -2, -2,  4,
 -1, -1,  0, -1, -1,  2, -2, -1,  2, -2,  4,
  1, -2, -2, -3, -1, -2, -2,  2,  1,  2,  2,  6,
  0,  4, -1,  1, -1, -1,  0, -1,  0,  0, -2,  0,  8,
 -1, -2, -3, -1,  1, -4, -1,  1, -3,  1, -3, -4, -3, 11,
  1, -1, -2, -1,  2, -3, -2,  0, -2,  0, -2, -1, -1,  0,  8,
 -1, -2, -2, -1, -1, -1, -2, -1, -3,  1, -2,  0, -2, -1,  3,  8,
  1,  0, -2,  0,  0, -1,  0, -1, -1,  0, -2, -2,  0, -1, -1, -1,  4,
  1,  0, -2, -1, -2, -2, -2, -2,  0, -1,  0,  0,  1,  0,  0, -3,  2,  5,
  1, -2, -2, -2, -3,  1, -3, -3,  4, -2,  1,  0, -2, -4, -3, -1, -1,  1,  5,
 -5, -5, -2, -4, -1,  1,  1, -5, -3, -2, -2, -3, -7, -3, -1,  0, -3, -5, -3, 20,
  0, -1, -2, -1, -1, -1, -1, -1,  0,  0,  0,  0,  0, -1,  0, -1,  0,  0,  0, -2, -1,
 -4, -3, -6, -1, -2,  3, -3,  0, -1, -1,  3, -1, -4, -2, -1,  0, -2, -1,  1,  5, -1,  9,
  0,  0,  0,  0,  5, -4, -2,  0, -3,  1, -1, -1, -1,  0,  4,  0, -1, -1, -3, -1,  0, -2,  4};

Then, search for file tcoffee/lib/io_lib/io_func.c Find the function 
int ** read_matrices( char *mat_name_in)

You will see a long list of if else clauses, add the name of your custom matrix using the same pattern as they do. 
/*Read Header Matrices*/
if (strm(mat_name, "pam250mt"))vector=pam250mt;
else if (strm(mat_name, "idmat"))vector=idmat;
else if (strm(mat_name, "dna_idmat"))vector=idmat;

/*add custom matrix here*/
else if (strm(mat_name, "customMT"))vector=customMT;

3) Save the files, move into tcoffee/src/. Rebuild the files using the make file as described on the github installation. It is here you need make, g++, perl, and whatever else on the list as dependencies
make t_coffee

4) Now, align your file! The only thing here is to use the t_coffee of the source code you just edited, and not t_coffee that might already be on your path. So change t_coffee/src/t_coffee to whatever the relative path to this folder is. 
tcoffee/src/t_coffee rhomboids.fasta -matrix customMT

And that's it!

> **Comments:**
> **username_3**: Its a great question and presentation of the solution. It is an old last resort way of doing it, change the matrix and then re-compile. Reading the parsing code is the underlying issue. The only thing I would have suggested is get it working with the sample data first. It is a complicated table and if the parsing is sub-optimal and table not perfect it can trip the code. It only takes one part of the matrix to be missed and the whole thing falls over  
> **username_3**: Personally what I think has happened is the custom DNA matrix is probably heavily beta tested but the protein matrix much less so and I think thats what is being encountered here. Just to finally mention its also a good use of the custom distance matrix and interesting approach.  

---

