diff --git a/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs b/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs
new file mode 100644
index 0000000000000000000000000000000000000000..3cfb0ecbd5565c85ccf64db10d5e5e75a986badc
--- /dev/null
+++ b/ProForma-Exporters/20210819-ProForma-formatter-MSPT.cs
@@ -0,0 +1,115 @@
+using System;
+using System.IO;
+using System.Data;
+using System.Text;
+
+namespace ProFormaFormatter {
+ class Program {
+ static void Main(string[] args)
+ {
+ if (args.Length==0) {
+ Console.WriteLine("Supply the name of the _IcTarget.tsv file for processing.");
+ Environment.Exit(1);
+ }
+ DataTable datatable = new DataTable();
+ string FileString = args[0];
+ StreamReader streamreader = new StreamReader(FileString);
+ //skip the header
+ // for (int i=0; i<27; i++) {
+ // string Header=streamreader.ReadLine();
+ // Console.WriteLine(Header);
+ // }
+ char[] delimiter = new char[] { '\t' };
+ char[] PathDelimiters = new char[] { '\\','/' };
+ string FNameTrailer = "_IcTarget.tsv";
+ string[] columnheaders = streamreader.ReadLine().Split(delimiter);
+ foreach (string columnheader in columnheaders)
+ {
+ datatable.Columns.Add(columnheader);
+ }
+
+ while (streamreader.Peek() > 0)
+ {
+ DataRow datarow = datatable.NewRow();
+ datarow.ItemArray = streamreader.ReadLine().Split(delimiter);
+ datatable.Rows.Add(datarow);
+ }
+
+ foreach (DataRow row in datatable.Rows) {
+ // string FName = Convert.ToString(row["Data file name"]);
+ string OutScan = Convert.ToString(row["Scan"]);
+ string OutProForma = Convert.ToString(row["Sequence"]);
+ string OutSequence = OutProForma;
+ string OutCharge = Convert.ToString(row["Charge"]);
+ string OutAccession = Convert.ToString(row["ProteinName"]);
+ int OutMassAdded = 0;
+ string PTMs = Convert.ToString(row["Modifications"]);
+ float Probability = Convert.ToSingle(row["Probability"]);
+ float Evalue = Convert.ToSingle(row["EValue"]);
+ double OutEVal = -Math.Log(Convert.ToDouble(row["EValue"]));
+ if ((Probability > 0.5) && (Evalue < 0.01)) {
+ // string[] FNameChunks = FName.Split(PathDelimiters);
+ string OutFile = FileString;
+ if (OutFile.EndsWith(FNameTrailer)) {
+ OutFile = OutFile.Substring(0,OutFile.Length-FNameTrailer.Length);
+ }
+ // Parse out just the second bit of the UniProt accession
+ string[] AccessionArray = OutAccession.Split('|');
+ OutAccession = AccessionArray[1];
+ // Create a decorated sequence by incorporating PTM string data.
+ string[] PTMArray = PTMs.Split(',');
+ int CurrentOutProFormaPos = 0;
+ StringBuilder DecoratedOutProForma = new StringBuilder();
+ foreach (string ThisPTM in PTMArray) {
+ if (ThisPTM.Length > 0) {
+ string[] PTMFields = ThisPTM.Split(' ');
+ int Pos = Convert.ToInt32(PTMFields[1]);
+ string PTMID = PTMFields[0];
+ if (PTMID == "Oxidation")
+ OutMassAdded += 16;
+ else if (PTMID == "Methyl")
+ OutMassAdded += 14;
+ else if (PTMID == "Acetyl")
+ OutMassAdded += 42;
+ else if (PTMID == "Carbamidomethyl")
+ OutMassAdded += 57;
+ else if (PTMID == "Phospho")
+ OutMassAdded += 80;
+ if (Pos == 0) {
+ DecoratedOutProForma.Append("[");
+ DecoratedOutProForma.Append(Convert.ToString(PTMFields[0]));
+ DecoratedOutProForma.Append("]-");
+ DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos, Pos-CurrentOutProFormaPos));
+ }
+ else {
+ DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos, Pos-CurrentOutProFormaPos));
+ DecoratedOutProForma.Append("[");
+ DecoratedOutProForma.Append(Convert.ToString(PTMFields[0]));
+ DecoratedOutProForma.Append("]");
+ }
+ CurrentOutProFormaPos = Pos;
+ }
+ }
+ DecoratedOutProForma.Append(OutProForma.Substring(CurrentOutProFormaPos));
+ OutProForma = Convert.ToString(DecoratedOutProForma);
+
+ Console.Write(OutFile);
+ Console.Write("\t");
+ Console.Write(OutScan);
+ Console.Write("\t");
+ Console.Write(OutCharge);
+ Console.Write("\t");
+ Console.Write(OutAccession);
+ Console.Write("\t");
+ Console.Write(OutSequence);
+ Console.Write("\t");
+ Console.Write(OutMassAdded);
+ Console.Write("\t");
+ Console.Write(OutProForma);
+ Console.Write("\t");
+ Console.WriteLine(OutEVal);
+ }
+ }
+ }
+ }
+}