Changes in version 2.1.0 (2026-05-04) Changes - Aligned num_spline_params used in compare_H1_and_H2() BIC calculation with the spline model (5 parameters per curve). - calculate_distance() now imputes query expression on the registered time grid with impute_query_exp_value() (linear interpolation via stats::approxfun()); spline-based imputation remains available as impute_query_exp_value_from_spline() for comparison workflows. - get_timepoint_comb_data() gains optional cross_join_all to support four-quadrant time-point combinations (reference-reference, query-query, etc.); ref_ / query_ prefixes are only applied in that mode so the default path keeps numeric time points. - calculate_distance() and plot.dist_greatR() now handle numeric and label-formatted time-point tables more robustly (pre-aggregation relabelling removed from distance calculation; plot-side label stripping is conditional). Tooling & Documentation - Added maintainer script dev/scripts/rebuild_brapa_registration_rds.R (plus notes under dev/) to regenerate inst/extdata/brapa_arabidopsis_registration.rds after registration changes. - dev/full_pipeline_example.Rmd: runnable full pipeline (CSV → register() → summaries, curves, distances) for smoke-testing from a source checkout. - Added here under Suggests for the rebuild script; updated Config/roxygen2/version for current {roxygen2}. Tests - Updated unit test expectations for BIC_diff and calculate_distance() to match current outputs. Changes in version 2.0.0 (2024-04-09) - Added {patchwork} as a dependency. - Updated {greatR} logo. - Updated default optimisation_method in register() to be "lbfgsb" (LBFSG-B) instead of "nm" (Nelder-Mead). - Added sample SOC1 arabidopsis_SOC1_data.csv and brapa_SOC1_data.csv extdata. - Refactored optimise_registration_parameters argument in register() to use_optimisation. - Updated register() to return object of S3 class res_greatR. - Updated calculate_distance() to return object of S3 class dist_greatR. - Refactored summarise_registration() as summary.res_greatR() S3 method. Improvements - Deprecate use of time_delta variable in registration process. - Added fun_args (a list of arguments used when calling the function) in register() results. - Updated summary.res_greatR() to return NA instead of [NA, NA] when all genes are non-registered. - Added reg_params (table containing distribution of registration parameters) to results list in summary.res_greatR() method. - Simplified calc_overlapping_percent() calculation. - Take into consideration overlapping_percent when applying manual registration. - Updated logic of calc_variance() for data with no replicates to consider expression_value. - Updated get_stretch_search_space_limits() and get_shift_search_space_limits() to exclude unexplorable regions in search space. - Improved calculate_distance() and aux get_timepoint_comb_*_data() functions to eliminate column selection and renaming inside lapply() calls, reducing execution time by up to 25%. - Added type ("registered" or "all") and genes_list arguments to calculate_distance() to filter genes. - Added new unit tests. - Updated unit tests, and added S3 class checks where apropriate. - Updated vignettes and README diagrams and figures. - Updated vignettes with additional examples, comments on arguments, and full coverage of all plot() methods. Bug fixes - Fixed get_shift_search_space_limits() to adjust shift space limits accordingly to removal of time_delta variable (see 48c943cd). - Fixed default overlapping_percent = 0.5 (instead of 50) in register_manually(). - Fixed get_stretch_search_space_limits() to correctly determine lower and upper limits when single stretch value is provided. - Fixed issue in get_shift_search_space_limits() where range variables were not available when calc_mode == "bound". New functions - bind_results() auxiliary function to merge results from register(). - theme_greatR() function and greatR_palettes list. - transform_input() S3 generic to accept different types of input in register(). - plot.res_greatR() S3 method to replace plot_registration_results(). - plot.dist_greatR() S3 method to replace plot_heatmap(). - plot.summary.res_greatR() S3 method inspired by WVPlots::ScatterHistC(). Changes in version 1.1.0 (2024-01-09) - Added {furrr} and {future} as dependencies. - Added num_cores parameter to register() to allow users to run registration in parallel. - Added exp_sd parameter to register() to allow users to manually set up experimental gene expression variance. - Updated scaling_method parameter in register() and scale_data() to allow no scaling ("none", default), Z-score scaling ("z-score"), and min-max scaling ("min-max"), and updated unit tests accordingly. Improvements - Updated register() to perform 3 sequential registrations when using Nelder-Mead, this improves the results of optimal stretch and shift parameters. - Updated calc_loglik() to use sigma_squared in every time point in the sum. - Updated scaled_data() and preprocess_data() to return all_data object only, instead of a list() containing all_data. - Updated compare_H1_and_H2() to return BIC_diff column (BIC_combined - BIC_separate), instead of BIC_combined and BIC_separate on their own. - Updated explore_manual_search_space() to use BIC_diff instead of BIC_combined to calculate best_params from model_comparison table. - Updated register() to perform 3 sequential registrations when using Nelder-Mead, this improves the results of optimal stretch and shift parameters. This may be reverted by tweaking neldermead() parameters to ensure correct convergence. - Added optional stretch_init and shift_init to get_search_space_limits(), and updated optimise() to allow for different space_lims calculation settings: automatic, given boundary box, and given initial coords (new). - Removed unused mean_data calculation from preprocess_data() and argument from scale_data(). - Moved "Will process N genes" message from register() to preprocess_data() after running filter_*() functions. - Ensure results_list$data is arranged/ordered correctly in register(). - Updated get_H*_model_curves() functions to ensure model curves are smooth. - Updated parse_gene_facets() to display BIC_diff in facet strips. - Added plot_mean_data parameter to plot_registration_results(). - Updated overlapping_percent parameter in register() so it goes from 0 to 100 (it's later normalised in the function to avoid breakages down the line). - Added scaling_method as an attribute in data results from register(), this is used in plot_registration_results() to build the y-axis label according the the scaling method used. - Updated brapa_arabidopsis_registration.rds file with new pipeline results. - Split get_search_space_limits() into separate aux functions for stretch and shift, which allows more stretch and shift input combinations. - Updated validate_params(..., registration_type = "optimisation") to allow more stretch and shift input combinations. Bug fixes - Improved get_timepoint_comb_original_data() and get_timepoint_comb_registered_data() to perform cross_join() on a single gene_id at a time using lapply(), this fixes "Error: vector memory exhausted (limit reached?)" error. - Updated match_names() to do double setdiff() to ensure name matching is done two ways, and updated corresponding unit test. New functions - filter_incomplete_accession_pairs() to filter out genes that are missing one accession. - calc_variance() to preprocess data variance inside preprocess_data() instead of calc_loglik(). - Aux register_single_gene_*() functions inside register() to simplify and generalise the pipeline for parallel registration. Changes in version 1.0.0 (2023-07-19) - Rewrote registration pipeline from scratch, deprecating unnecessary, and redundant auxiliary functions. - Added L-BFGS-B and Nelder-Mead (now default) optimisation methods to {greatR}. - Switched to manual calculation of log likelihood via calc_loglik() instead of stats::logLik(). - Reduced computation time up to 1000 times, (x30 speed-up from package rewrite, and x35 speed-up from switching default optimisation method). - Removed {dplyr}, {magrittr}, {purrr}, {rlang}, and {stringr} as package dependencies. - Added {neldermead} as a package dependency. - Updated list of exported functions: - register() - summarise_registration() - get_approximate_stretch() - plot_registration_results() - plot_heatmap() - calculate_distance() Improvements - Simplified parameters of main register() function, and added scaling_method. - Simplified structure of output object of register(). - Simplified parameters of summarise_registration(), plot_registration_results(), plot_heatmap(), calculate_distance() to simply require results object from register(), vastly simplifying usage. - Improved messages, errors, and progress indicators with {cli}. - Added correct pluralisation in {cli} messages. - Rewrote unit tests to use {data.table} exclusively for data manipulation. - Added unit tests for calc_loglik_H1(), calc_loglik_H2(), calc_overlapping_percent(), calculate_distance(), cross_join(), get_search_space_limits_from_params(), get_search_space_limits(), objective_fun(), optimise(), plot_heatmap(), plot_registration_results(), preprocess_data(), register_manually(), register(), summary_registration(), validate_params(). Bug fixes - Fixed match_names() call when validating accession names in register() - Fixed use of deprecated aes_string() by parsing timepoint_var using !!ggplot2::sym() call. - Fixed preds left join in plot_registration_results(). - Fixed issue in plot_registration_results() not working when all genes are unregistered with type = "registered". - Fixed calculation of time_delta in preprocess_data() to ensure it's grouped by gene_id and accession (not just accession). Changes in version 0.2.0 (2022-06-08) - Added Alex Calderwood as package co-author. - Added vignette for optimisation process. - Refactored num_shifts and shift_extreme parameters by simplified shifts parameter. Improvements - Improved default parameter values in exported functions. - Added {optimization}, {purrr} as package dependencies. - Removed {cowplot}, {ggpubr}, {ggrepel}, {Rtsne}, and {viridis} as package dependencies. - Cleaned up {cli} messages. - Removed legacy AIC references, as it is no longer used. - Updated calculate_between_sample_distance() to use registration_results as primary parameter instead of mean_df, mean_df_sc, and imputed_mean_df. - Added warning if there is no comparable time points found using users' pre-defined parameters. - Refactored optimise_shift_extreme as maintain_min_num_overlapping_points, properly defined and corrected the boundary box if number overlapping points whether needed to be maintained or not. Bug fixes - Check that input accessions exist in the input data in get_approximate_stretch(). - Manually create time point sorting levels for x_sample and y_sample columns according in plot_heatmap(). - Properly handle - character in accession names in plot_heatmap() so that time points are parsed correctly. New features - Added optional parameter optimisation process using Simulated Annealing through optimise_registration_params(). New functions - preprocess_data() to simplify scale_and_register_data() code and reuse logic elsewhere. - get_best_stretch_and_shift_simplified(). - get_BIC_from_registering_data(). - get_boundary_box(). - optimise_registration_params_single_gene(). - optimise_registration_params() as wrapper of optimise_registration_params_single_gene() for multiple genes. - get_best_stretch_and_shift_after_optimisation(). Changes in version 0.1.0 (2022-01-12) - Initial release. - Added a NEWS.md file to track changes to the package.