/// <summary> /// Gets the sequence from the specified node. /// </summary> /// <param name="node">DeBruijn node.</param> /// <returns>Returns an instance of sequence.</returns> public ISequence GetNodeSequence(DeBruijnNode node) { if (node == null) { throw new ArgumentNullException("node"); } return(new Sequence(Alphabets.DNA, node.GetOriginalSymbols(this.KmerLength))); }
/// <summary> /// Gets the last or first symbol in the node depending on the isForwardDirection flag is true or false. /// If the isSameOrientation flag is false then symbol will be taken from the ReverseComplement of the kmer data. /// </summary> /// <param name="node">DeBruijn node.</param> /// <param name="isForwardDirection">Flag to indicate whether the node is in forward direction or not.</param> /// <param name="isSameOrientation">Flag to indicate the orientation.</param> /// <returns>Byte represnting the symbol.</returns> public byte GetNextSymbolFrom(DeBruijnNode node, bool isForwardDirection, bool isSameOrientation) { if (node == null) { throw new ArgumentNullException("node"); } byte[] nextSequence = isSameOrientation ? node.GetOriginalSymbols(KmerLength) : node.GetReverseComplementOfOriginalSymbols(KmerLength); return(isForwardDirection ? nextSequence.Last() : nextSequence.First()); }
/// <summary> /// This gets the next symbol from a node while forming chains. This can be made a lot more efficient if it turns in to a bottleneck. /// all chains are extended from either the first or last base present in the node, and this base is either forward /// or reverse complimented, this method reflects this. /// </summary> /// <param name="node">Next node</param> /// <param name="graph">Graph to get symbol from</param> /// <param name="GetFirstNotLast">First or last base?</param> /// <param name="ReverseComplimentBase">Should the compliment of the base be returned</param> /// <returns></returns> private static byte GetNextSymbol(DeBruijnNode node, int kmerLength, bool GetRCofFirstBaseInsteadOfLastBase) { if (node == null) { throw new ArgumentNullException("node"); } byte[] symbols = node.GetOriginalSymbols(kmerLength); byte value = GetRCofFirstBaseInsteadOfLastBase ? symbols.First() : symbols.Last(); if (GetRCofFirstBaseInsteadOfLastBase) { byte value2; bool rced = DnaAlphabet.Instance.TryGetComplementSymbol(value, out value2); //Should never happend if (!rced) { throw new Exception("Could not revcomp base during graph construction"); } value = value2; } return(value); }
/// <summary> /// Gets the last or first symbol in the node depending on the isForwardDirection flag is true or false. /// If the isSameOrientation flag is false then symbol will be taken from the ReverseComplement of the kmer data. /// </summary> /// <param name="node">DeBruijn node.</param> /// <param name="isForwardDirection">Flag to indicate whether the node is in forward direction or not.</param> /// <param name="isSameOrientation">Flag to indicate the orientation.</param> /// <returns>Byte represnting the symbol.</returns> public byte GetNextSymbolFrom(DeBruijnNode node, bool isForwardDirection, bool isSameOrientation) { if (node == null) throw new ArgumentNullException("node"); byte[] nextSequence = isSameOrientation ? node.GetOriginalSymbols(KmerLength) : node.GetReverseComplementOfOriginalSymbols(KmerLength); return isForwardDirection ? nextSequence.Last() : nextSequence.First(); }
/// <summary> /// Gets the sequence from the specified node. /// </summary> /// <param name="node">DeBruijn node.</param> /// <returns>Returns an instance of sequence.</returns> public ISequence GetNodeSequence(DeBruijnNode node) { if (node == null) { throw new ArgumentNullException("node"); } return new Sequence(Alphabets.DNA, node.GetOriginalSymbols(KmerLength)); }