# bullseye

## Usage:

`crux bullseye [options] <MS1 spectra> <MS2 spectra>`

## Description:

Bullseye assigns high resolution precursor m/z values to fragmentation (MS2) spectra. Bullseye uses the Hardklör algorithm to identify persistent isotope distributions (PPIDs) in precursor (MS1) scans. For each PPID, MS2 scans that occur within a specified time and m/z range are assigned the average monoisotopic m/z from the PPID assigned as the precursor m/z. A detailed description of the Bullseye algorithm is given in

Hsieh EJ, Hoopmann MR, Maclean B, MacCoss MJ. "Comparison of Database Search Strategies for High Precursor Mass Accuracy MS/MS Data". Journal of Proteome Research. 9(2):1138-43, 2010.

Note that, in complex samples, it is not unusual for multiple PPIDs to be found near an MS2 spectrum. In those cases, Bullseye will assign both mass measurements to the spectrum. In a .ms2 file, multiple Z line entries will be made for the scan number.

It is possible to reduce the number of scans that receive multiple PPIDs by adjusting Bullseye's parameters. For example, reducing the retention time tolerance ("--retention-tolerance") or reducing the tolerance for persistent peptides ("--persist-tolerance") will reduce the chances of multiple PPIDs being assigned.

Bullseye uses Hardklör, so all of the Hardklör parameters may also be used with Bullseye. For users familiar with the standalone version of Bullseye, the parameter mapping is here.

## Input:

- `MS1 spectra` – The name of a file from which to parse high-resolution spectra of intact peptides. The file may be in MS1 (.ms1), binary MS1 (.bms1), compressed MS1 (.cms1), or mzXML (.mzXML) format. Bullseye will search for PPIDs in these spectra.
- `MS2 spectra` – The name of a file from which to parse peptide fragmentation spectra. The file may be in MS2 (.ms2), binary MS2 (.bms2), compressed MS2 (.cms2) or mzXML (.mzXML) format. Bullseye will assign high-resolution precursor masses to these spectra.

## Output:

The program writes files to the folder `crux-output` by default. The name of the output folder can be set by the user using the `--output-dir` option. The following files will be created:

- `bullseye.pid.` – a file containing the fragmentation spectra for which accurate masses were successfully inferred. Unless otherwise specified (with the --spectrum-format option), the output file format is ".ms2". Note that if the output format is ".ms2," then a single spectrum may have multiple "Z" lines, each indicating a charge state and accurate mass. In addition, Bullseye inserts an "I" line (for charge-dependent analysis) corresponding to each "Z" line. The "I" line contains "EZ" in the second column, the charge and mass from the associated "Z" line in the third and fourth colummns, followed by the chromatographic apex and the intensity at the chromatographic apex.
- `bullseye.no-pid.` – a file containing the fragmentation spectra for which accurate masses were not inferred.
- `hardklor.mono.txt` – a tab-delimited text file containing one line for each isotope distribution, as described here.
- `bullseye.params.txt` – a file containing the name and value of all parameters/options for the current operation. Not all parameters in the file may have been used in the operation. The resulting file can be used with the --parameter-file option for other crux programs.
- `bullseye.log.txt` – a log file containing a copy of all messages that were printed to standard error.

## Options:

- ### Identifying PPIDs in MS1 spectra

  - `--max-persist <float>` – Ignore PPIDs that persist for longer than this length of time in the MS1 spectra. The unit of time is whatever unit is used in your data file (usually minutes). These PPIDs are considered contaminants. Default = `2`.
  - `--persist-tolerance <float>` – Set the mass tolerance (+/-ppm) for finding PPIDs in consecutive MS1 scans. Default = `10`.
  - `--gap-tolerance <integer>` – Allowed gap size when checking for PPIDs across consecutive MS1 scans. Default = `1`.
  - `--scan-tolerance <integer>` – Total number of MS1 scans over which a PPID must be observed to be considered real. Gaps in persistence are allowed by setting --gap-tolerance. Default = `3`.
  - `--bullseye-max-mass <float>` – Only consider PPIDs below this maximum mass in daltons. Default = `8000`.
  - `--bullseye-min-mass <float>` – Only consider PPIDs above this minimum mass in daltons. Default = `600`.

- ### Matching PPIDs to MS2 spectra

  - `--exact-match T|F` – When true, require an exact match (as defined by --exact-tolerance) between the center of the precursor isolation window in the MS2 scan and the base isotopic peak of the PPID. If this option is set to false and no exact match is observed, then attempt to match using a wider m/z tolerance. This wider tolerance is calculated using the PPID's monoisotopic mass and charge (the higher the charge, the smaller the window). Default = `false`.
  - `--exact-tolerance <float>` – Set the tolerance (+/-ppm) for --exact-match. Default = `10`.
  - `--retention-tolerance <float>` – Set the tolerance (+/-units) around the retention time over which a PPID can be matches to the MS2 spectrum. The unit of time is whatever unit is used in your data file (usually minutes). Default = `0.5`.

- ### Input and output

  - `--fileroot <string>` – The fileroot string will be added as a prefix to all output file names. Default = `<empty>`.
  - `--output-dir <string>` – The name of the directory where output files will be created. Default = `crux-output`.
  - `--overwrite T|F` – Replace existing files if true or fail when trying to overwrite a file if false. Default = `false`.
  - `--spectrum-format |ms2|bms2|cms2|mgf` – The format to write the output spectra to. If empty, the spectra will be output in the same format as the MS2 input. Default = `<empty>`.
  - `--parameter-file <string>` – A file containing parameters. See the parameter documentation page for details. Default = `<empty>`.
  - `--verbosity <integer>` – Specify the verbosity of the current processes. Each level prints the following messages, including all those at lower verbosity levels: 0-fatal errors, 10-non-fatal errors, 20-warnings, 30-information on the progress of execution, 40-more progress information, 50-debug info, 60-detailed debug info. Default = `30`.