## org.biojavax.ga.functions
Interface MutationFunction

All Superinterfaces:
  Changeable

All Known Implementing Classes:
  AbstractMutationFunction, MutationFunction.NoMutation, SimpleMutationFunction, SwapMutationFunction

    public interface MutationFunction

extends Changeable

A class that mutates a `SymbolList`

Since:
  1.5
Version:
  1.0
Author:
  Mark Schreiber

Nested Class Summary
`static class` `MutationFunction.NoMutation` Place Holder class that doesn't mutate its SymbolLists

Field Summary
`static double[]` `DEFAULT_MUTATION_PROBS`
`static ChangeType` `MUTATION_PROBS`
`static ChangeType` `MUTATION_SPECTRUM`
`static MutationFunction` `NO_MUTATION`

Method Summary
`double[]` `getMutationProbs()`
`OrderNDistribution` `getMutationSpectrum()`
`SymbolList` `mutate(SymbolList seq)` Produces a new SymbolList by mutation.
`void` `setMutationProbs(double[] mutationProbs)` Set the probability of a mutation occuring at a certain position Position 0 in the array corresponds to the probability of the first residue of `seq` mutating.
`void` `setMutationSpectrum(OrderNDistribution mutationSpectrum)` Sets the `Distribution` of `Symbols` that will be selected from when a mutation occurs.

Methods inherited from interface org.biojava.utils.Changeable
`addChangeListener, addChangeListener, isUnchanging, removeChangeListener, removeChangeListener`

Field Detail

### DEFAULT_MUTATION_PROBS

    static final double[] DEFAULT_MUTATION_PROBS

### MUTATION_PROBS

    static final ChangeType MUTATION_PROBS

### MUTATION_SPECTRUM

    static final ChangeType MUTATION_SPECTRUM

### NO_MUTATION

    static final MutationFunction NO_MUTATION

Method Detail

### mutate

    SymbolList mutate(SymbolList seq)
                      throws IllegalAlphabetException,
                             ChangeVetoException,
                             IllegalSymbolException

  Produces a new SymbolList by mutation. Each position i in the SymbolList `seq` is mutated with probability `getMutationProbs[i]`. The new residue is selected at random from the `Distribution mutation`. The use of an array of probabilities allows the modelling of mutational hotspots. Position 0 in the array corresponds to the probability of the first residue of `seq` mutating. If the length of the array defined in `getMutationProbs()` is shorter than the length of the sequence the default behaivour of implementations will be to apply the last probability to each subsequence residue. A single member array will mutate all bases with equal probability.

  Parameters:
    `seq` - the sequence to mutate
  Returns:
    The mutated sequence.
  Throws:
    `IllegalAlphabetException` - If the `mutationSpectrum Distribution` is not emitting Symbols from the same `Alphabet` as `seq`.
    `IllegalSymbolException` - if the `mutationSpectrum Distribution` is not conditioned with the same `Alphabet` as the `seq Alphabet`.
    `ChangeVetoException` - if `seq` is unmodifiable

### setMutationProbs

    void setMutationProbs(double[] mutationProbs)
                          throws ChangeVetoException

  Set the probability of a mutation occuring at a certain position Position 0 in the array corresponds to the probability of the first residue of `seq` mutating. If the length of the array defined in `getMutationProbs()` is shorter than the length of the sequence the default behaivour of implementations will be to apply the last probability to each subsequence residue. A single member array will mutate all bases with equal probability.

  Parameters:
    `mutationProbs` - an array of double values representing mutation probabilities
  Throws:
    `ChangeVetoException` - if a ChangeListener vetoes the change.

### getMutationProbs

    double[] getMutationProbs()

### setMutationSpectrum

    void setMutationSpectrum(OrderNDistribution mutationSpectrum)
                             throws ChangeVetoException

  Sets the `Distribution` of `Symbols` that will be selected from when a mutation occurs. An `OrderNDistribution` is used so that you can model a situation where the identity of the 'mutant' `Symbol` is dependent on the original `Symbol`. The primary use is to prevent `Symbols` mutating to themselves. Another use would be to model transitions and transversions.

  Parameters:
    `mutationSpectrum` - the Distribution of 'mutant' bases to choose from.
  Throws:
    `ChangeVetoException` - if a ChangeListener vetoes the change.

### getMutationSpectrum

    OrderNDistribution getMutationSpectrum()

  Returns:
    null if the Distribution has not been set.