package org.nextprot.api.commons.bio.variation.prot; import org.nextprot.api.commons.bio.variation.prot.varseq.VaryingSequence; /** * Factory that build variant sequence from an reference protein sequence and a SequenceVariation * * Created by fnikitin on 03.04.17. */ public interface VariantSequenceBuilder { /** * Select from position in reference sequence * @param varyingSequence the sequence positions of amino-acids affected by this change * @return the first position selected on the reference sequence */ int selectBeginPositionInReferenceSequence(VaryingSequence varyingSequence); /** * Select to position in reference sequence * @param varyingSequence the sequence positions of amino-acids affected by this change * @return the last position selected on the reference sequence (or -1 if undefined) */ int selectEndPositionInReferenceSequence(VaryingSequence varyingSequence); /** * Get the amino-acids to replace in the reference sequence * @param referenceSequence the reference protein sequence * @param sequenceVariation the sequence variation * @return a replacement sequence of amino-acids */ String getAminoAcidReplacementString(String referenceSequence, SequenceVariation sequenceVariation); /** * Get the portion of amino-acids that change in the original sequence * @param referenceSequence the reference protein sequence * @param varyingSequence the sequence positions of amino-acids affected by this change * @return a substring of amino-acids */ default String getAminoAcidTargetStringInReferenceSequence(String referenceSequence, VaryingSequence varyingSequence) { return referenceSequence.substring(selectBeginPositionInReferenceSequence(varyingSequence)-1, selectEndPositionInReferenceSequence(varyingSequence)); } /** * Create a new sequence variant from a given reference sequence and its variation * @param referenceSequence reference sequence * @param sequenceVariation the sequence variation * @return a new variant sequence */ default String buildVariantSequence(String referenceSequence, SequenceVariation sequenceVariation) { int selectionBegin = selectBeginPositionInReferenceSequence(sequenceVariation.getVaryingSequence()); int selectionEnd = selectEndPositionInReferenceSequence(sequenceVariation.getVaryingSequence()); StringBuilder sb = new StringBuilder(referenceSequence.substring(0, selectionBegin - 1)); //The sequence of char values to be replaced sb.append(getAminoAcidReplacementString(referenceSequence, sequenceVariation)); if (selectionEnd >=0) { sb.append(referenceSequence.substring(selectionEnd)); } return sb.toString(); } }