package com.compomics.util.experiment.biology.mutations; import com.compomics.util.experiment.biology.AminoAcid; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * This class holds the all possible one-letter peptide sequence mutations. * * @author Thilo Muth */ public class MutationFactory { /** * List of amino acids. */ private static List<AminoAcid> aminoAcids; /** * List of mutations. */ private static List<Mutation> mutations; /** * Mapping from mutation as string to mutation object. */ private static Map<String, Mutation> mutationMap; /** * Private constructor for the singleton convention. */ private MutationFactory() { } /** * Returns the requested mutation by lookup in the mutation map. * * @param mutation The mutation as parameter. * @return The requested mutation. */ public static Mutation getMutation(Mutation mutation) { if (mutationMap == null) { createMutations(); } return mutationMap.get(mutation.toString()); } /** * This method creates all possible mutations for the 20 essential amino * acids. * * @return All possible mutation for the 20 essential amino acids. */ public static List<Mutation> createMutations() { // Create essential amino acids. if (aminoAcids == null) { createAminoAcids(); } // Create mutations if (mutations == null) { mutations = new ArrayList<Mutation>(); mutationMap = new HashMap<String, Mutation>(); for (AminoAcid aa1 : aminoAcids) { for (AminoAcid aa2 : aminoAcids) { if (!aa1.equals(aa2)) { Mutation mutation = new Mutation(aa1, aa2); if (getMutation(mutation) == null) { mutations.add(mutation); mutationMap.put(mutation.toString(), mutation); } } } } } return mutations; } /** * Returns the mutation as a string. * * @return the mutation as a string */ public static List<String> getMutationsAsString() { if (mutationMap == null) { createMutations(); } return new ArrayList(mutationMap.keySet()); } /** * This method creates the 20 essential amino acids. */ private static void createAminoAcids() { aminoAcids = new ArrayList<AminoAcid>(); aminoAcids.add(AminoAcid.A); aminoAcids.add(AminoAcid.C); aminoAcids.add(AminoAcid.D); aminoAcids.add(AminoAcid.E); aminoAcids.add(AminoAcid.F); aminoAcids.add(AminoAcid.G); aminoAcids.add(AminoAcid.H); aminoAcids.add(AminoAcid.I); aminoAcids.add(AminoAcid.K); aminoAcids.add(AminoAcid.L); aminoAcids.add(AminoAcid.M); aminoAcids.add(AminoAcid.N); aminoAcids.add(AminoAcid.P); aminoAcids.add(AminoAcid.Q); aminoAcids.add(AminoAcid.R); aminoAcids.add(AminoAcid.S); aminoAcids.add(AminoAcid.T); aminoAcids.add(AminoAcid.V); aminoAcids.add(AminoAcid.W); aminoAcids.add(AminoAcid.Y); } }