/*!
* @class HmmGraph
*
* @extends Graph
*
* @headerfile <seqan/graph_types.h>
*
* @brief A grap representing a Hidden Markov Model (HMM).
*
* @signature template <[typename TAlphabet[, typename TCargo[, typename
* TSpec]]]> class Graph<Hmm<TAlphabet, TCargo, TSpec> >;
*
* @tparam TAlphabet The alphabet of the HMM. Default: @link Dna @endlink.
* @tparam TCargo The edge cargos. Default: <tt>void</tt>.
* @tparam TSpec The specialization type. Default: <tt>Default</tt>. Use
* <tt>WithoutEdgeIds</tt> here to omit edge ids. NB: if edges do
* not store ids then external property maps do not work.
*
* An HMM is a directed graph with edges labeled with transition probabilities
* and emission profiles for each vertex. Vertices correspond to states in an
* HMM.
*
* @fn HmmGraph#assignBeginState
*
* @headerfile <seqan/graph_types.h>
*
* @brief Assigns a begin state.
*
* @signature void assignBeginState(hmm, v);
*
* @param[in,out] hmm The @link HmmGraph @endlink to assign the begin state of.
* @param[in] v The descriptor of the vertex to assign as begin state.
*
* @fn HmmGraph#assignEndState
*
* @headerfile <seqan/graph_types.h>
*
* @brief Assigns a end state.
*
* @signature void assignEndState(hmm, v);
*
* @param[in,out] hmm The @link HmmGraph @endlink to assign the end state of.
* @param[in] v The descriptor of the vertex to assign as end state.
*
* @fn HmmGraph#beginState
*
* @brief Return a reference to the begin state vertex descriptor.
*
* @signature TVertexDescriptor beginState(hmm);
*
* @param[in] hmm The @link HmmGraph @endlink to get the vertex descriptor of.
*
* @return TVertexDescriptor A reference to the begin state vertex descriptor.
*
* @fn HmmGraph#endState
*
* @brief Return a reference to the end state vertex descriptor.
*
* @signature TVertexDescriptor endState(hmm);
*
* @param[in] hmm The @link HmmGraph @endlink to get the vertex descriptor of.
*
* @return TVertexDescriptor A reference to the end state vertex descriptor.
*
* @fn HmmGraph#getBeginState
*
* @brief Return the begin state vertex descriptor.
*
* @signature TVertexDescriptor getBeginState(hmm);
*
* @param[in] hmm The @link HmmGraph @endlink to get the vertex descriptor of.
*
* @return TVertexDescriptor The begin state vertex descriptor.
*
* @fn HmmGraph#getEndState
*
* @brief Return the end state vertex descriptor.
*
* @signature TVertexDescriptor getEndState(hmm);
*
* @param[in] hmm The @link HmmGraph @endlink to get the vertex descriptor of.
*
* @return TVertexDescriptor The end state vertex descriptor.
*
* @fn HmmGraph#getTransitionProbability
*
* @brief Returns the transition probability, stored as the cargo.
*
* @signature TCargo getTransitionProbability(hmm, state1, state2);
* @signature TCargo getTransitionProbability(hmm, e);
*
* @param[in] hmm The @link HmmGraph @endlink to get transition probability for.
* @param[in] state1 Return transition probability from start state1.
* @param[in] state2 Return transition probability to target state2.
* @param[in] e An edge descriptor.
*
* @return TCargo Return the transition probability.
*
* @fn HmmGraph#transitionProbability
*
* @brief Returns a reference to transition probability, stored as the cargo.
*
* @signature TCargo getTransitionProbability(hmm, state1, state2);
* @signature TCargo getTransitionProbability(hmm, e);
*
* @param[in] hmm The @link HmmGraph @endlink to get transition probability for.
* @param[in] state1 Return transition probability from start state1.
* @param[in] state2 Return transition probability to target state2.
* @param[in] e An edge descriptor.
*
* @return TCargo Returns a reference to the transition probability.
*
* @fn HmmGraph#assignTransitionProbability
*
* @brief Assigns a new transition probability to an existing edge.
*
* @signature void assignTransitionProbability(hmm, state1, state2, prob);
* @signature void assignTransitionProbability(hmm, e, prob);
*
* @param[in] hmm The @link HmmGraph @endlink to get transition probability for.
* @param[in] state1 Assign transition probability from start state1.
* @param[in] state2 Assign probability to target state2.
* @param[in] e Assign probability to edge with this edge descriptor.
*
* @fn HmmGraph#getEmissionsProbability
*
* @brief Returns the emissions probability.
*
* @signature TCargo getEmissionProbability(hmm, state, symbol);
*
* @param[in] hmm The @link HmmGraph @endlink to query.
* @param[in] state A vertex descriptor with the source state.
* @param[in] symbol The symbol. Type: <tt>TAlphabet</tt>.
*
* @return TCargo The emission probability.
*
* @fn HmmGraph#emissionProbability
*
* @brief Returns a reference to the emissions probability.
*
* @signature TCargo emissionProbability(hmm, state, symbol);
*
* @param[in] hmm The @link HmmGraph @endlink to query.
* @param[in] state A vertex descriptor with the source state.
* @param[in] symbol The symbol. Type: <tt>TAlphabet</tt>.
*
* @return TCargo Reference to the emission probability.
*
* @fn HmmGraph#assignEmissionsProbability
*
* @brief Assigns a new emission probability.
*
* @signature void assignEmissionProbability(hmm, state, symbol, eProb);
*
* @param[in,out] hmm The @link HmmGraph @endlink to query.
* @param[in] state A vertex descriptor with the source state.
* @param[in] symbol The symbol. Type: <tt>TAlphabet</tt>.
* @param[in] eProb Emission probability to assign.
*
* @fn HmmGraph#assignSilentStatus
*
* @brief Assigns a silent status to a state.
*
* @signature void assignSilentStatus(hmm, v, silent);
*
* @param[in] hmm The HmmGraph to assign the silent status in.
* @param[in] v Vertex descriptor of the state to assign silent status.
* @param[in] silent A bool with the silent status.
*
* @fn HmmGraph#silentStatus
*
* @brief Return reference to silent status flag.
*
* @signature TBoolRef silentStatus(hmm, v);
*
* @param[in] hmm The HmmGraph to assign the silent status in.
* @param[in] v Vertex descriptor of the state to assign silent status.
*
* @return TBoolRef Reference to bool silent status flag.
*
* @fn HmmGraph#isSilent
*
* @brief Indicates whether a state is silent or not.
*
* @signature bool isSilent(hmm, v);
*
* @param[in] hmm The HmmGraph to query.
* @param[in] v Vertex descriptor of the state to query.
*
* @return bool true if the state is silent and false if not.
*/