diff --git a/content/en/applications/_index.md b/content/en/_applications/_index.md similarity index 100% rename from content/en/applications/_index.md rename to content/en/_applications/_index.md diff --git a/content/en/applications/diametalyzer.md b/content/en/_applications/diametalyzer.md similarity index 100% rename from content/en/applications/diametalyzer.md rename to content/en/_applications/diametalyzer.md diff --git a/content/en/applications/diaproteomics.md b/content/en/_applications/diaproteomics.md similarity index 100% rename from content/en/applications/diaproteomics.md rename to content/en/_applications/diaproteomics.md diff --git a/content/en/applications/epifany.md b/content/en/_applications/epifany.md similarity index 100% rename from content/en/applications/epifany.md rename to content/en/_applications/epifany.md diff --git a/content/en/applications/flashdeconv.md b/content/en/_applications/flashdeconv.md similarity index 100% rename from content/en/applications/flashdeconv.md rename to content/en/_applications/flashdeconv.md diff --git a/content/en/applications/flashida.md b/content/en/_applications/flashida.md similarity index 100% rename from content/en/applications/flashida.md rename to content/en/_applications/flashida.md diff --git a/content/en/applications/flashquant.md b/content/en/_applications/flashquant.md similarity index 100% rename from content/en/applications/flashquant.md rename to content/en/_applications/flashquant.md diff --git a/content/en/applications/metaprosip.md b/content/en/_applications/metaprosip.md similarity index 100% rename from content/en/applications/metaprosip.md rename to content/en/_applications/metaprosip.md diff --git a/content/en/applications/mhcquant.md b/content/en/_applications/mhcquant.md similarity index 100% rename from content/en/applications/mhcquant.md rename to content/en/_applications/mhcquant.md diff --git a/content/en/applications/nase.md b/content/en/_applications/nase.md similarity index 100% rename from content/en/applications/nase.md rename to content/en/_applications/nase.md diff --git a/content/en/applications/nuxl.md b/content/en/_applications/nuxl.md similarity index 98% rename from content/en/applications/nuxl.md rename to content/en/_applications/nuxl.md index 34cb7d6..793b1cd 100644 --- a/content/en/applications/nuxl.md +++ b/content/en/_applications/nuxl.md @@ -1,299 +1,299 @@ ---- -title: NuXL -subtitle: Protein-RNA and DNA cross-linking -sidebar: false ---- - -## Introduction - -NuXL is a novel tool for protein-RNA and DNA cross-linking studies. It is available as a -[stand-alone tool](#installation-as-stand-alone-tool) and as a [Proteome Discoverer community node](#installation-for-proteome-discoverer) or as a [web application](#run-as-web-application) that doesn't require you to install additional software. This guide outlines the steps to install NuXL, set up your analysis, and interpret your data using the provided tools and workflows. - -
{{< figure src="/images/content_images/applications/NuXL.png" >}}
- -### Requirements: - -- HCD data acquired on a high-resolution MS -- Developed and tested on orbitrap instruments (including Velos, Lumos, and Astral) - -## Installation for Proteome Discoverer -NuXL is currently compatible with Proteome Discoverer 3.0 and 3.1. - -1. **Before Installation:** -Download the PD archive from https://github.com/timosachsenberg/OpenMS/releases/tag/NuXLPublication - -3. **Before Installation:** - - Please ensure that Proteome Discoverer is closed before running the NuXL installer. - -4. **Manual Installation:** - To register the NuXL nodes in ProteomeDiscoverer, files must be copied manually to the correct folder. Note: We are currently preparing an installer to automate the installation process. - - For PD 3.1 you need to: - 1. Copy `PD.OpenMS.NuXLNode.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Magellan.Server` - 2. Copy `PD.OpenMS.NuXLViewer.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Discoverer` - 3. Copy `ZedGraph_OpenMS.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Discoverer` - 4. Go to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Tools` and copy the folder `NuXL` from the .zip. - 5. Open PD, go to `Administration -> Manage Licenses`. Click `Scan for Missing Features` on top of the list of available licenses on the right side of the PD window. - - For PD 3.0 you need to: - 1. Copy `PD.OpenMS.AdapterNodes.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Thermo.Magellan.Server` - 3. Copy `ZedGraph_OpenMS.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Thermo.Discoverer` - 4. Go to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Tools` and copy the folder `NuXL` from the .zip. - 5. Open PD, go to `Administration -> Manage Licenses`. Click `Scan for Missing Features` on top of the list of available licenses on the right side of the PD window. - -6. **Troubleshooting** - - Sometimes the operating system blocks the execution of .dlls copied from an external source. In these cases, it is necessary to go to the folder containing the .dll, right-click on it, choose properties, and then security. The dialog offers an option to unblock the .dll from execution. - -Note: Coming soon: One-click installer so no manual copy is required. The installer will automatically detect your Proteome Discoverer installation directory and deploy the NuXL nodes correctly. - -### Setting Up Your Study - -1. **Create a New Study:** - - Open Proteome Discoverer - - Create a new study, define a root directory and study name (e.g., `NuXL Study`). If you set up your first NuXL study, leave `(empty workflow)` - -2. **Adding a Protein Database:** - - Use the `Administration' -> `Maintain FASTA file` option in Proteome Discoverer to add new protein databases to your project. Once configured, you can select this database in the NuXL node of the processing workflow. - -### Analysis Workflows - -1. **Generating an analysis Template:** - - Click on `New Analysis`. Note: Once completed, you will later find the analysis template in "Open Analysis Template". - - In the analysis window you can set up 'processing' and 'consensus' workflows for NuXL - - **Processing Workflow** - - Click on Edit in the 'Processing Step' window - - If you want to use a preconfigured workflow click `Open` and select the template of your choice. - - For a minimal workflow, add and connect `Spectrum Files`, `Spectrum Selector`, and `NuXL` nodes. Note: You will find the NuXL node under the `Sequence Database Search` category. - -
{{< figure src="/images/content_images/applications/NuXL_minimalwf.png" >}}
- - - Important settings in `Spectrum Selector`: set `MS Order` to `Any` to ensure MS1 spectra are not discarded. - - Configuring NuXL: - - By clicking on the NuXL processing node symbol in the workflow tree, you can adapt settings Note: If you click on `Show Advanced Parameter`, you will find additional parameters. - - NuXL provides `Presets` for different crosslinking mass spectrometry protocols. For most use cases, users just need to select a preset that fits their experimental protocol. In most cases, default parameters work reasonably well but results can sometimes be improved by tweaking other parameters. - -
{{< figure src="/images/content_images/applications/NuXL_params.png" >}}
- - - Other Parameters: - - `Peptide identification` -> `Precursor mass tolerance` and `Fragment mass tolerance`: Adjust the fragment search mass accuracy according to your instrument. - - `Peptide identification` -> `Static modification` and `Dynamic modification`: Note: Standard fixed modification (e.g., `Carbamidomethyl (C)`) should be specified as Dynamic if the expected amino acid can form crosslinks, as otherwise these identifications would be lost. - - `Cross-links` -> `Length`: Depending on your nuclease digestion protocol, you might expect different lengths of nucleotide adducts. NuXL is trained and tested on nucleotide adducts of 1-4 nucleotide length. For properly digested samples we recommend lowering the length value to 2. In most cases, the default value works well. - - `Cross-links` -> `Sequence`: If your experiment involves a specific RNA or DNA species with a known sequence, it can be useful to enter the sequence in this field. The node then only considers possible nucleotide adduct combinations, potentially reducing false positives. - - `Peptide identification` -> `Peptide length min`: For complex proteome searches, we recommend using the value `6` as the minimum amino acid count. For complexes of few proteins, that would allow manual validation this can be further decreased. - - `Peptide identification` -> `Peptide length max`: We recommend setting a limit of ~30 for complex proteome-wide searches. - - `Peptide identification` -> `Missed cleavages`: If significant crosslinking is expected to occur and create missed cleavages, the value can be increased up to 3. - - - Advanced users: - - Users can define their own fragmentation rules and crosslink adduct settings. Select `none` in `Presets`. You can then define `Fragment adducts` and `Modifications` in advanced parameters according to your protocol in the following format: `[target nucleotide]:[formula]` or `[precursor adduct] ->[fragment adduct formula];[name]`. NuXL will use this information to generate all chemically feasible precursor adduct and fragment adduct combinations. - - `Cross-link identification` -> `Can cross-link`: If you expect only a single or subset of nucleotides to be amenable to crosslinking, set this up here. Nucleotides are specified by their one-letter code without a separator (e.g. UA for U and A nucleotides) - - `Cross-link identification` -> `Cysteine adduct`: If DTT is present during UV irradiation, it can generate additional crosslinks including a 152 Da linker. For more information see 1. If needed to be identified, we recommend specifying the composition of the linker in modifications and 'Fragment adducts' instead. Set this flag to true, if the 152 adduct is expected. - - `Cross-links` -> `Target nucleotides`: Sum formulas of the target nucleotides of the crosslink. Heavy labeled atoms are specified with parenthesis in front with the nominal mass of the respective isotope (e.g. (13)C, (15)N). - - - **Consensus Workflow**: Click on Edit in the 'Consensus Step' window - - Connect an `MSF Files` node to the 'NuXL Consensus' node. - - Set `Spectra to Store` to `All` in the MSF Files node. - -
{{< figure src="/images/content_images/applications/NuXL_minimalcwf.png" >}}
- - -3. **Running the Workflow:** - - Drag and drop your Thermo Scientific .raw files onto the Processing Step in the Analysis tab - - Important: Ensure the "By File" checkbox is selected. - - Save the template - - Run the workflow - -
{{< figure src="/images/content_images/applications/NuXL_files.png" >}}
- - -### Post-Analysis - -You can monitor the progress of your analysis by opening `Administration` -> `Show Job Queue`. - -1. **Viewing Results:** - - Result files are not exported automatically. All results are listed under the Analysis Results tab. You can view your results in Proteome Discoverer by double-clicking the result file. - -
{{< figure src="/images/content_images/applications/NuXL_result_file.png" >}}
- - - Results are displayed in several tabs. You can view: `Proteins`, `PSMs and NuXL`, `MS/MS Spectrum Info`, `Input Files`, `Specialized Traces`, and `Study Information`. Depending on your consensus workflow, you might see additional tabs. - - The `PSMs and NuXL` table provides information about all peptide and crosslink spectrum matches (PSMs and NuXLs, respectively). Key columns include `Annotated Sequence`, `Modifications`, `Protein Accessions`, `q-value` (CSM-level q-value). We recommend to filter your results for 1% CSM-level FDR (`q-value` <= 0.01). - -
{{< figure src="/images/content_images/applications/NuXL_visualize.png" >}}
- -2. **Exporting Data:** - - To export the results for further analysis in spreadsheet software (e.g., Microsoft Excel), navigate to `File -> Export -> To Microsoft Excel`. - -3. **Quality Assessment:** - - You can manually validate spectra quality by viewing annotated spectra. To do so, click on the "Show Spectrum" button in the 'PSM and NuXL' tab. - - Assess features such as peptide sequence coverage and the presence of key ions. - -Note: Please take a look at the Proteome Discoverer user guide for general information on Proteome Discoverer and additional nodes. - -## Installation as stand-alone tool - -NuXL is developed using the OpenMS framework. Once installed, it is accessible through the OpenNuXL tool. OpenMS offers a suite of tools for graphical interfaces and command-line operations, compatible with Windows, MacOS, and Linux platforms. This guide focuses specifically on using the graphical application on Windows. - -Alongside NuXL, the following core OpenMS software modules are also available and will be utilized in this tutorial. You can click on each term to access the respective documentation: - -TOPPAS: A workflow design and processing tool that allows for the automated analysis of mass spectrometry data. -TOPPView: A visualization tool that enables detailed analysis and review of mass spectrometric data. -This step-by-step guide ensures you can leverage the full capabilities of NuXL and the associated OpenMS modules efficiently. - -### Downloading the OpenMS installer with NuXL. -Download the OpenMS-NuXL installer from https://github.com/timosachsenberg/OpenMS/releases/tag/NuXLPublication - -### Preparing the input files: Raw data conversion. - -NuXL is compatible with Thermo raw files and also supports files that have been converted to the mzML format using freely available tools such as ProteoWizard's msconvert. If you provide NuXL with Thermo raw files, it automatically utilizes the ThermoRawFileParser from Thermo Scientific™ for efficient data conversion. This flexibility ensures seamless integration with your existing data processing workflows. - -### Getting started – setting up a basic processing workflow. - -Advanced users have the option to run the OpenNuXL tool directly from the command line, offering precise control over the tool's functionality. - -For those who prefer a more user-friendly setup, TOPPAS can be utilized to create streamlined workflows. - -To begin, launch an empty workflow window by running the TOPPAS pipeline tool. This approach allows you to design and manage your workflows visually, making complex configurations more manageable and accessible. - -To build a workflow in TOPPAS, utilize the drag-and-drop functionality. You can start by selecting the required tools from the 'TOPP tools' pane on the left side of the TOPPAS window. A basic workflow typically includes the following components: - -- **Input Files Node**: Designate nodes for input files labeled ``. -- **Output Files Node**: Set up nodes for output files labeled ``. -- **OpenNuXL Node**: This is found under the 'utils' collection and serves as the central processing node. - -A workflow must include at least two input nodes. To connect these input nodes to the OpenNuXL node: -1. Drag each node and drop it onto the workflow window. -2. Connect the nodes to establish a connection. - -Configure `File: database [fasta]` for one node and `File: in [mzML, raw]` for the other node as parameters in the pop-up window. As output options, you have the choice to select idXML (`File: out [idXML]`, for spectrum annotations in TOPPView), tsv (`File: out_tsv [tsv]`), or xls (`File: out_xls [xls]`) output file formats. - -### Configuring Percolator in the OpenNuXL Node - -To specify the path to the postprocessing tool Percolator within your workflow: - -1. **Access the Configuration Menu**: - - Double-click on the OpenNuXL node. This will open the configuration menu. - -2. **Set the Path for Percolator**: - - Find the field labeled `percolator_executable`. - - Enter the absolute path to the `percolator.exe` file, typically found in the OpenMS installation directory at `\share\OpenMS\THIRDPARTY\Percolator`. - -3. **Save Configuration Changes**: - - After setting the path, click 'Ok' to save the modifications to the node settings. - -4. **Save the Pipeline**: - - Go to the 'File' menu. - - Choose 'Save' to preserve your entire pipeline configuration. - -These steps ensure that Percolator is properly integrated into your workflow, enhancing the robustness of data post-processing through the OpenNuXL tool. - -With this step, the initial configuration of the OpenNuXL is completed and the pipeline can be saved from `File -> Save as` and used as a template. - -
{{< figure src="/images/content_images/applications/NuXL_toppas_basic.png" >}}
- -### Run Configuration - -**Preset Selection**: Select a nucleotide adduct preset according to your workflow. - -Depending on your experiment, you can select an RNA or DNA preset or define your own adduct settings for custom protocols: - -
{{< figure src="/images/content_images/applications/NuXL_toppas_presets.png" >}}
- -To view the MS1 (modifications) and MS2 (fragment_adducts) of the specific presets you can tick the box for advanced parameters and scroll to your preset of interest. - -**Advanced Users: Setting up Custom Nucleotide Adducts** - -In case none of the available presets matches your workflow, custom presets can be defined by defining 'target_nucleotides', 'can_cross-link', 'fragment_adducts', and 'modifications'. - If no preset is selected ('none'), you can add custom sum formulae in the same format as shown in advanced parameters for the presets (format: `[target nucleotide]:[formula]` or `[precursor adduct] ->[fragment adduct formula];[name]; - -
{{< figure src="/images/content_images/applications/NuXL_toppas_adducts.png" >}}
- -**Other settings** - -Numerous other parameters can be specified to fine tune the search process (Table T1). In most cases defaults combined with proper presets should work. - -**Table T1. OpenNuXL Parameters Editable by the User** - -| Parameter | Description | Comment | -|----------------------------|--------------------------------------------------|---------------------------------------------------------------| -| `NET_executable` | Path to .NET framework executable | Only required on linux and mac. | -| `ThermoRaw_executable` | Path to ThermoRawFileParser executable | | -| `database` | The protein database used for identification | | -| `out_tsv` | tsv output file | | -| `out_xls` | XL output file with group q-values calculated at the XL PSM-level. Generated for the highest FDR threshold in report:xlFDR. | | -| `output_folder` | Store intermediate files (and final result) also in this output folder | Convenient for TOPPAS/KNIME/etc. users because these files are otherwise only stored in tmp folders. | -| `percolator_executable` | Path to percolator executable of the installation e.g. 'percolator.exe' | If no percolator results are reported (“perc” idxml files) check if the path is correctly filled in. | -| `filter` | Filtering steps applied to results | | -| `window_size` | Peak window for spectra preprocessing | | -| `peak_count` | Retained peaks in peak window | | -| `log` | Name of log file (created only when specified) | | -| `debug` | Sets the debug level | | -| `threads` | Sets the number of threads allowed to be used by the TOPP tool | | -| `no_progress` | Disables progress logging to command line | | -| `force` | Overwrites tool-specific checks | | -| `test` | Enables the test mode (needed for internal use only) | | -| `precursor -> mass_tolerance` | Precursor mass tolerance (+/- around precursor m/z) | Adjust the precursor search mass accuracy according to the used instrument. | -| `precursor -> mass_tolerance_unit` | Unit of precursor mass tolerance | | -| `precursor -> min_charge` | Minimum precursor charge to be considered. | | -| `precursor -> max_charge` | Maximum precursor charge to be considered. | | -| `precursors -> isotopes` | Corrects for mono-isotopic peak misassignments. (E.g.: 1 = prec. may be misassigned to first isotopic peak) | | -| `fragment -> mass_tolerance` | Fragment mass tolerance (+/- around fragment m/z) | Adjust the fragment search mass accuracy according to the used instrument. | -| `fragment -> mass_tolerance_unit` | Unit of fragment mass tolerance | | -| `modifications -> fixed` | Fixed modifications, specified using UniMod (www.unimod.org) terms, e.g. 'Carbamidomethyl (C)' | Standard fixed modification (e.g. 'Carbamidomethyl (C)') should be specified as variable, if the expected amino acid can form crosslinks, as otherwise these identifications would be lost. | -| `modifications -> variable`| Variable modifications, specified using UniMod (www.unimod.org) terms, e.g. 'Oxidation (M)' | | -| `modifications -> variable_max_per_peptide` | Maximum number of residues carrying a variable modification per candidate peptide | | -| `peptide -> min_size` | Minimum size of a peptide considered in the search | For complex proteome searches, we recommend using 5 as minimum amino acid count. | -| `peptide -> max_size` | Maximum size - -**Note**: Each `.raw`/`.mzML` file will be processed separately and requires one database file to be added. - -As an alternative to loading database files via an `` node, you can define the database in the OpenNuXL node by double-clicking the value field of the database parameter and selecting the respective database (Figure Database Configuration). - -
{{< figure src="/images/content_images/applications/NuXL_toppas_db.png" >}}
- -**Figure Database Configuration**: Within the OpenNuXL node, select the sequence database. - -**Advanced Users**: In case you would like to combine several files in one search, we suggest using the OpenMS node ``, which can be found in 'File Handling'. The node needs to be combined with ``+`` and ``. - -
{{< figure src="/images/content_images/applications/NuXL_toppas_merge.png" >}}
- -**Figure Workflow to merge `.mzML` files**: The `` node can be used as shown in this scheme for merging `.mzML` files e.g., from multiple fractions. - -To export FDR-filtered result files, specify the absolute path for an output folder by double-clicking the value field of the `output_folder` parameter and pasting your selected path. - -
{{< figure src="/images/content_images/applications/NuXL_toppas_outputfolder.png" >}}
- -**Figure Output folder path**: To generate FDR filtered result files, a path needs to be specified. - -### OpenNuXL Pipeline Execution - -After selection of analysis parameters and defining input files, the workflow can be executed by selecting 'Pipeline' -> 'Run' or pressing F5. A popup window asking to specify the output directory appears. Once specified, OpenNuXL analysis is started. All current tasks are displayed in the Log window below the workflow window. Unfiltered result files will be saved in the `TOPPAS_out` folder, which is automatically generated in the selected path. - -**Figure Output Directory.**: Upon pipeline execution, the displayed pop-up window appears to enter the absolute path of the output folder. - -
{{< figure src="/images/content_images/applications/NuXL_toppas_log.png" >}}
- -**Figure OpenNuXL Log window.**: The progress of OpenNuXL search is shown. - -### Result File Access - Visualization of Crosslinked Peptide-(Oligo)Nucleotide Spectra Using TOPPView - -If executed on `.raw` files, the OpenNuXL node will create corresponding `.mzML` files in the output directory (defined as in Figure Output Directory). For visualization of annotated spectra, open `.mzML` files in TOPPView. By default, double-clicking on `.mzML` files should automatically open the file in TOPPView. Once it is loaded, spectrum annotations matched by OpenNuXL can be added by loading `.idXML` files generated by the tool. Select: 'Tools' -> 'Annotate with peptide identifications'. See Figure Annotated MS2 Spectrum for an annotated MS2 spectrum of a UV-crosslinked peptide-RNA(oligo)nucleotide. To add/remove columns of the result grid 'identifications' below the spectrum window, right-click on the column header and a list of potential columns appears that you can choose from (Figure Custom columns). - -**Note**: The FDR-controlled results for crosslinked and non-crosslinked peptides are available in the `output_folder` as defined in the OpenNuXL node. Results contain `.csv`, `.tsv`, and `.idXML` files. File suffixes indicate whether percolator rescoring was performed ('_perc'), on which level results are reported ('_proteins', '_peptides', or '_XLs'), and for which FDR the results were filtered (e.g., FDR of 1%, '_0.0100'). The '_ambiguous_masses.csv' file contains precursor ion masses that match to... - -**Tip**: You can export the TOPPView inbuilt result table by clicking on 'Export table' below the result grid. - -
{{< figure src="/images/content_images/applications/nuxl_tv_vis.png" >}}
- -**Figure Annotated MS2 spectrum**: of a UV-crosslinked peptide-RNA(oligo)nucleotide displayed in TOPPView. The spectrum window shows OpenNuXL peak annotations in color (green and red) and unmatched peaks in black. The window contains the peptide sequence showing coverage with annotated fragment peaks. - -
{{< figure src="/images/content_images/applications/nuxl_tv_columns.png" >}}
- -**Figure Custom Columns**: By right-clicking on the result grid header, a pop-up window appears that allows choosing different columns to be added/removed. - -To export an image of the annotated spectrum, right-click on the spectrum and choose 'Save' -> 'As image'. You then have the option to export the image as a vector or raster image. - -**Tip**: You can add annotations manually by right-clicking on a peak. You can choose to define a label or an annotation ('Add label', 'Add peak annotation') and/or to display the m/z value ('Add peak annotation mz'). - -## Run as Web-Application -Please visit https://abi-services.cs.uni-tuebingen.de/nuxl/ to try out (or download) the experimental NuXL web app. - -
{{< figure src="/images/content_images/applications/NuXL_webapp.jpg" >}}
+--- +title: NuXL +subtitle: Protein-RNA and DNA cross-linking +sidebar: false +--- + +## Introduction + +NuXL is a novel tool for protein-RNA and DNA cross-linking studies. It is available as a +[stand-alone tool](#installation-as-stand-alone-tool) and as a [Proteome Discoverer community node](#installation-for-proteome-discoverer) or as a [web application](#run-as-web-application) that doesn't require you to install additional software. This guide outlines the steps to install NuXL, set up your analysis, and interpret your data using the provided tools and workflows. + +
{{< figure src="/images/content_images/applications/NuXL.png" >}}
+ +### Requirements: + +- HCD data acquired on a high-resolution MS +- Developed and tested on orbitrap instruments (including Velos, Lumos, and Astral) + +## Installation for Proteome Discoverer +NuXL is currently compatible with Proteome Discoverer 3.0 and 3.1. + +1. **Before Installation:** +Download the PD archive from https://github.com/timosachsenberg/OpenMS/releases/tag/NuXLPublication + +3. **Before Installation:** + - Please ensure that Proteome Discoverer is closed before running the NuXL installer. + +4. **Manual Installation:** + To register the NuXL nodes in ProteomeDiscoverer, files must be copied manually to the correct folder. Note: We are currently preparing an installer to automate the installation process. + + For PD 3.1 you need to: + 1. Copy `PD.OpenMS.NuXLNode.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Magellan.Server` + 2. Copy `PD.OpenMS.NuXLViewer.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Discoverer` + 3. Copy `ZedGraph_OpenMS.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Thermo.Discoverer` + 4. Go to `C:\Program Files\Thermo\Proteome Discoverer 3.1\Proteome Discoverer 3.1\Tools` and copy the folder `NuXL` from the .zip. + 5. Open PD, go to `Administration -> Manage Licenses`. Click `Scan for Missing Features` on top of the list of available licenses on the right side of the PD window. + + For PD 3.0 you need to: + 1. Copy `PD.OpenMS.AdapterNodes.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Thermo.Magellan.Server` + 3. Copy `ZedGraph_OpenMS.dll` to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Thermo.Discoverer` + 4. Go to `C:\Program Files\Thermo\Proteome Discoverer 3.0\Proteome Discoverer 3.0\Tools` and copy the folder `NuXL` from the .zip. + 5. Open PD, go to `Administration -> Manage Licenses`. Click `Scan for Missing Features` on top of the list of available licenses on the right side of the PD window. + +6. **Troubleshooting** + - Sometimes the operating system blocks the execution of .dlls copied from an external source. In these cases, it is necessary to go to the folder containing the .dll, right-click on it, choose properties, and then security. The dialog offers an option to unblock the .dll from execution. + +Note: Coming soon: One-click installer so no manual copy is required. The installer will automatically detect your Proteome Discoverer installation directory and deploy the NuXL nodes correctly. + +### Setting Up Your Study + +1. **Create a New Study:** + - Open Proteome Discoverer + - Create a new study, define a root directory and study name (e.g., `NuXL Study`). If you set up your first NuXL study, leave `(empty workflow)` + +2. **Adding a Protein Database:** + - Use the `Administration' -> `Maintain FASTA file` option in Proteome Discoverer to add new protein databases to your project. Once configured, you can select this database in the NuXL node of the processing workflow. + +### Analysis Workflows + +1. **Generating an analysis Template:** + - Click on `New Analysis`. Note: Once completed, you will later find the analysis template in "Open Analysis Template". + - In the analysis window you can set up 'processing' and 'consensus' workflows for NuXL + - **Processing Workflow** + - Click on Edit in the 'Processing Step' window + - If you want to use a preconfigured workflow click `Open` and select the template of your choice. + - For a minimal workflow, add and connect `Spectrum Files`, `Spectrum Selector`, and `NuXL` nodes. Note: You will find the NuXL node under the `Sequence Database Search` category. + +
{{< figure src="/images/content_images/applications/NuXL_minimalwf.png" >}}
+ + - Important settings in `Spectrum Selector`: set `MS Order` to `Any` to ensure MS1 spectra are not discarded. + - Configuring NuXL: + - By clicking on the NuXL processing node symbol in the workflow tree, you can adapt settings Note: If you click on `Show Advanced Parameter`, you will find additional parameters. + - NuXL provides `Presets` for different crosslinking mass spectrometry protocols. For most use cases, users just need to select a preset that fits their experimental protocol. In most cases, default parameters work reasonably well but results can sometimes be improved by tweaking other parameters. + +
{{< figure src="/images/content_images/applications/NuXL_params.png" >}}
+ + - Other Parameters: + - `Peptide identification` -> `Precursor mass tolerance` and `Fragment mass tolerance`: Adjust the fragment search mass accuracy according to your instrument. + - `Peptide identification` -> `Static modification` and `Dynamic modification`: Note: Standard fixed modification (e.g., `Carbamidomethyl (C)`) should be specified as Dynamic if the expected amino acid can form crosslinks, as otherwise these identifications would be lost. + - `Cross-links` -> `Length`: Depending on your nuclease digestion protocol, you might expect different lengths of nucleotide adducts. NuXL is trained and tested on nucleotide adducts of 1-4 nucleotide length. For properly digested samples we recommend lowering the length value to 2. In most cases, the default value works well. + - `Cross-links` -> `Sequence`: If your experiment involves a specific RNA or DNA species with a known sequence, it can be useful to enter the sequence in this field. The node then only considers possible nucleotide adduct combinations, potentially reducing false positives. + - `Peptide identification` -> `Peptide length min`: For complex proteome searches, we recommend using the value `6` as the minimum amino acid count. For complexes of few proteins, that would allow manual validation this can be further decreased. + - `Peptide identification` -> `Peptide length max`: We recommend setting a limit of ~30 for complex proteome-wide searches. + - `Peptide identification` -> `Missed cleavages`: If significant crosslinking is expected to occur and create missed cleavages, the value can be increased up to 3. + + - Advanced users: + - Users can define their own fragmentation rules and crosslink adduct settings. Select `none` in `Presets`. You can then define `Fragment adducts` and `Modifications` in advanced parameters according to your protocol in the following format: `[target nucleotide]:[formula]` or `[precursor adduct] ->[fragment adduct formula];[name]`. NuXL will use this information to generate all chemically feasible precursor adduct and fragment adduct combinations. + - `Cross-link identification` -> `Can cross-link`: If you expect only a single or subset of nucleotides to be amenable to crosslinking, set this up here. Nucleotides are specified by their one-letter code without a separator (e.g. UA for U and A nucleotides) + - `Cross-link identification` -> `Cysteine adduct`: If DTT is present during UV irradiation, it can generate additional crosslinks including a 152 Da linker. For more information see 1. If needed to be identified, we recommend specifying the composition of the linker in modifications and 'Fragment adducts' instead. Set this flag to true, if the 152 adduct is expected. + - `Cross-links` -> `Target nucleotides`: Sum formulas of the target nucleotides of the crosslink. Heavy labeled atoms are specified with parenthesis in front with the nominal mass of the respective isotope (e.g. (13)C, (15)N). + + - **Consensus Workflow**: Click on Edit in the 'Consensus Step' window + - Connect an `MSF Files` node to the 'NuXL Consensus' node. + - Set `Spectra to Store` to `All` in the MSF Files node. + +
{{< figure src="/images/content_images/applications/NuXL_minimalcwf.png" >}}
+ + +3. **Running the Workflow:** + - Drag and drop your Thermo Scientific .raw files onto the Processing Step in the Analysis tab + - Important: Ensure the "By File" checkbox is selected. + - Save the template + - Run the workflow + +
{{< figure src="/images/content_images/applications/NuXL_files.png" >}}
+ + +### Post-Analysis + +You can monitor the progress of your analysis by opening `Administration` -> `Show Job Queue`. + +1. **Viewing Results:** + - Result files are not exported automatically. All results are listed under the Analysis Results tab. You can view your results in Proteome Discoverer by double-clicking the result file. + +
{{< figure src="/images/content_images/applications/NuXL_result_file.png" >}}
+ + - Results are displayed in several tabs. You can view: `Proteins`, `PSMs and NuXL`, `MS/MS Spectrum Info`, `Input Files`, `Specialized Traces`, and `Study Information`. Depending on your consensus workflow, you might see additional tabs. + - The `PSMs and NuXL` table provides information about all peptide and crosslink spectrum matches (PSMs and NuXLs, respectively). Key columns include `Annotated Sequence`, `Modifications`, `Protein Accessions`, `q-value` (CSM-level q-value). We recommend to filter your results for 1% CSM-level FDR (`q-value` <= 0.01). + +
{{< figure src="/images/content_images/applications/NuXL_visualize.png" >}}
+ +2. **Exporting Data:** + - To export the results for further analysis in spreadsheet software (e.g., Microsoft Excel), navigate to `File -> Export -> To Microsoft Excel`. + +3. **Quality Assessment:** + - You can manually validate spectra quality by viewing annotated spectra. To do so, click on the "Show Spectrum" button in the 'PSM and NuXL' tab. + - Assess features such as peptide sequence coverage and the presence of key ions. + +Note: Please take a look at the Proteome Discoverer user guide for general information on Proteome Discoverer and additional nodes. + +## Installation as stand-alone tool + +NuXL is developed using the OpenMS framework. Once installed, it is accessible through the OpenNuXL tool. OpenMS offers a suite of tools for graphical interfaces and command-line operations, compatible with Windows, MacOS, and Linux platforms. This guide focuses specifically on using the graphical application on Windows. + +Alongside NuXL, the following core OpenMS software modules are also available and will be utilized in this tutorial. You can click on each term to access the respective documentation: + +TOPPAS: A workflow design and processing tool that allows for the automated analysis of mass spectrometry data. +TOPPView: A visualization tool that enables detailed analysis and review of mass spectrometric data. +This step-by-step guide ensures you can leverage the full capabilities of NuXL and the associated OpenMS modules efficiently. + +### Downloading the OpenMS installer with NuXL. +Download the OpenMS-NuXL installer from https://github.com/timosachsenberg/OpenMS/releases/tag/NuXLPublication + +### Preparing the input files: Raw data conversion. + +NuXL is compatible with Thermo raw files and also supports files that have been converted to the mzML format using freely available tools such as ProteoWizard's msconvert. If you provide NuXL with Thermo raw files, it automatically utilizes the ThermoRawFileParser from Thermo Scientific™ for efficient data conversion. This flexibility ensures seamless integration with your existing data processing workflows. + +### Getting started – setting up a basic processing workflow. + +Advanced users have the option to run the OpenNuXL tool directly from the command line, offering precise control over the tool's functionality. + +For those who prefer a more user-friendly setup, TOPPAS can be utilized to create streamlined workflows. + +To begin, launch an empty workflow window by running the TOPPAS pipeline tool. This approach allows you to design and manage your workflows visually, making complex configurations more manageable and accessible. + +To build a workflow in TOPPAS, utilize the drag-and-drop functionality. You can start by selecting the required tools from the 'TOPP tools' pane on the left side of the TOPPAS window. A basic workflow typically includes the following components: + +- **Input Files Node**: Designate nodes for input files labeled ``. +- **Output Files Node**: Set up nodes for output files labeled ``. +- **OpenNuXL Node**: This is found under the 'utils' collection and serves as the central processing node. + +A workflow must include at least two input nodes. To connect these input nodes to the OpenNuXL node: +1. Drag each node and drop it onto the workflow window. +2. Connect the nodes to establish a connection. + +Configure `File: database [fasta]` for one node and `File: in [mzML, raw]` for the other node as parameters in the pop-up window. As output options, you have the choice to select idXML (`File: out [idXML]`, for spectrum annotations in TOPPView), tsv (`File: out_tsv [tsv]`), or xls (`File: out_xls [xls]`) output file formats. + +### Configuring Percolator in the OpenNuXL Node + +To specify the path to the postprocessing tool Percolator within your workflow: + +1. **Access the Configuration Menu**: + - Double-click on the OpenNuXL node. This will open the configuration menu. + +2. **Set the Path for Percolator**: + - Find the field labeled `percolator_executable`. + - Enter the absolute path to the `percolator.exe` file, typically found in the OpenMS installation directory at `\share\OpenMS\THIRDPARTY\Percolator`. + +3. **Save Configuration Changes**: + - After setting the path, click 'Ok' to save the modifications to the node settings. + +4. **Save the Pipeline**: + - Go to the 'File' menu. + - Choose 'Save' to preserve your entire pipeline configuration. + +These steps ensure that Percolator is properly integrated into your workflow, enhancing the robustness of data post-processing through the OpenNuXL tool. + +With this step, the initial configuration of the OpenNuXL is completed and the pipeline can be saved from `File -> Save as` and used as a template. + +
{{< figure src="/images/content_images/applications/NuXL_toppas_basic.png" >}}
+ +### Run Configuration + +**Preset Selection**: Select a nucleotide adduct preset according to your workflow. + +Depending on your experiment, you can select an RNA or DNA preset or define your own adduct settings for custom protocols: + +
{{< figure src="/images/content_images/applications/NuXL_toppas_presets.png" >}}
+ +To view the MS1 (modifications) and MS2 (fragment_adducts) of the specific presets you can tick the box for advanced parameters and scroll to your preset of interest. + +**Advanced Users: Setting up Custom Nucleotide Adducts** + +In case none of the available presets matches your workflow, custom presets can be defined by defining 'target_nucleotides', 'can_cross-link', 'fragment_adducts', and 'modifications'. + If no preset is selected ('none'), you can add custom sum formulae in the same format as shown in advanced parameters for the presets (format: `[target nucleotide]:[formula]` or `[precursor adduct] ->[fragment adduct formula];[name]; + +
{{< figure src="/images/content_images/applications/NuXL_toppas_adducts.png" >}}
+ +**Other settings** + +Numerous other parameters can be specified to fine tune the search process (Table T1). In most cases defaults combined with proper presets should work. + +**Table T1. OpenNuXL Parameters Editable by the User** + +| Parameter | Description | Comment | +|----------------------------|--------------------------------------------------|---------------------------------------------------------------| +| `NET_executable` | Path to .NET framework executable | Only required on linux and mac. | +| `ThermoRaw_executable` | Path to ThermoRawFileParser executable | | +| `database` | The protein database used for identification | | +| `out_tsv` | tsv output file | | +| `out_xls` | XL output file with group q-values calculated at the XL PSM-level. Generated for the highest FDR threshold in report:xlFDR. | | +| `output_folder` | Store intermediate files (and final result) also in this output folder | Convenient for TOPPAS/KNIME/etc. users because these files are otherwise only stored in tmp folders. | +| `percolator_executable` | Path to percolator executable of the installation e.g. 'percolator.exe' | If no percolator results are reported (“perc” idxml files) check if the path is correctly filled in. | +| `filter` | Filtering steps applied to results | | +| `window_size` | Peak window for spectra preprocessing | | +| `peak_count` | Retained peaks in peak window | | +| `log` | Name of log file (created only when specified) | | +| `debug` | Sets the debug level | | +| `threads` | Sets the number of threads allowed to be used by the TOPP tool | | +| `no_progress` | Disables progress logging to command line | | +| `force` | Overwrites tool-specific checks | | +| `test` | Enables the test mode (needed for internal use only) | | +| `precursor -> mass_tolerance` | Precursor mass tolerance (+/- around precursor m/z) | Adjust the precursor search mass accuracy according to the used instrument. | +| `precursor -> mass_tolerance_unit` | Unit of precursor mass tolerance | | +| `precursor -> min_charge` | Minimum precursor charge to be considered. | | +| `precursor -> max_charge` | Maximum precursor charge to be considered. | | +| `precursors -> isotopes` | Corrects for mono-isotopic peak misassignments. (E.g.: 1 = prec. may be misassigned to first isotopic peak) | | +| `fragment -> mass_tolerance` | Fragment mass tolerance (+/- around fragment m/z) | Adjust the fragment search mass accuracy according to the used instrument. | +| `fragment -> mass_tolerance_unit` | Unit of fragment mass tolerance | | +| `modifications -> fixed` | Fixed modifications, specified using UniMod (www.unimod.org) terms, e.g. 'Carbamidomethyl (C)' | Standard fixed modification (e.g. 'Carbamidomethyl (C)') should be specified as variable, if the expected amino acid can form crosslinks, as otherwise these identifications would be lost. | +| `modifications -> variable`| Variable modifications, specified using UniMod (www.unimod.org) terms, e.g. 'Oxidation (M)' | | +| `modifications -> variable_max_per_peptide` | Maximum number of residues carrying a variable modification per candidate peptide | | +| `peptide -> min_size` | Minimum size of a peptide considered in the search | For complex proteome searches, we recommend using 5 as minimum amino acid count. | +| `peptide -> max_size` | Maximum size + +**Note**: Each `.raw`/`.mzML` file will be processed separately and requires one database file to be added. + +As an alternative to loading database files via an `` node, you can define the database in the OpenNuXL node by double-clicking the value field of the database parameter and selecting the respective database (Figure Database Configuration). + +
{{< figure src="/images/content_images/applications/NuXL_toppas_db.png" >}}
+ +**Figure Database Configuration**: Within the OpenNuXL node, select the sequence database. + +**Advanced Users**: In case you would like to combine several files in one search, we suggest using the OpenMS node ``, which can be found in 'File Handling'. The node needs to be combined with ``+`` and ``. + +
{{< figure src="/images/content_images/applications/NuXL_toppas_merge.png" >}}
+ +**Figure Workflow to merge `.mzML` files**: The `` node can be used as shown in this scheme for merging `.mzML` files e.g., from multiple fractions. + +To export FDR-filtered result files, specify the absolute path for an output folder by double-clicking the value field of the `output_folder` parameter and pasting your selected path. + +
{{< figure src="/images/content_images/applications/NuXL_toppas_outputfolder.png" >}}
+ +**Figure Output folder path**: To generate FDR filtered result files, a path needs to be specified. + +### OpenNuXL Pipeline Execution + +After selection of analysis parameters and defining input files, the workflow can be executed by selecting 'Pipeline' -> 'Run' or pressing F5. A popup window asking to specify the output directory appears. Once specified, OpenNuXL analysis is started. All current tasks are displayed in the Log window below the workflow window. Unfiltered result files will be saved in the `TOPPAS_out` folder, which is automatically generated in the selected path. + +**Figure Output Directory.**: Upon pipeline execution, the displayed pop-up window appears to enter the absolute path of the output folder. + +
{{< figure src="/images/content_images/applications/NuXL_toppas_log.png" >}}
+ +**Figure OpenNuXL Log window.**: The progress of OpenNuXL search is shown. + +### Result File Access - Visualization of Crosslinked Peptide-(Oligo)Nucleotide Spectra Using TOPPView + +If executed on `.raw` files, the OpenNuXL node will create corresponding `.mzML` files in the output directory (defined as in Figure Output Directory). For visualization of annotated spectra, open `.mzML` files in TOPPView. By default, double-clicking on `.mzML` files should automatically open the file in TOPPView. Once it is loaded, spectrum annotations matched by OpenNuXL can be added by loading `.idXML` files generated by the tool. Select: 'Tools' -> 'Annotate with peptide identifications'. See Figure Annotated MS2 Spectrum for an annotated MS2 spectrum of a UV-crosslinked peptide-RNA(oligo)nucleotide. To add/remove columns of the result grid 'identifications' below the spectrum window, right-click on the column header and a list of potential columns appears that you can choose from (Figure Custom columns). + +**Note**: The FDR-controlled results for crosslinked and non-crosslinked peptides are available in the `output_folder` as defined in the OpenNuXL node. Results contain `.csv`, `.tsv`, and `.idXML` files. File suffixes indicate whether percolator rescoring was performed ('_perc'), on which level results are reported ('_proteins', '_peptides', or '_XLs'), and for which FDR the results were filtered (e.g., FDR of 1%, '_0.0100'). The '_ambiguous_masses.csv' file contains precursor ion masses that match to... + +**Tip**: You can export the TOPPView inbuilt result table by clicking on 'Export table' below the result grid. + +
{{< figure src="/images/content_images/applications/nuxl_tv_vis.png" >}}
+ +**Figure Annotated MS2 spectrum**: of a UV-crosslinked peptide-RNA(oligo)nucleotide displayed in TOPPView. The spectrum window shows OpenNuXL peak annotations in color (green and red) and unmatched peaks in black. The window contains the peptide sequence showing coverage with annotated fragment peaks. + +
{{< figure src="/images/content_images/applications/nuxl_tv_columns.png" >}}
+ +**Figure Custom Columns**: By right-clicking on the result grid header, a pop-up window appears that allows choosing different columns to be added/removed. + +To export an image of the annotated spectrum, right-click on the spectrum and choose 'Save' -> 'As image'. You then have the option to export the image as a vector or raster image. + +**Tip**: You can add annotations manually by right-clicking on a peak. You can choose to define a label or an annotation ('Add label', 'Add peak annotation') and/or to display the m/z value ('Add peak annotation mz'). + +## Run as Web-Application +Please visit https://abi-services.cs.uni-tuebingen.de/nuxl/ to try out (or download) the experimental NuXL web app. + +
{{< figure src="/images/content_images/applications/NuXL_webapp.jpg" >}}
diff --git a/content/en/applications/openpepxl.md b/content/en/_applications/openpepxl.md similarity index 100% rename from content/en/applications/openpepxl.md rename to content/en/_applications/openpepxl.md diff --git a/content/en/applications.md b/content/en/applications.md new file mode 100644 index 0000000..91dc082 --- /dev/null +++ b/content/en/applications.md @@ -0,0 +1,5 @@ +--- +title: "OpenMS Applications" +type: "applications" +--- + diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html index 8b196d1..319aedd 100644 --- a/layouts/_default/baseof.html +++ b/layouts/_default/baseof.html @@ -54,8 +54,9 @@ {{ end }} {{ partial "javascript.html" . }} - {{ partial "analytics.html" . }} + + diff --git a/layouts/applications/single.html b/layouts/applications/single.html new file mode 100644 index 0000000..3516707 --- /dev/null +++ b/layouts/applications/single.html @@ -0,0 +1,71 @@ + + + + + + + {{ partial "meta.html" . }} + {{ block "title" . }}{{ .Site.Title }}{{ end }} + + + {{ partial "css.html" . }} + + + {{ partial "head.html" . }} + + + {{ if .IsTranslated }} + {{ range .Translations }} + + {{ end }} + {{ end }} + {{ template "_internal/twitter_cards.html" . }} + + + + + + {{ if (and .IsHome .Site.Params.fadeFrontPage) }} +
+ {{ end }} + + {{ block "navbar" . }} + {{ partial "navbar.html" . }} + {{ partial "navbar-clone.html" . }} + {{ end }} + + {{ block "main" . }} + {{ end }} + + {{ partial "applications.html" . }} + {{ if .IsPage }} + {{ if eq .File.BaseFileName "applications" }} + + {{ end }} + {{ end }} + + +
+ + {{ if .Site.Params.footer }} + {{ partial "footer.html" . }} + {{ end }} + + {{ partial "javascript.html" . }} + {{ partial "analytics.html" . }} + + + + + + + diff --git a/layouts/partials/applications.html b/layouts/partials/applications.html index 30a0e21..ef229b1 100644 --- a/layouts/partials/applications.html +++ b/layouts/partials/applications.html @@ -1,11 +1,129 @@ -{{ range first 1 (or (where .Site.RegularPages "Section" "news") (slice (.Site.GetPage "news"))) }} -{{ $newsLink := default "/news" .Params.newsLink }} -{{ $newsHeader := default .Title .Params.newsHeader }} -{{ $date := .Date.Format "2006-01-02" }} -
- - {{ if .Date }} - - {{ end }} +
+

OpenMS Software Database

+

Introduction text explaining how to use this database.

+ + + + +
+
+ +
+
+
-{{ end }} \ No newline at end of file + + + + diff --git a/generate_bib.py b/scripts/generate_bib.py similarity index 95% rename from generate_bib.py rename to scripts/generate_bib.py index 1e5d98a..74a0efb 100644 --- a/generate_bib.py +++ b/scripts/generate_bib.py @@ -28,7 +28,7 @@ urls.append(url) citations['url'] = urls -with open("content/en/publications.md", "w") as file: +with open("../content/en/publications.md", "w") as file: file.write(f"# List of OpenMS Publications\n\n") for year, year_citations in citations.groupby('Year', sort=False): year = int(year) diff --git a/static/data/tools.json b/static/data/tools.json new file mode 100644 index 0000000..a7435fe --- /dev/null +++ b/static/data/tools.json @@ -0,0 +1 @@ +[{"name":"AccurateMassSearch","tags":["metabolite identification"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_AccurateMassSearch.html","version":"3.1.0","description":"Match MS signals to molecules from a database by mass.","category":"TOPP Tool"},{"name":"AssayGeneratorMetabo","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_AssayGeneratorMetabo.html","version":"3.1.0","description":"Assay library generation from DDA data (Metabolomics)","category":"TOPP Tool"},{"name":"BaselineFilter","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_BaselineFilter.html","version":"3.1.0","description":"Removes the baseline from profile spectra using a top-hat filter.","category":"TOPP Tool"},{"name":"CVInspector","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_CVInspector.html","version":"3.1.0","description":"A tool for visualization and validation of PSI mapping and CV files.","category":"TOPP Tool"},{"name":"ClusterMassTraces","tags":["misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ClusterMassTraces.html","version":"3.1.0","description":"Creates pseudo spectra.","category":"TOPP Tool"},{"name":"ClusterMassTracesByPrecursor","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ClusterMassTracesByPrecursor.html","version":"3.1.0","description":"Correlate precursor masstraces with fragment ion masstraces in SWATH maps based on their elution profile.","category":"TOPP Tool"},{"name":"CometAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_CometAdapter.html","version":"3.1.0","description":"Annotates MS\/MS spectra using Comet.","category":"TOPP Tool"},{"name":"ConsensusID","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ConsensusID.html","version":"3.1.0","description":"Computes a consensus of peptide identifications of several identification engines.","category":"TOPP Tool"},{"name":"ConsensusMapNormalizer","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ConsensusMapNormalizer.html","version":"3.1.0","description":"Normalizes maps of one consensusXML file","category":"TOPP Tool"},{"name":"DTAExtractor","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DTAExtractor.html","version":"3.1.0","description":"Extracts spectra of an MS run file to several files in DTA format.","category":"TOPP Tool"},{"name":"DatabaseFilter","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DatabaseFilter.html","version":"3.1.0","description":"Filters a protein database (FASTA format) based on identified proteins","category":"TOPP Tool"},{"name":"DatabaseSuitability","tags":["quality control"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DatabaseSuitability.html","version":"3.1.0","description":"Computes a suitability score for a database which was used for a peptide identification search. Also reports the quality of LC-MS spectra.","category":"TOPP Tool"},{"name":"DeMeanderize","tags":["misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DeMeanderize.html","version":"3.1.0","description":"Orders the spectra of MALDI spotting plates correctly.","category":"TOPP Tool"},{"name":"Decharger","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_Decharger.html","version":"3.1.0","description":"Decharges and merges different feature charge variants of the same peptide.","category":"TOPP Tool"},{"name":"DecoyDatabase","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DecoyDatabase.html","version":"3.1.0","description":"Create decoy sequence database from forward sequence database.","category":"TOPP Tool"},{"name":"Digestor","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_Digestor.html","version":"3.1.0","description":"Digests a protein database in-silico.","category":"TOPP Tool"},{"name":"DigestorMotif","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_DigestorMotif.html","version":"3.1.0","description":"digests a protein database in-silico","category":"TOPP Tool"},{"name":"EICExtractor","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_EICExtractor.html","version":"3.1.0","description":"Extracts intensities from dedicates positions in a LC\/MS map","category":"TOPP Tool"},{"name":"Epifany","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_Epifany.html","version":"3.1.0","description":"Runs a Bayesian protein inference.","category":"TOPP Tool"},{"name":"ExternalCalibration","tags":["mass correction","calibration"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ExternalCalibration.html","version":"3.1.0","description":"Applies an external mass recalibration.","category":"TOPP Tool"},{"name":"FLASHDeconv","tags":["top-down"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FLASHDeconv.html","version":"3.1.0","description":"Ultra-fast high-quality deconvolution enables online processing of top-down MS data","category":"TOPP Tool"},{"name":"FalseDiscoveryRate","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FalseDiscoveryRate.html","version":"3.1.0","description":"Estimates the false discovery rate on peptide and protein level using decoy searches.","category":"TOPP Tool"},{"name":"FeatureFinderCentroided","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureFinderCentroided.html","version":"3.1.0","description":"Detects two-dimensional features in LC-MS data.","category":"TOPP Tool"},{"name":"FeatureFinderIdentification","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureFinderIdentification.html","version":"3.1.0","description":"Detects features in MS1 data based on peptide identifications.","category":"TOPP Tool"},{"name":"FeatureFinderMetabo","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureFinderMetabo.html","version":"3.1.0","description":"Assembles metabolite features from centroided (LC-)MS data using the mass trace approach.","category":"TOPP Tool"},{"name":"FeatureFinderMetaboIdent","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureFinderMetaboIdent.html","version":"3.1.0","description":"Detects features in MS1 data based on metabolite identifications.","category":"TOPP Tool"},{"name":"FeatureFinderMultiplex","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureFinderMultiplex.html","version":"3.1.0","description":"Determination of peak ratios in LC-MS data","category":"TOPP Tool"},{"name":"FeatureLinkerLabeled","tags":["feature linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureLinkerLabeled.html","version":"3.1.0","description":"Groups corresponding isotope-labeled features in a feature map.","category":"TOPP Tool"},{"name":"FeatureLinkerUnlabeled","tags":["feature linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureLinkerUnlabeled.html","version":"3.1.0","description":"Groups corresponding features from multiple maps.","category":"TOPP Tool"},{"name":"FeatureLinkerUnlabeledKD","tags":["feature linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureLinkerUnlabeledKD.html","version":"3.1.0","description":"Groups corresponding features from multiple maps.","category":"TOPP Tool"},{"name":"FeatureLinkerUnlabeledQT","tags":["feature linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FeatureLinkerUnlabeledQT.html","version":"3.1.0","description":"Groups corresponding features from multiple maps.","category":"TOPP Tool"},{"name":"FileConverter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FileConverter.html","version":"3.1.0","description":"Converts between different MS file formats.","category":"TOPP Tool"},{"name":"FileFilter","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FileFilter.html","version":"3.1.0","description":"Extracts or manipulates portions of data from peak, feature or consensus-feature files.","category":"TOPP Tool"},{"name":"FileInfo","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FileInfo.html","version":"3.1.0","description":"Shows basic information about the file, such as data ranges and file type.","category":"TOPP Tool"},{"name":"FileMerger","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FileMerger.html","version":"3.1.0","description":"Merges several MS files into one file.","category":"TOPP Tool"},{"name":"FuzzyDiff","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_FuzzyDiff.html","version":"3.1.0","description":"Compares two files, tolerating numeric differences.","category":"TOPP Tool"},{"name":"GNPSExport","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_GNPSExport.html","version":"3.1.0","description":"Tool to export representative consensus MS\/MS scan per consensusElement into a .MGF file format.\nSee the documentation on https:\/\/ccms-ucsd.github.io\/GNPSDocumentation\/featurebasedmolecularnetworking-with-openms","category":"TOPP Tool"},{"name":"HighResPrecursorMassCorrector","tags":["mass correction","calibration"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_HighResPrecursorMassCorrector.html","version":"3.1.0","description":"Corrects the precursor mass and charge determined by the instrument software.","category":"TOPP Tool"},{"name":"IDConflictResolver","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDConflictResolver.html","version":"3.1.0","description":"Resolves ambiguous annotations of features with peptide identifications","category":"TOPP Tool"},{"name":"IDDecoyProbability","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDDecoyProbability.html","version":"3.1.0","description":"Estimates peptide probabilities using a decoy search strategy.\nWARNING: This util is deprecated.","category":"TOPP Tool"},{"name":"IDExtractor","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDExtractor.html","version":"3.1.0","description":"Extracts 'n' peptides randomly or best 'n' from idXML files.","category":"TOPP Tool"},{"name":"IDFileConverter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDFileConverter.html","version":"3.1.0","description":"Converts identification engine file formats.","category":"TOPP Tool"},{"name":"IDFilter","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDFilter.html","version":"3.1.0","description":"Filters results from protein or peptide identification engines based on different criteria.","category":"TOPP Tool"},{"name":"IDMapper","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDMapper.html","version":"3.1.0","description":"Assigns protein\/peptide identifications to features or consensus features.","category":"TOPP Tool"},{"name":"IDMassAccuracy","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDMassAccuracy.html","version":"3.1.0","description":"Calculates a distribution of the mass error from given mass spectra and IDs.","category":"TOPP Tool"},{"name":"IDMerger","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDMerger.html","version":"3.1.0","description":"Merges several protein\/peptide identification files into one file.","category":"TOPP Tool"},{"name":"IDPosteriorErrorProbability","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDPosteriorErrorProbability.html","version":"3.1.0","description":"Estimates probabilities for incorrectly assigned peptide sequences and a set of search engine scores using a mixture model.","category":"TOPP Tool"},{"name":"IDRTCalibration","tags":["mass correction","calibration"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDRTCalibration.html","version":"3.1.0","description":"Can be used to calibrate RTs of peptide hits linearly to standards.","category":"TOPP Tool"},{"name":"IDRipper","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDRipper.html","version":"3.1.0","description":"Split protein\/peptide identification file into several files according to identification run and annotated file origin.","category":"TOPP Tool"},{"name":"IDScoreSwitcher","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDScoreSwitcher.html","version":"3.1.0","description":"Switches between different scores of peptide or protein hits in identification data","category":"TOPP Tool"},{"name":"IDSplitter","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IDSplitter.html","version":"3.1.0","description":"Splits protein\/peptide identifications off of annotated data files","category":"TOPP Tool"},{"name":"InternalCalibration","tags":["mass correction","calibration"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_InternalCalibration.html","version":"3.1.0","description":"Applies an internal mass recalibration.","category":"TOPP Tool"},{"name":"IsobaricAnalyzer","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_IsobaricAnalyzer.html","version":"3.1.0","description":"Calculates isobaric quantitative values for peptides","category":"TOPP Tool"},{"name":"JSONExporter","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_JSONExporter.html","version":"3.1.0","description":"Exports .oms (SQLite) files in JSON format","category":"TOPP Tool"},{"name":"LuciphorAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_LuciphorAdapter.html","version":"3.1.0","description":"Modification site localisation using LuciPHOr2.","category":"TOPP Tool"},{"name":"MRMMapper","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MRMMapper.html","version":"3.1.0","description":"MRMMapper maps measured chromatograms (mzML) and the transitions used (TraML)","category":"TOPP Tool"},{"name":"MRMPairFinder","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MRMPairFinder.html","version":"3.1.0","description":"Util which can be used to evaluate labeled pair ratios on MRM features.","category":"TOPP Tool"},{"name":"MRMTransitionGroupPicker","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MRMTransitionGroupPicker.html","version":"3.1.0","description":"Picks peaks in SRM\/MRM chromatograms.","category":"TOPP Tool"},{"name":"MSFraggerAdapter","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MSFraggerAdapter.html","version":"3.1.0","description":"Peptide Identification with MSFragger.\nImportant note:\nThe Regents of the University of Michigan (\"Michigan\") grants us permission to redistribute \nthe MS Fragger application developed by Michigan within the OpenMS Pipeline and make available \nfor use on related service offerings supported by the University of Tubingen and the Center for\nIntegrative Bioinformatics. \nPer the license agreement the use of the pipeline and associated materials is for academic \nresearch, non-commercial or educational purposes. Any commercial use inquiries \nmust be directed to the University of Michigan Technology Transfer Office at \ntechtransfer@umich.edu. All right title and interest in MS Fragger shall remain with the \nUniversity of Michigan.\n\nFor details, please see the supplied license file or \nhttps:\/\/raw.githubusercontent.com\/OpenMS\/THIRDPARTY\/master\/All\/MSFragger\/License.txt \n","category":"TOPP Tool"},{"name":"MSGFPlusAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MSGFPlusAdapter.html","version":"3.1.0","description":"MS\/MS database search using MS-GF+.","category":"TOPP Tool"},{"name":"MSstatsConverter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MSstatsConverter.html","version":"3.1.0","description":"Converter to input for MSstats","category":"TOPP Tool"},{"name":"MaRaClusterAdapter","tags":["spectrum processing: misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MaRaClusterAdapter.html","version":"3.1.0","description":"Facilitate input to MaRaCluster and reintegrate.","category":"TOPP Tool"},{"name":"MapAlignerIdentification","tags":["map alignment"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapAlignerIdentification.html","version":"3.1.0","description":"Corrects retention time distortions between maps based on common peptide identifications.","category":"TOPP Tool"},{"name":"MapAlignerPoseClustering","tags":["map alignment"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapAlignerPoseClustering.html","version":"3.1.0","description":"Corrects retention time distortions between maps using a pose clustering approach.","category":"TOPP Tool"},{"name":"MapAlignerTreeGuided","tags":["map alignment"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapAlignerTreeGuided.html","version":"3.1.0","description":"Tree guided correction of retention time distortions between maps.","category":"TOPP Tool"},{"name":"MapNormalizer","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapNormalizer.html","version":"3.1.0","description":"Normalizes peak intensities in an MS run.","category":"TOPP Tool"},{"name":"MapRTTransformer","tags":["map alignment"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapRTTransformer.html","version":"3.1.0","description":"Applies retention time transformations to maps.","category":"TOPP Tool"},{"name":"MapStatistics","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MapStatistics.html","version":"3.1.0","description":"Extract extended statistics on the features of a map for quality control.","category":"TOPP Tool"},{"name":"MascotAdapterOnline","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MascotAdapterOnline.html","version":"3.1.0","description":"Annotates MS\/MS spectra using Mascot.","category":"TOPP Tool"},{"name":"MassCalculator","tags":["misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MassCalculator.html","version":"3.1.0","description":"Calculates masses and mass-to-charge ratios of peptide sequences","category":"TOPP Tool"},{"name":"MassTraceExtractor","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MassTraceExtractor.html","version":"3.1.0","description":"Detects mass traces in centroided LC-MS data.","category":"TOPP Tool"},{"name":"MetaProSIP","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MetaProSIP.html","version":"3.1.0","description":"Performs proteinSIP on peptide features for elemental flux analysis.","category":"TOPP Tool"},{"name":"MetaboliteAdductDecharger","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MetaboliteAdductDecharger.html","version":"3.1.0","description":"Decharges and merges different feature charge variants of the same metabolite.","category":"TOPP Tool"},{"name":"MetaboliteSpectralMatcher","tags":["metabolite identification"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MetaboliteSpectralMatcher.html","version":"3.1.0","description":"Perform a spectral library search.","category":"TOPP Tool"},{"name":"MultiplexResolver","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MultiplexResolver.html","version":"3.1.0","description":"Completes peptide multiplets and resolves conflicts within them.","category":"TOPP Tool"},{"name":"MzMLSplitter","tags":["file filtering","extraction","merging"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MzMLSplitter.html","version":"3.1.0","description":"Splits an mzML file into multiple parts","category":"TOPP Tool"},{"name":"MzTabExporter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_MzTabExporter.html","version":"3.1.0","description":"Exports various XML formats to an mzTab file.","category":"TOPP Tool"},{"name":"NoiseFilterGaussian","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_NoiseFilterGaussian.html","version":"3.1.0","description":"Removes noise from profile spectra by using Gaussian filter (on uniform as well as non-uniform data).","category":"TOPP Tool"},{"name":"NoiseFilterSGolay","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_NoiseFilterSGolay.html","version":"3.1.0","description":"Removes noise from profile spectra by using a Savitzky Golay filter. Requires uniform (equidistant) data.","category":"TOPP Tool"},{"name":"NovorAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_NovorAdapter.html","version":"3.1.0","description":"Performs de novo sequencing of peptides from MS\/MS data with Novor.","category":"TOPP Tool"},{"name":"NucleicAcidSearchEngine","tags":["rna"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_NucleicAcidSearchEngine.html","version":"3.1.0","description":"Annotate nucleic acid identifications to MS\/MS spectra.","category":"TOPP Tool"},{"name":"OpenMSDatabasesInfo","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenMSDatabasesInfo.html","version":"3.1.0","description":"Prints the content of OpenMS' enzyme and modification databases to TSV","category":"TOPP Tool"},{"name":"OpenMSInfo","tags":["misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenMSInfo.html","version":"3.1.0","description":"Prints configurations details of OpenMS.","category":"TOPP Tool"},{"name":"OpenPepXL","tags":["cross-linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenPepXL.html","version":"3.1.0","description":"Tool for protein-protein cross-linking identification using labeled linkers.","category":"TOPP Tool"},{"name":"OpenPepXLLF","tags":["cross-linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenPepXLLF.html","version":"3.1.0","description":"Tool for protein-protein cross linking with label-free linkers.","category":"TOPP Tool"},{"name":"OpenSwathAnalyzer","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathAnalyzer.html","version":"3.1.0","description":"Picks peaks and finds features in an SWATH-MS or SRM experiment.","category":"TOPP Tool"},{"name":"OpenSwathAssayGenerator","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathAssayGenerator.html","version":"3.1.0","description":"Generates assays according to different models for a specific TraML","category":"TOPP Tool"},{"name":"OpenSwathChromatogramExtractor","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathChromatogramExtractor.html","version":"3.1.0","description":"Extract chromatograms (XIC) from a MS2 map file.","category":"TOPP Tool"},{"name":"OpenSwathConfidenceScoring","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathConfidenceScoring.html","version":"3.1.0","description":"Compute confidence scores for OpenSwath results","category":"TOPP Tool"},{"name":"OpenSwathDIAPreScoring","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathDIAPreScoring.html","version":"3.1.0","description":"Scoring spectra using the DIA scores.","category":"TOPP Tool"},{"name":"OpenSwathDecoyGenerator","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathDecoyGenerator.html","version":"3.1.0","description":"Generates decoys according to different models for a specific TraML","category":"TOPP Tool"},{"name":"OpenSwathFeatureXMLToTSV","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathFeatureXMLToTSV.html","version":"3.1.0","description":"Converts a featureXML to a mProphet tsv.","category":"TOPP Tool"},{"name":"OpenSwathFileSplitter","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathFileSplitter.html","version":"3.1.0","description":"Splits SWATH files into n files, each containing one window.","category":"TOPP Tool"},{"name":"OpenSwathMzMLFileCacher","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathMzMLFileCacher.html","version":"3.1.0","description":"This tool caches the spectra and chromatogram data of an mzML to disk.","category":"TOPP Tool"},{"name":"OpenSwathRTNormalizer","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathRTNormalizer.html","version":"3.1.0","description":"This tool will take a description of RT peptides and their normalized retention time to write out a transformation file on how to transform the RT space into the normalized space.","category":"TOPP Tool"},{"name":"OpenSwathRewriteToFeatureXML","tags":["targeted experiments","openswath"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathRewriteToFeatureXML.html","version":"3.1.0","description":"Combines featureXML and mProphet tsv to FDR filtered featureXML.","category":"TOPP Tool"},{"name":"OpenSwathWorkflow","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_OpenSwathWorkflow.html","version":"3.1.0","description":"Complete workflow to run OpenSWATH","category":"TOPP Tool"},{"name":"PSMFeatureExtractor","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PSMFeatureExtractor.html","version":"3.1.0","description":"Computes extra features for each input PSM.","category":"TOPP Tool"},{"name":"PeakPickerHiRes","tags":["spectrum processing: centroiding"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PeakPickerHiRes.html","version":"3.1.0","description":"Finds mass spectrometric peaks in profile mass spectra.","category":"TOPP Tool"},{"name":"PeakPickerIterative","tags":["spectrum processing: centroiding"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PeakPickerIterative.html","version":"3.1.0","description":"Finds mass spectrometric peaks in profile mass spectra.","category":"TOPP Tool"},{"name":"PeptideIndexer","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PeptideIndexer.html","version":"3.1.0","description":"Refreshes the protein references for all peptide hits.","category":"TOPP Tool"},{"name":"PercolatorAdapter","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PercolatorAdapter.html","version":"3.1.0","description":"Facilitate input to Percolator and reintegrate.","category":"TOPP Tool"},{"name":"PhosphoScoring","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_PhosphoScoring.html","version":"3.1.0","description":"Scores potential phosphorylation sites in order to localize the most probable sites.","category":"TOPP Tool"},{"name":"ProteinInference","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ProteinInference.html","version":"3.1.0","description":"Protein inference based on an aggregation of the scores of the identified peptides.","category":"TOPP Tool"},{"name":"ProteinQuantifier","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ProteinQuantifier.html","version":"3.1.0","description":"Compute peptide and protein abundances","category":"TOPP Tool"},{"name":"ProteomicsLFQ","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_ProteomicsLFQ.html","version":"3.1.0","description":"A standard proteomics LFQ pipeline.","category":"TOPP Tool"},{"name":"QCCalculator","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCCalculator.html","version":"3.1.0","description":"Calculates basic quality parameters from MS experiments and subsequent analysis data as identification or feature detection.","category":"TOPP Tool"},{"name":"QCEmbedder","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCEmbedder.html","version":"3.1.0","description":"Attaches a table or an image to a given qc parameter.","category":"TOPP Tool"},{"name":"QCExporter","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCExporter.html","version":"3.1.0","description":"Will extract several qp from several run\/sets in a tabular format.","category":"TOPP Tool"},{"name":"QCExtractor","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCExtractor.html","version":"3.1.0","description":"Extracts a table attachment to a given qc parameter.","category":"TOPP Tool"},{"name":"QCImporter","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCImporter.html","version":"3.1.0","description":"Imports tables with quality control parameters into qcml files.","category":"TOPP Tool"},{"name":"QCMerger","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCMerger.html","version":"3.1.0","description":"Merges two qcml files together.","category":"TOPP Tool"},{"name":"QCShrinker","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QCShrinker.html","version":"3.1.0","description":"This application is used to remove the verbose table attachments from a qcml file that are not needed anymore, e.g. for a final report.","category":"TOPP Tool"},{"name":"QualityControl","tags":["quality control"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_QualityControl.html","version":"3.1.0","description":"Computes various QC metrics from many possible input files (only the consensusXML is required). The more optional files you provide, the more metrics you get.","category":"TOPP Tool"},{"name":"RNADigestor","tags":["rna"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_RNADigestor.html","version":"3.1.0","description":"Digests an RNA sequence database in-silico.","category":"TOPP Tool"},{"name":"RNAMassCalculator","tags":["rna"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_RNAMassCalculator.html","version":"3.1.0","description":"Calculates masses, mass-to-charge ratios and sum formulas of RNA sequences","category":"TOPP Tool"},{"name":"RNPxlXICFilter","tags":["cross-linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_RNPxlXICFilter.html","version":"3.1.0","description":"Remove MS2 spectra from treatment based on the fold change between control and treatment.","category":"TOPP Tool"},{"name":"SageAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SageAdapter.html","version":"3.1.0","description":"Annotates MS\/MS spectra using Sage.","category":"TOPP Tool"},{"name":"SeedListGenerator","tags":["quantitation"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SeedListGenerator.html","version":"3.1.0","description":"Generates seed lists for feature detection.","category":"TOPP Tool"},{"name":"SemanticValidator","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SemanticValidator.html","version":"3.1.0","description":"SemanticValidator for semantically validating certain XML files.","category":"TOPP Tool"},{"name":"SequenceCoverageCalculator","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SequenceCoverageCalculator.html","version":"3.1.0","description":"Prints information about idXML files.","category":"TOPP Tool"},{"name":"SimpleSearchEngine","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SimpleSearchEngine.html","version":"3.1.0","description":"Annotates MS\/MS spectra using SimpleSearchEngine.","category":"TOPP Tool"},{"name":"SpecLibCreator","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpecLibCreator.html","version":"3.1.0","description":"Creates an MSP formatted spectral library.","category":"TOPP Tool"},{"name":"SpecLibSearcher","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpecLibSearcher.html","version":"3.1.0","description":"Identifies peptide MS\/MS spectra by spectral matching with a searchable spectral library.","category":"TOPP Tool"},{"name":"SpectraFilterNLargest","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraFilterNLargest.html","version":"3.1.0","description":"Applies thresholdfilter to peak spectra.","category":"TOPP Tool"},{"name":"SpectraFilterNormalizer","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraFilterNormalizer.html","version":"3.1.0","description":"Normalizes intensity of peak spectra.","category":"TOPP Tool"},{"name":"SpectraFilterThresholdMower","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraFilterThresholdMower.html","version":"3.1.0","description":"Applies thresholdfilter to peak spectra.","category":"TOPP Tool"},{"name":"SpectraFilterWindowMower","tags":["spectrum processing: peak smoothing","normalization"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraFilterWindowMower.html","version":"3.1.0","description":"Applies thresholdfilter to peak spectra.","category":"TOPP Tool"},{"name":"SpectraMerger","tags":["spectrum processing: misc","helpers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraMerger.html","version":"3.1.0","description":"Merges spectra (each MS level separately), increasing S\/N ratios.","category":"TOPP Tool"},{"name":"SpectraSTSearchAdapter","tags":["identification of proteins","peptides (searchengines)"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_SpectraSTSearchAdapter.html","version":"3.1.0","description":"Interface to the SEARCH Mode of the SpectraST executable","category":"TOPP Tool"},{"name":"StaticModification","tags":["identification processing"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_StaticModification.html","version":"3.1.0","description":"Applies a set of modifications to all PeptideIDs in an idXML file.","category":"TOPP Tool"},{"name":"TICCalculator","tags":["no tag"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_TICCalculator.html","version":"3.1.0","description":"Calculates the TIC from a mass spectrometric raw file (useful for benchmarking).","category":"TOPP Tool"},{"name":"TargetedFileConverter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_TargetedFileConverter.html","version":"3.1.0","description":"Converts different transition files for targeted proteomics \/ metabolomics analysis.","category":"TOPP Tool"},{"name":"TextExporter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_TextExporter.html","version":"3.1.0","description":"Exports various XML formats to a text file.","category":"TOPP Tool"},{"name":"TriqlerConverter","tags":["file converter"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_TriqlerConverter.html","version":"3.1.0","description":"Converter to input for Triqler","category":"TOPP Tool"},{"name":"XFDR","tags":["cross-linking"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_XFDR.html","version":"3.1.0","description":"Calculates false discovery rate estimates on crosslink identifications","category":"TOPP Tool"},{"name":"XMLValidator","tags":["for developers"],"url":"http:\/\/www.openms.de\/doxygen\/nightly\/html\/TOPP_XMLValidator.html","version":"3.1.0","description":"Validates XML files against an XSD schema.","category":"TOPP Tool"},{"name":"diaproteomics","tags":["data-independent-proteomics","dia-proteomics","proteomics"],"url":"https:\/\/nf-co.re\/diaproteomics","version":"1.2.4","description":"Automated quantitative analysis of DIA proteomics mass spectrometry measurements.","category":"nf-core"},{"name":"mhcquant","tags":["dda","immunopeptidomics","mass-spectrometry","mhc","peptides"],"url":"https:\/\/nf-co.re\/mhcquant","version":"2.6.0","description":"Identify and quantify MHC eluted peptides from mass spectrometry raw data","category":"nf-core"},{"name":"proteomicslfq","tags":["label-free-quantification","proteomics"],"url":"https:\/\/nf-co.re\/proteomicslfq","version":"1.0.0","description":"Proteomics label-free quantification (LFQ) analysis pipeline","category":"nf-core"},{"name":"quantms","tags":["dia","lfq","mass-spec","mass-spectrometry","proteogenomics","proteomics","tmt"],"url":"https:\/\/nf-co.re\/quantms","version":"1.2.0","description":"Quantitative mass spectrometry workflow. Currently supports proteomics experiments with complex experimental designs for DDA-LFQ, DDA-Isobaric and DIA-LFQ quantification.","category":"nf-core"}] \ No newline at end of file diff --git a/static/js/applications.js b/static/js/applications.js new file mode 100644 index 0000000..7e1bd76 --- /dev/null +++ b/static/js/applications.js @@ -0,0 +1,254 @@ +let selectedTags = {}; +let allItems = []; + +// Fetch the tools data +fetch('/data/tools.json') + .then(response => { + if (!response.ok) throw new Error("Network response was not ok"); + return response.json(); + }) + .then(data => { + allItems = data; + renderCategoryButtons(); + renderTagButtons(); + renderItems(); + }) + .catch(error => { + console.error("Failed to fetch data:", error); + }); + +// Create category buttons dynamically +function renderCategoryButtons() { + const container = document.getElementById("category-buttons"); + container.innerHTML = ""; + + const categories = new Set(["All"]); + allItems.forEach(app => categories.add(app.category)); + + categories.forEach(category => { + const button = document.createElement("button"); + button.textContent = category; + button.addEventListener("click", (event) => setCategory(event, category)); + container.appendChild(button); + }); +} + +// Render tag buttons and also populate search suggestions +function renderTagButtons() { + const tagContainer = document.getElementById("tag-buttons"); + tagContainer.innerHTML = ""; + const uniqueTags = new Set(); + const toolNames = new Set(); + + allItems.forEach(app => { + // Collect tags + if (Array.isArray(app.tags)) { + app.tags.forEach(tag => uniqueTags.add(tag)); + } + + // Collect tool names + if (app.name) { + toolNames.add(app.name); + } + }); + + // Sort alphabetically + const sortedTags = Array.from(uniqueTags).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })); + const sortedToolNames = Array.from(toolNames).sort((a, b) => a.localeCompare(b, undefined, { sensitivity: 'base' })); + + // Render tag buttons + sortedTags.forEach(tag => { + const button = document.createElement("button"); + button.textContent = "+ " + tag; + button.className = "tag-button"; + button.dataset.tag = tag; + button.setAttribute("data-tag-button", tag); + button.addEventListener("click", () => toggleTag(button, tag)); + tagContainer.appendChild(button); + }); + + // Populate the tool name suggestions in the datalist + const suggestionContainer = document.getElementById("tag-suggestions"); + suggestionContainer.innerHTML = ""; // Clear old suggestions + + sortedToolNames.forEach(name => { + const option = document.createElement("option"); + option.value = name; + suggestionContainer.appendChild(option); + }); + + // Add reset button listener + const resetBtn = document.getElementById("reset-tags"); + if (resetBtn) { + resetBtn.addEventListener("click", resetTags); + } +} + + +// Render items +function renderItems() { + const container = document.getElementById("item-list"); + container.innerHTML = ""; + + allItems.forEach(app => { + const item = document.createElement("div"); + item.className = "item"; + item.setAttribute("data-category", app.category); + item.setAttribute("data-tags", app.tags.join(",")); + item.setAttribute("data-url", app.url); + + const tagsHTML = app.tags.map(tag => { + let tagClass = "entry-tag"; + let tagSymbol = "+"; + if (selectedTags[tag] === "positive") { + tagClass += " positive"; + tagSymbol = "-"; + } else if (selectedTags[tag] === "negative") { + tagClass += " negative"; + tagSymbol = "×"; + } + return `${tagSymbol} ${tag}`; + }).join(""); + + const tagSpans = item.querySelectorAll('.entry-tag'); + tagSpans.forEach(span => { + span.addEventListener("click", (e) => { + e.stopPropagation(); // Prevent redirect + const tag = span.getAttribute("data-tag"); + toggleTag(null, tag); // Pass null since it's not a button + }); + }); + + item.innerHTML = ` +
+ ${app.name} (v${app.version}) +

${app.description || ''}

+ +
+ ${app.category} + `; + + // Click on item redirects unless a tag is clicked + item.style.cursor = "pointer"; + item.addEventListener("click", (e) => { + // If a tag span was clicked, don't follow the URL + if (e.target.classList.contains("entry-tag")) return; + window.open(app.url, "_blank"); + }); + + // Add event listeners to tags inside the item + const tagElements = item.querySelectorAll(".entry-tag"); + tagElements.forEach(tagEl => { + const tag = tagEl.dataset.tag; + tagEl.style.cursor = "pointer"; + tagEl.addEventListener("click", (e) => { + e.stopPropagation(); // Prevent item click + // Find corresponding global tag button + const tagButton = document.querySelector(`.tag-button[data-tag="${tag}"]`); + if (tagButton) toggleTag(tagButton, tag); // Update button style + else toggleTag(tagEl, tag); // Fallback if tag is only shown inside + }); + }); + + container.appendChild(item); + }); + + window.filterItems(); +} + +// Handle tag toggle +window.toggleTag = function(buttonElement, tag) { + const allButtons = document.querySelectorAll(`[data-tag-button="${tag}"]`); + const allSpans = document.querySelectorAll(`.entry-tag[data-tag="${tag}"]`); + + if (!selectedTags[tag]) { + selectedTags[tag] = "positive"; + allButtons.forEach(btn => { + btn.classList.add("positive"); + btn.classList.remove("negative"); + btn.textContent = "- " + tag; + }); + allSpans.forEach(span => { + span.classList.add("positive"); + span.classList.remove("negative"); + span.textContent = "- " + tag; + }); + } else if (selectedTags[tag] === "positive") { + selectedTags[tag] = "negative"; + allButtons.forEach(btn => { + btn.classList.remove("positive"); + btn.classList.add("negative"); + btn.textContent = "× " + tag; + }); + allSpans.forEach(span => { + span.classList.remove("positive"); + span.classList.add("negative"); + span.textContent = "× " + tag; + }); + } else { + delete selectedTags[tag]; + allButtons.forEach(btn => { + btn.classList.remove("positive", "negative"); + btn.textContent = "+ " + tag; + }); + allSpans.forEach(span => { + span.classList.remove("positive", "negative"); + span.textContent = "+ " + tag; + }); + } + + filterItems(); +}; + + +// Handle category selection +window.setCategory = function (event, category) { + document.querySelectorAll(".category-select button").forEach(btn => btn.style.background = "#3498db"); + event.target.style.background = "#2980b9"; + document.getElementById("item-list").setAttribute("data-category", category); + filterItems(); +}; + +// Reset tag filters +function resetTags() { + selectedTags = {}; + document.querySelectorAll("#tag-buttons button").forEach(btn => { + btn.classList.remove("positive", "negative"); + const tag = btn.textContent.slice(2); + btn.textContent = "+ " + tag; + }); + filterItems(); +} + +// Filtering logic +window.filterItems = function () { + let searchQuery = document.getElementById("search").value.toLowerCase(); + let categoryFilter = document.getElementById("item-list").getAttribute("data-category") || "All"; + let matchCount = 0; + + const positiveTags = Object.entries(selectedTags) + .filter(([_, status]) => status === "positive") + .map(([tag]) => tag); + + const negativeTags = Object.entries(selectedTags) + .filter(([_, status]) => status === "negative") + .map(([tag]) => tag); + + document.querySelectorAll(".item").forEach(item => { + const itemText = item.textContent.toLowerCase(); + const itemCategory = item.getAttribute("data-category"); + const itemTags = item.getAttribute("data-tags").split(","); + + const matchesSearch = itemText.includes(searchQuery); + const matchesCategory = (categoryFilter === "All" || itemCategory === categoryFilter); + const matchesPositive = (positiveTags.length === 0) || positiveTags.some(tag => itemTags.includes(tag)); + const matchesNegative = !negativeTags.some(tag => itemTags.includes(tag)); + const matchesTags = matchesPositive && matchesNegative; + + const show = matchesSearch && matchesCategory && matchesTags; + item.style.display = show ? "block" : "none"; + if (show) matchCount++; + }); + + document.getElementById("match-count").textContent = `${matchCount} match${matchCount !== 1 ? 'es' : ''} found`; +};