fun-proteomics 0.5.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. fun_proteomics-0.5.0/.gitattributes +7 -0
  2. fun_proteomics-0.5.0/.github/workflows/publish.yml +47 -0
  3. fun_proteomics-0.5.0/.github/workflows/validate.yml +78 -0
  4. fun_proteomics-0.5.0/.gitignore +81 -0
  5. fun_proteomics-0.5.0/GITHUB_UPLOAD.md +81 -0
  6. fun_proteomics-0.5.0/LICENSE +21 -0
  7. fun_proteomics-0.5.0/LICENSE_NOTES.md +7 -0
  8. fun_proteomics-0.5.0/MANIFEST.in +16 -0
  9. fun_proteomics-0.5.0/OUTPUTS.md +126 -0
  10. fun_proteomics-0.5.0/PACKAGE_README.md +61 -0
  11. fun_proteomics-0.5.0/PKG-INFO +94 -0
  12. fun_proteomics-0.5.0/README.md +406 -0
  13. fun_proteomics-0.5.0/SOURCE_SHA256SUMS +142 -0
  14. fun_proteomics-0.5.0/assets/cli_help.txt +214 -0
  15. fun_proteomics-0.5.0/assets/config.schema.json +760 -0
  16. fun_proteomics-0.5.0/assets/config_ui.html +677 -0
  17. fun_proteomics-0.5.0/assets/empty_study.json +44 -0
  18. fun_proteomics-0.5.0/assets/fragpipe_hla.workflow +415 -0
  19. fun_proteomics-0.5.0/assets/fragpipe_lfq_mbr.workflow +370 -0
  20. fun_proteomics-0.5.0/assets/tool_versions.json +22 -0
  21. fun_proteomics-0.5.0/envs/environment.yml +18 -0
  22. fun_proteomics-0.5.0/envs/linux-64.lock.txt +113 -0
  23. fun_proteomics-0.5.0/envs/r-environment.yml +15 -0
  24. fun_proteomics-0.5.0/examples/diapasef.json +21 -0
  25. fun_proteomics-0.5.0/examples/diapasef_samples.tsv +9 -0
  26. fun_proteomics-0.5.0/examples/quantification_matrix.csv +11 -0
  27. fun_proteomics-0.5.0/examples/quantification_samples.csv +7 -0
  28. fun_proteomics-0.5.0/examples/run.json +79 -0
  29. fun_proteomics-0.5.0/examples/service_quantification.csv +5 -0
  30. fun_proteomics-0.5.0/main.nf +523 -0
  31. fun_proteomics-0.5.0/modules/diapasef/00_env.py +126 -0
  32. fun_proteomics-0.5.0/modules/diapasef/01_prepare_samples.py +124 -0
  33. fun_proteomics-0.5.0/modules/diapasef/02_predict_library.py +30 -0
  34. fun_proteomics-0.5.0/modules/diapasef/03_build_library.py +34 -0
  35. fun_proteomics-0.5.0/modules/diapasef/04_quantify_samples.py +25 -0
  36. fun_proteomics-0.5.0/modules/diapasef/05_count_proteins.py +81 -0
  37. fun_proteomics-0.5.0/modules/diapasef/06_collect_results.py +115 -0
  38. fun_proteomics-0.5.0/modules/diapasef/NOTICE.md +14 -0
  39. fun_proteomics-0.5.0/modules/diapasef/common.py +125 -0
  40. fun_proteomics-0.5.0/modules/diapasef/main.nf +241 -0
  41. fun_proteomics-0.5.0/modules/diapasef/method.toml +26 -0
  42. fun_proteomics-0.5.0/modules/diapasef/requirements-lock.txt +16 -0
  43. fun_proteomics-0.5.0/modules/diapasef/stub_prepare.py +19 -0
  44. fun_proteomics-0.5.0/nextflow.config +100 -0
  45. fun_proteomics-0.5.0/pipeline_lib/differential.R +192 -0
  46. fun_proteomics-0.5.0/pipeline_lib/drug_interaction.R +176 -0
  47. fun_proteomics-0.5.0/pipeline_lib/drug_interaction_models.R +94 -0
  48. fun_proteomics-0.5.0/pipeline_lib/final_results.py +180 -0
  49. fun_proteomics-0.5.0/pipeline_lib/immunopeptidomics.py +182 -0
  50. fun_proteomics-0.5.0/pipeline_lib/intensity_differential.R +61 -0
  51. fun_proteomics-0.5.0/pipeline_lib/matrix_catalog.py +124 -0
  52. fun_proteomics-0.5.0/pipeline_lib/optional_analyses.py +200 -0
  53. fun_proteomics-0.5.0/pipeline_lib/optional_statistics.py +204 -0
  54. fun_proteomics-0.5.0/pipeline_lib/pipeline.py +368 -0
  55. fun_proteomics-0.5.0/pipeline_lib/ptm_counts.py +142 -0
  56. fun_proteomics-0.5.0/pipeline_lib/quantification.py +174 -0
  57. fun_proteomics-0.5.0/pipeline_lib/quantification_analysis.py +104 -0
  58. fun_proteomics-0.5.0/pipeline_lib/quantification_config.py +79 -0
  59. fun_proteomics-0.5.0/pipeline_lib/reporting.py +246 -0
  60. fun_proteomics-0.5.0/pipeline_lib/result_layout.py +379 -0
  61. fun_proteomics-0.5.0/pipeline_lib/result_reports.py +176 -0
  62. fun_proteomics-0.5.0/pipeline_lib/results_dashboard.html +71 -0
  63. fun_proteomics-0.5.0/pipeline_lib/search_checkpoint.py +110 -0
  64. fun_proteomics-0.5.0/pyproject.toml +51 -0
  65. fun_proteomics-0.5.0/scripts/analysis_modules.py +36 -0
  66. fun_proteomics-0.5.0/scripts/analyze_quantification.py +54 -0
  67. fun_proteomics-0.5.0/scripts/bootstrap_runtime.sh +45 -0
  68. fun_proteomics-0.5.0/scripts/config_server.py +311 -0
  69. fun_proteomics-0.5.0/scripts/continue_folder.py +9 -0
  70. fun_proteomics-0.5.0/scripts/continue_run.py +69 -0
  71. fun_proteomics-0.5.0/scripts/desktop_focus.py +45 -0
  72. fun_proteomics-0.5.0/scripts/dia_browser.py +221 -0
  73. fun_proteomics-0.5.0/scripts/diapasef_config.py +164 -0
  74. fun_proteomics-0.5.0/scripts/differential_tools.py +14 -0
  75. fun_proteomics-0.5.0/scripts/export_ptm_counts.py +7 -0
  76. fun_proteomics-0.5.0/scripts/fasta_download.py +248 -0
  77. fun_proteomics-0.5.0/scripts/install_differential_tools.sh +33 -0
  78. fun_proteomics-0.5.0/scripts/native_folders.py +46 -0
  79. fun_proteomics-0.5.0/scripts/package_source.py +20 -0
  80. fun_proteomics-0.5.0/scripts/proteomics_detection.py +60 -0
  81. fun_proteomics-0.5.0/scripts/reanalyze_counts.py +65 -0
  82. fun_proteomics-0.5.0/scripts/reanalyze_dia.py +256 -0
  83. fun_proteomics-0.5.0/scripts/sample_detection.py +93 -0
  84. fun_proteomics-0.5.0/scripts/stream_progress.py +125 -0
  85. fun_proteomics-0.5.0/scripts/system_capabilities.py +44 -0
  86. fun_proteomics-0.5.0/scripts/tool_manager.py +90 -0
  87. fun_proteomics-0.5.0/scripts/ui_log_follow.py +78 -0
  88. fun_proteomics-0.5.0/scripts/ui_run_state.py +115 -0
  89. fun_proteomics-0.5.0/scripts/ui_runner.py +195 -0
  90. fun_proteomics-0.5.0/scripts/ui_server_lifecycle.py +60 -0
  91. fun_proteomics-0.5.0/scripts/validate_distribution.py +63 -0
  92. fun_proteomics-0.5.0/scripts/validate_repo.py +41 -0
  93. fun_proteomics-0.5.0/setup.cfg +4 -0
  94. fun_proteomics-0.5.0/setup_environment.sh +26 -0
  95. fun_proteomics-0.5.0/src/fun_proteomics/__init__.py +2 -0
  96. fun_proteomics-0.5.0/src/fun_proteomics/__main__.py +2 -0
  97. fun_proteomics-0.5.0/src/fun_proteomics/_build.py +42 -0
  98. fun_proteomics-0.5.0/src/fun_proteomics/cli.py +370 -0
  99. fun_proteomics-0.5.0/src/fun_proteomics/continuation.py +180 -0
  100. fun_proteomics-0.5.0/src/fun_proteomics/project.py +61 -0
  101. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/PKG-INFO +94 -0
  102. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/SOURCES.txt +149 -0
  103. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/dependency_links.txt +1 -0
  104. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/entry_points.txt +3 -0
  105. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/requires.txt +10 -0
  106. fun_proteomics-0.5.0/src/fun_proteomics.egg-info/top_level.txt +1 -0
  107. fun_proteomics-0.5.0/tests/make_fixture.py +36 -0
  108. fun_proteomics-0.5.0/tests/run_all.sh +19 -0
  109. fun_proteomics-0.5.0/tests/run_diapasef_smoke.py +31 -0
  110. fun_proteomics-0.5.0/tests/run_package_smoke.py +131 -0
  111. fun_proteomics-0.5.0/tests/run_smoke.sh +45 -0
  112. fun_proteomics-0.5.0/tests/test_analysis_modules.py +19 -0
  113. fun_proteomics-0.5.0/tests/test_bootstrap.py +32 -0
  114. fun_proteomics-0.5.0/tests/test_continue.py +119 -0
  115. fun_proteomics-0.5.0/tests/test_count_filter_controls.py +117 -0
  116. fun_proteomics-0.5.0/tests/test_dia_browser.py +263 -0
  117. fun_proteomics-0.5.0/tests/test_dia_integration.py +79 -0
  118. fun_proteomics-0.5.0/tests/test_dia_reuse.py +40 -0
  119. fun_proteomics-0.5.0/tests/test_diapasef_config.py +149 -0
  120. fun_proteomics-0.5.0/tests/test_differential.py +134 -0
  121. fun_proteomics-0.5.0/tests/test_drug_interaction_methods.py +212 -0
  122. fun_proteomics-0.5.0/tests/test_fasta_download.py +99 -0
  123. fun_proteomics-0.5.0/tests/test_final_results.py +21 -0
  124. fun_proteomics-0.5.0/tests/test_immunopeptidomics.py +203 -0
  125. fun_proteomics-0.5.0/tests/test_interface_launcher.py +44 -0
  126. fun_proteomics-0.5.0/tests/test_launch_progress.py +129 -0
  127. fun_proteomics-0.5.0/tests/test_matrix_catalog.py +56 -0
  128. fun_proteomics-0.5.0/tests/test_native_folders.py +40 -0
  129. fun_proteomics-0.5.0/tests/test_optional_analyses.py +262 -0
  130. fun_proteomics-0.5.0/tests/test_optional_setup.py +91 -0
  131. fun_proteomics-0.5.0/tests/test_optional_statistics.py +238 -0
  132. fun_proteomics-0.5.0/tests/test_package_cli.py +146 -0
  133. fun_proteomics-0.5.0/tests/test_pipeline.py +99 -0
  134. fun_proteomics-0.5.0/tests/test_portability.py +30 -0
  135. fun_proteomics-0.5.0/tests/test_proteomics_detection.py +26 -0
  136. fun_proteomics-0.5.0/tests/test_ptm_counts.py +64 -0
  137. fun_proteomics-0.5.0/tests/test_ptm_reporting.py +24 -0
  138. fun_proteomics-0.5.0/tests/test_quantification.py +125 -0
  139. fun_proteomics-0.5.0/tests/test_result_layout.py +176 -0
  140. fun_proteomics-0.5.0/tests/test_result_reports.py +55 -0
  141. fun_proteomics-0.5.0/tests/test_resume_detection.py +15 -0
  142. fun_proteomics-0.5.0/tests/test_run_detection.py +73 -0
  143. fun_proteomics-0.5.0/tests/test_sample_detection.py +47 -0
  144. fun_proteomics-0.5.0/tests/test_system_capabilities.py +16 -0
  145. fun_proteomics-0.5.0/tests/test_tool_manager.py +41 -0
  146. fun_proteomics-0.5.0/tests/test_ui_connection.py +87 -0
  147. fun_proteomics-0.5.0/tests/test_ui_log_follow.py +53 -0
  148. fun_proteomics-0.5.0/tests/test_ui_run_logs.py +26 -0
  149. fun_proteomics-0.5.0/tests/test_ui_run_recovery.py +161 -0
  150. fun_proteomics-0.5.0/tests/test_ui_server_lifecycle.py +103 -0
  151. fun_proteomics-0.5.0/tests/test_ui_session.py +36 -0
@@ -0,0 +1,7 @@
1
+ *.py text eol=lf
2
+ *.R text eol=lf
3
+ *.nf text eol=lf
4
+ *.config text eol=lf
5
+ *.workflow text eol=lf
6
+ *.tsv text eol=lf
7
+ *.md text eol=lf
@@ -0,0 +1,47 @@
1
+ name: Publish Python package
2
+ on:
3
+ workflow_dispatch:
4
+ permissions:
5
+ contents: read
6
+ jobs:
7
+ build_and_test:
8
+ runs-on: ubuntu-24.04
9
+ steps:
10
+ - uses: actions/checkout@v4
11
+ - uses: actions/setup-python@v5
12
+ with:
13
+ python-version: '3.12'
14
+ - name: Build checked distributions
15
+ run: |
16
+ python -m pip install build twine
17
+ python -m build
18
+ python -m twine check dist/*
19
+ python scripts/validate_distribution.py
20
+ python -m pip install dist/*.whl
21
+ sudo apt-get update
22
+ sudo apt-get install -y r-base r-bioc-limma r-bioc-edger r-cran-jsonlite
23
+ - name: Test the installed package
24
+ env:
25
+ FUN_PROTEOMICS_TEST_INSTALLED: '1'
26
+ PROTEOMICS_RSCRIPT: /usr/bin/Rscript
27
+ run: |
28
+ python -m unittest discover -s tests -p test_package_cli.py -v
29
+ python tests/run_package_smoke.py
30
+ - uses: actions/upload-artifact@v4
31
+ with:
32
+ name: python-distributions
33
+ path: dist/
34
+ publish:
35
+ needs: build_and_test
36
+ runs-on: ubuntu-24.04
37
+ environment:
38
+ name: pypi
39
+ url: https://pypi.org/project/fun-proteomics/
40
+ permissions:
41
+ id-token: write
42
+ steps:
43
+ - uses: actions/download-artifact@v4
44
+ with:
45
+ name: python-distributions
46
+ path: dist/
47
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,78 @@
1
+ name: Validate PASEF Proteomics
2
+ on: [push, pull_request]
3
+ jobs:
4
+ source_and_synthetic_pipeline:
5
+ runs-on: ubuntu-24.04
6
+ env:
7
+ PROTEOMICS_RSCRIPT: /usr/bin/Rscript
8
+ steps:
9
+ - uses: actions/checkout@v4
10
+ - name: Install locked runtime
11
+ run: bash setup_environment.sh
12
+ - name: Install R and statistical dependencies
13
+ run: |
14
+ sudo apt-get update
15
+ sudo apt-get install -y r-base r-base-dev python3.12 python3.12-venv libcurl4-openssl-dev libssl-dev libxml2-dev
16
+ bash scripts/install_differential_tools.sh /usr/bin/Rscript
17
+ - name: Validate semantics and publication exclusions
18
+ run: |
19
+ .runtime/env/bin/python -m unittest discover -s tests -v
20
+ .runtime/env/bin/python scripts/validate_repo.py
21
+ - name: Check Nextflow and synthetic end-to-end execution
22
+ run: |
23
+ export PATH="$PWD/.runtime/env/bin:$PATH"
24
+ export JAVA_HOME="$PWD/.runtime/env"
25
+ export NXF_HOME="$PWD/.runtime/nextflow"
26
+ export NXF_VER=26.04.2
27
+ export NXF_DISABLE_CHECK_LATEST=true
28
+ nextflow lint main.nf
29
+ bash tests/run_smoke.sh
30
+ export PROTEOMICS_DIA_PYTHON=/usr/bin/python3.12
31
+ /usr/bin/python3.12 tests/run_diapasef_smoke.py
32
+ # Synthetic tests contain no spectra or registered tool binaries.
33
+ # Real searches require user-supplied data and individually registered software.
34
+
35
+ dia_quantification:
36
+ runs-on: ubuntu-24.04
37
+ steps:
38
+ - uses: actions/checkout@v4
39
+ - uses: actions/setup-python@v5
40
+ with:
41
+ python-version: '3.12'
42
+ - name: Install pinned DIA reporting dependencies
43
+ run: pip install -r modules/diapasef/requirements-lock.txt
44
+ - name: Install intensity statistics
45
+ run: sudo apt-get update && sudo apt-get install -y r-base r-bioc-limma r-bioc-edger r-cran-jsonlite
46
+ - name: Check real reporting code on synthetic DIA reports
47
+ env:
48
+ PROTEOMICS_RSCRIPT: /usr/bin/Rscript
49
+ run: |
50
+ python -m unittest discover -s tests -p test_quantification.py -v
51
+ python -m unittest discover -s tests -p test_dia_reuse.py -v
52
+ python -m unittest discover -s tests -p test_matrix_catalog.py -v
53
+
54
+ python_distribution:
55
+ runs-on: ubuntu-24.04
56
+ steps:
57
+ - uses: actions/checkout@v4
58
+ - uses: actions/setup-python@v5
59
+ with:
60
+ python-version: '3.12'
61
+ - name: Build and audit both distributions
62
+ run: |
63
+ python -m pip install build twine
64
+ python -m build
65
+ python -m twine check dist/*
66
+ python scripts/validate_distribution.py
67
+ - name: Install the wheel and R statistics
68
+ run: |
69
+ python -m pip install dist/*.whl
70
+ sudo apt-get update
71
+ sudo apt-get install -y r-base r-bioc-limma r-bioc-edger r-cran-jsonlite
72
+ - name: Test installed commands, verified reuse, and damaged-output recovery
73
+ env:
74
+ FUN_PROTEOMICS_TEST_INSTALLED: '1'
75
+ PROTEOMICS_RSCRIPT: /usr/bin/Rscript
76
+ run: |
77
+ python -m unittest discover -s tests -p test_package_cli.py -v
78
+ python tests/run_package_smoke.py
@@ -0,0 +1,81 @@
1
+ # Local study configuration and data
2
+ /config.local.json
3
+ *.local.json
4
+ *.local.config
5
+ /ui_configs/
6
+ /inputs/
7
+ /data/
8
+ *.d/
9
+ *.raw
10
+ *.RAW
11
+ *.mzML
12
+ *.mzXML
13
+ *.wiff
14
+ *.wiff2
15
+ *.tdf
16
+ *.tdf_bin
17
+ *.fasta
18
+ *.fa
19
+ *.fastq*
20
+ # Generated results, caches, and installed modules
21
+ /results*/
22
+ /final_results*/
23
+ /analysis_details/
24
+ /work*/
25
+ /logs/
26
+ /.nextflow*
27
+ /.runtime/
28
+ /.test-runtime*/
29
+ /.bootstrap/
30
+ /.database_cache/
31
+ /modules/*
32
+ !/modules/diapasef/
33
+ /provenance/
34
+ /reference_results/
35
+ __pycache__/
36
+ *.pyc
37
+ .venv*/
38
+ # Registered software, archives and credentials
39
+ /software/
40
+ *.jar
41
+ *.zip
42
+ *.tar.gz
43
+ .env
44
+ .env.*
45
+ *registration*
46
+ *license_key*
47
+ *.pem
48
+ *.key
49
+
50
+ /zscore/
51
+ /VALIDATION_COMPLETE.txt
52
+
53
+ # Local caches, backups, preparation and study artifacts
54
+ /cache/
55
+ /configs/
56
+ /.migration_backup/
57
+ /.ipynb_checkpoints/
58
+ *.ipynb
59
+ *.log
60
+ *.log.*
61
+ *.pid
62
+ *.parquet
63
+ *.speclib
64
+ *.mzBIN*
65
+ *.quant
66
+
67
+ # Imported provider tables and review artifacts stay local
68
+ /service_quantification/
69
+ /imports/
70
+ /benchmarks/
71
+ /validation/
72
+ /*.csv
73
+ /*.tsv
74
+ /*.xlsx
75
+
76
+ # Python distributions and launcher state
77
+ /build/
78
+ /dist/
79
+ *.egg-info/
80
+ .fun_proteomics/
81
+ /src/fun_proteomics/_workflow/
@@ -0,0 +1,81 @@
1
+ # GitHub preparation
2
+
3
+ The public repository is **cfarkas/fun_proteomics**. The source package supports native
4
+ Bruker DDA-PASEF through FragPipe and DIA-PASEF through DIA-NN, using the same
5
+ `main.nf` entry point. `nextflow run main.nf --interactively` configures either
6
+ acquisition type. Direct DIA runs use `nextflow run main.nf --dia_config study.json`;
7
+ the browser generates that native DIA configuration while preserving the editable study.
8
+
9
+ ## Validate and package
10
+
11
+ From the repository directory, after installing the runtime described in README:
12
+
13
+ ```bash
14
+ .runtime/env/bin/python scripts/validate_repo.py
15
+ bash tests/run_all.sh
16
+ bash tests/run_smoke.sh
17
+ python3.12 tests/run_diapasef_smoke.py
18
+ python3 scripts/package_source.py
19
+ ```
20
+
21
+ Packaging creates `../pasef-proteomics-source.zip`, its `.sha256` checksum and `SOURCE_SHA256SUMS`. It
22
+ uses an explicit source allowlist and excludes symlinks, local configurations,
23
+ results, runtime environments, input data and installed search engines. Only
24
+ the source-controlled DIA module is included from `modules/`.
25
+
26
+ The GitHub Actions workflow runs source checks, unit tests and DDA/DIA synthetic
27
+ execution/resume checks. Synthetic checks produce no scientific measurements.
28
+ Real searches require user-supplied acquisitions, FASTA and separately obtained
29
+ search engines.
30
+
31
+ ## Upload the source repository
32
+
33
+ Use the public GitHub repository `cfarkas/fun_proteomics`. If Git has already been initialized and a source commit prepared,
34
+ start with the remote command below. Otherwise initialize a source-only extracted
35
+ archive with `git init -b main`, review `git status --short`, add the source files
36
+ and commit them.
37
+
38
+ For a clean source-only checkout:
39
+
40
+ ```bash
41
+ git remote add origin git@github.com:cfarkas/fun_proteomics.git
42
+ git push -u origin main
43
+ ```
44
+
45
+ No remote repository is created and nothing is uploaded by the local preparation
46
+ or packaging commands. The archive also supports GitHub's file-upload interface
47
+ after extraction.
48
+
49
+ ## What stays local
50
+
51
+ Keep native acquisitions, study/sample identifiers, FASTA databases, reference
52
+ matrices, downloaded or registered tools, licenses/registration credentials,
53
+ local configuration JSON, browser drafts and UI state, generated `ui_configs/dia/`
54
+ inputs, logs, cached work and results outside Git. Use the
55
+ templates under `examples/` for public configuration examples.
56
+
57
+ Original source and documentation use the [MIT license](LICENSE). Separately installed tools retain their own licenses; see [LICENSE_NOTES.md](LICENSE_NOTES.md).
58
+
59
+ ## Clean installation location
60
+
61
+ Extract the source ZIP into the parent directory where you want the repository.
62
+ For example, `unzip pasef-proteomics-source.zip -d /path/to/projects` creates
63
+ `/path/to/projects/pasef-proteomics`. Use a new destination so existing files are preserved.
64
+ The package is small because it excludes raw data, outputs, work caches and runtimes.
65
+ Choose an output directory outside the source repository for each real study.
66
+
67
+ Version 0.4.0 adds a top-level matrix catalogue, annotated DIA protein/gene intensities,
68
+ all-pairs intensity comparisons, post-search count reanalysis and service detection
69
+ benchmarks. The separate DIA CI job exercises actual reporting/statistical code on
70
+ synthetic precursor tables; spectrum searches in CI remain explicitly stubbed.
71
+
72
+ ## Python distribution
73
+
74
+ The public package name is `fun_proteomics` (PyPI normalizes it to `fun-proteomics`). The repository is `cfarkas/fun_proteomics`; the license is MIT. Build and inspect both distributions before publishing:
75
+
76
+ ```bash
77
+ python -m build
78
+ python -m twine check dist/*
79
+ ```
80
+
81
+ The wheel contains a checked workflow source bundle. Both source distribution and wheel exclude local acquisitions, results, tools and credentials. Tests install the wheel outside the checkout and exercise native Python reporting and folder continuation. Publishing to PyPI requires an authorized account or a configured trusted publisher. A release workflow is provided for the `pypi` GitHub environment.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 cfarkas and fun_proteomics contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,7 @@
1
+ # Licensing and redistribution
2
+
3
+ The original workflow code and documentation are distributed under the MIT license in LICENSE. Copyright (c) 2026 cfarkas and fun_proteomics contributors. Third-party tools retain their own licenses; the MIT license does not relicense them.
4
+
5
+ FragPipe, MSFragger, IonQuant, diaTracer, DIA-NN, Nextflow and the Python/R dependencies retain their own licenses and citation requirements. Obtain registered software through the official distribution links in assets/tool_versions.json. Their binaries, vendor SDKs, private URLs, registration details and keys are not included.
6
+
7
+ This source package contains no experimental acquisitions or study results. The FragPipe settings file is a configuration, not a bundled copy of the application. No files have been published by preparing this package.
@@ -0,0 +1,16 @@
1
+ include pyproject.toml MANIFEST.in PACKAGE_README.md README.md OUTPUTS.md GITHUB_UPLOAD.md LICENSE LICENSE_NOTES.md SOURCE_SHA256SUMS main.nf nextflow.config setup_environment.sh .gitignore .gitattributes
2
+ recursive-include src/fun_proteomics *.py
3
+ recursive-include assets *.html *.json *.txt *.workflow
4
+ recursive-include pipeline_lib *.py *.R
5
+ recursive-include scripts *.py *.sh
6
+ recursive-include tests *.py *.sh
7
+ recursive-include envs *.yml
8
+ recursive-include examples *.json *.csv *.tsv *.md
9
+ recursive-include modules/diapasef *.py *.nf *.toml *.txt *.md
10
+ recursive-include .github *.yml
11
+ prune src/fun_proteomics/_workflow
12
+ prune .runtime
13
+ prune .test-runtime
14
+ prune results
15
+ prune validation
16
+ global-exclude *.pyc *.local.json *.local.config .DS_Store
@@ -0,0 +1,126 @@
1
+ # Results directory
2
+
3
+ ## Matrix entry point and DIA outputs
4
+
5
+ Every delivered matrix is available in both **CSV and TSV**, with identical identifiers, values and missing cells. `MATRICES.html` has separate links for both formats; the index is also supplied as `MATRICES.csv` and `MATRICES.tsv`.
6
+
7
+ Start with `final_results/MATRICES.html` or its machine-readable `MATRICES.csv`.
8
+ For DDA, `matrices/<cohort>/<dda|ddaplus>/protein_counts.csv` is a checksum-verified copy
9
+ of the existing annotated raw count matrix. Peptide and selected gene matrices are beside it.
10
+ The historical detailed folders remain available. `python pipeline_lib/matrix_catalog.py /data/run/final_results`
11
+ adds this index to completed results without statistical refitting.
12
+
13
+ For DIA, `matrices/<sample_type>/protein_intensities.csv` contains `Protein.Group`, `Genes`,
14
+ protein names, gene mapping status/source and sample intensities. `gene_intensities.csv` sums quantities
15
+ only for unambiguous single-gene groups, with missingness retained and no duplication of ambiguous groups.
16
+ These are protein-derived gene rollups, not RNA counts or independently tested gene identification FDR.
17
+ Unmapped/ambiguous/partial assignments are listed under `quality_control/<sample_type>/`.
18
+
19
+ DIA comparisons use `differential_expression/<sample_type>/<protein|gene>/<reference>_vs_<comparison>/`.
20
+ `all_results.csv` retains insufficient-observation rows; `significant_results.csv` uses the selected BH cutoff.
21
+ Positive logFC means comparison minus reference. `results_index.csv`, model settings, log2 matrices,
22
+ normalization offsets, design and R session document each analysis. Every contrast and feature level has
23
+ its own FDR family. No imputation or subject/batch adjustment is inferred.
24
+
25
+ `benchmark/<sample_type>/detection_summary.csv` reports pipeline/service totals, shared, pipeline-only,
26
+ service-only, net difference and percentage change for each matched sample and the union. `protein_membership.csv`
27
+ lists each category. Zero baseline produces a blank percentage. Exact canonical group membership is required;
28
+ protein groups are never expanded into independent proteins. Search/grouping/FDR differences limit interpretation.
29
+ Native DIA evidence is under `analysis_details/`; raw acquisition files are never copied into deliverables.
30
+
31
+
32
+ Open **`<outdir>/final_results/START_HERE.html`**. The dashboard works offline and separates the study overview, main results, optional analyses, counts/QC and interpretation guidance. Statistical tables can be filtered by analysis, search mode, method and result status. Each test links to its full results and significant subset.
33
+
34
+ ```text
35
+ <outdir>/
36
+ ├── final_results/
37
+ │ ├── START_HERE.html
38
+ │ ├── README.md
39
+ │ ├── results_index.csv
40
+ │ ├── FINAL_RESULTS_COMPLETE
41
+ │ ├── main_results/
42
+ │ │ ├── differential_expression/<cohort>/<dda|ddaplus>/<comparison>/<feature_type>/
43
+ │ │ │ ├── <method>_all_results.csv
44
+ │ │ │ └── <method>_significant_results.csv
45
+ │ │ ├── counts/<cohort>/<dda|ddaplus>/
46
+ │ │ │ ├── raw/*_counts.csv
47
+ │ │ │ ├── normalized/*_normalized_cpm.csv
48
+ │ │ │ ├── normalized/*_log2_cpm.csv
49
+ │ │ │ └── zscore/*_zscore.csv
50
+ │ │ └── quality_control/
51
+ │ │ ├── sample_annotations.csv
52
+ │ │ ├── analysis_summary.csv
53
+ │ │ ├── comparisons.csv
54
+ │ │ └── condition_columns.csv
55
+ │ └── optional_analyses/
56
+ │ ├── gene_counts/{counts,comparisons}/ # optional gene and gene-modification results
57
+ │ ├── statistics/
58
+ │ │ ├── comparisons/<cohort>/<mode>/<comparison>/<peptide|isoform>/
59
+ │ │ │ ├── <method>_all_results.csv
60
+ │ │ │ └── <method>_significant_results.csv
61
+ │ │ └── counts/<cohort>/<mode>/<raw|matrices|zscore>/
62
+ │ ├── drug_interaction/<cohort>/<mode>/<protein|gene|peptide>/
63
+ │ │ ├── <method>_all_results.csv
64
+ │ │ └── <method>_significant_results.csv
65
+ │ ├── peptide_isoforms/<cohort>/<mode>/
66
+ │ │ ├── peptide_evidence.csv
67
+ │ │ ├── peptide_condition_summary.csv
68
+ │ │ └── isoform_evidence.csv
69
+ │ └── immunopeptidomics/<cohort>/dda/
70
+ │ ├── peptides.csv
71
+ │ ├── sample_summary.csv
72
+ │ ├── length_distribution.csv
73
+ │ └── binding_input.txt
74
+ ├── analysis_details/
75
+ │ ├── <cohort>/<dda|ddaplus>/run/ # original search files
76
+ │ ├── <cohort>/<dda|ddaplus>/tables_*/ # detailed search counts
77
+ │ ├── reporting/<cohort>/<mode>/ # main model inputs, filters, assignments
78
+ │ ├── reporting/result_audit/ # settings, optional model diagnostics, file checksums
79
+ │ └── final/ # search summary and workbook
80
+ ├── logs/
81
+ └── database/search.fasta
82
+ ```
83
+
84
+ Only generated analyses have result folders. Existing search-level coverage tables are included under `main_results/quality_control/` when available. `method_notes.csv` is present when a method cannot be estimated. The overall condition test uses `overall_condition_test/` in place of a named comparison. Methods stay together under the biological comparison, while cohorts and DDA/DDA+ remain separate.
85
+
86
+ `results_index.csv` records section, analysis, cohort, mode, evidence type, method, test type, comparison, reported/tested/significant feature counts, status, FDR cutoff and both result paths. It describes separate statistical families; it is not a merged list of discoveries. Dashboard totals count tables, not unique significant features across methods.
87
+
88
+ ## Main analyses
89
+
90
+ Protein differential abundance is primary; supporting peptide and selected protein-modification comparisons follow. Gene-level results appear only under Optional analyses.
91
+
92
+ **Counts.** Protein and peptide matrices contain spectral counts. Gene counts sum peptide spectral counts only for unambiguous gene assignments, using Gene plus Mapped Genes. Gene results describe proteomics-derived evidence, not RNA expression. Modification-by-gene and modification-by-protein matrices count distinct modified peptide sequences per entity and modification type: repeated spectra, charges and sites do not multiply a sequence within one type. A peptide with two modification types can contribute once to each type. Ambiguous gene/protein assignments are excluded and audited. Supporting `modification_counts.csv` contains peptidoform PSM counts instead.
93
+
94
+ **Comparisons.** Positive pairwise `logFC` means comparison minus reference. Overall tests ask whether any condition differs and have no single fold-change direction. `PValue` is unadjusted; `FDR` is the Benjamini–Hochberg adjusted p-value within each method, feature type, contrast, cohort and search mode. Do not select the smallest p-value across methods as a combined test. Condition means and detection counts are descriptive; use the named comparisons to assess differences.
95
+
96
+ **Normalization and low counts.** Standard counts use TMM. Sparse modification tests use TMMwsp and edgeR's small-count quasi-likelihood GLM (`legacy=FALSE`, robust moderation); edgeRun and limma-voom are complementary methods. Filtering is optional, with saved thresholds in the model records. No imputation or pseudocounts are added to the count-model inputs. Modification counts do not measure occupancy, localization-filtered sites or protein-adjusted modification changes.
97
+
98
+ **Matrices.** Counts are grouped by cohort and search mode rather than combined into a matrix with blank columns from other cohorts. Normalization is separate for each evidence type. Z-scores standardize rows of log2 CPM; constant rows are zero and empty libraries are missing. They are visualization values, not statistical tests. DDA and DDA+ must not be summed or treated as biological replicates. Independent replication and comparable sampling are assumed; batch and subject effects are not inferred.
99
+
100
+ ## Optional analyses
101
+
102
+ **Gene counts and comparisons.** Select `optional_analyses.gene_counts=true` in Optional analyses → Gene counts. `gene_counts/counts/<cohort>/<mode>/` contains raw, normalized and z-score matrices; `gene_counts/comparisons/` contains named condition and overall tests, including selected gene-modification tests. These use the DEPs methods, reference condition, FDR and count filters; testing requires DEPs enabled. Shared-gene peptides are excluded from this aggregate only. Protein counts and their separately corrected statistics are unaffected. The same Gene counts option includes gene-level drug-interaction tests when that analysis is enabled; those tests use its own methods and FDR. Existing studies preserve gene analyses; new studies default off.
103
+
104
+ **Peptide and isoform evidence.** Peptides are remapped against all searched FASTA targets, with I/L indistinguishable. Shared sequences remain ambiguous. Isoform specificity requires a uniquely matching accession with alternative isoforms in the searched FASTA. The evidence tables include coverage, detection by condition and unique-peptide counts; they do not establish full proteoforms or isoform-identification FDR.
105
+
106
+ **Statistical comparisons.** Selected peptide spectral counts and isoform-discriminating counts are compared with their own methods, reference/all-pairs design, FDR and filtering settings. edgeR's small-count model and optional limma-voom use TMMwsp, retaining full-library offsets through filtering. Canonical-only or ambiguous isoform assignments are excluded with reasons in the audit directory. The FDR concerns condition differences; it does not establish isoform identity or switching.
107
+
108
+ **Drug interaction.** `interaction_log2FC` is combination minus drug A minus drug B plus control on a log2 scale. The null is multiplicative on the original abundance scale. Its sign describes proteomic nonadditivity, not beneficial synergy. Tables record `dose_time_matching_confirmed` and `analysis_interpretation`; unconfirmed matching is an exploratory combination contrast. This annotation does not change the test. Methods have separate results and FDR: edgeR quasi-likelihood, limma-voom, and/or negative-binomial Monte Carlo simulation.
109
+
110
+ Limma interaction tables include moderated t-statistics and 95% effect confidence intervals. Monte Carlo tables include the likelihood-ratio statistic, empirical p-value, FDR, exceedance/valid simulation counts, seed, minimum p-value, simulation standard error and exact binomial interval for the conditional tail probability. Dispersion and normalization stay fixed during simulation, so calibration is approximate. Its interval describes simulation uncertainty, not biological effect uncertainty. The p-value floor `1/(simulations+1)` can limit BH discoveries. Voom weights, null fits, designs, offsets and simulation settings are supporting model records under `analysis_details/reporting/result_audit/drug_interaction/`.
111
+
112
+ **HLA-enriched samples.** Dedicated reports contain peptide evidence, sample summaries, lengths and stripped sequences for external binding prediction. Identification applies 1% PSM FDR without a 1% peptide/protein FDR claim; this is separate from differential-test FDR. MBR is off. Differential tests use peptide counts; supporting gene/protein annotations do not measure source-protein abundance. No binding predictor or allele assignment is run.
113
+
114
+ ## Status and provenance
115
+
116
+ **No significant results** means tests ran and no features passed FDR. **Insufficient evidence** means tests could not be estimated. **No eligible evidence** means there are no eligible rows. Full tables preserve reported nonsignificant/untestable features; untestable rows have blank p-values/FDR and an explicit status. Empty significant subsets are valid and remain downloadable. Counts excluded from main fits remain in count matrices and filter reports.
117
+
118
+ Final result tables are copied without changing statistics. `--continue` reuses this study’s matching completed Nextflow tasks and verified completed FragPipe searches; preserve `work/`, `.nextflow/` and the output directory. Search checkpoints and provenance remain with completed search files. `analysis_details/reporting/result_audit/file_manifest.csv` records source/destination paths and verified SHA-256 hashes. The audit directory holds run settings, R session details, model inputs, exclusion/filter reports and normalization factors. Historical indices/settings there describe the original computation; use the final `results_index.csv` for current result locations.
119
+
120
+ Open-search discovery is no longer part of the pipeline or final results. Older configurations drop that option and mass-shift comparisons on loading. An existing completed run can be reformatted without searching or fitting models:
121
+
122
+ ```bash
123
+ .runtime/env/bin/python pipeline_lib/result_layout.py /path/to/output/final_results --preserve-original
124
+ ```
125
+
126
+ The prior layout, including retired discovery results, is preserved under `analysis_details/previous_result_layout_*`. Future runs generate the same curated final layout automatically.
@@ -0,0 +1,61 @@
1
+ # fun_proteomics
2
+
3
+ Portable Python and Nextflow launchers for DDA-PASEF and DIA-PASEF proteomics. MIT licensed, maintained by [cfarkas](https://github.com/cfarkas).
4
+
5
+ ```bash
6
+ python -m pip install fun_proteomics
7
+ fun_proteomics --help
8
+ ```
9
+
10
+ Python 3.11 or newer is required. Linux is the supported execution platform. Native DIA spectrum searches use their separately pinned Python 3.12 environment. The Python package includes the workflow source, analysis/reporting code and examples; raw acquisitions, study results and registered search binaries are excluded.
11
+
12
+ ## Continue a folder from anywhere
13
+
14
+ ```bash
15
+ fun_proteomics --continue /data/my_study
16
+ # Equivalent native Python entry point:
17
+ python -m fun_proteomics --continue /data/my_study
18
+ ```
19
+
20
+ The folder may be a run root or its `final_results/` directory. The launcher detects its saved state and reusable DIA searches. Completed native deliveries are checked against their output checksums and recorded inputs; valid results are reused. An incomplete or damaged native delivery is rebuilt from its verified inputs or completed searches into `continuations/<timestamp>/`, preserving earlier attempts. Nextflow-managed runs use their recorded session and work cache. Changed raw acquisitions fail reuse when a recorded checksum baseline exists. `--hash-raw` requests a full raw-file hash check; otherwise recorded sizes/timestamps are checked and changed files are hashed. A legacy run without historical raw hashes receives a new baseline, not a claim of retrospective raw identity.
21
+
22
+ ```bash
23
+ fun_proteomics --continue /data/old_run --outdir /data/new_delivery \
24
+ --service-matrix tissue=/data/service.tsv --independent-samples --hash-raw
25
+ ```
26
+
27
+ Use `--independent-samples` only when each row represents a different biological sample. This preserves old replicate labels and uses unique sample IDs for modeling. The native DIA reporting path runs all unordered condition pairs at protein and unambiguous gene level, using limma-trend on log2 positive intensities without imputation. CSV and TSV matrices, results, service detection gains/losses, quality control and provenance have separate folders.
28
+
29
+ ## Start a raw-data workflow
30
+
31
+ ```bash
32
+ fun_proteomics run --config /data/dda.json --outdir /data/results
33
+ fun_proteomics run --dia-config /data/dia.json --outdir /data/results_dia
34
+ fun_proteomics ui
35
+ ```
36
+
37
+ These commands invoke Nextflow. Java and Nextflow are required; registered spectrum-search programs remain separate installations with their own licenses. Use `fun_proteomics doctor` to inspect dependencies, or `--project /path/to/checkout` to reuse an existing checkout and its runtime. Packaged workflow files are verified and extracted to a writable user cache; `--cache-dir` changes that location.
38
+
39
+ Direct Nextflow remains supported:
40
+
41
+ ```bash
42
+ nextflow run "$(fun_proteomics workflow-path)/main.nf" --continue /data/my_study
43
+ ```
44
+
45
+ Native matrix analysis is available without Nextflow:
46
+
47
+ ```bash
48
+ fun_proteomics quantify --matrix /data/proteins.tsv --samples /data/samples.csv \
49
+ --outdir /data/quantification --differential
50
+ ```
51
+
52
+ The installed `quantify` command writes its organized delivery to `OUTDIR/final_results/` and stores its continuation state in `OUTDIR/.fun_proteomics/`. Use the same `--continue OUTDIR` command for matrix analyses.
53
+
54
+ Differential analysis also requires R with `limma` and `jsonlite`; DDA count modeling requires the corresponding Bioconductor packages. Configure existing installations using `--rscript` and `--r-library` before the subcommand. R and registered search engines are not installed by pip.
55
+
56
+ ```bash
57
+ fun_proteomics --rscript /usr/bin/Rscript --r-library /data/R-library \
58
+ --continue /data/my_study
59
+ ```
60
+
61
+ Read the full workflow documentation at [github.com/cfarkas/fun_proteomics](https://github.com/cfarkas/fun_proteomics). More detected protein groups do not alone demonstrate better accuracy: service searches may use different databases, grouping and confidence settings.
@@ -0,0 +1,94 @@
1
+ Metadata-Version: 2.4
2
+ Name: fun_proteomics
3
+ Version: 0.5.0
4
+ Summary: Portable PASEF proteomics workflows, verified continuation, and protein/gene differential analysis
5
+ Author: cfarkas
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/cfarkas/fun_proteomics
8
+ Project-URL: Repository, https://github.com/cfarkas/fun_proteomics
9
+ Project-URL: Issues, https://github.com/cfarkas/fun_proteomics/issues
10
+ Keywords: proteomics,PASEF,DIA,Nextflow,differential-abundance
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Science/Research
13
+ Classifier: Operating System :: POSIX :: Linux
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
18
+ Requires-Python: >=3.11
19
+ Description-Content-Type: text/markdown
20
+ License-File: LICENSE
21
+ License-File: LICENSE_NOTES.md
22
+ License-File: modules/diapasef/NOTICE.md
23
+ Requires-Dist: numpy<3,>=1.26
24
+ Requires-Dist: pandas<3,>=2.2
25
+ Requires-Dist: matplotlib<4,>=3.8
26
+ Requires-Dist: pyarrow<26,>=19
27
+ Requires-Dist: openpyxl<4,>=3.1
28
+ Requires-Dist: jsonschema<5,>=4.23
29
+ Provides-Extra: build
30
+ Requires-Dist: build>=1.2; extra == "build"
31
+ Requires-Dist: twine>=6; extra == "build"
32
+ Dynamic: license-file
33
+
34
+ # fun_proteomics
35
+
36
+ Portable Python and Nextflow launchers for DDA-PASEF and DIA-PASEF proteomics. MIT licensed, maintained by [cfarkas](https://github.com/cfarkas).
37
+
38
+ ```bash
39
+ python -m pip install fun_proteomics
40
+ fun_proteomics --help
41
+ ```
42
+
43
+ Python 3.11 or newer is required. Linux is the supported execution platform. Native DIA spectrum searches use their separately pinned Python 3.12 environment. The Python package includes the workflow source, analysis/reporting code and examples; raw acquisitions, study results and registered search binaries are excluded.
44
+
45
+ ## Continue a folder from anywhere
46
+
47
+ ```bash
48
+ fun_proteomics --continue /data/my_study
49
+ # Equivalent native Python entry point:
50
+ python -m fun_proteomics --continue /data/my_study
51
+ ```
52
+
53
+ The folder may be a run root or its `final_results/` directory. The launcher detects its saved state and reusable DIA searches. Completed native deliveries are checked against their output checksums and recorded inputs; valid results are reused. An incomplete or damaged native delivery is rebuilt from its verified inputs or completed searches into `continuations/<timestamp>/`, preserving earlier attempts. Nextflow-managed runs use their recorded session and work cache. Changed raw acquisitions fail reuse when a recorded checksum baseline exists. `--hash-raw` requests a full raw-file hash check; otherwise recorded sizes/timestamps are checked and changed files are hashed. A legacy run without historical raw hashes receives a new baseline, not a claim of retrospective raw identity.
54
+
55
+ ```bash
56
+ fun_proteomics --continue /data/old_run --outdir /data/new_delivery \
57
+ --service-matrix tissue=/data/service.tsv --independent-samples --hash-raw
58
+ ```
59
+
60
+ Use `--independent-samples` only when each row represents a different biological sample. This preserves old replicate labels and uses unique sample IDs for modeling. The native DIA reporting path runs all unordered condition pairs at protein and unambiguous gene level, using limma-trend on log2 positive intensities without imputation. CSV and TSV matrices, results, service detection gains/losses, quality control and provenance have separate folders.
61
+
62
+ ## Start a raw-data workflow
63
+
64
+ ```bash
65
+ fun_proteomics run --config /data/dda.json --outdir /data/results
66
+ fun_proteomics run --dia-config /data/dia.json --outdir /data/results_dia
67
+ fun_proteomics ui
68
+ ```
69
+
70
+ These commands invoke Nextflow. Java and Nextflow are required; registered spectrum-search programs remain separate installations with their own licenses. Use `fun_proteomics doctor` to inspect dependencies, or `--project /path/to/checkout` to reuse an existing checkout and its runtime. Packaged workflow files are verified and extracted to a writable user cache; `--cache-dir` changes that location.
71
+
72
+ Direct Nextflow remains supported:
73
+
74
+ ```bash
75
+ nextflow run "$(fun_proteomics workflow-path)/main.nf" --continue /data/my_study
76
+ ```
77
+
78
+ Native matrix analysis is available without Nextflow:
79
+
80
+ ```bash
81
+ fun_proteomics quantify --matrix /data/proteins.tsv --samples /data/samples.csv \
82
+ --outdir /data/quantification --differential
83
+ ```
84
+
85
+ The installed `quantify` command writes its organized delivery to `OUTDIR/final_results/` and stores its continuation state in `OUTDIR/.fun_proteomics/`. Use the same `--continue OUTDIR` command for matrix analyses.
86
+
87
+ Differential analysis also requires R with `limma` and `jsonlite`; DDA count modeling requires the corresponding Bioconductor packages. Configure existing installations using `--rscript` and `--r-library` before the subcommand. R and registered search engines are not installed by pip.
88
+
89
+ ```bash
90
+ fun_proteomics --rscript /usr/bin/Rscript --r-library /data/R-library \
91
+ --continue /data/my_study
92
+ ```
93
+
94
+ Read the full workflow documentation at [github.com/cfarkas/fun_proteomics](https://github.com/cfarkas/fun_proteomics). More detected protein groups do not alone demonstrate better accuracy: service searches may use different databases, grouping and confidence settings.