from typing import Any, Dict
from ms_deisotope.utils import dict_proxy
from .cv import Term, TermSet


class SoftwareName(Term):
    pass


@dict_proxy('options')
class Software(object):

    name: str
    id: str
    version: str
    options: Dict[str, Any]

    @classmethod
    def is_name(cls, name):
        return name in software_names_by_name

    def __init__(self, name=None, id=None, version=None, **options):
        if name is None:
            name, options = self._resolve_name_from_kwargs(options)
        if name is None and id is not None:
            name = id
        self.name = name
        self.id = id or name
        self.version = version
        self.options = options

    def _resolve_name_from_kwargs(self, options: Dict[str, Any]):
        names = dict()
        not_names = dict()
        for key, value in options.items():
            if self.is_name(key):
                names[key] = value
            else:
                not_names[key] = value
        options = not_names
        if len(names) == 1:
            name = list(names.keys())[0]
        elif len(names) == 0:
            name = None
        else:
            raise ValueError("Multiple possible names found")
        return name, options

    def __str__(self):
        return self.name

    def __repr__(self):
        template = '{self.__class__.__name__}({self.name}, {self.id}, {self.version})'
        return template.format(self=self)

    def __eq__(self, other):
        try:
            return self.name == other.name
        except AttributeError:
            return str(self) == str(other)


software_names = []

# [[[cog
# import cog
# from ms_deisotope.data_source.metadata.cv import render_list
# render_list('software', list_name='software_names', term_cls_name="SoftwareName", writer=cog.out)
# ]]]
# CV Version: 4.1.95
software_names = TermSet([
    SoftwareName('Agilent software', 'MS:1000689',
                 ('Agilent software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('SCIEX software', 'MS:1000690',
                 ('SCIEX or Applied Biosystems software for data acquisition '
                  'and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('Applied Biosystems software', 'MS:1000691',
                 ('Applied Biosystems|MDS SCIEX software for data acquisition '
                  'and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('Bruker software', 'MS:1000692',
                 ('Bruker software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('Thermo Finnigan software', 'MS:1000693',
                 ('Thermo Finnigan software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('Waters software', 'MS:1000694',
                 ('Waters software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('custom unreleased software tool', 'MS:1000799',
                 ('A software tool that has not yet been released. The value '
                  'should describe the software. Please do not use this term '
                  'for publicly available software - contact the PSI-MS working '
                  'group in order to have another CV term added.'),
                 'software',
                 ['software']),
    SoftwareName('SRM software', 'MS:1000871',
                 ('Software used to predict, select, or optimize transitions or '
                  'analyze the results of selected reaction monitoring runs.'),
                 'software',
                 ['software']),
    SoftwareName('peptide attribute calculation software', 'MS:1000873',
                 ('Software used to predict or calculate numerical attributes '
                  'of peptides.'),
                 'software',
                 ['software']),
    SoftwareName('quantitation software name', 'MS:1001139',
                 ('Quantitation software name.'),
                 'software',
                 ['software', 'quantification information']),
    SoftwareName('acquisition software', 'MS:1001455',
                 ('Acquisition software.'),
                 'software',
                 ['software']),
    SoftwareName('analysis software', 'MS:1001456',
                 ('Analysis software.'),
                 'software',
                 ['software']),
    SoftwareName('data processing software', 'MS:1001457',
                 ('Data processing software.'),
                 'software',
                 ['software']),
    SoftwareName('Shimadzu Corporation software', 'MS:1001557',
                 ('Shimadzu Corporation software.'),
                 'software',
                 ['software']),
    SoftwareName('LECO software', 'MS:1001798',
                 ('LECO software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('BSI software', 'MS:1001949',
                 ('Bioinformatics Solutions Inc. Software for data processing '
                  'and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('SCiLS software', 'MS:1002383',
                 ('SCiLS software for data acquisition and analysis.'),
                 'software',
                 ['software']),
    SoftwareName('library creation software', 'MS:1003207',
                 ('Library creation software'),
                 'software',
                 ['software', 'spectral library attribute']),
    SoftwareName('MassHunter Data Acquisition', 'MS:1000678',
                 ('Software for data acquisition of 6000 series instruments.'),
                 'software',
                 ['Agilent software', 'acquisition software', 'software']),
    SoftwareName('MassHunter Easy Access', 'MS:1000679',
                 ('Software for open access data acquisition.'),
                 'software',
                 ['Agilent software', 'acquisition software', 'software']),
    SoftwareName('MassHunter Qualitative Analysis', 'MS:1000680',
                 ('Software for data analysis of data from 6000 series '
                  'instruments.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MassHunter Quantitative Analysis', 'MS:1000681',
                 ('Software for quantitation of Triple Quadrupole and '
                  'Quadrupole Time-of-Flight data.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MassHunter Metabolite ID', 'MS:1000682',
                 ('Software for identification of metabolites.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MassHunter BioConfirm', 'MS:1000683',
                 ('Software for protein characterization.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Genespring MS', 'MS:1000684',
                 ('Software for quantitation and statistical analysis of TOF '
                  'and Q-TOF LC/MS data.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MassHunter Mass Profiler', 'MS:1000685',
                 ('Software for quantitation and statistical analysis of TOF '
                  'and Q-TOF LC/MS data.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('METLIN', 'MS:1000686',
                 ('Personal Metabolite Database for MassHunter Workstation. '
                  'Software for identification of human metabolites.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Spectrum Mill for MassHunter Workstation', 'MS:1000687',
                 ('Software for protein identification and characterization of '
                  'complex protein digest mixtures.'),
                 'software',
                 ['Agilent software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('6300 Series Ion Trap Data Analysis Software', 'MS:1000688',
                 ('Software for data analysis of 6300 series ion trap mass '
                  'spectrometers.'),
                 'software',
                 ['Agilent software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Analyst', 'MS:1000551',
                 ('SCIEX or Applied Biosystems|MDS SCIEX software for data '
                  'acquisition.'),
                 'software',
                 ['SCIEX software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('4000 Series Explorer Software', 'MS:1000659',
                 ('SCIEX or Applied Biosystems software for data acquisition '
                  'and analysis.'),
                 'software',
                 ['SCIEX software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('GPS Explorer', 'MS:1000661',
                 ('SCIEX or Applied Biosystems software for data acquisition '
                  'and analysis.'),
                 'software',
                 ['SCIEX software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('LightSight Software', 'MS:1000662',
                 ('SCIEX or Applied Biosystems|MDS SCIEX software metabolite '
                  'identification.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteinPilot Software', 'MS:1000663',
                 ('SCIEX or Applied Biosystems|MDS SCIEX software for protein '
                  'ID and quant.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TissueView Software', 'MS:1000664',
                 ('Applied Biosystems|MDS SCIEX software for tissue imaging.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MarkerView Software', 'MS:1000665',
                 ('Applied Biosystems|MDS SCIEX software for metabolomics and '
                  'biomarker profiling.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MRMPilot Software', 'MS:1000666',
                 ('Applied Biosystems|MDS SCIEX software for MRM assay '
                  'development.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('BioAnalyst', 'MS:1000667',
                 ('Applied Biosystems|MDS SCIEX software for bio-related data '
                  'exploration.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Pro ID', 'MS:1000668',
                 ('Applied Biosystems|MDS SCIEX software for protein '
                  'identification.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Pro ICAT', 'MS:1000669',
                 ('Applied Biosystems|MDS SCIEX software for protein ID and '
                  'quant by ICAT.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Pro Quant', 'MS:1000670',
                 ('Applied Biosystems|MDS SCIEX software for protein ID and '
                  'quant by iTRAQ.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Pro BLAST', 'MS:1000671',
                 ('Applied Biosystems|MDS SCIEX software for MS-BLAST '
                  'identification.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Cliquid', 'MS:1000672',
                 ('SCIEX Cliquid software for data analysis and quantitation.'),
                 'software',
                 ['SCIEX software', 'software']),
    SoftwareName('MIDAS Workflow Designer', 'MS:1000673',
                 ('Applied Biosystems|MDS SCIEX software for MRM assay '
                  'development.'),
                 'software',
                 ['SCIEX software', 'software']),
    SoftwareName('MultiQuant', 'MS:1000674',
                 ('Applied Biosystems|MDS SCIEX software for MRM-based '
                  'quantitation.'),
                 'software',
                 ['SCIEX software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('SCIEX TOF/TOF Series Explorer Software', 'MS:1001483',
                 ('SCIEX or Applied Biosystems software for TOF/TOF data '
                  'acquisition and analysis.'),
                 'software',
                 ['SCIEX software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Data Explorer', 'MS:1000536',
                 ('Applied Biosystems software for data acquisition and '
                  'analysis.'),
                 'software',
                 ['Applied Biosystems software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('4700 Explorer', 'MS:1000537',
                 ('Applied Biosystems software for data acquisition and '
                  'analysis.'),
                 'software',
                 ['Applied Biosystems software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Voyager Biospectrometry Workstation System', 'MS:1000539',
                 ('Applied Biosystems MALDI-TOF data acquisition and analysis '
                  'system.'),
                 'software',
                 ['Applied Biosystems software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('FlexAnalysis', 'MS:1000535',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('FlexControl', 'MS:1000540',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('apexControl', 'MS:1000706',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('BioTools', 'MS:1000707',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('CLINPROT', 'MS:1000708',
                 ('Bruker CLINPROT software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('CLINPROT micro', 'MS:1000709',
                 ('Bruker CLINPROT micro software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('CLINPROT robot', 'MS:1000710',
                 ('Bruker CLINPROT robot software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('ClinProTools', 'MS:1000711',
                 ('Bruker ClinProTools software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('Compass', 'MS:1000712',
                 ('Bruker Compass software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Compass for HCT/esquire', 'MS:1000713',
                 ('Bruker Compass for HCT/esquire software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Compass for micrOTOF', 'MS:1000714',
                 ('Bruker Compass for micrOTOF software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Compass OpenAccess', 'MS:1000715',
                 ('Bruker compass OpenAccess software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Compass Security Pack', 'MS:1000716',
                 ('Bruker compass Security Pack software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('CompassXport', 'MS:1000717',
                 ('Bruker stand-alone software for data conversion.'),
                 'software',
                 ['Bruker software', 'data processing software', 'software']),
    SoftwareName('CompassXtract', 'MS:1000718',
                 ('Bruker software library for data access.'),
                 'software',
                 ['Bruker software', 'data processing software', 'software']),
    SoftwareName('DataAnalysis', 'MS:1000719',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('dpControl', 'MS:1000720',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('esquireControl', 'MS:1000721',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('flexImaging', 'MS:1000722',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('GENOLINK', 'MS:1000723',
                 ('Bruker GENOLINK software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('GenoTools', 'MS:1000724',
                 ('Bruker GenoTools software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('HCTcontrol', 'MS:1000725',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('micrOTOFcontrol', 'MS:1000726',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('PolyTools', 'MS:1000727',
                 ('Bruker PolyTools software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('ProfileAnalysis', 'MS:1000728',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('PROTEINEER', 'MS:1000729',
                 ('Bruker PROTEINEER software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('PROTEINEER dp', 'MS:1000730',
                 ('Bruker PROTEINEER dp software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('PROTEINEER fc', 'MS:1000731',
                 ('Bruker PROTEINEER fc software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('PROTEINEER spII', 'MS:1000732',
                 ('Bruker PROTEINEER spII software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('PROTEINEER-LC', 'MS:1000733',
                 ('Bruker PROTEINEER-LC software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('ProteinScape', 'MS:1000734',
                 ('Bruker ProteinScape software.'),
                 'software',
                 ['Bruker software', 'analysis software', 'software']),
    SoftwareName('PureDisk', 'MS:1000735',
                 ('BrukerPureDisk software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('QuantAnalysis', 'MS:1000736',
                 ('Bruker software for data analysis.'),
                 'software',
                 ['Bruker software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('spControl', 'MS:1000737',
                 ('Bruker software for data acquisition.'),
                 'software',
                 ['Bruker software', 'acquisition software', 'software']),
    SoftwareName('TargetAnalysis', 'MS:1000738',
                 ('Bruker TargetAnalysis software.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('WARP-LC', 'MS:1000739',
                 ('Bruker WARP-LC software.'),
                 'software',
                 ['Bruker software', 'quantitation software name', 'software', 'quantification information']),
    SoftwareName('HyStar', 'MS:1000817',
                 ('Bruker software for hyphenated experiments.'),
                 'software',
                 ['Bruker software', 'software']),
    SoftwareName('ProteinExtractor', 'MS:1001487',
                 ('An algorithm for protein determination/assembly integrated '
                  "into Bruker's ProteinScape."),
                 'software',
                 ['Bruker software', 'analysis software', 'software']),
    SoftwareName('Xcalibur', 'MS:1000532',
                 ('Thermo Finnigan software for data acquisition and analysis.'),
                 'software',
                 ['Thermo Finnigan software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Bioworks', 'MS:1000533',
                 ('Thermo Finnigan software for data analysis of peptides and '
                  'proteins.'),
                 'software',
                 ['Thermo Finnigan software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Proteome Discoverer', 'MS:1000650',
                 ('Thermo Scientific software for data analysis of peptides and '
                  'proteins.'),
                 'software',
                 ['Thermo Finnigan software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('PinPoint', 'MS:1001912',
                 ('Thermo Scientific PinPoint SRM analysis software.'),
                 'software',
                 ['Thermo Finnigan software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MassLynx', 'MS:1000534',
                 ('Micromass software for data acquisition and analysis.'),
                 'software',
                 ['Waters software', 'acquisition software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteinLynx Global Server', 'MS:1000601',
                 ('Waters software for data analysis.'),
                 'software',
                 ['Waters software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Empower', 'MS:1001795',
                 ('Waters Empower software for liquid chromatography and mass '
                  'spectrometry acquisition.'),
                 'software',
                 ['Waters software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('UNIFY', 'MS:1001796',
                 ('Waters UNIFY software for liquid chromatography and mass '
                  'spectrometry acquisition.'),
                 'software',
                 ['Waters software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MaRiMba', 'MS:1000872',
                 ('Software used to predict transitions for selected reaction '
                  'monitoring experiments based on observed spectrum libraries '
                  'developed and distributed by the Institute for Systems '
                  'Biology.'),
                 'software',
                 ['SRM software', 'software']),
    SoftwareName('Skyline', 'MS:1000922',
                 ('Software used to predict, select, and optimize transitions '
                  'as well as analyze the results of selected reaction '
                  'monitoring runs developed and distributed by the MacCoss lab '
                  'at the University of Washington.'),
                 'software',
                 ['SRM software', 'quantitation software name', 'software', 'quantification information']),
    SoftwareName('TIQAM', 'MS:1000923',
                 ('Software used to predict, select, and optimize transitions '
                  'for selected reaction monitoring experiments developed and '
                  'distributed by the Institute for Systems Biology.'),
                 'software',
                 ['SRM software', 'software']),
    SoftwareName('ATAQS', 'MS:1000925',
                 ('Software suite used to predict, select, and optimize '
                  'transitions as well as analyze the results of selected '
                  'reaction monitoring runs developed and distributed by the '
                  'Institute for Systems Biology.'),
                 'software',
                 ['SRM software', 'software']),
    SoftwareName('MRMaid', 'MS:1002220',
                 ('A web-based SRM assay design tool whose transitions are '
                  'generated by mining the millions of identified peptide '
                  "spectra held in the EBI's PRIDE database."),
                 'software',
                 ['SRM software', 'software']),
    SoftwareName('Anubis', 'MS:1002410',
                 ('Anubis software for selected reaction monitoring data." '
                  '[PSI:PI'),
                 'software',
                 ['SRM software', 'quantitation software name', 'software', 'quantification information']),
    SoftwareName('SSRCalc', 'MS:1000874',
                 ('Sequence Specific Retention Calculator estimates the '
                  'retention time of peptides based on their sequence.'),
                 'software',
                 ['peptide attribute calculation software', 'software']),
    SoftwareName('Mascot Distiller', 'MS:1001488',
                 ('Mascot Distiller.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('MaxQuant', 'MS:1001583',
                 ('MaxQuant is a quantitative proteomics software package '
                  'designed for analyzing large mass spectrometric data sets. '
                  'It is specifically aimed at high resolution MS data.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('Progenesis LC-MS', 'MS:1001830',
                 ('Software from Nonlinear Dynamics for LC-MS label-free '
                  'workflow.'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('SILACAnalyzer', 'MS:1001831',
                 ('Software for SILAC workflow.'),
                 'software',
                 ['quantitation software name', 'TOPP software', 'software', 'quantification information', 'analysis software', 'data processing software']),
    SoftwareName('PEAKS Studio', 'MS:1001946',
                 ('PEAKS Studio software for data analysis.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'data processing software', 'software', 'quantification information']),
    SoftwareName('PEAKS Online', 'MS:1001947',
                 ('PEAKS Online software for high throughput data analysis.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'data processing software', 'software', 'quantification information']),
    SoftwareName('PEAKS Node', 'MS:1001948',
                 ('PEAKS Node software for high throughput data analysis.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'data processing software', 'software', 'quantification information']),
    SoftwareName('Microsoft Excel', 'MS:1002059',
                 ('Microsoft Excel (can be used for spectral counting).'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('FindPairs', 'MS:1002063',
                 ('Software e.g. for SILAC and 14N/15N workflow, part of the '
                  'PeakQuant suite.'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('x-Tracker', 'MS:1002123',
                 ('X-Tracker generic tool for quantitative proteomics.'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('ProteoSuite', 'MS:1002124',
                 ('ProteoSuite software for the analysis of quantitative '
                  'proteomics data." [DOI:10.1089/omi.2012.0022, PMID:22804616'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('ITRAQAnalyzer', 'MS:1002129',
                 ('Software for iTRAQ workflow. Extracts and normalizes iTRAQ '
                  'information from an MS experiment.'),
                 'software',
                 ['quantitation software name', 'TOPP software', 'software', 'quantification information', 'analysis software', 'data processing software']),
    SoftwareName('IsobariQ', 'MS:1002210',
                 ('A quantitative software package designed for analysis of '
                  'IPTL, TMT and iTRAQ data." [PMID:21067241, '
                  'DOI:10.1021/pr1009977'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('Skyline mzQuantML converter', 'MS:1002546',
                 ('A software package to convert Skyline report to mzQuantML." '
                  '[PSI:PI'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('PatternLab', 'MS:1003108',
                 ('PatternLab for Proteomics is an integrated computational '
                  'environment for analyzing shotgun proteomic data.'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('QUIN-XL', 'MS:1003111',
                 ('Quantification of cross-linked peptides in complex protein '
                  'mixtures'),
                 'software',
                 ['quantitation software name', 'software', 'quantification information']),
    SoftwareName('DIA-NN', 'MS:1003253',
                 ('A universal software for data-independent acquisition (DIA) '
                  'proteomics data processing" [PMID:31768060'),
                 'software',
                 ['quantitation software name', 'analysis software', 'software', 'quantification information']),
    SoftwareName('MALDI Solutions', 'MS:1001558',
                 ('Shimadzu Biotech software for data acquisition, processing, '
                  'and analysis.'),
                 'software',
                 ['acquisition software', 'analysis software', 'data processing software', 'Shimadzu Corporation software', 'software']),
    SoftwareName('ChromaTOF software', 'MS:1001799',
                 ('Software for acquisition, processing and analysis of data '
                  'for LECO instruments.'),
                 'software',
                 ['acquisition software', 'analysis software', 'data processing software', 'LECO software', 'software']),
    SoftwareName('ChromaTOF HRT software', 'MS:1001877',
                 ('Software for acquisition, processing and analysis of data '
                  'for LECO instruments.'),
                 'software',
                 ['acquisition software', 'analysis software', 'data processing software', 'LECO software', 'software']),
    SoftwareName('MALDI Solutions LC-MALDI', 'MS:1002381',
                 ('Software for automated LC-MALDI analysis and reporting.'),
                 'software',
                 ['acquisition software', 'analysis software', 'data processing software', 'Shimadzu Corporation software', 'software']),
    SoftwareName('Proteios', 'MS:1000600',
                 ('Database application and analysis platform for proteomics." '
                  '[PSI:MS'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('ProteoWizard software', 'MS:1000615',
                 ('ProteoWizard software for data processing and analysis. '
                  'Primarily developed by the labs of P. Malick and D. Tabb.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP software', 'MS:1000752',
                 ('TOPP (The OpenMS proteomics pipeline) software.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('Mascot', 'MS:1001207',
                 ('The name of the Mascot search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('SEQUEST', 'MS:1001208',
                 ('The name of the SEQUEST search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Phenyx', 'MS:1001209',
                 ('The name of the Phenyx search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('greylag', 'MS:1001461',
                 ('Greylag identification software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('OMSSA', 'MS:1001475',
                 ('Open Mass Spectrometry Search Algorithm was used to analyze '
                  'the spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('X\\!Tandem', 'MS:1001476',
                 ('X!Tandem was used to analyze the spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('SpectraST', 'MS:1001477',
                 ('Open-source software for mass spectral library creation and '
                  'searching, developed at the Institute for Systems Biology '
                  'and the Hong Kong University of Science and Technology. Part '
                  'of the Trans-Proteomic Pipeline.'),
                 'software',
                 ['analysis software', 'library creation software', 'software', 'spectral library attribute']),
    SoftwareName('Mascot Parser', 'MS:1001478',
                 ('Mascot Parser was used to analyze the spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Mascot Integra', 'MS:1001489',
                 ('Mascot Integra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Percolator', 'MS:1001490',
                 ('Percolator.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Scaffold', 'MS:1001561',
                 ('Scaffold analysis software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('XCMS', 'MS:1001582',
                 ('Bioconductor package XCMS for preprocessing high-throughput, '
                  'untargeted analyte profiling data.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('MyriMatch', 'MS:1001585',
                 ('Tabb Lab software for directly comparing peptides in a '
                  'database to tandem mass spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('DirecTag', 'MS:1001586',
                 ('Tabb Lab software for generating sequence tags from tandem '
                  'mass spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('TagRecon', 'MS:1001587',
                 ('Tabb Lab software for reconciling sequence tags to a protein '
                  'database.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Pepitome', 'MS:1001588',
                 ('Tabb Lab software for spectral library searches on tandem '
                  'mass spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('SQID', 'MS:1001886',
                 ('Software for data analysis of peptides and proteins.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('DeBunker', 'MS:1001973',
                 ('DeBunker software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MSQuant', 'MS:1001977',
                 ('MSQuant software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Ascore software', 'MS:1001984',
                 ('Ascore software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('ProteinProspector', 'MS:1002043',
                 ('ProteinProspector software for data acquisition and '
                  'analysis.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MS-GF', 'MS:1002047',
                 ('MS-GF software used to re-score the peptide-spectrum '
                  'matches." [DOI:10.1074/mcp.M110.003731'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MS-GF+', 'MS:1002048',
                 ('MS-GF+ software used to analyze the spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('PAnalyzer', 'MS:1002076',
                 ('PAnalyzer software for getting protein evidence categories.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('mzidLib', 'MS:1002237',
                 ('A library of Java routines for manipulating mzIdentML files.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Comet', 'MS:1002251',
                 ('Comet open-source sequence search engine developed at the '
                  'University of Washington.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Byonic', 'MS:1002261',
                 ('Byonic search engine from Protein Metrics.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Trans-Proteomic Pipeline', 'MS:1002285',
                 ('A suite of open source tools for the processing of MS2 '
                  'proteomics data developed by the Seattle Proteome Center at '
                  'the Institute for Systems Biology.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Trans-Proteomic Pipeline software', 'MS:1002286',
                 ('A software program that is a component of the Trans- '
                  'Proteomic Pipeline.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Amanda', 'MS:1002336',
                 ('Amanda scoring system for PSM identification.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Andromeda', 'MS:1002337',
                 ('Andromeda is a peptide search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MZmine', 'MS:1002342',
                 ('A framework for differential analysis of mass spectrometry '
                  'data." [PMID:16403790'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('Maltcms', 'MS:1002344',
                 ('Modular Application Toolkit for Chromatography Mass- '
                  'Spectrometry is an application framework mainly for '
                  'developers." [PSI:PI'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('SCiLS Lab', 'MS:1002384',
                 ('SCiLS Lab software.'),
                 'software',
                 ['SCiLS software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('PIA', 'MS:1002387',
                 ('PIA - Protein Inference Algorithms, a toolbox for protein '
                  'inference and identification analysis." [PSI:PI'),
                 'software',
                 ['postprocessing software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Maui', 'MS:1002452',
                 ('The Maltcms Graphical User Interface." [PSI:PI'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('PeptideShaker', 'MS:1002458',
                 ('PeptideShaker is a software for the interpretation of '
                  'proteomics identification results." [PSI:PI'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('xiFDR', 'MS:1002543',
                 ('Target/Decoy based FDR estimation for cross-linking peptide- '
                  'identifications.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('xi', 'MS:1002544',
                 ('Search engine for cross-linked peptides.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Tide', 'MS:1002575',
                 ('Tide open-source sequence search program developed at the '
                  'University of Washington.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('ProLuCID', 'MS:1002596',
                 ('The SEQUEST-like sequence search engine ProLuCID, developed '
                  'in the Yates Lab at the Scripps Research Institute.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('DTASelect', 'MS:1002598',
                 ('Analysis software designed to reassemble the SEQUEST peptide '
                  'identifications and to highlight the most significant '
                  'matches." [PMID:12643522'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MSDK', 'MS:1002645',
                 ('Mass Spectrometry Development Kit (MSDK) is a Java library '
                  'of algorithms for processing of mass spectrometry data." '
                  '[PSI:PI'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('Morpheus', 'MS:1002661',
                 ('Morpheus search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MSPathFinder', 'MS:1002720',
                 ('PNNL top-down/bottom-up analysis software for identifying '
                  'peptides and proteoforms in fragmentation mass spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('NIST MSPepSearch', 'MS:1002750',
                 ('Search tool of the NIST (National Institute of Standards and '
                  'Technology) for spectral library searches.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MetaMorpheus', 'MS:1002826',
                 ('MetaMorpheus search engine.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('mzR', 'MS:1002869',
                 ('Bioconductor package mzR for reading and writing mass '
                  'spectrometry data files.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('MSnbase', 'MS:1002870',
                 ('Bioconductor package MSnbase provides infrastructure for '
                  'manipulation, processing and visualization of mass '
                  'spectrometry and proteomics data, ranging from raw to '
                  'quantitative and annotated data.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('CAMERA', 'MS:1002871',
                 ('Bioconductor package CAMERA for annotation of peak lists '
                  'generated by xcms, rule based annotation of isotopes and '
                  'adducts, isotope validation, EIC correlation based tagging '
                  'of unknown adducts and fragments.'),
                 'software',
                 ['analysis software', 'data processing software', 'software']),
    SoftwareName('small molecule analysis software', 'MS:1002878',
                 ('Software for the analysis of small molecules.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('TopPIC', 'MS:1002901',
                 ('TopPIC: a software tool for top-down mass spectrometry-based '
                  'proteoform identification and characterization." '
                  '[PMID:27423895'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('TopFD', 'MS:1002902',
                 ('Top-down mass spectral feature detection.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('TopMG', 'MS:1002903',
                 ('A mass graph-based approach for the identification of '
                  'modified proteoforms using top-down tandem mass spectra." '
                  '[PMID:28453668'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Proline', 'MS:1002981',
                 ('The Proline software suite for mass spectrometry based '
                  'proteomics.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('PepNovo', 'MS:1002982',
                 ('PepNovo tool for de novo peptide sequencing.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('pNovo', 'MS:1002983',
                 ('pNovo tool for de novo peptide sequencing and identification '
                  'using HCD spectra.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Novor', 'MS:1002984',
                 ('Novor real-time peptide de novo sequencing software tool.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('IdentiPy', 'MS:1002987',
                 ('IdentiPy." [PMID:29682971'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('pFind', 'MS:1003011',
                 ('Sequence-tag-based search engine pFind.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('i3tms', 'MS:1003013',
                 ('i3-tms search engine and data-analysis software.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('MSFragger', 'MS:1003014',
                 ('A database search-based peptide identification tool.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('Philosopher', 'MS:1003018',
                 ('General proteomics processing toolkit for shotgun '
                  'proteomics.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('SIM-XL', 'MS:1003109',
                 ('Identifying cross-linked peptides in complex protein '
                  'mixtures'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('EPIFANY', 'MS:1003118',
                 ('A Method for Efficient High-Confidence Protein Inference. '
                  'The tool is part of the OpenMS framework'),
                 'software',
                 ['analysis software', 'TOPP software', 'software', 'data processing software']),
    SoftwareName('ProSight', 'MS:1003141',
                 ('ProSight: Database search engine for top-down proteomics.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('TDPortal', 'MS:1003142',
                 ('TDPortal: Database search engine for top-down proteomics.'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('pyteomics', 'MS:1003146',
                 ('Python module that helps handling various proteomics data '
                  'analysis tasks." [DOI:10.1021/acs.jproteome.8b00717'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('PTX-QC', 'MS:1003162',
                 ('Proteomics (PTX) - QualityControl (QC) software for QC '
                  'report generation and visualization." '
                  '[DOI:10.1021/acs.jproteome.5b00780, PMID:26653327'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('QuaMeter IDFree', 'MS:1003164',
                 ('QuaMeter IDFree software for QC metric calculation." '
                  '[DOI:10.1021/ac4034455'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('iMonDB', 'MS:1003165',
                 ('iMonDB software to extract, store, and manage mass '
                  'spectrometry instrument parameters from raw data files." '
                  '[DOI:10.1021/acs.jproteome.5b00127, PMID:25798920'),
                 'software',
                 ['analysis software', 'software']),
    SoftwareName('BiblioSpec', 'MS:1003202',
                 ('A suite of software tools for creating and searching MS/MS '
                  'peptide spectrum libraries, developed at the University of '
                  'Washington'),
                 'software',
                 ['analysis software', 'library creation software', 'software', 'spectral library attribute']),
    SoftwareName('PeakForest', 'MS:1003232',
                 ('comprehensive infrastructure to organize, curate and share a '
                  'multi- instrument spectral library for metabolomics data '
                  'annotation developed and distributed by the French National '
                  'infrastructure in metabolomics and fluxomics (MetaboHUB).'),
                 'software',
                 ['analysis software', 'library creation software', 'small molecule analysis software', 'software', 'spectral library attribute']),
    SoftwareName('massWolf', 'MS:1000538',
                 ('A software for converting Waters raw directory format to '
                  'mzXML or mzML. MassWolf was originally developed at the '
                  'Institute for Systems Biology.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('ReAdW', 'MS:1000541',
                 ('A software program for converting Thermo Finnigan RAW file '
                  'format to mzXML or mzML. ReAdW was originally developed at '
                  'the Institute for Systems Biology. Its whimsical interleaved '
                  'spelling and capitalization is pronounced \\"readraw\\".'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('MzStar', 'MS:1000542',
                 ('A software program for converting Applied Biosystems wiff '
                  'file format to mzXML format. MzStar was originally developed '
                  'at the Institute for Systems Biology. It is now obsoleted by '
                  'the MzWiff program.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('Trapper', 'MS:1000553',
                 ('A software program for converting Agilent MassHunter format '
                  'to mzXML or mzML. Trapper was originally developed at the '
                  'Institute for Systems Biology.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('MzWiff', 'MS:1000591',
                 ('A software program for converting Applied Biosystems wiff '
                  'file format to the mzXML or mzML format. MzWiff is currently '
                  'maintained at the Institute for Systems Biology. It replaces '
                  'the slower mzStar program.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('pymzML', 'MS:1001914',
                 ('Python module to interface mzML Data.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('conversion software', 'MS:1002333',
                 ('Computer software primarily designed to convert data '
                  'represented in one format to another format, sometimes with '
                  'minor data alterations in the process.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('preprocessing software', 'MS:1002386',
                 ('Preprocessing software.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('postprocessing software', 'MS:1002414',
                 ('Postprocessing software.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('PepFinder', 'MS:1002524',
                 ('Thermo Scientific PepFinder BioPharma analysis software.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('Lipid Data Analyzer', 'MS:1002965',
                 ('Lipid Data Analyzer software for lipid quantification.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidHunter', 'MS:1002967',
                 ('Software for identification of phospholipids by high- '
                  'throughput processing of LC-MS and shotgun lipidomics '
                  'datasets.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidXplorer', 'MS:1002968',
                 ('Software for consensual cross-platform lipidomics.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidMatch', 'MS:1002969',
                 ('An automated workflow for rule-based lipid identification '
                  'using untargeted high-resolution tandem mass spectrometry '
                  'data.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('Greazy', 'MS:1002970',
                 ('Open-source software for automated phospholipid tandem mass '
                  'spectrometry identification.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidBlast', 'MS:1002971',
                 ('LC-MS-based lipidomics and automated identification of '
                  'lipids using the LipidBlast in-silico MS/MS library.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('Lipid-Pro', 'MS:1002972',
                 ('A computational lipid identification solution for untargeted '
                  'lipidomics on data-independent acquisition tandem mass '
                  'spectrometry platforms.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidFinder', 'MS:1002973',
                 ('A computational workflow for the discovery of lipids for the '
                  'identification of eicosanoid-phosphoinositides in platelets.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipiDex', 'MS:1002974',
                 ('An integrated software package for high-confidence lipid '
                  'identification.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LIQUID', 'MS:1002975',
                 ('An-open source software for identifying lipids in LC-MS/MS- '
                  'based lipidomics data.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('ALEX', 'MS:1002976',
                 ('Analysis of lipid experiments, a calculator for m/z values '
                  'of intact lipid molecules (MS1).'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('ALEX123', 'MS:1002977',
                 ('Analysis of lipid experiments 123, a calculator with m/z '
                  'values of intact lipid molecules (MS1) and their fragment '
                  'ions at the MS2 and MS3 level.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LIMSA', 'MS:1002978',
                 ('Software tool for the quantitative analysis of mass '
                  'spectrometric lipidome data.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LOBSTAHS', 'MS:1002979',
                 ('Adduct-Based lipidomics software for the discovery and '
                  'identification of oxidative stress biomarkers.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('LipidQA', 'MS:1002980',
                 ('Lipid qualitative/quantitative analysis software for '
                  'identification and quantitation of complex lipid molecular '
                  'species.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('ms_deisotope', 'MS:1002990',
                 ('ms_deisotope, a library for deisotoping and charge state '
                  'deconvolution of mass spectra.'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('LPPtiger', 'MS:1003010',
                 ('Software for lipidome-specific prediction and identification '
                  'of oxidized phospholipids from LC-MS datasets.'),
                 'software',
                 ['lipidomics analysis software', 'data processing software', 'small molecule analysis software', 'software', 'analysis software']),
    SoftwareName('MS-DIAL', 'MS:1003082',
                 ('Data processing software for untargeted metabolomics and '
                  'lipidomics that supports multiple instruments and MS '
                  'vendors.'),
                 'software',
                 ['small molecule analysis software', 'data processing software', 'analysis software', 'software']),
    SoftwareName('ThermoRawFileParser', 'MS:1003145',
                 ('Cross-platform software to convert Thermo RAW files to a '
                  'number of open formats." [DOI:10.1021/acs.jproteome.9b00328'),
                 'software',
                 ['data processing software', 'software']),
    SoftwareName('MALDI Solutions Microbial Identification', 'MS:1001878',
                 ('Shimadzu Biotech software for data acquisition, processing, '
                  'and analysis.'),
                 'software',
                 ['MALDI Solutions', 'acquisition software', 'analysis software', 'data processing software', 'Shimadzu Corporation software', 'software']),
    SoftwareName('ProteoWizard msconvert', 'MS:1002205',
                 ('Converts, filters, and processes mass spectrometry data in '
                  'variety of formats.'),
                 'software',
                 ['ProteoWizard software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteoWizard idconvert', 'MS:1002206',
                 ('Converts, filters, and processes identifications from '
                  'shotgun proteomics experiments.'),
                 'software',
                 ['ProteoWizard software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteoWizard chainsaw', 'MS:1002207',
                 ('Filters and processes protein sequence databases.'),
                 'software',
                 ['ProteoWizard software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteoWizard msaccess', 'MS:1002208',
                 ('Filters, processes, and displays mass spectrometry data in a '
                  'variety of ways.'),
                 'software',
                 ['ProteoWizard software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('ProteoWizard SeeMS', 'MS:1002209',
                 ('An interactive GUI application to view and filter mass '
                  'spectrometry data in a variety of formats.'),
                 'software',
                 ['ProteoWizard software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('BaselineFilter', 'MS:1000753',
                 ('Removes the baseline from profile spectra using a top-hat '
                  'filter.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('DBExporter', 'MS:1000754',
                 ('Exports data from an OpenMS database to a file.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('DBImporter', 'MS:1000755',
                 ('Imports data to an OpenMS database.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('FileConverter', 'MS:1000756',
                 ('Converts between different MS file formats.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('FileFilter', 'MS:1000757',
                 ('Extracts or manipulates portions of data from peak, feature '
                  'or consensus feature files.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('FileMerger', 'MS:1000758',
                 ('Merges several MS files into one file.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('InternalCalibration', 'MS:1000759',
                 ('Applies an internal calibration.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MapAligner', 'MS:1000760',
                 ('OBSOLETE Corrects retention time distortions between maps.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('MapNormalizer', 'MS:1000761',
                 ('Normalizes peak intensities in an MS run.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('NoiseFilter', 'MS:1000762',
                 ('OBSOLETE Removes noise from profile spectra by using '
                  'different smoothing techniques.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('PeakPicker', 'MS:1000763',
                 ('OBSOLETE Finds mass spectrometric peaks in profile mass '
                  'spectra.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('Resampler', 'MS:1000764',
                 ('Transforms an LC/MS map into a resampled map or a png image.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('SpectraFilter', 'MS:1000765',
                 ('OBSOLETE Applies a filter to peak spectra.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOFCalibration', 'MS:1000766',
                 ('Applies time of flight calibration.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP noise filter', 'MS:1002131',
                 ('Noise filter component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP peak picker', 'MS:1002134',
                 ('Peak picker component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP spectra filter', 'MS:1002137',
                 ('Spectra filter component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP map aligner', 'MS:1002147',
                 ('Map aligner component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP DTAExtractor', 'MS:1002154',
                 ('Extracts spectra of an MS run file to several files in DTA '
                  'format.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDMerger', 'MS:1002155',
                 ('Merges several protein/peptide identification files into one '
                  'file.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDFileConverter', 'MS:1002156',
                 ('Converts identification engine file formats.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraMerger', 'MS:1002157',
                 ('Merges spectra from an LC/MS map, either by precursor or by '
                  'RT blocks.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MzTabExporter', 'MS:1002158',
                 ('Exports various XML formats to an mzTab file.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MassTraceExtractor', 'MS:1002159',
                 ('Annotates mass traces in centroided LC/MS maps.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PrecursorMassCorrector', 'MS:1002160',
                 ('Correct the precursor entries of tandem MS scans.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP HighResPrecursorMassCorrector', 'MS:1002161',
                 ('Performs precursor mz correction on centroided high '
                  'resolution data.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP AdditiveSeries', 'MS:1002162',
                 ('Computes an additive series to quantify a peptide in a set '
                  'of samples.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP Decharger', 'MS:1002163',
                 ('Decharges and merges different feature charge variants of '
                  'the same chemical entity.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP EICExtractor', 'MS:1002164',
                 ('Quantifies signals at given positions in (raw or picked) '
                  'LC/MS maps.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP feature finder', 'MS:1002165',
                 ('Feature finder component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP ProteinQuantifier', 'MS:1002171',
                 ('Computes protein abundances from annotated feature/consensus '
                  'maps.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP ConsensusMapNormalizer', 'MS:1002172',
                 ('Normalizes maps of one consensus XML file (after linking).'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MapRTTransformer', 'MS:1002173',
                 ('Applies retention time transformations to maps.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP feature linker', 'MS:1002174',
                 ('Feature linker component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP CompNovo', 'MS:1002178',
                 ('Performs a peptide/protein identification with the CompNovo '
                  'engine.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP CompNovoCID', 'MS:1002179',
                 ('Performs a peptide/protein identification with the CompNovo '
                  'engine in collision-induced dissociation (CID) mode.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP software adaptor', 'MS:1002180',
                 ('Software adaptor to an external program in the TOPP '
                  'software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpecLibSearcher', 'MS:1002187',
                 ('Identifies peptide MS2 spectra by spectral matching with a '
                  'searchable spectral library.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP ConsensusID', 'MS:1002188',
                 ('Computes a consensus identification from peptide '
                  'identifications of several identification engines.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDConflictResolver', 'MS:1002189',
                 ('Resolves ambiguous annotations of features with peptide '
                  'identifications.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDFilter', 'MS:1002190',
                 ('Filters results from protein or peptide identification '
                  'engines based on different criteria.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDMapper', 'MS:1002191',
                 ('Assigns protein/peptide identifications to feature or '
                  'consensus features.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDPosteriorErrorProbability', 'MS:1002192',
                 ('Estimates posterior error probabilities using a mixture '
                  'model.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP IDRTCalibration', 'MS:1002193',
                 ('Calibrate Retention times of peptide hits to standards.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PeptideIndexer', 'MS:1002194',
                 ('Refreshes the protein references for all peptide hits.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PrecursorIonSelector', 'MS:1002195',
                 ('A tool for precursor ion selection based on identification '
                  'results.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MRMMapper', 'MS:1002196',
                 ('MRMMapper maps measured chromatograms (mzML) and the '
                  'transitions used (TraML).'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwath component', 'MS:1002197',
                 ('OpenSwath component of the TOPP software.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP ProteinInference', 'MS:1002203',
                 ('Infer proteins from a list of (high-confidence) peptides.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FalseDiscoveryRate', 'MS:1002204',
                 ('Estimates the false discovery rate on peptide and protein '
                  'level using decoy searches.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('OpenXQuest', 'MS:1002673',
                 ('Cross-Linking MS search engine.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('OpenPepXL', 'MS:1003023',
                 ('Cross-Linking MS search engine.'),
                 'software',
                 ['TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('mzidLib:Omssa2Mzid', 'MS:1002238',
                 ('A converter for OMSSA OMX to mzIdentML.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:Tandem2Mzid', 'MS:1002239',
                 ('A converter for Tandem XML to mzIdentML.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:Csv2Mzid', 'MS:1002240',
                 ('A converter for CSV files (following OMSSA CSV style) to '
                  'mzIdentML.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:ProteoGrouper', 'MS:1002241',
                 ('A generic and parameterizable protein inference algorithm '
                  'for mzIdentML files.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:Thresholder', 'MS:1002242',
                 ('A routine for keeping only identifications passing a given '
                  'threshold or setting passThreshold to true or false for '
                  'SpectrumIdentificationItem or ProteinDetectionHypothesis in '
                  'mzIdentML files.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:Perform emPAI on mzid', 'MS:1002243',
                 ('A routine for adding emPAI quantitative values to an '
                  'mzIdentML file.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:FalseDiscoveryRate', 'MS:1002244',
                 ('A routine for calculating local FDR, q-value and FDRScore '
                  'for mzIdentML files, based on a decoy search.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:Mzidentml2Csv', 'MS:1002245',
                 ('A tool for converting mzIdentML files to CSV format.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:CombineSearchEngines', 'MS:1002246',
                 ('A tool for combining results analysed in parallel in two or '
                  'three search engines into a single mzIdentML file.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('mzidLib:InsertMetaDataFromFasta', 'MS:1002247',
                 ('A tool for adding additional meta data from a FASTA file to '
                  'DBSequence entries (sequence and description) in mzIdentML '
                  'files.'),
                 'software',
                 ['mzidLib', 'analysis software', 'software']),
    SoftwareName('PeptideProphet', 'MS:1002287',
                 ('A program in the TPP that calculates PSM probabilities for '
                  'MS2 proteomics data searched with any of the supported '
                  'sequence or spectral library search engines via the pepXML '
                  'format." [PMID:12403597'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('iProphet', 'MS:1002288',
                 ('A program in the TPP that calculates distinct peptide '
                  'probabilities based on several lines of corroborating '
                  'evidence including search results from multiple search '
                  'engines via the pepXML format.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('ProteinProphet', 'MS:1002289',
                 ('A program in the TPP that calculates protein-level '
                  'probabilities based on input PSM or peptide-level '
                  'probabilities from PeptideProphet or iProphet. The output is '
                  'written in the protXML format.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('XPRESS', 'MS:1002290',
                 ('A program in the TPP that calculates PSM-level abundances '
                  'based on 2-channel isotope-labelled data such as ICAT, '
                  'SILAC, etc.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('Libra', 'MS:1002291',
                 ('A program in the TPP that calculates PSM, peptide, and '
                  'protein-level abundances based on N-channel isobaric label '
                  'peptide data such as iTRAQ, TMT, etc.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('PTMProphet', 'MS:1002292',
                 ('A program in the TPP that calculates PTM localization '
                  'probabilities by re-analyzing the peaks that are available '
                  'to distinguish between possible modification sites.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('ASAPRatio', 'MS:1002574',
                 ('A program in the TPP that calculates PSM, peptide, and '
                  'protein-level abundances based on 2-channel isotope-labelled '
                  'data such as ICAT, SILAC, etc.'),
                 'software',
                 ['Trans-Proteomic Pipeline software', 'analysis software', 'software']),
    SoftwareName('Progenesis QI', 'MS:1002879',
                 ('Metabolomics analysis software for LC-MS data from Nonlinear '
                  'Dynamics.'),
                 'software',
                 ['small molecule analysis software', 'analysis software', 'software']),
    SoftwareName('Compound Discoverer', 'MS:1002880',
                 ('Metabolomics analysis software from Thermo Fisher '
                  'Scientific.'),
                 'software',
                 ['small molecule analysis software', 'analysis software', 'software']),
    SoftwareName('MyCompoundID', 'MS:1002881',
                 ('Metabolite identification tool MyCompoundID." [PSI:PI'),
                 'software',
                 ['small molecule analysis software', 'analysis software', 'software']),
    SoftwareName('lipidomics analysis software', 'MS:1002964',
                 ('Lipidomics analysis software.'),
                 'software',
                 ['small molecule analysis software', 'analysis software', 'software']),
    SoftwareName('ProCon', 'MS:1002334',
                 ('Java software designed to convert one of several proteomics '
                  'identification results formats into mzIdentML or PRIDE XML." '
                  '[PSI:PI'),
                 'software',
                 ['conversion software', 'data processing software', 'software']),
    SoftwareName('PRIDE Converter2', 'MS:1002335',
                 ('Java software designed to convert one of several proteomics '
                  'identification results formats into PRIDE XML.'),
                 'software',
                 ['conversion software', 'data processing software', 'software']),
    SoftwareName('python-psims', 'MS:1002991',
                 ('python-psims, a library for generating mzML and mzIdentML.'),
                 'software',
                 ['conversion software', 'data processing software', 'software']),
    SoftwareName('TOPP NoiseFilterGaussian', 'MS:1002132',
                 ('Removes noise from profile spectra by using a gaussian '
                  'smoothing.'),
                 'software',
                 ['TOPP noise filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP NoiseFilterSGolay', 'MS:1002133',
                 ('Removes noise from profile spectra by using a Savitzky-Golay '
                  'smoothing.'),
                 'software',
                 ['TOPP noise filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PeakPickerHiRes', 'MS:1002135',
                 ('Finds mass spectrometric peaks in high-resoluted profile '
                  'mass spectra.'),
                 'software',
                 ['TOPP peak picker', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PeakPickerWavelet', 'MS:1002136',
                 ('Finds mass spectrometric peaks with a wavelet algorithm in '
                  'low-resoluted profile mass spectra.'),
                 'software',
                 ['TOPP peak picker', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterBernNorm', 'MS:1002138',
                 ('Applies a Bern et al normalization to peak spectra." '
                  '[PMID:15262780'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterMarkerMower', 'MS:1002139',
                 ('Applies a filter to peak spectra for marked peaks.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterNLargest', 'MS:1002140',
                 ('Retains the n largest peaks of a peak spectra.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterNormalizer', 'MS:1002141',
                 ('Applies a TIC/maximal intensity normalization to peak '
                  'spectra.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterParentPeakMower', 'MS:1002142',
                 ('Filters putative unfragmented precursor ions from tandem '
                  'spectra.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterScaler', 'MS:1002143',
                 ('Applies a filter to peak spectra after intensity scaling '
                  'according to rank.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterSqrtMower', 'MS:1002144',
                 ('Applies a filter to peak spectra after intensity scaling to '
                  'the square root.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterThresholdMower', 'MS:1002145',
                 ('Applies a filter of peaks below a given threshold to peak '
                  'spectra.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP SpectraFilterWindowMower', 'MS:1002146',
                 ('Applies a filter of the largest peaks in a sliding window '
                  'over a peak spectrum.'),
                 'software',
                 ['TOPP spectra filter', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MapAlignerIdentification', 'MS:1002148',
                 ('Corrects retention time distortions between maps based on '
                  'common peptide identifications.'),
                 'software',
                 ['TOPP map aligner', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MapAlignerPoseClustering', 'MS:1002149',
                 ('Corrects retention time distortions between maps using a '
                  'pose clustering approach.'),
                 'software',
                 ['TOPP map aligner', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MapAlignerSpectrum', 'MS:1002150',
                 ('Corrects retention time distortions between maps by spectrum '
                  'alignment.'),
                 'software',
                 ['TOPP map aligner', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureFinderCentroided', 'MS:1002166',
                 ('Detects two-dimensional features in centroided LC-MS data.'),
                 'software',
                 ['TOPP feature finder', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureFinderRaw', 'MS:1002167',
                 ('Detects two-dimensional features in uncentroided LC-MS data.'),
                 'software',
                 ['TOPP feature finder', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureFinderIsotopeWavelet', 'MS:1002168',
                 ('Detects two-dimensional features in uncentroided LC-MS data '
                  'with a wavelet algorithm.'),
                 'software',
                 ['TOPP feature finder', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureFinderMetabo', 'MS:1002169',
                 ('Detects two-dimensional features in centroided LC-MS data of '
                  'metabolites.'),
                 'software',
                 ['TOPP feature finder', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureFinderMRM', 'MS:1002170',
                 ('Quantifies features LC-MS/MS MRM data.'),
                 'software',
                 ['TOPP feature finder', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureLinkerLabeled', 'MS:1002175',
                 ('Groups corresponding isotope-labeled features in a feature '
                  'map.'),
                 'software',
                 ['TOPP feature linker', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureLinkerUnlabeled', 'MS:1002176',
                 ('Groups corresponding features from multiple maps.'),
                 'software',
                 ['TOPP feature linker', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP FeatureLinkerUnlabeledQT', 'MS:1002177',
                 ('Groups corresponding features from multiple maps using a '
                  'quality threshold clustering approach.'),
                 'software',
                 ['TOPP feature linker', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP InspectAdapter', 'MS:1002181',
                 ('Identifies MS2 spectra using the external program Inspect.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MascotAdapter', 'MS:1002182',
                 ('Identifies MS2 spectra using the external program Mascot.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP MascotAdapterOnline', 'MS:1002183',
                 ('Identifies MS2 spectra using the online version of the '
                  'external program Mascot.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OMSSAAdapter', 'MS:1002184',
                 ('Identifies MS2 spectra using the external program OMSSA.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP PepNovoAdapter', 'MS:1002185',
                 ('Identifies MS2 spectra using the external program PepNovo.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP XTandemAdapter', 'MS:1002186',
                 ('Identifies MS2 spectra using the external program XTandem.'),
                 'software',
                 ['TOPP software adaptor', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwathAnalyzer', 'MS:1002198',
                 ('Picks peaks and finds features in an SRM experiment.'),
                 'software',
                 ['TOPP OpenSwath component', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwathChromatogramExtractor', 'MS:1002199',
                 ('Extract chromatograms (XIC) from a MS2 map file.'),
                 'software',
                 ['TOPP OpenSwath component', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwathDecoyGenerator', 'MS:1002200',
                 ('Generates decoys according to different models for a '
                  'specific TraML.'),
                 'software',
                 ['TOPP OpenSwath component', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwathFeatureXMLToTSV', 'MS:1002201',
                 ('Converts a featureXML to a mProphet tsv (tab separated '
                  'values).'),
                 'software',
                 ['TOPP OpenSwath component', 'TOPP software', 'analysis software', 'data processing software', 'software']),
    SoftwareName('TOPP OpenSwathRTNormalizer', 'MS:1002202',
                 ('Generates a transformation file for retention time space '
                  'into normalized space.'),
                 'software',
                 ['TOPP OpenSwath component', 'TOPP software', 'analysis software', 'data processing software', 'software']),
])
# [[[end]]]


software_names_by_name = {c.name: c for c in software_names}


def software_name(name):
    try:
        return software_names_by_name[name]
    except KeyError:
        return SoftwareName(name, name, name, name, [name])


__all__ = [
    "SoftwareName", "Software", "software_names",
    "software_name"
]
