package com.compomics.util.experiment.biology.ions; import com.compomics.util.experiment.biology.Atom; import com.compomics.util.experiment.biology.AtomChain; import com.compomics.util.experiment.biology.AtomImpl; import com.compomics.util.experiment.biology.Ion; import com.compomics.util.experiment.biology.NeutralLoss; import com.compomics.util.pride.CvTerm; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.Set; /** * This class models a reporter ion and is its own factory. * * @author Marc Vaudel * @author Harald Barsnes */ public class ReporterIon extends Ion { /** * Serial number for backward compatibility. */ static final long serialVersionUID = 1109011048958734120L; /** * Map of the implemented reporter ions. Name > reporter ion */ private static HashMap<String, ReporterIon> implementedIons = new HashMap<String, ReporterIon>(); /** * Standard reporter ion iTRAQ 4Plex 114. */ public final static ReporterIon iTRAQ4Plex_114 = new ReporterIon("iTRAQ4Plex_114", getComposition("iTRAQ4Plex_114")); /** * Standard reporter ion iTRAQ 4Plex 115. */ public final static ReporterIon iTRAQ4Plex_115 = new ReporterIon("iTRAQ4Plex_115", getComposition("iTRAQ4Plex_115")); /** * Standard reporter ion iTRAQ 4Plex 116. */ public final static ReporterIon iTRAQ4Plex_116 = new ReporterIon("iTRAQ4Plex_116", getComposition("iTRAQ4Plex_116")); /** * Standard reporter ion iTRAQ 4Plex 117. */ public final static ReporterIon iTRAQ4Plex_117 = new ReporterIon("iTRAQ4Plex_117", getComposition("iTRAQ4Plex_117")); /** * Standard reporter ion iTRAQ 8Plex 113. */ public final static ReporterIon iTRAQ8Plex_113 = new ReporterIon("iTRAQ8Plex_113", getComposition("iTRAQ8Plex_113")); /** * Standard reporter ion iTRAQ 8Plex 114. */ public final static ReporterIon iTRAQ8Plex_114 = new ReporterIon("iTRAQ8Plex_114", getComposition("iTRAQ8Plex_114")); /** * Standard reporter ion iTRAQ 8Plex 115. */ public final static ReporterIon iTRAQ8Plex_115 = new ReporterIon("iTRAQ8Plex_115", getComposition("iTRAQ8Plex_115")); /** * Standard reporter ion iTRAQ 8Plex 116. */ public final static ReporterIon iTRAQ8Plex_116 = new ReporterIon("iTRAQ8Plex_116", getComposition("iTRAQ8Plex_116")); /** * Standard reporter ion iTRAQ 8Plex 117. */ public final static ReporterIon iTRAQ8Plex_117 = new ReporterIon("iTRAQ8Plex_117", getComposition("iTRAQ8Plex_117")); /** * Standard reporter ion iTRAQ 8Plex 118. */ public final static ReporterIon iTRAQ8Plex_118 = new ReporterIon("iTRAQ8Plex_118", getComposition("iTRAQ8Plex_118")); /** * Standard reporter ion iTRAQ 8Plex 119. */ public final static ReporterIon iTRAQ8Plex_119 = new ReporterIon("iTRAQ8Plex_119", getComposition("iTRAQ8Plex_119")); /** * Standard reporter ion iTRAQ 8Plex 121. */ public final static ReporterIon iTRAQ8Plex_121 = new ReporterIon("iTRAQ8Plex_121", getComposition("iTRAQ8Plex_121")); /** * Standard reporter ion iTRAQ (reporter + balancer). */ public final static ReporterIon iTRAQ_145 = new ReporterIon("iTRAQ145", 144.1); // @TODO: add the actual composition /** * Standard reporter ion iTRAQ (reporter + balancer). */ public final static ReporterIon iTRAQ_305 = new ReporterIon("iTRAQ305", 304.2); // @TODO: add the actual composition /** * Standard reporter ion TMT 126. */ public final static ReporterIon TMT_126 = new ReporterIon("TMT_126", getComposition("TMT_126")); /** * Standard reporter ion TMT 127N. */ public final static ReporterIon TMT_127N = new ReporterIon("TMT_127N", getComposition("TMT_127N")); /** * Standard reporter ion TMT 127C. */ public final static ReporterIon TMT_127C = new ReporterIon("TMT_127C", getComposition("TMT_127C")); /** * Standard reporter ion TMT 128N. */ public final static ReporterIon TMT_128N = new ReporterIon("TMT_128N", getComposition("TMT_128N")); /** * Standard reporter ion TMT 128C. */ public final static ReporterIon TMT_128C = new ReporterIon("TMT_128C", getComposition("TMT_128C")); /** * Standard reporter ion TMT 129N. */ public final static ReporterIon TMT_129N = new ReporterIon("TMT_129N", getComposition("TMT_129N")); /** * Standard reporter ion TMT 129C. */ public final static ReporterIon TMT_129C = new ReporterIon("TMT_129C", getComposition("TMT_129C")); /** * Standard reporter ion TMT 130N. */ public final static ReporterIon TMT_130N = new ReporterIon("TMT_130N", getComposition("TMT_130N")); /** * Standard reporter ion TMT 130C. */ public final static ReporterIon TMT_130C = new ReporterIon("TMT_130C", getComposition("TMT_130C")); /** * Standard reporter ion TMT 131. */ public final static ReporterIon TMT_131 = new ReporterIon("TMT_131", getComposition("TMT_131")); /** * Standard reporter ion TMT 126 with ETD fragmentation. */ public final static ReporterIon TMT_126_ETD = new ReporterIon("TMT_126_ETD", getComposition("TMT_126_ETD")); /** * Standard reporter ion TMT 127N with ETD fragmentation. */ public final static ReporterIon TMT_127N_ETD = new ReporterIon("TMT_127N_ETD", getComposition("TMT_127N_ETD")); /** * Standard reporter ion TMT 127C with ETD fragmentation. */ public final static ReporterIon TMT_127C_ETD = new ReporterIon("TMT_127C_ETD", getComposition("TMT_127C_ETD")); /** * Standard reporter ion TMT 128N with ETD fragmentation. */ public final static ReporterIon TMT_128N_ETD = new ReporterIon("TMT_128N_ETD", getComposition("TMT_128N_ETD")); /** * Standard reporter ion TMT 128C with ETD fragmentation. */ public final static ReporterIon TMT_128C_ETD = new ReporterIon("TMT_128C_ETD", getComposition("TMT_128C_ETD")); /** * Standard reporter ion TMT 129N with ETD fragmentation. */ public final static ReporterIon TMT_129N_ETD = new ReporterIon("TMT_129N_ETD", getComposition("TMT_129N_ETD")); /** * Standard reporter ion TMT 129C with ETD fragmentation. */ public final static ReporterIon TMT_129C_ETD = new ReporterIon("TMT_129C_ETD", getComposition("TMT_129C_ETD")); /** * Standard reporter ion TMT 130N with ETD fragmentation. */ public final static ReporterIon TMT_130N_ETD = new ReporterIon("TMT_130N_ETD", getComposition("TMT_130N_ETD")); /** * Standard reporter ion TMT 130C with ETD fragmentation. */ public final static ReporterIon TMT_130C_ETD = new ReporterIon("TMT_130C_ETD", getComposition("TMT_130C_ETD")); /** * Standard reporter ion TMT 131 with ETD fragmentation. */ public final static ReporterIon TMT_131_ETD = new ReporterIon("TMT_131_ETD", getComposition("TMT_131_ETD")); /** * Standard reporter ion TMT (reporter + balancer). */ public final static ReporterIon TMT_230 = new ReporterIon("TMT230", 229.2); // @TODO: add the actual composition /** * Standard reporter ion TMT (reporter + balancer). */ public final static ReporterIon TMT_226 = new ReporterIon("TMT226", 225.2); // @TODO: add the actual composition /** * Standard reporter ion for lysine acetylation (PMID: 18338905). */ public final static ReporterIon ACE_K_126 = new ReporterIon("aceK126", AtomChain.getAtomChain("C(7)H(11)ON")); /** * Standard reporter ion for lysine acetylation (PMID: 18338905). */ public final static ReporterIon ACE_K_143 = new ReporterIon("aceK143", AtomChain.getAtomChain("C(7)H(14)ON(2)")); /** * Standard reporter ion for phosphorylation of tyrosine (PMID: 11473401). */ public final static ReporterIon PHOSPHO_Y = new ReporterIon("pY", AtomChain.getAtomChain("C(8)H(10)NPO(4)")); /** * Standard reporter ion for formylation of K (PMID: 24895383). */ public final static ReporterIon FORMYL_K = new ReporterIon("fK112", AtomChain.getAtomChain("C(6)H(9)NO")); /** * Standard reporter ion for methylation of R. */ public final static ReporterIon METHYL_R_87 = new ReporterIon("metR87", AtomChain.getAtomChain("C(4)H(10)N(2)")); /** * Standard reporter ion for methylation of R (PMID: 16335983). */ public final static ReporterIon METHYL_R_112 = new ReporterIon("metR112", AtomChain.getAtomChain("C(5)H(9)N(3)")); /** * Standard reporter ion for methylation of R (PMID: 16335983). */ public final static ReporterIon METHYL_R_115 = new ReporterIon("metR115", AtomChain.getAtomChain("C(5)H(10)N(2)O")); /** * Standard reporter ion for methylation of R (PMID: 16335983). */ public final static ReporterIon METHYL_R_143 = new ReporterIon("metR143", AtomChain.getAtomChain("C(6)H(14)N(4)")); /** * Standard reporter ion for methylation of R (PMID: 16335983). */ public final static ReporterIon METHYL_R_70 = new ReporterIon("metR70", AtomChain.getAtomChain("C(4)H(7)N")); /** * Standard reporter ion for di-methylation of R (PMID: 16335983). */ public final static ReporterIon DI_METHYL_R_112 = new ReporterIon("dimetR112", AtomChain.getAtomChain("C(5)H(9)N(3)")); /** * Standard reporter ion for di-methylation of R (PMID: 16335983). */ public final static ReporterIon DI_METHYL_R_115 = new ReporterIon("dimetR115", AtomChain.getAtomChain("C(5)H(10)N(2)O")); /** * Standard reporter ion for di-methylation of R (PMID: 16335983). */ public final static ReporterIon DI_METHYL_R_157 = new ReporterIon("metR157", AtomChain.getAtomChain("C(7)H(16)N(4)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQ = new ReporterIon("QQ", AtomChain.getAtomChain("C(10)H(16)N(4)O(4)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQ_H2O = new ReporterIon("QQ-H2O", AtomChain.getAtomChain("C(10)H(14)N(4)O(3)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQT = new ReporterIon("QQT", AtomChain.getAtomChain("C(14)H(24)N(5)O(6)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQT_H2O = new ReporterIon("QQT-H2O", AtomChain.getAtomChain("C(14)H(22)N(5)O(5)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQTG = new ReporterIon("QQTG", AtomChain.getAtomChain("C(16)H(26)N(6)O(7)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQTG_H2O = new ReporterIon("QQTG-H2O", AtomChain.getAtomChain("C(16)H(24)N(6)O(6)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQTGG = new ReporterIon("QQTGG", AtomChain.getAtomChain("C(18)H(29)N(7)O(8)")); /** * Standard reporter ion for SUMO-2/3 Q87R. */ public final static ReporterIon QQTGG_H2O = new ReporterIon("QQTGG-H2O", AtomChain.getAtomChain("C(18)H(27)N(7)O(7)")); /** * Ion name for user defined ions. */ private String name; /** * The CV term of the reporter ion, null if not set. */ private CvTerm cvTerm = null; /** * Constructor for a user-defined reporter ion. The reporter ion is saved in * a static map by default and can be retrieved using the static methods. * See getReporterIon(String name). * * @param name name of the reporter ion. Should be unique to the ion. * @param mass theoretic mass of the reporter ion */ public ReporterIon(String name, double mass) { this(name, mass, true); } /** * Constructor for a user-defined reporter ion. * * @param name name of the reporter ion. Should be unique to the ion. * @param mass theoretic mass of the reporter ion * @param save if true the reporter ion will be saved in the static map for * later reuse */ public ReporterIon(String name, double mass, boolean save) { type = IonType.REPORTER_ION; this.name = name; this.theoreticMass = mass; if (save) { implementedIons.put(name, this); } } /** * Constructor for a user-defined reporter ion. The reporter ion is saved in * a static map by default and can be retrieved using the static methods. * See getReporterIon(String name). * * @param name name of the reporter ion. Should be unique to the ion * @param atomChain the atomic composition of this ion */ public ReporterIon(String name, AtomChain atomChain) { this(name, atomChain, true); } /** * Constructor for a user-defined reporter ion. * * @param name name of the reporter ion. Should be unique to the ion. * @param atomChain the atomic composition of this ion * @param save if true the reporter ion will be saved in the static map for * later reuse */ public ReporterIon(String name, AtomChain atomChain, boolean save) { type = IonType.REPORTER_ION; this.name = name; this.atomChain = atomChain; if (save) { addReporterIon(this); } } /** * Adds a reporter ion to the class static map. Reporter ions with the same * name will be overwritten. * * @param reporterIon the reporter ion to add */ public static void addReporterIon(ReporterIon reporterIon) { if (implementedIons == null) { implementedIons = new HashMap<String, ReporterIon>(); } implementedIons.put(reporterIon.name, reporterIon); } /** * This method returns the name of the reporter ion. * * @return name of the reporter ion */ public String getName() { return name; } /** * Setter for the ion name. * * @param name the new ion name */ public void setName(String name) { this.name = name; this.cvTerm = null; } /** * Method to set the mass of the reporter ion. * * @param referenceMass the mass where the reporter ions should be found */ public void setMass(double referenceMass) { this.theoreticMass = referenceMass; } @Override public CvTerm getPrideCvTerm() { if (cvTerm != null) { return cvTerm; } if (name.contains("TMT")) { if (name.equalsIgnoreCase("TMT_126")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "126"); } else if (name.equalsIgnoreCase("TMT_127N")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "127N"); } else if (name.equalsIgnoreCase("TMT_127C")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "127C"); } else if (name.equalsIgnoreCase("TMT_128N")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "128N"); } else if (name.equalsIgnoreCase("TMT_128C")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "128C"); } else if (name.equalsIgnoreCase("TMT_129N")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "129N"); } else if (name.equalsIgnoreCase("TMT_129C")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "129C"); } else if (name.equalsIgnoreCase("TMT_130N")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "130N"); } else if (name.equalsIgnoreCase("TMT_130C")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "130C"); } else if (name.equalsIgnoreCase("TMT_131")) { cvTerm = new CvTerm("PSI-MS", "MS:1002670", "frag: TMT reporter ion", "131"); } else if (name.equalsIgnoreCase("TMT_126_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "126"); } else if (name.equalsIgnoreCase("TMT_127N_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "127N"); } else if (name.equalsIgnoreCase("TMT_127C_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "127C"); } else if (name.equalsIgnoreCase("TMT_128N_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "128N"); } else if (name.equalsIgnoreCase("TMT_128C_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "128C"); } else if (name.equalsIgnoreCase("TMT_129N_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "129N"); } else if (name.equalsIgnoreCase("TMT_129C_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "129C"); } else if (name.equalsIgnoreCase("TMT_130N_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "130N"); } else if (name.equalsIgnoreCase("TMT_130C_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "130C"); } else if (name.equalsIgnoreCase("TMT_131_ETD")) { cvTerm = new CvTerm("PSI-MS", "MS:1002671", "frag: TMT ETD reporter ion", "131"); } } else if (name.contains("iTRAQ")) { if (name.equalsIgnoreCase("iTRAQ4Plex_114")) { cvTerm = new CvTerm("PSI-MS", "MS:1002668", "frag: iTRAQ 4plex reporter ion", "114"); } else if (name.equalsIgnoreCase("iTRAQ4Plex_115")) { cvTerm = new CvTerm("PSI-MS", "MS:1002668", "frag: iTRAQ 4plex reporter ion", "115"); } else if (name.equalsIgnoreCase("iTRAQ4Plex_116")) { cvTerm = new CvTerm("PSI-MS", "MS:1002668", "frag: iTRAQ 4plex reporter ion", "116"); } else if (name.equalsIgnoreCase("iTRAQ4Plex_117")) { cvTerm = new CvTerm("PSI-MS", "MS:1002668", "frag: iTRAQ 4plex reporter ion", "117"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_113")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "113"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_114")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "114"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_115")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "115"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_116")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "116"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_117")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "117"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_118")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "118"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_119")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "119"); } else if (name.equalsIgnoreCase("iTRAQ8Plex_121")) { cvTerm = new CvTerm("PSI-MS", "MS:1002669", "frag: iTRAQ 8plex reporter ion", "121"); } } return cvTerm; } @Override public CvTerm getPsiMsCvTerm() { return getPrideCvTerm(); } /** * Compares the current reporter ion with another one based on their masses. * * @param anotherReporterIon the other reporter ion * @return a boolean indicating whether masses are equal */ public boolean isSameAs(ReporterIon anotherReporterIon) { if (atomChain != null && anotherReporterIon.getAtomicComposition() != null) { return atomChain.isSameCompositionAs(anotherReporterIon.getAtomicComposition()); } return false; } /** * Returns the index of a reporter ion. (i.e. its rounded m/z: 114 for iTRAQ * 114). * * @return the index of a reporter ion. */ public int getIndex() { return getTheoreticMass().intValue(); } @Override public int getSubType() { ArrayList<String> ionList = new ArrayList<String>(getImplementedIons()); Collections.sort(ionList); return ionList.indexOf(name); } @Override public String getSubTypeAsString() { return getName(); } /** * Returns the reporter ion indexed by the given index. * * @param subType the index of interest * * @return the corresponding reporter ion */ public static ReporterIon getReporterIon(int subType) { ArrayList<String> ionList = new ArrayList<String>(getImplementedIons()); Collections.sort(ionList); String name = ionList.get(subType); return getReporterIon(name); } /** * Returns the reporter ion corresponding to the given name. * * @param name the name of the reporter ion * * @return the corresponding reporter ion */ public static ReporterIon getReporterIon(String name) { return implementedIons.get(name); } /** * Returns an arraylist of possible subtypes. * * @return an arraylist of possible subtypes */ public static Set<String> getImplementedIons() { return implementedIons.keySet(); } /** * Returns an arraylist of possible subtypes. * * @return an arraylist of possible subtypes */ public static ArrayList<Integer> getPossibleSubtypes() { ArrayList<Integer> possibleTypes = new ArrayList<Integer>(implementedIons.size()); for (int i = 0; i < implementedIons.size(); i++) { possibleTypes.add(i); } return possibleTypes; } @Override public ArrayList<NeutralLoss> getNeutralLosses() { return new ArrayList<NeutralLoss>(0); } @Override public boolean isSameAs(Ion anotherIon) { if (anotherIon instanceof ReporterIon) { ReporterIon otherIon = (ReporterIon) anotherIon; return isSameAs(otherIon); } return false; } @Override public ReporterIon clone() { return new ReporterIon(name, atomChain.clone(), false); } /** * Returns the atomic composition of the reporter ion of the given name. * * @param reporterIonName the name of the reporter ion of interest * * @return the atomic composition of the reporter ion of the given name */ private static AtomChain getComposition(String reporterIonName) { if (reporterIonName.equals("iTRAQ4Plex_114")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ4Plex_115")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ4Plex_116")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 4); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ4Plex_117")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 3); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ4Plex_118")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 4); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_113")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 6); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_114")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_115")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_116")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 4); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_117")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 3); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 0), 1); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_118")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 3); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 1), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_119")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 2); atomChain.append(new AtomImpl(Atom.C, 1), 4); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 1), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ8Plex_121")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 1), 6); atomChain.append(new AtomImpl(Atom.H, 0), 12); atomChain.append(new AtomImpl(Atom.N, 1), 2); return atomChain; } else if (reporterIonName.equals("iTRAQ145")) { //@TODO! } else if (reporterIonName.equals("iTRAQ305")) { //@TODO! } else if (reporterIonName.equals("TMT_126")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 8); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_127N")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 8); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_127C")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_128N")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.C, 1), 1); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_128C")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 6); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_129N")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 6); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_129C")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_130N")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 3); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_130C")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 4); atomChain.append(new AtomImpl(Atom.C, 1), 4); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_131")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 4); atomChain.append(new AtomImpl(Atom.C, 1), 4); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_126_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_127N_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_127C_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_128N_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 7); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_128C_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_129N_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_129C_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_130N_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 5); atomChain.append(new AtomImpl(Atom.C, 1), 2); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } else if (reporterIonName.equals("TMT_130C_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 3); atomChain.append(new AtomImpl(Atom.C, 1), 4); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 0), 1); return atomChain; } else if (reporterIonName.equals("TMT_131_ETD")) { AtomChain atomChain = new AtomChain(); atomChain.append(new AtomImpl(Atom.C, 0), 3); atomChain.append(new AtomImpl(Atom.C, 1), 4); atomChain.append(new AtomImpl(Atom.H, 0), 15); atomChain.append(new AtomImpl(Atom.N, 1), 1); return atomChain; } throw new UnsupportedOperationException("Atomic composition not implemented for reporter ion " + reporterIonName + "."); } }