예제 #1
0
        internal static MZTabColumn CreateOptionalColumn(Section section, MZTabColumn column, Integer id, IndexedElement element)
        {
            if (! column.isOptional()){
                throw new ArgumentException(column + " is not optional column!");
            }

            MZTabColumn optionColumn = null;

            if (section.Equals(Section.Protein_Header)){
                optionColumn = new ProteinColumn(column.Name, column.Type, column.isOptional(), column.Order, id);
            }
            else if (section.Equals(Section.Peptide_Header)){
                optionColumn = new PeptideColumn(column.Name, column.Type, column.isOptional(), column.Order, id);
            }
            else if (section.Equals(Section.PSM_Header)){
                optionColumn = new PSMColumn(column.Name, column.Type, column.isOptional(), column.Order, id);
            }
            else if (section.Equals(Section.Small_Molecule_Header)){
                optionColumn = new SmallMoleculeColumn(column.Name, column.Type, column.isOptional(), column.Order, id);
            }

            if (optionColumn != null && element != null){
                optionColumn.Element = element;
            }

            return optionColumn;
        }
        /**
         * Translate the data line to a {@link MZTabRecord}.
         *
         * NOTICE: Normally, we suggest user do convert operation after validate successfully.
         *
         * @see #parse(int, string, uk.ac.ebi.pride.jmztab.utils.errors.MZTabErrorList)
         */
        protected MZTabRecord getRecord(Section section, string line)
        {
            MZTabRecord record = null;

            if (section.Equals(Section.Protein)){
                record = new Protein(factory);
            }
            else if (section.Equals(Section.Peptide)){
                record = new Peptide(factory, metadata);
            }
            else if (section.Equals(Section.PSM)){
                record = new PSM(factory, metadata);
            }
            else if (section.Equals(Section.Small_Molecule)){
                record = new SmallMolecule(factory, metadata);
            }

            int offset = loadStableData(record, line);
            if (offset == _items.Length - 1){
                return record;
            }

            loadOptionalData(record, offset);

            return record;
        }
        /**
         * Based on {@link #section} to generate stable columns, and store them into {@link #stableColumnMapping} and
         * {@link #columnMapping} which maintain all columns in the factory.
         *
         * @param section SHOULD be {@link Section#Protein_Header}, {@link Section#Peptide_Header} {@link Section#PSM_Header}
         *                or {@link Section#Small_Molecule_Header}.
         */
        public static MZTabColumnFactory GetInstance(Section section)
        {
            section = Section.toHeaderSection(section);

            if (section == null){
                throw new ArgumentException(
                    "Section should use Protein_Header, Peptide_Header, PSM_Header or Small_Molecule_Header.");
            }

            MZTabColumnFactory factory = new MZTabColumnFactory();

            if (section.Equals(Section.Protein_Header)){
                AddStableColumn(factory, ProteinColumn.ACCESSION);
                AddStableColumn(factory, ProteinColumn.DESCRIPTION);
                AddStableColumn(factory, ProteinColumn.TAXID);
                AddStableColumn(factory, ProteinColumn.SPECIES);
                AddStableColumn(factory, ProteinColumn.DATABASE);
                AddStableColumn(factory, ProteinColumn.DATABASE_VERSION);
                AddStableColumn(factory, ProteinColumn.SEARCH_ENGINE);
                AddStableColumn(factory, ProteinColumn.AMBIGUITY_MEMBERS);
                AddStableColumn(factory, ProteinColumn.MODIFICATIONS);
                AddStableColumn(factory, ProteinColumn.PROTEIN_COVERAGE);
            }
            else if (section.Equals(Section.Peptide_Header)){
                AddStableColumn(factory, PeptideColumn.SEQUENCE);
                AddStableColumn(factory, PeptideColumn.ACCESSION);
                AddStableColumn(factory, PeptideColumn.UNIQUE);
                AddStableColumn(factory, PeptideColumn.DATABASE);
                AddStableColumn(factory, PeptideColumn.DATABASE_VERSION);
                AddStableColumn(factory, PeptideColumn.SEARCH_ENGINE);
                AddStableColumn(factory, PeptideColumn.MODIFICATIONS);
                AddStableColumn(factory, PeptideColumn.RETENTION_TIME);
                AddStableColumn(factory, PeptideColumn.RETENTION_TIME_WINDOW);
                AddStableColumn(factory, PeptideColumn.CHARGE);
                AddStableColumn(factory, PeptideColumn.MASS_TO_CHARGE);
                AddStableColumn(factory, PeptideColumn.SPECTRA_REF);
            }
            else if (section.Equals(Section.PSM_Header)){
                AddStableColumn(factory, PSMColumn.SEQUENCE);
                AddStableColumn(factory, PSMColumn.PSM_ID);
                AddStableColumn(factory, PSMColumn.ACCESSION);
                AddStableColumn(factory, PSMColumn.UNIQUE);
                AddStableColumn(factory, PSMColumn.DATABASE);
                AddStableColumn(factory, PSMColumn.DATABASE_VERSION);
                AddStableColumn(factory, PSMColumn.SEARCH_ENGINE);
                AddStableColumn(factory, PSMColumn.MODIFICATIONS);
                AddStableColumn(factory, PSMColumn.RETENTION_TIME);
                AddStableColumn(factory, PSMColumn.CHARGE);
                AddStableColumn(factory, PSMColumn.EXP_MASS_TO_CHARGE);
                AddStableColumn(factory, PSMColumn.CALC_MASS_TO_CHARGE);
                AddStableColumn(factory, PSMColumn.SPECTRA_REF);
                AddStableColumn(factory, PSMColumn.PRE);
                AddStableColumn(factory, PSMColumn.POST);
                AddStableColumn(factory, PSMColumn.START);
                AddStableColumn(factory, PSMColumn.END);
            }
            else if (section.Equals(Section.Small_Molecule_Header)){
                AddStableColumn(factory, SmallMoleculeColumn.IDENTIFIER);
                AddStableColumn(factory, SmallMoleculeColumn.CHEMICAL_FORMULA);
                AddStableColumn(factory, SmallMoleculeColumn.SMILES);
                AddStableColumn(factory, SmallMoleculeColumn.INCHI_KEY);
                AddStableColumn(factory, SmallMoleculeColumn.DESCRIPTION);
                AddStableColumn(factory, SmallMoleculeColumn.EXP_MASS_TO_CHARGE);
                AddStableColumn(factory, SmallMoleculeColumn.CALC_MASS_TO_CHARGE);
                AddStableColumn(factory, SmallMoleculeColumn.CHARGE);
                AddStableColumn(factory, SmallMoleculeColumn.RETENTION_TIME);
                AddStableColumn(factory, SmallMoleculeColumn.TAXID);
                AddStableColumn(factory, SmallMoleculeColumn.SPECIES);
                AddStableColumn(factory, SmallMoleculeColumn.DATABASE);
                AddStableColumn(factory, SmallMoleculeColumn.DATABASE_VERSION);
                AddStableColumn(factory, SmallMoleculeColumn.SPECTRA_REF);
                AddStableColumn(factory, SmallMoleculeColumn.SEARCH_ENGINE);
                AddStableColumn(factory, SmallMoleculeColumn.BEST_SEARCH_ENGINE_SCORE);
                AddStableColumn(factory, SmallMoleculeColumn.MODIFICATIONS);
            }
            else{
                throw new NotImplementedException("Section should be Protein, Peptide or " +
                                                  "Small_Molecule. Others can not setting. ");
            }

            foreach (var column in factory.StableColumnMapping){
                factory.ColumnMapping.Add(column.Key, column.Value);
            }
            factory.section = section;

            return factory;
        }