public MzTabWriter(string filePath) { FilePath = filePath; _writer = new StreamWriter(FilePath, false, MzTab.DefaultEncoding); IsOpen = true; _currentState = MzTab.States.None; }
public void WriteMetaData(string key, object value) { if (_currentState > MzTab.States.MetaData) { throw new ArgumentException("Unable to write Metadata, incorrect location. Only one Metadata section per file"); } _currentState |= MzTab.States.MetaData; WriteLine(MzTab.LinePrefix.MetaData, key, value); }
private void ReadDataTable(MzTab.States dataState, object[] data, DataTable table) { if (table == null) { throw new ArgumentException("No header information loaded for " + dataState + ", unable to parse data"); } // Set the we have entered the current state _currentState |= dataState; // Add the row to the Protein data table table.Rows.Add(data.SubArray(1, table.Columns.Count)); }
private void ReadMetaData(string[] data, int lineNumber) { // Set that we have enter in Metadata section _currentState |= MzTab.States.MetaData; // Grab the key-value pair, which should correspond to index 1 and 2, respectively string key = data[1]; string value = data[2]; if (string.IsNullOrWhiteSpace(key)) { throw new ArgumentException("No key was specified in the metadata section at line #" + lineNumber); } MetaData.SetValue(key, value); }
public void WriteMetaData(MzTabMetaData metaData) { if (_currentState > MzTab.States.MetaData) { throw new ArgumentException("Unable to write Metadata, incorrect location. Only one Metadata section per file"); } _currentState |= MzTab.States.MetaData; foreach (KeyValuePair <string, string> kvp in metaData.GetKeyValuePairs()) { _writer.Write(MzTab.MetaDataLinePrefix); _writer.Write(MzTab.FieldSeparator); _writer.Write(kvp.Key); _writer.Write(MzTab.FieldSeparator); _writer.WriteLine(kvp.Value); } // Save meta data _metaData = metaData; }
private void ReadTableDefinition(MzTab.States headerState, string[] data, DataTable table) { if ((_currentState & MzTab.States.MetaData) != MzTab.States.MetaData) { throw new ArgumentException("The MetaData section MUST occur before the " + table.TableName + " Section. Invalid input file"); } if ((_currentState & headerState) == headerState) { throw new ArgumentException("The " + table.TableName + " Table Header has already been parsed once, only one " + table.TableName + " section is allowed per mzTab file."); } // Set the we have entered the current state _currentState |= headerState; int i = 1; while (i < data.Length && !string.IsNullOrWhiteSpace(data[i])) { table.Columns.Add(data[i].Trim()); i++; } }
private void WriteData <T>(MzTabSection section, IEnumerable <T> data, bool includeCommentLine = false) where T : MzTabEntity { if ((_currentState & MzTab.States.MetaData) != MzTab.States.MetaData) { throw new ArgumentException("Unable to write the " + section + " section, incorrect location. The Meta Data section must come first."); } List <T> objects = data.ToList(); if (objects.Count == 0) { return; } MzTab.LinePrefix headerPrefix = MzTab.LinePrefix.Comment; MzTab.LinePrefix prefix = MzTab.LinePrefix.Comment; switch (section) { case MzTabSection.SmallMolecule: headerPrefix = MzTab.LinePrefix.SmallMoleculeTable; prefix = MzTab.LinePrefix.SmallMoleculeData; _currentState |= MzTab.States.SmallMoleculeData; _currentState |= MzTab.States.SmallMoleculeHeader; break; case MzTabSection.Peptide: headerPrefix = MzTab.LinePrefix.PeptideTable; prefix = MzTab.LinePrefix.PeptideData; _currentState |= MzTab.States.PeptideData; _currentState |= MzTab.States.PeptideHeader; break; case MzTabSection.PSM: headerPrefix = MzTab.LinePrefix.PsmTable; prefix = MzTab.LinePrefix.PsmData; _currentState |= MzTab.States.PsmData; _currentState |= MzTab.States.PsmHeader; break; case MzTabSection.Protein: headerPrefix = MzTab.LinePrefix.ProteinTable; prefix = MzTab.LinePrefix.ProteinData; _currentState |= MzTab.States.ProteinData; _currentState |= MzTab.States.ProteinHeader; break; } // Write Header string[] header = MzTabEntity.GetHeader(objects).ToArray(); WriteLine(headerPrefix, header); if (includeCommentLine) { WriteComment(string.Join("\t", header)); } // Write table foreach (string[] values in objects.Select(datum => datum.GetStringValues(header).ToArray())) { WriteLine(prefix, values); } }