Changes in version 1.1.7 - Every man page documenting an exported object now carries a runnable example. The four \dontrun{} blocks that referenced unavailable vendor data (CompoundDiscovererNodeSource(), LipidSearchSource(), lp_compound_discoverer(), lp_lipid_search()) have been replaced with self-contained code, and the four precursor-purity layers (lp_purity_overlay(), lp_purity_timeline(), lp_purity_distribution(), lp_isolation_window()) have gained examples where they previously had none. This satisfies the Bioconductor requirement that at least 80% of such pages have runnable examples; coverage is now 100% (33 of 33, up from 25 of 33). - The purity examples use the DDA files already shipped in inst/extdata/standards-mzml.zip, whose MS2 scans carry real precursor selection and isolation-window metadata, so msPurity::purityA() yields six fragmentation events with informative inPurity scores. They are guarded with @examplesIf requireNamespace("msPurity") because msPurity is a suggested dependency. lp_isolation_window() uses half_width = 0.6 to match the isolation width recorded in those files. - The Compound Discoverer scripting-node and LipidSearch examples build a minimal vendor export in tempdir(), following the existing MZmineFeatureListsSource() and MsDialPeaksSource() examples, and point sample_paths at the shipped mzML files so the documented plots extract real chromatograms rather than only constructing a data source. Changes in version 1.1.6 - Added support for LipidSearch result files (both 4.2 and 5.2; the version is auto-detected). The new LipidSearchSource() constructor parses the lipid table, reshapes the per-sample Area / Height / RT / observed-m/z columns into an xcms-style peak table, and builds a plottable data source. Rejected lipids are dropped unless keep_rejected = TRUE, and lipid ions reported at several retention times get distinct plot labels. Plotting uses the new lp_lipid_search(lipids_query, rt_extend) layer, whose query can reference the lipid annotations (class, sub_class, grade, adduct, lipid_rank, ...). - LipidSearch 5.2 files carry no raw-file names, so their samples are keyed s1, s2, … (from the OrgMeanArea[...] columns). For 5.2, map raw files by naming sample_paths with those keys (c("s1" = "a.mzML", "s2" = "b.mzML")) — order-independent and covering any subset — or pass an unnamed vector matched positionally. 5.2 exports add a sub_class annotation and an explicit adduct, and their per-lipid BaseRt provides an extraction window even for lipids detected in no sample. 4.2's basename matching is unchanged. The rej annotation is now a logical for both versions. - Samples plotted from a LipidSearch source are not limited to the ones declared in the result file: sample_paths determines the sample list and is matched to the declarations by file basename without extension (so a result file listing .raw files works with converted .mzML files). A supplied path that matches no declaration is still a full sample - every queried lipid's chromatogram is extracted there using the lipid's consensus m/z and retention-time window, it simply has no reported peak to highlight. - The per-compound chromatogram extraction loop is now shared between the Compound Discoverer scripting-node and LipidSearch sources (create_compound_chromatograms()), along with the compound ranking and column-resolution helpers. Changes in version 1.1.5 - lp_total_ion_current() now works when raw files are passed directly to lcmsPlot() (a character vector of .mzML, .mzXML, .CDF, or .raw paths), in addition to XCMSnExp / MsExperiment objects. The per-scan TIC is read from the raw file headers via the shared raw-file reader interface. - Added a runnable worked example for large, multi-sample LC-MS studies. Using a 50-sample mzML study (the published Sacurine dataset, MetaboLights MTBLS404), it demonstrates the batching API (batch_size + iterate_plot_batches()) together with patchwork to build one self-contained composite figure per sample (TIC and BPC, an EIC + mass trace for a shared compound, and a zoomed intensity map), written to a multi-page PDF report. It is distributed as a standalone script rather than a packaged vignette, since it downloads and processes ~50 raw files. Changes in version 1.1.4 - Added support for using lcmsPlot inside a Compound Discoverer custom Scripting Node. The new CompoundDiscovererNodeSource() constructor reads the node_args.json file passed by Compound Discoverer together with the tab-delimited table exports it references (Compounds, Compounds per File, Features, and their link tables), selects a representative ion per compound and study file (preferring [M+H]+1 / [M-H]-1, otherwise the most abundant feature), and builds a plottable data source. Chromatograms are extracted from the raw (mzML) files supplied via sample_paths, which are matched to study files by file basename (falling back to positional matching by study-file ID). Plotting reuses the existing lp_compound_discoverer(compounds_query, rt_extend) interface. jsonlite was added to Imports. Changes in version 1.1.3 - Redesigned lcmsPlotApp() as a Tailwind-based dashboard: sticky topbar, left navigation rail with a card-style file uploader and sample picker, and a content area with the plot in a card. The Tailwind CSS is precompiled and shipped under inst/www/lcmsPlot.css; no runtime network or Node dependency. Dev sources live in tools/tailwind/ (excluded from the installed package). - Added a per-tab Options panel that exposes lp_facets(), lp_arrange(), lp_legend(), and lp_labels() directly from the UI. Users can now facet, group, reposition the legend, and add titles without writing R code. - Dashboard CSS is now served via htmltools::htmlDependency() and the Tailwind content scan + safelist were hardened so utility classes referenced from R templates actually end up in the compiled stylesheet. The UI is now wrapped in shiny::bootstrapPage() so the hidden tabsetPanel switches correctly. Card corners reduced from rounded-2xl to rounded-md, sidebar gap bumped to gap-6, and the initial nav highlight is now set statically in markup. - The Shiny uploader now accepts additional data-source types: Thermo .raw files (multi-file), Compound Discoverer .cdResult SQLite results (single file), serialised XCMSnExp / MsExperiment objects via .rds (single file), and saved workspaces containing one such object via .RData / .rda (single file). All existing mzML / CDF workflows are unchanged. Changes in version 1.1.2 - Added lcmsPlotApp(), an interactive Shiny app for exploring raw LC-MS files. Users can upload one or more mzML / CDF files and view base-peak and total-ion chromatograms, extract ion chromatograms by m/z and ppm (with an optional retention-time window), inspect peak density across samples, and plot spectra by scan index. The app follows Bioconductor's Shiny code-organisation guidelines: all UI/server code lives in R/ and lcmsPlotApp() returns a shinyApp object rather than calling runApp() internally. shiny, shinytoastr, and shinytest2 were added to Suggests. Changes in version 1.1.1 - Added support for purityA objects (msPurity) as the data_obj input to lcmsPlot(), enabling direct visualisation of precursor ion purity results. - Added lp_purity_overlay(): overlays per-scan inPurity scores as coloured points on a chromatogram, with a diverging colour scale and an optional threshold midpoint. - Added lp_purity_timeline(): scatter plot of inPurity versus retention time per sample, with an optional horizontal threshold line. - Added lp_purity_distribution(): violin or boxplot distribution of inPurity scores grouped by sample, with an optional threshold line. - Added lp_isolation_window(): MS1 spectrum plot annotated with the isolation window rectangle, precursor m/z dashed line, and inPurity score as a subtitle. - Added purity_scores slot to lcmsPlotDataContainer for storing per-scan purity data extracted from purityA@puritydf. - Added msPurity to Suggests in DESCRIPTION. Changes in version 0.99.20 - Added lp_peak_density() for peak density plots that mirror xcms::plotChromPeakDensity(): y-axis shows sample indices positioned within the kernel density range, x-axis shows RT, coloured points mark individual detected peaks per sample, and a density line is overlaid. When min_fraction and sample_groups are provided the density-descent grouping algorithm is simulated and semi-transparent rectangles highlight RT regions that would form feature groups. When used after lp_chromatogram(), features is inherited automatically. Supports rt_unit ("second" / "minute"), bw, min_samples, max_features, and multiple m/z windows with auto-faceting. - Fixed highlight_peaks_mode = "rectangle" and "point" in lp_chromatogram(): geoms now use inherit.aes = FALSE to avoid evaluating the global x = rt_plot aesthetic against detected_peaks, which previously caused an object 'rt_plot' not found error. RT values for rectangle and point modes are now scaled correctly when rt_unit = "minute". - Added line_type parameter to lp_chromatogram() (passed through to geom_line(); any ggplot2 linetype string is accepted). - Added x_dim, y_dim, and fill_scale parameters to lp_intensity_map(), allowing the m/z and RT axes to be swapped and the fill colour scale to be replaced with any ggplot2 scale object. - Expanded the "Plot peak density" section of the lcms_data_plotting vignette with explanatory prose and a combined chromatogram + peak density example. Changes in version 0.99.19 - Migrated all internal data structures from data.frame to tibble; tibble is now a formal Imports dependency. - Fixed all_of() call in the DBIConnection chromatogram creator to pass column names as a single character vector. - Qualified tibble() calls in MZmineFeatureListsSource and MsDialPeaksSource examples as tibble::tibble() to avoid could not find function "tibble" errors during R CMD check. - Expanded get_metadata() documentation with dedicated sections describing the behaviour for all nine dispatch methods: character, XCMSnExp, MsExperiment, MChromatograms, XChromatograms, XChromatogram, XcmsRawList, ExternalDataSource, and DBIConnection. Changes in version 0.99.18 - Added support for xcmsRaw objects via the new XcmsRawList S4 container and create_xcms_raw_list() convenience helper that reads files in parallel via BiocParallel. - Added XcmsRawReader, a MsRawReader subclass that reads scan headers and peaks directly from in-memory xcmsRaw slots without opening a file connection. - Added support for XChromatograms, XChromatogram, and MChromatograms as direct data inputs to lcmsPlot(). - XChromatograms now automatically derive a feature_id from the m/z and RT ranges of each row, enabling faceting and gridding on feature_id. - Refactored the chromatogram creator into a unified create_chromatograms() S4 generic replacing the four previous specialised generics. - Added na.rm argument to lp_chromatogram() to remove data points with NA intensity before plotting. - Added GitHub Actions CI workflow (.github/workflows/R-CMD-check.yaml) that runs devtools::test() and rcmdcheck::rcmdcheck() against the Bioconductor devel Docker image on every push and pull request to devel. Changes in version 0.99.16 - Fixed <- vs = assignment NOTE raised by R CMD CHECK. Changes in version 0.99.15 - Addressed second round of Bioconductor pre-acceptance review comments. Changes in version 0.99.14 - Added titles to all vignette code chunks for improved readability. Changes in version 0.99.13 - Added runnable \dontrun{} examples to MZmineFeatureListsSource and MsDialPeaksSource documentation. Changes in version 0.99.12 - Added support for MZmine (v2+) feature lists via MZmineFeatureListsSource. - Added support for MS-DIAL peak tables via MsDialPeaksSource. - Updated vignette with MZmine and MS-DIAL interoperability sections. Changes in version 0.99.11 - Version bump. Changes in version 0.99.10 - Added support for Compound Discoverer results files (.cdResult) via a new SQL-based data source backed by DBI / RSQLite. - Added lp_compound_discoverer() for loading and querying Compound Discoverer results directly within the lcmsPlot pipeline. - Updated lcmsPlot class documentation. Changes in version 0.99.9 - Removed redundant example from lcmsPlotClass documentation. Changes in version 0.99.8 - Major codebase refactoring for Bioconductor standards compliance. - get_metadata() for XCMSnExp and MsExperiment now falls back to deriving sample_id from file basenames when no sample_id_column is present. Changes in version 0.99.7 - Added figure dimension options (fig.height, fig.width) to vignette chunks for consistent rendered output. Changes in version 0.99.6 - Version bump; standardised @return documentation across all exported functions. Changes in version 0.99.5 - Added @return documentation to exported functions. - Fixed xcms namespace qualification in the test helper. Changes in version 0.99.4 - Fixed use of AnnotatedDataFrame (was incorrectly using NAnnotatedDataFrame in some code paths). Changes in version 0.99.3 - Fixed namespace qualification for xcms and patchwork calls. Changes in version 0.99.2 - Fixed MulticoreParam call in vignette. Changes in version 0.99.1 - Fixed BiocParallel namespace registration in vignette. Changes in version 0.99.0 - Initial Bioconductor submission. - Added comprehensive roxygen2 documentation with examples for all exported functions. - Added testthat (edition 3) test suite covering chromatogram, spectra, and intensity map creators. - Updated README with package overview and usage example. Changes in version 0.1.0 - Initial implementation of lcmsPlot. - lcmsPlot() entry point accepting MsExperiment, XCMSnExp, and raw file paths (character) as data sources. - lp_chromatogram(): base peak chromatograms (BPC), total ion chromatograms (TIC), and extracted ion chromatograms (XIC) with configurable m/z and RT tolerances. - lp_spectra(): mass spectra extraction with "closest", "closest_apex", and "across_peak" scan-selection modes; standalone and chromatogram-linked display; spectral mirror plots. - lp_intensity_map(): two-dimensional m/z vs RT intensity maps with optional density smoothing. - lp_total_ion_current(): TIC distributions as violin or box plots. - lp_mass_trace(): mass trace overlays below chromatogram panels. - lp_rt_line(): vertical reference lines at specified retention times. - lp_rt_diff_plot(): retention-time correction diagnostic plot. - lp_facets(), lp_grid(), lp_arrange(), lp_layout(): flexible panel layout helpers. - lp_labels(), lp_legend(): axis and legend annotation helpers. - highlight_peaks and highlight_apices options in lp_chromatogram(). - MsExperiment support including retention-time corrected chromatograms (rt_type = "corrected" / "both").