예제 #1
0
 public void WriteLine(MzTab.LinePrefix prefix, params string[] data)
 {
     WriteLine(prefix, string.Join(MzTab.FieldSeparator.ToString(), data));
 }
예제 #2
0
        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);
            }
        }
예제 #3
0
 public void WriteLine(MzTab.LinePrefix prefix, string line)
 {
     _writer.Write(MzTab.GetLinePrefixText(prefix));
     _writer.Write(MzTab.FieldSeparator);
     _writer.WriteLine(line);
 }