Mercurial > repos > jfb > kinamine7_7
diff KinaMine-Galaxy-7-7/src/kinamine/Reporter.java @ 0:67635b462045 draft
Uploaded
author | jfb |
---|---|
date | Tue, 20 Feb 2018 14:31:15 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/KinaMine-Galaxy-7-7/src/kinamine/Reporter.java Tue Feb 20 14:31:15 2018 -0500 @@ -0,0 +1,236 @@ +/** + ***************************************************************************** + * <p> + * Copyright (c) Regents of the University of Minnesota. All Rights Reserved. + * <p> + * Author: Kevin Murray University of Minnesota - (murra668@umn.edu) + * <p> + ***************************************************************************** + */ +package kinamine; + +import java.io.*; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map.Entry; +import java.util.Set; +import javafx.util.Pair; + +/** + * Reporter class to write reports. Currently writes out in .csv format. + * + * @version 1.0 + * @author murra668 + * new author: blank121@umn.edu as of August 2017 + */ +public class Reporter { + + /** + * Write reports for run. + * + * @param run + * @param outPath + * @param outGroup + */ + static void writeReports(Run run, String outPath, String outGroup) { + + /** Write substrates report. */ + String outputFileSub = outPath + outGroup + "_Substrates.csv"; + Reporter.substrates(run, outputFileSub); + + /** Write substrate background frequency report. */ + String outputFileFreq = outPath + outGroup + "_SubBackFreq.csv"; + Reporter.frequencies(run, outputFileFreq); + + } + + /** + * Writes substrates report from the ids and motifs of each peptide. + * + * @param run + * @param outputFileName + */ + private static void substrates(Run run, String outputFileName) { + + /** Format header */ +// String header = "Substrates," + "Species," + "Reference," + "-7," + "-6," +// + "-5," + "-4," + "-3," + "-2," + "-1," + "0," + "1," +// + "2," + "3," + "4," + "5," + "6," + "7," + "Phosphite" +// + "\n"; + String header = "Substrates," + "Species," + "Reference," + "-7," + "-6," + + "-5," + "-4," + "-3," + "-2," + "-1," + "0," + "1," + + "2," + "3," + "4," + "5," + "6," + "7," + +" ," +" ,"+ " ,"+ "Phosphite" + + "\n"; + + /** Initialize details */ + String detail = null; + + try (FileWriter writer = new FileWriter(outputFileName)) { + + /* Write the column headers */ + writer.append(header); + + Collection<Motif> motifs = run.motifs.values(); + + /** Loop through each motif */ + for (Motif motif : motifs) { + + /** Format ID and blanks */ + detail = "," + "," + motif.ref + ","; + + String seq = motif.seq; + int index = motif.index; +//changing the numbers for index only changed where in the excel doc these motifs +//showed up +//I should fuck with this and try to reallign it +//I should do that now + if (index < 8) { + for (int i = index; i < 8; i++) { + detail += ","; + } + for (int j = 0; j < seq.length(); j++) { + detail += seq.charAt(j) + ","; + } + if (seq.length() - index < 7) { + for (int i = seq.length() - index; i < 7; i++) { + detail += ","; + } + } + } else if (seq.length() < 15) { + for (int j = 0; j < seq.length(); j++) { + detail += seq.charAt(j) + ","; + } + for (int i = seq.length(); i < 15; i++) { + detail += ","; + } + + } else { + for (int j = 0; j < seq.length(); j++) { + detail += seq.charAt(j) + ","; + } + } + +// +// if (index < 5) { +// for (int i = index; i < 5; i++) { +// detail += ","; +// } +// for (int j = 0; j < seq.length(); j++) { +// detail += seq.charAt(j) + ","; +// } +// if (seq.length() - index < 4) { +// for (int i = seq.length() - index; i < 4; i++) { +// detail += ","; +// } +// } +// } else if (seq.length() < 9) { +// for (int j = 0; j < seq.length(); j++) { +// detail += seq.charAt(j) + ","; +// } +// for (int i = seq.length(); i < 9; i++) { +// detail += ","; +// } +// +// } else { +// for (int j = 0; j < seq.length(); j++) { +// detail += seq.charAt(j) + ","; +// } +// } +//////////////////////////////////////////////////////////////////////////////// + /** Format trailing blanks */ + detail += "," + "," + "," + seq + ","; + + for (String id : motif.regenSeqs){ + detail += id + ","; + } + detail += "\n"; + + /** Append each line of the report. */ + writer.append(detail); + } + + writer.flush(); + writer.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** + * Write substrates background frequency report from each protein in the + * database. + * + * @param run + * @param outputFileName + */ + private static void frequencies(Run run, String outputFileName) { + + /** Initialize the header */ + StringBuffer header = new StringBuffer(); + header.append("Amino Acids,"); + + /** Write each protein accession. */ + Object[] prots = run.database.keySet().toArray(); + for (Object ref : prots) { + header.append(ref).append(","); + } + header.append("\n"); + + try (FileWriter writer = new FileWriter(outputFileName)) { + + /* Write the column headers. */ + writer.append(header); + + Collection<Protein> proteins = run.database.values(); + + /** Write frequency of each amino acid. */ + for (char acid : AminoAcid.ACIDS) { + StringBuffer detail = new StringBuffer(); + detail.append(acid).append(","); + for (Protein protein : proteins) { + detail.append(protein.comp.get(acid)).append(","); + } + detail.append("\n"); + writer.append(detail); + } + + writer.append("Properties\n"); + + /** Write the property frequency of each amino acid. */ + for (String prop : AminoAcid.PROPS) { + StringBuffer props = new StringBuffer(); + props.append(prop).append(","); + for (Protein protein : proteins) { + props.append(protein.props.get(prop)).append(","); + } + props.append("\n"); + writer.append(props); + } + + writer.append("\n"); + + StringBuffer tyr = new StringBuffer("Number of Y,"); + StringBuffer phosphTyr = new StringBuffer("Number of pY,"); + StringBuffer aa = new StringBuffer("Total AAs,"); + + /** Write the number of tyrosine, phospho-tyrosine, and length. */ + for (Protein protein : proteins) { + tyr.append(protein.numTyr).append(","); + phosphTyr.append(protein.phosphoTyr).append(","); + aa.append(protein.seq.length()).append(","); + } + + writer.append(tyr + "\n"); + writer.append(phosphTyr + "\n"); + writer.append(aa + "\n"); + + writer.flush(); + writer.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + } +}