text: user8795: 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
  
  
  user8795: 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!
  
original_text: 8795: <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>
   8795: <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>
  