Matrix Science header

resfile_ms2quantitation.java

Example program extracting peptide ratios from a Reporter or Multiplex file.

/*
 * ##############################################################################
 * # file: resfile_ms2quantitation.java                                         #
 * # Mascot Parser toolkit example code                                         #
 * ##############################################################################
 * # COPYRIGHT NOTICE                                                           #
 * # Copyright 1998-2013 Matrix Science Limited  All Rights Reserved.           #
 * #                                                                            #
 * ##############################################################################
 *
 */

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import matrix_science.msparser.ms_peptide_quant_key;
import matrix_science.msparser.ms_mascotresfile;
import matrix_science.msparser.ms_quant_method;
import matrix_science.msparser.ms_mascotoptions;
import matrix_science.msparser.ms_peptidesummary;
import matrix_science.msparser.ms_ms2quantitation;
import matrix_science.msparser.ms_peptide;
import matrix_science.msparser.ms_peptide_quant_ratio;
import matrix_science.msparser.ms_protein;
import matrix_science.msparser.ms_protein_quant_ratio;
import matrix_science.msparser.ms_quant_normalisation;
import matrix_science.msparser.ms_quant_outliers;
import matrix_science.msparser.ms_quant_quality;

public class resfile_ms2quantitation {

    static {
        try {
            System.loadLibrary("msparserj");
        } catch (UnsatisfiedLinkError e) {
            System.err.println("Native code library failed to load. "
                               + "Is msparserj.dll on the path?\n" + e);
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        if(args.length < 4) {
            System.err.println("Usage: <quantitation schema 1 filepath> <quantitation schema 2 filepath> <unimod schema filepath> <results file>");
            System.err.println("The location of schema files should be e.g.");
            System.err.println("  ../html/xmlns/schema/quantitation_1/quantitation_1.xsd");
            System.err.println("  ../html/xmlns/schema/quantitation_2/quantitation_2.xsd");
            System.err.println("  ../html/xmlns/schema/unimod_2/unimod_2.xsd");
            System.err.println("if running from the Mascot cgi directory.");
            System.exit(1);
        }

        String sQuantSchema1Filepath = args[0];
        String sQuantSchema2Filepath = args[1];
        String sUnimodSchemaFilepath = args[2];

        ms_mascotresfile oResfile = new ms_mascotresfile(args[3],1);
        if(!oResfile.isValid()) {
            System.err.println(oResfile.getLastErrorString());
            System.exit(1);
        }

        oResfile.setXMLschemaFilePath(ms_mascotresfile.XML_SCHEMA_QUANTITATION,
                "http://www.matrixscience.com/xmlns/schema/quantitation_2 "+sQuantSchema2Filepath+" http://www.matrixscience.com/xmlns/schema/quantitation_1 "+sQuantSchema1Filepath);

        oResfile.setXMLschemaFilePath(ms_mascotresfile.XML_SCHEMA_UNIMOD, "http://www.unimod.org/xmlns/schema/unimod_2 "+sUnimodSchemaFilepath);

        ms_quant_method oQMethod = new ms_quant_method();

        if(!oResfile.getQuantitationMethod(oQMethod)) {
            System.err.println(oResfile.getLastErrorString());
            System.exit(1);
        }

        // See section 'Multiple return values in Perl, Java and Python' in ms_parser help
        long[] iFlags = {0};
        double[] dMinProb = {0};
        int[] iMaxHits = {0};
        double[] dIgnoreIonsBelow = {0};
        long[] iMinPepLen = {0};
        boolean[] bUsePepSum = {false};
        long[] iFlags2 = {0};
        ms_mascotoptions oOptions = new ms_mascotoptions();

        oResfile.get_ms_mascotresults_params(oOptions, iFlags, dMinProb, iMaxHits, dIgnoreIonsBelow, iMinPepLen, bUsePepSum, iFlags2);

        if(!bUsePepSum[0]) {
            System.err.println("Results file cannot be used to open as a peptide summary");
            System.exit(1);
        }

        ms_peptidesummary oPepsum = new ms_peptidesummary(oResfile, (int) iFlags[0], dMinProb[0], iMaxHits[0], "", dIgnoreIonsBelow[0], (int) iMinPepLen[0], "", (int) iFlags2[0]);
        if(!oResfile.isValid()) {
            System.err.println(oResfile.getLastErrorString());
            System.exit(1);
        }

        // Quantitate the file using ms_ms2quantitation:
        ms_ms2quantitation oMs2Quant = new ms_ms2quantitation(oPepsum, oQMethod);

        if(!oMs2Quant.isValid()) {
            System.err.println(oMs2Quant.getLastErrorString());
            System.exit(1);
        }

        // Now we can inspect protein and peptide data in oMs2Quant
        // But first, dump the quantitation method parameters to see what we have:

        String[] aComps = new String[oQMethod.getNumberOfComponents()];
        for(int i = 0; i < oQMethod.getNumberOfComponents(); i++) {
            aComps[i] = oQMethod.getComponentByNumber(i).getName();
        }
        System.out.printf("Components: %s\n", Arrays.toString(aComps));

        String[] aRationames = new String[oQMethod.getNumberOfReportRatios()];
        for(int i = 0; i < oQMethod.getNumberOfReportRatios(); i++) {
            aRationames[i] = oQMethod.getReportRatioByNumber(i).getName();
        }
        System.out.printf("Report ratios: %s\n", Arrays.toString(aRationames));

        System.out.printf("Protein ratio type = %s\n", oQMethod.getProteinRatioType());
        System.out.printf("Min. number of peptides = %d\n", oQMethod.getMinNumPeptides());

        if (oQMethod.haveQuality()) {
            ms_quant_quality oQuality = oQMethod.getQuality();
            System.out.printf("Quality: min. precursor charge = %s\n", oQuality.getMinPrecursorCharge());
            System.out.printf("Quality: pep. threshold type = %s\n", oQuality.getPepThresholdType());
            System.out.printf("Quality: pep. threshold value = %s\n", oQuality.getPepThresholdValue());
        } else {
            System.out.print("Quality: no restrictions\n");
        }

        if (oQMethod.haveNormalisation()) {
            ms_quant_normalisation oNormalisation = oQMethod.getNormalisation();
            System.out.printf("Normalisation = %s\n", oNormalisation.getMethod());
        } else {
            System.out.print("Normalisation: none\n");
        }

        if (oQMethod.haveOutliers()) {
            ms_quant_outliers oOutliers = oQMethod.getOutliers();
            System.out.printf("Outliers = %s\n", oOutliers.getMethod());
        } else {
            System.out.print("Outliers: none\n");
        }
        System.out.println();

        // collect proteins we're interested in
        List<ms_protein> aProteins = new ArrayList<ms_protein>();
        for(int i = 1; i <= oPepsum.getNumberOfHits(); i++) {
            aProteins.add(oPepsum.getHit(i));

            int j = 0;
            ms_protein oProtein;
            while((oProtein = oPepsum.getNextFamilyProtein(i, ++j)) != null) {
                aProteins.add(oProtein);
            }
        }

        for(ms_protein oProtein : aProteins) {
            System.out.printf("%d::%s:\n", oProtein.getDB(), oProtein.getAccession());
            for(String sRationame : aRationames) {
                ms_protein_quant_ratio oRatio = oMs2Quant.getProteinRatio(oProtein.getAccession(), oProtein.getDB(), sRationame);
                if(oRatio.isMissing()) {
                    System.out.printf("%10s: ---\n", sRationame);
                } else {
                    System.out.printf("%10s = %10g, stderr = %10g, N = %d, normal-p = %6g, hypo-p = %6g\n",
                            sRationame, oRatio.getValue(), oRatio.getStandardError(),
                            oRatio.getSampleSize(), oRatio.getNormalityPvalue(),
                            oRatio.getHypothesisPvalue());
                }
            }
            System.out.println();
            StringBuilder sbPeptideRatioHeader = new StringBuilder();
            sbPeptideRatioHeader.append(String.format("%10s", "Peptide"));
            for(String sRationame : aRationames) {
                sbPeptideRatioHeader.append(" ");
                sbPeptideRatioHeader.append(String.format("%10s",sRationame));
            }
            System.out.println(sbPeptideRatioHeader);
            for(int i = 1; i <= oProtein.getNumPeptides(); i++) {
                if(oProtein.getPeptideDuplicate(i) == ms_protein.DUPE_DuplicateSameQuery) continue;
                int q = oProtein.getPeptideQuery(i);
                int p = oProtein.getPeptideP(i);

                ms_peptide oPeptide = oPepsum.getPeptide(q, p);
                if(oPeptide == null) continue;

                List<String> aValues = new ArrayList<String>();
                for(String sRationame : aRationames) {
                    // Note that the q,p arguments to ms_peptide_quant_key must be integers.
                    // Otherwise the wrong constructor is chosen. Here they are
                    // integers, as they are return values from Parser functions that
                    // return ints.
                    ms_peptide_quant_ratio oRatio = oMs2Quant.getPeptideRatio(new ms_peptide_quant_key(q,p), sRationame);

                    if(oRatio.isMissing()) {
                        aValues.add(String.format("%10s", "---"));
                        continue;
                    }

                    if(oRatio.isInfinite()) {
                        aValues.add(String.format("%10s", "---"));
                    } else {
                        aValues.add(String.format("%10g", oRatio.getValue()));
                    }
                }
                StringBuilder sbValues = new StringBuilder();
                for(String sValue : aValues) {
                    if(sbValues.length() > 0) sbValues.append(" ");
                    sbValues.append(sValue);
                }
                System.out.printf("%10s %s\n", String.format("q%d_p%d", q, p), sbValues);
            }
            System.out.println();
        }
        
        

    }

}

Copyright © 2022 Matrix Science Ltd.  All Rights Reserved. Generated on Thu Mar 31 2022 01:12:29