Repository navigation
BulkSeq Studio v0.33.0
Scientific output changes. KEGG pathway enrichment now runs for organisms whose name or taxon KEGG records in a different form from the reference catalogue. Until 0.32.1 the identity check required both to match exactly. It rejected a correct organism whenever the catalogue recorded a strain KEGG did not (Fusarium graminearum PH-1 against KEGG's Fusarium graminearum, code
fgr; Zymoseptoria tritici IPO323,ztr), KEGG recorded a subspecies or variety the catalogue did not (hvg,cng,bsu,sao), the two sides used different taxonomic ranks for the same species (fox,fpu,fvr,cal,ncr,ani,afm,bfu,pfa), or KEGG had adopted a current name (Pyricularia oryzae for Magnaporthe oryzae,mgr; Mycosarcoma maydis for Ustilago maydis,uma). For these 17 organisms KEGG ORA and GSEA were reported as not interpretable and written as empty tables while the run completed. The check now accepts a strain or subspecies suffix when genus, species and taxon agree, and compares the other 13 codes against identities recorded per KEGG code, each verified against NCBI Taxonomy and the KEGG GENOME record; a wrong code, a different species or an unrecorded taxon is still refused. On the bundled Fusarium spores dataset KEGG now finds 9 ORA and 31 GSEA pathways at the adjusted criterion, and on the heat-shock dataset 0 and 11, where 0.32.1 reported none; these are newly populated results, not corrected numbers. Both datasets still end with check 10 at REVIEW_REQUIRED, now only because g:Profiler recognises none of their RefSeq gene identifiers. GO results from g:Profiler can also differ for other references: a retry that paired converted query identifiers with an unconverted background was removed, and GO via g:Profiler is now reported as unavailable when the identifiers do not convert; no bundled dataset's GO result changed. Separately, organisms without an annotation package now also receive annotation-transfer enrichment, written to new files underresults/enrichment/transfer/with check 25; existing output files are unchanged by it. KEGG content depends on the KEGG release at retrieval, and STRING content on the recorded STRING 12.0 snapshot. Synthetic regressions establish these corrected contracts; the seven bundled datasets carried over from 0.32.1 were rerun under 0.33.0, and the two new ones were run for the first time (see Validation).
Minor release: KEGG identity repair, annotation-transfer enrichment for organisms without a curated annotation package, and two bundled non-model datasets, Magnaporthe oryzae and sorghum. Count matrices, differential-expression tables and every recorded count are unchanged. All nine bundled datasets were run from the installed 0.33.0 Windows package through the interface alone, and all nine passed: every run completed without a FAIL. The seven datasets carried over from 0.32.1 reproduced their 0.32.1 results byte for byte, and the two new ones are recorded for the first time.
Added
- Annotation-transfer enrichment for organisms without a curated annotation package (scientific). A new route runs over-representation and GSEA against the Gene Ontology, Reactome and InterPro term sets STRING 12.0 distributes for each of its genomes, whose terms STRING transfers by orthology (Szklarczyk et al. 2023). It runs by itself for an organism with a STRING taxon and no OrgDb (Analysis settings → Output options → Annotation transfer: Automatic), writes to
results/enrichment/transfer/with a dot plot and a provenance record, and reports in check 25, in the HTML report and in the run summary. Gene identifiers are matched to STRING proteins through STRING's alias file, never its sequence-similarity aliases; an identifier naming several proteins is excluded, genes sharing a protein are collapsed, a protein whose genes changed in opposite directions is left out of every set and of the universe, which is otherwise the mapped tested genes, those with an adjusted p-value; every category and direction is corrected separately. The STRING files are downloaded once into the project with their retrieval date and checksum. On the bundled Fusarium spores dataset, 91.9% of the genes with an adjusted p-value map and 13 GO biological-process terms are over-represented and 222 enriched by GSEA, where no GO result was available before. - Imported eggNOG-mapper and KofamScan annotation. An eggNOG-mapper
.emapper.annotationsfile adds GO terms, propagated to their ancestors, and KEGG reference pathways from its KO column; a KofamScan or KofamKOALA table adds KEGG reference pathways from its KO calls. KO-to-pathway links come from the live KEGG REST service. Maps under KEGG's Organismal Systems, Human Diseases and Drug Development groups are excluded, since nothing restricts them to the organism's lineage. Protein ids are matched to genes through the project annotation, and the check judges how many imported ids resolve to genes, not how many genes carry a term. Both files are chosen under Analysis settings → Output options, and either one turns the route on. - Two bundled non-model datasets. Magnaporthe oryzae wild type against a deletion of the carbon catabolite repressor MoCreA (GEO GSE153084; Hong et al. 2021), and sorghum shoots under sulfur deficiency (GEO GSE184725, RNA-seq arm; Sotta et al. 2022). Neither organism has an OrgDb, so both use annotation-transfer enrichment, and M. oryzae exercises the repaired KEGG identity check.
Fixed
- KEGG enrichment runs for organisms KEGG names differently from the catalogue (scientific). See the notice above. A per-code record of 13 identities, each verified against NCBI Taxonomy and the KEGG GENOME record, lives in
workflow/scripts/kegg_identity_records.tsv, so existing projects receive it through the workflow update. - g:Profiler says when it recognises none of the gene identifiers (scientific). An empty g:Profiler result now reports how many significant and tested ids g:Profiler recognised; on the RefSeq Fusarium reference it recognises none, and the summary says GO via g:Profiler is unavailable instead of reporting zero terms. A retry that sent converted query ids with an unconverted background was removed.
- The application no longer aborts at exit (0xC0000409). A background thread started with the window, the WSL work-directory probe, could outlast the three-second wait when the window closed on a cold machine; its QThread was then destroyed while running and Qt aborted the process. The application now waits up to 15 s for running threads after the window closes, and leaves without destroying any that still run. The interactive network's web views are also deleted before the event loop ends.
- The interactive network packs disconnected components. Its layout requested component packing, but the library that performs it was not loaded, so the option did nothing. The library is now bundled; on a test network the share of the canvas the components fill rose from 0.31 to 0.51.
- Programs started from the Linux build no longer inherit its library path. The frozen Linux build points
LD_LIBRARY_PATHat its bundled libraries; pipeline rules,snakemake --unlock, environment setup and tool probes now receive the caller's original value. bulkseq checkreports what the Start button checks. It validated the sample sheet alone, so it passed a project the interface blocks: a design column missing from the sheet, a raw-read route without a reference, a missing input table, or enrichment with no organism. Both now call one implementation, and a test compares them on fixture projects.- The custom gene-set check reaches
sanity_checks.txt. It was left out of the fixed list the summary reads, and it now counts toward the overall status. - Report sample labels match the figures. The run summary and the report labelled samples over every sample-sheet row, while the figures label only the samples the model retained, so a repeated library name surviving once gained a sample-id suffix in the reports alone.
- Exported sample sheets drop an all-blank
library_namecolumn, as saved sheets already did. - The application's check summary has an Overall line, identical to the workflow's for the same check files.
Changed
- Check 01 applies one replicate rule before and during the run. The workflow's copy now warns below three biological replicates and flags empty or unknown conditions, as the interface did, so a two-versus-two design reads WARNING in
sanity_checks.txttoo (pasilla and the UME6 subset change from PASS to WARNING; no overall status changes). - Check 22's warning says which kind it is: "not assessable" when replicate structure could not be assessed, "advisory finding" when replicates cluster no more tightly than other conditions.
- Check numbers. The custom gene-set check moves from 11, which it shared with the microarray normalisation check, to 24; annotation transfer is check 25.
- Application dependencies: numpy 2.5.3, pandas 3.0.6 and PyInstaller 6.22.3. The workflow environment is unchanged.
Documentation
- The enrichment page describes annotation-transfer enrichment: when it runs, how genes reach STRING proteins, what the imports add, how check 25 judges coverage, and its limits. The checks page lists checks 24 and 25 and the new wording of checks 01 and 22, and the design page states that one contrast is analysed per project.
- The tutorial's dataset table, the version notices and the README list all nine bundled datasets with their 0.33.0 results.
- The README and the site describe the application as running on Windows and Linux, the platforms with published packages, instead of calling it cross-platform.
- The README and the site ask you to cite the exact release recorded in your run summary, and the benchmark results they state are those of the bundled datasets.
Known limitations
- Rice maps 61.0% of its genes with an adjusted p-value to STRING proteins, so its check 25 reads WARNING.
- Annotation transfer does not run in multi-study meta-analysis mode.
- The STRING cache manifest records MD5 checksums, not SHA-256.
- Automatic activation is decided from the configuration: an OrgDb that fails to load during the run does not fall back to annotation transfer.
- Annotation transfer has no identity check on the configured STRING taxon beyond the share of genes that map.
- A KofamScan import can still yield a few animal-lineage maps filed under Environmental Information Processing, such as cell adhesion molecules and HIF-1 signalling.
Validation
- All nine bundled datasets were run one after another from the installed 0.33.0 Windows package, through the interface alone, with 24 threads and 58 GB, and all nine passed: every run completed without a FAIL. The package was installed over 0.32.1 through the setup wizard. Those runs used a 0.33.0 build from before the release review, whose fixes touch only report ordering, the run summary, figure regeneration and configuration parsing; pasilla was then rerun through the final installed build with identical results and the same pinned hashes. Significant genes are counted at padj < 0.05 with no fold-change filter.
- Byte-identical to the 0.32.1 runs, in the count matrix and differential-expression tables of the read-based datasets and in the limma table and statistics files of the microarray datasets: pasilla, 7,532 genes tested and 467 significant; yeast UME6, 5,967 and 97; Arabidopsis hub2-3 on the microarray route, 21,323 and 1,401; yeast cbc2 on the microarray route, 5,683 and 486; Fusarium spores vs mycelium, 9,028 and 5,734, with 2,723 up and 2,478 down at |log2FC| > 1; Fusarium heat shock, 8,280 and 5,836; rice CY1000, 23,935 and 12,171. Pasilla's strandedness re-count control passed against the installed 0.33.0 run: recounting reproduces the pinned count and DESeq2 hashes, flipping one sample's strandedness moves both and check 21 names the sample, and restoring it restores both.
- KEGG on Fusarium: every gene reported in the 9 spores and 11 heat-shock pathways belongs to that pathway's gene set as retrieved separately from KEGG's REST service, with matching set sizes. A same-day rerun of the enrichment step with the 0.32.1 and 0.33.0 workflows on all seven earlier projects left every enrichment table byte-identical for the five other datasets.
- Recorded for the first time: M. oryzae ΔMocreA, 9,777 and 4,778, unstranded, 90–93% of reads uniquely mapped, KEGG 12 ORA and 23 GSEA pathways through the recorded
mgridentity, and annotation transfer mapping 99.4% of the genes with an adjusted p-value, with 27 GO biological-process terms over-represented and 147 enriched by GSEA; sorghum under sulfur deficiency, 20,591 and 302, reverse-stranded, 93–95% uniquely mapped, KEGG 6 and 34, and annotation transfer mapping 90.5% with 23 and 210. - The biology stated before the two new runs was recovered. In ΔMocreA, carbohydrate use rises, as expected when carbon catabolite repression is lost: sugar-transporter domains (InterPro IPR005828, NES +2.73), carbohydrate metabolic process (GO:0005975, +1.75), polysaccharide catabolic process (GO:0000272, +1.83), glycoside hydrolase family 3 (IPR001764, +2.11) and KEGG starch and sucrose metabolism (+2.11). Under sulfur deficiency, the most significant sorghum gene is RESPONSE TO LOW SULFUR 4, up-regulated; ATP sulfurylase and SulP-family sulfate transporters rise; sulfate assimilation and sulfur compound metabolic process are over-represented among up-regulated genes; and all 14 GSEA terms naming sulfur have a positive NES, with KEGG sulfur metabolism at +2.26.
- Annotation transfer against curated annotation, on yeast, fly and Arabidopsis, which have both: STRING's transferred GO biological-process annotation has precision 0.80–0.87 and recall 0.77–0.82 against the organism's OrgDb. The sets of GSEA terms significant under each route overlap with Jaccard 0.22–0.63, and on the shared terms the NES sign agrees in every case, with Spearman ρ 0.91–0.97.
- Controls for the transfer route: three gene-label permutations of Fusarium spores gave no over-represented term in any category and at most one GSEA term; a hypergeometric test and BH correction written separately in Python reproduce the route's p-values and adjusted values, and the test fails when the correction is dropped or sequence-similarity aliases are admitted; a KO table built from KEGG's own
fgrgene–KO links reproduces exactly every one of the 152fgrpathway gene sets that contain a tested gene (KEGG lists 153; the other contains none). - KEGG identity: all 45 KEGG-coded catalogue organisms pass against a snapshot of the KEGG organism registry, and ten negative controls, among them a wrong species, a genus-only name, an unrelated taxon, a wrong code and an unrecorded synonym, are refused.
- Exit: on the installed build, 10 of 10 closes, and 3 of 3 closes after WSL was stopped, left no crash event.
- Test suites on the release tree: Windows, 1,367 passed and 8 skipped; Linux under WSL, 1,339 passed and 36 skipped. The skips are branches for the other platform and the opt-in live KEGG test; the strandedness re-count control, skipped by default, ran separately and passed. macOS is covered by the CI test job only, and the pipeline itself has not been run on macOS.
Every asset below is listed in SHA256SUMS.txt; verify a download against it before use.