Changelog
MotrpacHumanPreSuspensionAnalysis 2.0.8
Changes
-
plot_enrich_heatmap()gainsreturn_drawing: withTRUEit returnsdraw,width,heightandn_setsinstead of writing a PDF, andfilenameis optional. It also names anyset_idsit drops.
Dependencies
MotrpacBicQC is required at
>= 2.0.0, thev2.0.0release tag (2026-09-23), andDESCRIPTIONdeclaresRemotes: MoTrPAC/MotrpacBicQC@v2.0.0sopakresolves it from GitHub. 2.0.0 drops theinspectdfimport, which is archived on CRAN and made MotrpacBicQC unresolvable from a clean library;assay_codesis unchanged from 1.9.0.gridtextis added toImports:plot_feature_heatmap()renders its column title withComplexHeatmap::gt_render(), which needs it, and ComplexHeatmap only suggests it.cmapR(Bioconductor) is added toSuggests.PTMSEA_INPUTis a list ofcmapR::GCTS4 objects, and on a machine withoutcmapRR CMD checkfailed its data inspection with a WARNING (“unable to load required package ‘cmapR’”) because no field declared the package. The object still loads and its slots are reachable withoutcmapR; printing it or using thecmapRaccessors needs it installed.
Internals
A GitHub Actions workflow,
R-CMD-check.yaml, now runsR CMD check— tests and vignettes included — on every pull request and on pushes tomain. Until now only the pkgdown site build ran, and only after a merge, so a failing test could reachmainunseen.The roxygen2 hook in
R/zzz.Rcallsutils::getFromNamespace()with its namespace, clearing the “no visible global function definition for ‘getFromNamespace’” NOTE thatR CMD checkhas reported since before 2.0.R-CMD-check.yamlruns the check under a virtual display (Xvfb): Mfuzz loads Tk, which otherwise warns at install time on a headless runner.
Documentation
The README’s Data Use Agreement cites the c2.0 collection; it still named data release 1.3.0. The documentation now names the collections c1.3 and c2.0 throughout, matching the release paths, where it had written v1.3 and v2.0.
The versioning policy in the 2.0.0 entry below, and the README’s versioning note, now say what the version means: the first two digits name the data collection (every 2.0.x release ships c2.0) and the last digit counts package updates. The README also records that the 2.0.x series is the basis of the forthcoming pre-print, while 0.2.0 remains the version behind the initial one.
MotrpacHumanPreSuspensionAnalysis 2.0.7
New data
ORA_COLORS— the white-to-#543483ramp for ORA heatmaps, asc(low, high); pass it toTMSig::enrichmap(colors = ).plot_cluster_enrichment()now reads it.PTMSEA_RESULTS— PTM-SEA results for the prot-ph EE-CON and RE-CON contrasts (muscle 506 signatures x 6 contrasts, adipose 437 x 2), in the long layout ofCAMERA_RESULTSwithNESin place oft,dfandz.std. Provenance indata-raw/PTMSEA/README.md.
Removed data
- The vendored
assay_codesobject is removed, along with its man page anddata-raw/assay_codes.R. It was a 44-row snapshot ofMotrpacBicQC::assay_codes, taken wheninspectdfwas archived on CRAN and MotrpacBicQC could not be installed from a current snapshot. The snapshot has been retired in favour of reading upstream live. Code that referencedMotrpacHumanPreSuspensionAnalysis::assay_codesshould readMotrpacBicQC::assay_codes.
Data objects
-
HUMAN_FEATURE_TO_GENEdropsconfident_siteand has 12 columns where 2.0.3 gave it 13. The flag is measured per tissue, and this table is keyed on(assay, feature_id)with no tissue column, so the only value it could carry was the collapse across tissues — not the measurement for either tissue on the 859 of 7,865 shared prot-ph sites where muscle and adipose disagree. Read the per-tissue value from*_PROT_PH_QC$feature_metadatainMotrpacHumanPreSuspensionData, which is whatpreprocess_PTMSEA()does;PTMSEA_INPUTnever read this table and is unaffected. All 1,920,618 rows and the other 11 columns are unchanged from 2.0.3.
Changes
plot_single_feature()readsMotrpacBicQC::assay_codesdirectly. Upstream 1.9.0 adds rows formetab-t-clinical,prot-clinical,metab-t-convandmetab-t-imm-crt, none of which existed in the vendored snapshot, so the hard-coded label fallback for the clinical omes is deleted — those facet strips are now labelled from upstream and readClin. Chemrather thanClin. Chem.. Themetab-t-convlabel is still overridden toConv. Metab (log2): upstream labels itConv(T)in theLABfamily, which does not distinguish it from its log2 twinmetab-t-clinical.Upstream also revises the 44 pre-existing rows in two columns this package does not display:
assay_namepunctuation on six rows (comma to hyphen) andcas_codeon four (transcript-rna-seqandtranscript-rna-seq-splicingfrommssmtostanford,prot-prandprot-phfrompnnltobroad_prot). Everyassay_short_textis unchanged, so no existing figure label moves.load_differential_analysis(epigen = TRUE)reads the c2.0 epigenomics DA from the public CloudFront release again, with no bucket access or local cache.load_differential_analysis()andplot_single_feature()drop thegsutilandbucketarguments;repo_local_diris kept but ignored, with a message.plot_enrich_heatmap()acceptsPTMSEA_RESULTSagain, plotting NES;set_idstakes PTMsigDB signature IDs for PTM-SEA input.n_topbreaks p-value ties by the absolute statistic, so PTM-SEA’s permutation-floor p-values no longer pull in every tied set.data-raw/google_cloud_bucket_checks/is removed; the bucket validation pipeline lives in motrpac-human-presuspension-repro.
MotrpacHumanPreSuspensionAnalysis 2.0.6
Changes
-
plot_feature_heatmap():multi_tissue_clust_rows = TRUEworks (it referenced an undefined object); newright_annotation,heatmap_args,draw_argsandreturn_drawingarguments.
MotrpacHumanPreSuspensionAnalysis 2.0.5
New data
-
PTMSEA_INPUT— the prot-ph differential-analysis z-statistics as a PTM-SEA input, oneGCTper tissue, from the confidently localized sites.GCTiscmapR’s S4 class; attachcmapRto use its accessors.
Data objects
The thirteen
*_DAobjects gainCI.L_calculatedandCI.R_calculated, the 95% confidence interval onlogFC, computed against each contrast’s own residual degrees of freedom. No existing column or row changed.topTable’sCI.L/CI.Rremain unshipped: for adreamfit they bound every contrast by the first contrast’s degrees of freedom.UTORONTO_TFsis now the prot-ph TF regulator pool — 1,381 rows,feature_idandgene_symbol— where it was the raw UToronto extract, 2,765 rows and 28 columns keyed by Ensembl gene ID. The annotation columns are gone and a row is a phosphosite, not a gene.
MotrpacHumanPreSuspensionAnalysis 2.0.4
Data objects
-
FCM_CLUSTERSclusters blood into 12 clusters where it had 13; adipose (13) and muscle- are unchanged and reproduce bit for bit.
FCM_CAMERAandFCM_ORAfollow the new clustering and have 434,337 rows where they had 444,806. Cluster numbers are a trajectory order, not identities, so blood cluster N in 2.0.4 is not blood cluster N in 2.0.3 — against the outgoing objects blood scores an adjusted Rand index of 0.711.
- are unchanged and reproduce bit for bit.
MotrpacHumanPreSuspensionAnalysis 2.0.3
Data objects
-
HUMAN_FEATURE_TO_GENEgains three columns and has 13 where it had 10. No row and no existing column changed: all 1,920,618 rows and all ten previously shipped columns are identical to 2.0.2, so nothing that reads the table today reads anything different. Code selecting columns by position has to be updated; code selecting by name does not.-
custom_annotation(factor) andrelationship_to_gene(numeric) say where an ATAC-seq or MethylCap-seq peak sits relative to the gene it was assigned to — the region it falls in ("Promoter (<=1kb)","Intron","Distal Intergenic", and seven others) and the signed base-pair distance to that gene,0where the peak overlaps it. Both were produced by the pipeline all along and dropped before the table was built, so an epigenomics feature arrived carrying only a gene: a peak in a promoter and a peak 40 kb into an intron were indistinguishable once mapped. They are populated for all 1,852,716 epigenomics rows andNAeverywhere else.Unlike
confident_sitethey are not a per-tissue measurement — they are derived from the peak coordinates in thefeature_id— so they take the same value in every tissue a peak appears in and are not collapsed. This was checked rather than assumed: none of the 306,788 ATAC or 1,545,930 MethylCap feature identifiers shared between tissues disagree. confident_site(logical) is the phosphosite localization flag,NAoutsideprot-ph. It is collapsed across tissues —TRUEonly where a site is confidently localized in every tissue that measured it — because this table is keyed on(assay, feature_id)and has no tissue column, and 859 sites disagree between muscle and adipose. Read*_PROT_PH_QC$feature_metadatainMotrpacHumanPreSuspensionDatawhen tissue-specific localization matters;preprocess_PTMSEA()already does, and is unaffected by this addition. Removed again in 2.0.7 for the reason given there: a collapse across tissues is not the measurement for either tissue.
-
Documentation
?HUMAN_FEATURE_TO_GENEdocumentedassayas a factor. It is a character vector, and has been for as long as the table has been built this way.The documented
assayvalues did not include"prot-clinical", which the 2.0 split of clinical chemistry into a metabolomics and a proteomics assay introduced. All eight values the column actually takes are now listed.
MotrpacHumanPreSuspensionAnalysis 2.0.2
Changes
-
load_differential_analysis(epigen = TRUE)reads the epigenomics tables from Google Cloud Storage via gsutil instead of the public CloudFront release, and defaults to the current motrpac-human-presuspension-repro staging bucket. It now requiresrepo_local_dir, and gainsgsutilandbucketarguments;plot_single_feature()passes all three through. - The unexported
load_DA_from_AWS()and.load_single_ome_tissue_AWS()are removed. Its pinnedversion = "1.2"no longer matched the atac-seq tables, which are at v2.0.
MotrpacHumanPreSuspensionAnalysis 2.0.1
Data objects
-
The
*_SUM_STATSobjects are named, ordered and keyed the way the*_DAobjects are. Every metabolomics platform is now labelledassay = "metab"with the platform in its ownplatformcolumn, where before the platform was written intoassayand there was noplatformcolumn.There are 17 objects where there were 46. The research metabolomics platforms are no longer one object each: they are stacked into a single
{TISSUE}_METAB_SUM_STATSper tissue load_summary_stats()returns the research metabolomics platforms as a single"metab"element per tissue rather than one element per platform — the nestingload_differential_analysis()returns, so the two tiers can be walked together. Naming one platform still loads them all, as before.
Bug fixes
plot_single_feature()draws the same legend for every tissue, whether or not that tissue has a timepoint below the p threshold. Combining plots withpatchwork::plot_layout(guides = "collect")previously produced a repeated p threshold legend, because collection only merges guides that are identical and a tissue with nothing significant contributed a one-key legend. A single plot with no significant timepoints now shows both p threshold keys rather than onlyadj p >=.-
plot_single_feature()plots clinical chemistry only when a clinical ome is requested. It previously appended the clinical rows whenever the feature name matched an analyte, soselected_omes = "transcript-rna-seq"with"Glucose"returned a clinical chemistry plot.selected_omesnow accepts the omes inclinical_ome_list()by name and"all"includes them, matching howload_differential_analysis()treats clinical chemistry.A request that names another ome no longer returns clinical chemistry alongside it, and
"metab"no longer implies"metab-t-clinical". Analytes measured both clinically and on a research platform, such as Cortisol and Lactate, return only what was asked for. -
plot_single_feature()loads every non-epigenetic tissue and ome once and filters afterwards, rather than assembling the request ome by ome. Clinical chemistry is no longer a special case appended after the load, and the differential analysis and the summary statistics are put in one vocabulary before either is filtered.plot_single_feature("VEGFA")works again. The defaultselected_omes = "all"was broken for every non-metab feature byfilter(platform != "metab-t-conv"):platformis NA on non-metab rows andfilterdrops NA, so the filter deleted the whole non-metab payload and the feature was reported as absent from the data. plot_single_feature()no longer excludes themetab-t-convplatform, which is now plotted and labelledConv. Metab (log2). It has noassay_codesrow, so without that fallback its facet strip readNA. Note that it is themetab-t-clinicalmeasurement on a log2 scale, so Glucose, Glycerol, KET and NEFA in blood now return a panel from each.
MotrpacHumanPreSuspensionAnalysis 2.0.0
Data objects regenerated by the motrpac-human-presuspension-repro pipeline for the c2.0 data collection.
Versioning
The package version names the data collection it ships. The first two digits are the collection: every 2.0.x release carries the c2.0 collection. The last digit counts package updates made on top of it, and such a release may change nothing about the data at all. When describing which data an analysis used, cite the collection (c2.0); the full package version identifies the code.
Within the collection, versioning is per file: a file is bumped to v2.0 only where its content actually changed, so the c2.0 collection legitimately contains files carrying earlier version suffixes. See the MoTrPAC Knowledge Center for the release and versioning policy: https://motrpac-data.org/knowledge-center.
Why the c2.0 objects differ from c1.3
Sample misalignment in QC-norm batch correction, affecting transcriptomics and Olink.
limma::removeBatchEffect()pairs covariate row i with matrix column i positionally. The covariate table was built withmerge(), which returns rows sorted byvialLabel, and was passed against a matrix whose columns were in count-file order (transcriptomics) or pivot order (Olink). The two orders are not the same, so each sample was batch-corrected using another sample’s batch, site and plate assignment. Median per-feature correlation against c1.3 is 0.925 for transcriptomics (0.908-0.944 across the three tissues) and 0.900 forprot-ol. Every differential-analysis and summary-statistic object on those two omes moves with it: counted at each feature’s best post-exercise timepoint on the endurance exercise-vs-control contrasts, bloodprot-olgoes from 103 to 146 significant features of 1,417 Olink targets.Replicate averaging in muscle proteomics (
prot-pr,prot-ph). Muscle samples measured twice are meant to be merged by averaging the pair and dropping the now-redundant column. For intra-site pairs the mean was written into the column that was about to be deleted, so the value that survived was the first measurement on its own rather than the mean of the two. Inter-site pairs were averaged correctly, which is what made this easy to miss. Batch correction and replicate handling also ran in a different order inprot-prthan inprot-ph, so the two omes were not processed identically.Feature metadata rebuilt. Each ome’s
metadata_featuresis now a self-contained feature-to-gene mapping that matches its QC-norm matrix exactly. This is why every*_QCobject inMotrpacHumanPreSuspensionDatadiffers from c1.3 while only six have aqc_normmatrix whose values differ.ATAC differential analysis refit. The released DA tables were built against an earlier feature set than the QC-norm matrices they accompany; the two are reconciled here. Muscle ATAC moves from 1,584 to 1,521 significant features on the delta-delta contrasts — 87 gained, 149 lost,
logFCcorrelating 0.992 with the release. Blood (t05-pbmc) has no significant peaks, as in v1.3.Six ATAC samples removed as sample mix-ups.
OUTLIERShas 160 rows where c1.3 had 154; the six added areepigen-atac-seqsamples, four blood and two muscle, now excluded from the analysis. No row was dropped.One muscle
transcript-rna-seqsample restored. It was missing frommetadata_samplesand was therefore dropped at the modelling stage. Differences in the refit differential analysis are minimal.Metabolite names follow a frozen RefMet snapshot with updated overrides. 78 metabolomics
feature_ids in the*_METAB_DAobjects are renamed from c1.3, so joins on c1.3 names will miss them. The curated overrides gain13 HODE->13-HODEand20-HETEentries that previously resolved toNA(adipose13-HODEnow enters the DA). Other renames:*suffixes dropped (FA 18:1;O*->FA 18:1;O),NAGly->NA-Gly,NAD+->NAD,DHA->Docosahexaenoic acid,Edetic acid->EDTA,13-Oxo-ODE->13-OxoODE.
Reference and enrichment objects
CAMERA_RESULTShas 1,016,991 rows, 1,869 fewer than c1.3, the losses concentrated in bloodprot-ol(-1,419), adiposeprot-pr(-270) and muscleprot-pr(-189): the gene universe moved with the feature-metadata rebuild, and a set that no longer intersects it is not scored. The ranking is largely intact — Spearman 0.957 to 1.000 on the signed statistic.METABOLOMICS_CVShas 4,000 rows where the c1.3 object had 3,878, and the 122 rows are mostly a c1.3 defect rather than a c2.0 change: the c1.3.rdawas staler than the c1.3.txtit was meant to mirror, which already published 4,000 keys. The change that actually propagates downstream is 69lowest_CVflips and 93refmet_namecorrections, which together decide which copy of a duplicated RefMet name survives de-duplication.OME_TISSUE_CODEhas 53 rows where it had 49: it gains the two clinical omes (metab-t-clinical,prot-clinical) and the fivelab-*plasma-chemistry tiers, and losesmetab-meta-regin all three tissues. Thelab-*codes are inputs to the clinical omes and are deliberately absent fromome_available_list(); do not pass them to a loader."metab-meta-reg"is gone fromome_available_list(),OME_TISSUE_CODEandHUMAN_OME_COLORS(31 entries where there were 32). No object was ever built under that name, so every accessor offered it as a choice that returned nothing. Passing it to a loader now errors atmatch.arg(), andHUMAN_OME_COLORS[["metab-meta-reg"]]returnsNULL.
Split data
-
BLOOD_CLINICAL_CHEMISTRY_SUM_STATS— replaced by the c2.0 split into BLOOD_METAB_T_CLINICAL_SUM_STATS and BLOOD_PROT_CLINICAL_SUM_STATS. -
BLOOD_EPIGEN_ATAC_SEQ_SUM_STATS— no blood ATAC feature is significant at adj_p_value < 0.05 this cycle, and epigenomics summary statistics carry significant features only, so no object is built. -
CLIN_CHEMISTRY_DA— replaced by the c2.0 split into BLOOD_METAB_T_CLINICAL_DA and BLOOD_PROT_CLINICAL_DA.
New data
-
BLOOD_METAB_T_CLINICAL_DA, BLOOD_METAB_T_CLINICAL_SUM_STATS, BLOOD_PROT_CLINICAL_DA, BLOOD_PROT_CLINICAL_SUM_STATS
Clinical chemistry, one assay in c1.3, is split into a metabolomics and a proteomics assay.
Changes to data objects
11 objects drop the
CI.L,CI.Rcolumns; code that selects them will error: ADIPOSE_METAB_DA, ADIPOSE_PROT_PH_DA, ADIPOSE_PROT_PR_DA, ADIPOSE_TRNSCRPT_DA, BLOOD_METAB_DA, BLOOD_PROT_OL_DA, BLOOD_TRNSCRPT_DA, MUSCLE_METAB_DA, MUSCLE_PROT_PH_DA, MUSCLE_PROT_PR_DA, MUSCLE_TRNSCRPT_DA.HUMAN_FEATURE_TO_GENE gains the
flanking_sequencecolumn.
MotrpacHumanPreSuspensionAnalysis 0.2.4
This release addresses installation failures on R 4.6 and removes the Remotes: field that was breaking dependency resolution.
Verified with clean installs on R 4.4 (Bioconductor 3.20), R 4.5 (3.22), and R 4.6 (3.23).
MotrpacHumanPreSuspensionAnalysis 0.2.3
User-facing functions
- clinical chemistry is labeled
clinical-chemistryinstead ofclinical_chemistry -
plot_single_feature()now clarifies clinical chemistry features correctly; the y-axis label now clarifies that clinical chemistry features are shown on an absolute scale while all other features are shown aslog2(normalized value). - Updated
HUMAN_FEATURE_TO_GENEfollowing changes described in 0.2.2., which now maps to the features in qc-norm properly.
Internals and package checks
- Namespace hygiene updates - proper imports have been labeled throughout
- Trimmed
globalVariables(), consolidated@importFromtags, added thegrid.rectimport, filled in the packageDescription, and addedRColorBrewer,doParallel,parallel, andrandomForesttoSuggests.
Backend: data generation and release tooling (data-raw)
These changes only affect analysts with sample-level data from MotrpacHumanPreSuspensionData.
- Added a Google Cloud bucket validation pipeline under
data-raw/google_cloud_bucket_checks/. The numbered scripts snapshot the production GCS bucket, copy it to an isolated staging folder, diff staging against the local updated files, upload changed files (removing superseded versions), and validate the staging structure and values against the installed package. Arun_validation_pipeline.Rdriver orchestrates the steps; see the directoryREADME.mdfor setup. - Moved ATAC peak annotation into
generate_atac_qc_norm.R(.annotate_atac_features()/pre_cawg_get_peak_annotations_hs()) and refined the gene-mapping logic. Also updated the methylcap, clinical, and metabolomics generation scripts.
MotrpacHumanPreSuspensionAnalysis 0.2.2
Backend: Feature metadata gene annotation (data-raw)
These changes will only make functional differences for analysts with sample level data from MotrpacHumanPreSuspensionData
- Added gene-level annotation to feature_metadata outputs for all proteomics omes. Previously, feature_metadata for Prot-PR, Prot-PH, and Prot-OL contained only raw provenance columns (UniProt accessions, PTM identifiers, redundant IDs) with no standardized gene symbol or Ensembl mapping. Feature metadata files now include
gene_symbol,ensembl_gene, andentrez_genecolumns derived from a three-round BioMart lookup strategy. - Added
.annotate_olink()togenerate_prot_ol_qc_norm.R: resolves Olink protein metadata (UniProt accession fromuniprot_entry) to gene symbols and Ensembl IDs. Lookup proceeds via UniProt → gene symbol → Entrez ID, with three progressive BioMart passes to maximize coverage. - Added
.annotate_prot_pr()togenerate_prot_pr_qc_norm.R: extends the per-tissuefeature_metadata_outputfromPR@rdescwith gene annotations. Usesfeature_id(=protein_id, a UniProt accession) taken directly from the file as the BioMart lookup key. - Added
.annotate_prot_ph()togenerate_prot_ph_qc_norm.R: same annotation for phosphoproteomics. Usesprotein_id(notfeature_id, which is the PTM site identifier) taken directly from the file as the UniProt lookup key, preserving the full PTMfeature_idin the output. - Prot-PR and Prot-PH annotation now resolves UniProt accessions to genes via a single BioMart
getBMlookup (mirroring the Olink.annotate_olink()implementation), using the UniProt accession read directly from the source files rather than a downloaded UniProt ID mapping table.
MotrpacHumanPreSuspensionAnalysis 0.2.1
- Added clinical chemistry differential analysis using the same structure as the molecular differential analysis; see:
CLIN_CHEMISTRY_DA
MotrpacHumanPreSuspensionAnalysis 0.2.0
MotrpacHumanPreSuspensionAnalysis 0.1.0
Initial release
- Public release of summary statistics and modeling outputs from the MoTrPAC human pre-COVID suspension phase.
- Added functions for loading differential analysis and summary statistics.
- Added clustering, enrichment, and visualization utilities.
- Added vignettes and package website scaffolding.