/*!
* @class MatrixScore
*
* @extends Score
*
* @headerfile <seqan/score.h>
*
* @brief A general scoring matrix.
*
* @signature template <typename TValue, typename TSeqValue, typename TSpec>
* class Score<TValue, ScoreMatrix<[TSeqValue[, TSpec]]> >;
*
* @tparam TValue The score value.
* @tparam TSeqValue The alphabet type, defaults to AminoAcid.
* @tparam TSpec Further specialization, defaults to Default.
*
* The TSpec argument can be used to obtain a predefined matrix. Specify one of
* the following tags:
*
* ScoreSpecBlosum30, ScoreSpecBlosum45, ScoreSpecBlosum62, ScoreSpecBlosum80,
* ScoreSpecPam40, ScoreSpecPam120, ScoreSpecPam200, ScoreSpecPam250,
* ScoreSpecVtml200.
*
* This will internally call @link MatrixScore#setDefaultScoreMatrix
* setDefaultScoreMatrix@endlink.
*
* In order to provide a more user-friendly access to the predefined scoring
* matrixes, typedefs exist: @link Blosum30 @endlink, @link Blosum45 @endlink,
* @link Blosum62 @endlink, @link Blosum80 @endlink, @link Pam40 @endlink, @link
* Pam120 @endlink, @link Pam200 @endlink, @link Pam250 @endlink and @link
* Vtml200 @endlink.
*
* @fn MatrixScore::Score
*
* @brief Constructor
*
* @signature MatrixScore::Score(gapExtend[, gapOpen]);
* @signature MatrixScore::Score(fileName, gapExtend[, gapOpen]);
*
* @param[in] fileName Path to load the matrix from, type is <tt>char const
* *</tt>.
* @param[in] gapExtend Gap extension score, type is TValue.
* @param[in] gapOpen Gap open score, defaults to gapExtend, type is TValue.
*
* @fn MatrixScore#write
*
* @brief Write a score matrix to a stream.
*
* @signature int write(stream, scoreMatrix[, meta]);
*
* @param[in,out] stream Stream to write to.
* @param[out] scoreMatrix MatrixScore object.
* @param[out] meta Meta information is stored here.
*
* @return int Status code, 0 on success, a different value on errors.
*
* @fn MatrixScore#setScore
*
* @brief Set the substitution score between to values.
*
* @signature void setScore(score, x, y, v);
*
* @param[in,out] score The MatrixScore to set the value for.
* @param[in] x The substituted alphabet value.
* @param[in] y The alphabet value to substitute x for.
* @param[in] v The score value to set.
*
* @fn MatrixScore#setDefaultScoreMatrix
*
* @brief Set the score matrix of a Score to one of the default matrixes.
*
* @signature void setDefaultScoreMatrix(score, tag);
*
* @param[in,out] score The MatrixScore to update.
* @param[in] tag The tag to select the default matrix, see description below.
*
* @section Remarks
*
* The tag must be one of the following: Default, ScoreSpecBlosum30,
* ScoreSpecBlosum45, ScoreSpecBlosum62, ScoreSpecBlosum80, ScoreSpecPam40,
* ScoreSpecPam120, ScoreSpecPam200, ScoreSpecPam250, ScoreSpecVtml200.
*
* If Default is used for tag then the matrix will be filled with default-
* constructed TValue values.
*/