Changelog
Source:NEWS.md
ravetools 0.2.7
- Added
color_ramp_continuoushelper to create a vectorized color-mapping function from a palette and a numeric domain - Fixed
make_errorto properly protect the error class string from garbage collection, preventing class names from being silently lost in nested error calls - Guarded
design_filteragainstbandstopconfigurations where automatically derived transition bandwidths overlap each other, producing unordered frequency breakpoints - Added
mris_curvatureto estimate per-vertex mean, Gaussian, and principal curvatures by fitting an osculating quadratic surface to each vertex’s two-ring neighborhood - Added
mris_smoothto smooth a triangular surface mesh via iterativeLaplacianorTaubinsmoothing - Added
mris_inflateto inflate a cortical surface mesh by iteratively smoothing and expanding toward a sphere while preserving total surface area - Added
mris_sphereto project an inflated cortical surface onto a sphere and relax metric distortion via area-preserving gradient descent - Added
mris_remeshto re-mesh a triangular surface to uniform edge length using theBotschandKobbelt(2004) isotropic re-meshing algorithm - Added
mris_make_surfacesto localize white-matter andpialsurfaces from an intensity volume - Added
vcg_average_edge_lengthandvcg_max_edge_lengthto query edge-length statistics of a mesh - Added
vcg_count_edge_defectsto count non-manifold edge defects in a mesh - Added
vcg_fix_defectsto repair mesh topology defects viaVCG - Added
vcg_subdivide_max_edge_lengthto subdivide only edges that exceed a specified length, avoiding global super-sampling and improvingDijkstrapath quality - Added
vcg_mesh_patchto extract a geodesic patch of a mesh bounded by a closed curve of user-suppliedwaypointvertices - All
mesh3dobjects returned byravetoolsnow carry theravetools_mesh3dclass, enabling aplot()generic that dispatches automatically toplot_mesh_polygonorplot_mesh_dotcloud -
register_volume3d(SyNmode) re-implemented from theANTspaper in pureRcpp/RcppEigen; no longer depends onRNiftyRegor any external registration library -
register_volume3dgains apointsargument to additionally warp a matrix of anatomical coordinates (e.g. cortical surface vertices) through the estimated transform, enabling direct cortical mapping without a separate resampling step - Exported
apply_transform3dto apply a previously estimated rigid,affine, orSyNtransform to a new 3D volume -
register_volume3dnow returns an object of classravetools_register_volume3d(carrying the grid geometry and avox2rasattribute on each deformation field) with aprintmethod - Added
write_ants_transform/read_ants_transformto read and write the linear transform as anITKaffine.matfile (aMATLABlevel-4 binary inLPSconvention) compatible withantsApplyTransforms; implemented in base R with no new dependency - Added
write_ants_warp/read_ants_warpto read and write the deformation field as anANTs5-D warpNIfTI(LPSdisplacement vectors, vector intent code) via the suggestedfreesurferformatspackage; theRASaffinecan optionally be hidden in the header text fields for single-file recovery - Added
ras_lps_conjugateto convert a 4x4 transform between theRASandLPSconventions - Added
save_registration/load_registrationto write a registration result to (or read it from)ANTs-style files plus a dependency-free manifest
ravetools 0.2.6
CRAN release: 2026-05-31
- Added
plot_mesh_dotcloudfor rendering one or moremesh3dobjects as an orthographic rim-lit dot cloud in base R (norgldependency); supports per-vertex colors, depth-gradient palettes, per-mesh alpha,sidefiltering, and painter’s-algorithm depth sorting across multiple meshes - Added
plot_mesh_polygonfor rendering one or moremesh3dobjects as flat-shaded Lambert-lit triangles in base R; point-cloud meshes (no face matrix) are automatically substituted by small sphere instances; supports camera-facing clipping (mesh_clipping),sidefiltering, per-mesh alpha blending, and configurableshadow_color,light_intensity, andambient_intensity -
plot_mesh_dotcloudandplot_mesh_polygongain aclipping_planeargument (a 4-element numeric normal-and-offset vector, or a list of such vectors) to discard geometry on one side of arbitrary planes before rendering, and a per-meshclipping_plane_enabledlogical toggle to opt individual meshes in or out of clipping - Exported
ensure_mesh3dfor coercing various surface formats (mesh3d,ieegio_surface,fs.surface,surf.asc) to a canonicalmesh3dobject; previously internal-only - Fixed
freqz2plot legend: the cutoff legend used the rawcutoffsargument (and could index past the color palette, yieldingNAcolors) when a requested cutoff did not actually intersect the magnitude curve; the legend now only lists cutoffs that are drawn, and labels the unit asdBinstead of the filter’s frequency unit
ravetools 0.2.5
CRAN release: 2026-05-23
-
morlet_waveletgains asegment_lengthargument (defaultNULL) that processes long signals (e.g. multi-hour recordings) in overlapping segments using batchedmvfftw_c2cconvolutions, dramatically reducing peak memory and FFT cost while preserving the legacy result on the signal interior -
baseline_arraynow supports seven baseline methods:"percentage","sqrt_percentage","decibel","zscore","sqrt_zscore","db_zscore", and"subtract_mean"; newly added methods include decibel z-score normalization - Added spike sorting helpers for normality test, spike detection, per-channel waveform extraction, and
Haarwavelet feature extraction - Replaced
waveletspackage dependency withwaveslimfor discrete wavelet transform used in spike sorting utilities -
project_planegains ann_itersargument to control the number of projection iterations (default is5) - Applied lint fixes and improved code style consistency across all source files
- Added
carlaimplementing the Common Average Re-referencing by Least Anti-Correlation (CARLA) algorithm (seeCITATION) for selecting an optimal subset of channels as the common average reference inCCEPdata - Added
crpimplementing the Canonical Response Parameterization (CRP) method for characterizing single-trial evoked responses (e.g.CCEPs): estimates response duration, extracts the canonical response shape, and reports per-trial weights,SNR, and explained variance; additionally reports a canonical shape (C_full) spanning the entire loaded time range (including the baseline period), and gains an optional reverse-scan response-onset estimator (detect_onset, with anonset_search_startfloor) that locates the response start time for delayed responses - even before the analysis window - while keeping the per-trial weights unchanged; non-finite time points are dropped automatically and the analysis window is clamped into the available time range - Exposed low-level
FFTW3wrappers (fftw_r2c,fftw_c2r,fftw_c2c,mvfftw_r2c,mvfftw_c2c,mvfftw_c2r, and their2D/3Dvariants) with memory bugs fixed; these are thin bindings for advanced users requiring maximum throughput - Fixed
design_filter_firband-pass scaling reference frequency to use the average of the transition-band midpoints (matchingMATLABfir1/scale_filter), and fixed band-stop scaling to always normalize atDC; previously both could produce incorrect gain for asymmetric transition bands -
filtfiltnow accepts aSos(second-order sections) object fromgsignaland delegates togsignal::filtfiltin that case - Added
catmull_rom_3dfor smoothCatmull-Romspline interpolation through 3D point sequences, including closest-point projection from an arbitrary 3D point onto the curve - Fixed
qfachandling in the matrix toquaternionconversion so that right-handed transforms (negative determinant) are correctly represented -
fir1filter computation is significantly faster via an optimized internal implementation
ravetools 0.2.4
CRAN release: 2025-09-10
- Added a naive implementation of non-negative matrix factorization in pure R
- Added finding and aligning stimulation pulses (for continuous stimulation)
- Added
find_peaksto provide finding peaks along a trace of signal
ravetools 0.2.3
CRAN release: 2025-07-22
- Added
gammatone_fastfilters to obtain the audio envelope at different frequencies - Added
vcg_subset_certexto subset mesh - Added
vcg_subdivisionto up-sample mesh - Added plane-generating function to create mesh for plane
ravetools 0.2.2
CRAN release: 2025-03-05
- Fixed
clang20warning and removed problematicvcglibcode that use pointers after free.
ravetools 0.2.1
CRAN release: 2025-01-24
- Using
std::nearbyintinsteadstd::roundto round numbers to comply toIEC-60559standard that half numbers round to nearest even integers - Implemented low-level
3Dvolume sampling inC++:resample_3d_volume - Exported
gsignal::resample(however, some edits might be needed in the future to produce the same results asMatlab) - Supported converting
ieegiosurface geometries tomesh3dto be used inVCGrelated functions - Added
K-Dtree search to find closest points among two point clouds
ravetools 0.2.0
CRAN release: 2024-12-16
- Added
vcg_raycasterto find intersection of rays and given mesh object.
ravetools 0.1.9
CRAN release: 2024-11-08
- Hot fix by adding
vctrstoSuggeststo fix the issue that fails the unit test due to an update intestthatpackage.
ravetools 0.1.8
CRAN release: 2024-09-03
-
design_filterensures frequency window cuts off within 0 toNyquist -
fftfiltallows matrix input -
filtfiltwitha=1(FIRfilter) callsfftfiltto speed up - Fixed
pwelchincorrect power calculation. The results agrees mostly withMatlabfunction - Using
hammingwindow as the default inpwelch; exported additional window options such asblackmanfamilies,bohmanwin,flattopwin, andhanning
ravetools 0.1.7
CRAN release: 2024-07-17
- Fixed a
c++template issue caused byvcglib, which fails to compile underclang19 -
decimateagrees withMatlabnow (bothfirandiirfilters) - Implemented
freqz2to obtain the frequency response of a digital filter (similar togsignal::freqzbut with more accurate cutoff frequency calculation and more customize plots) - Added filter diagnostic plot
diagnose_filter - Added
check_filterto obtain expected magnitude at given frequency and reciprocal condition number - Removed dependency
signaland usegsignalinstead - Added
design_filterfor bothfirandiirfilters, allowing both entry and intermediate users to design band-pass/stop, low/high pass filters easily. - The
iirfilter order generated fromdesign_filterwill be checked againstrcond_filter_ar(reciprocal condition number) to make improve the numeric stability - Fixed (hopefully) memory issues caused by
dijkstra; the package passedasan,valgrindtest provided byrhub2
ravetools 0.1.6
CRAN release: 2024-06-02
- Fixed
dijkstramethod occasionally causing memory error. New method is much faster now. - Fixed
plot.pwelchnot displaying the signal names correctly. - Removed
c++17requirement and supports 11, 14, and 17 standards
ravetools 0.1.5
CRAN release: 2024-05-19
- Fixed
FIR1filter - Fixed
pwelchthrowing warnings when signal is zero (or zero power) - Updated authorship
ravetools 0.1.4
- Implemented
dijkstrato find shortest paths in mesh - Migrated and incorporated
vcglib - Fixed a
C++template issue via type explicit calls - Fixed
fir1filter when band-passing signals with incorrectn -
pwelchplot works with zero power now;mv_pwelchplot error fixed
ravetools 0.1.3
CRAN release: 2023-12-04
- Rewrote
band_pass2to avoidNAgenerated when upper band frequency isNyquist - Added
Vector3,Matrix4,Quaternionfor in-place calculation - Added support for
WASM - Fixed issues reported by
CRAN: “format string is not a string literal (potentially insecure)”
ravetools 0.1.2
CRAN release: 2023-07-16
- Compatible with the latest
filearray - Exported
grow_volume -
mesh_from_volumeno longer throw errors if the mesh does not form a manifold
ravetools 0.1.1
CRAN release: 2023-04-19
- Fixed a precision issue that caused test failure on some machine
ravetools 0.1.0
CRAN release: 2023-02-18
- Added
fill_surfaceto fill in volume based on given surface mesh - Added
mesh_from_volumeto generate mesh from volume. This function can be used together withfill_surfaceto generate surface envelope - Added
register_volumeto align two imaging data using linear or non-linear registration - Added
fftwon2Dimage and3Dvolume data - Added convolution for
1D,2D,3Ddata usingFFT
ravetools 0.0.9
CRAN release: 2023-01-20
- Fixed
pwelchfrequency not starting from zero issue - Upgraded
TinyThreadusing the latest pull-request toRcppParallel
ravetools 0.0.8
CRAN release: 2022-10-14
- Added
interpolate_stimulationto detect stimulation signals within the response and interpolate with smooth signals - The package now imports
splines - Added
fast_quantileandfast_mvquantileto improve the quantile/median calculation speed - Fixed the
plot_signalsplotting range too large when signals have large values (such as stimulation) - Fixed
TinyThreadslibrary memory leak issues - Simplified
diagnose_channel, avoid duplicatedpwelchcalculation
ravetools 0.0.7
CRAN release: 2022-09-19
- Added signal
filter,filtfiltthat produce the same results asMatlab(with precision error) - Added two ways to perform band-pass filters
- Allows multiple channels through
pwelchas a row-major matrix to speed up calculation - Added
wavelet_cycles_suggestto provide default calculation of wavelet cycles - Added internal argument
signatureto wavelet to resolve potential cache conflicts when running in multiple processes. (This allowsRAVEto run wavelet on multiple subjects at the same time)
ravetools 0.0.6
CRAN release: 2022-08-25
- Added decibel average in
pwelch - Allowed
pwelchsampling frequency to be greater than the signal length - Adjusted parameters diagnostic plot and
pwelchplot to properly handle graph text, margin, axis - Added
plot_signalsto plot multiple functional data within the same canvas
ravetools 0.0.5
CRAN release: 2022-08-06
- Exposed
C++code toinst/includesso other users can dynamically link to the functions (https://github.com/dipterix/ravetools/issues/5) - Removed confusing in-place arguments in the
fftwrelated code - Corrected
fftwplans to respect the flags - Added
C++to convert raw binary bytes touint,int,float, andstring
ravetools 0.0.4
CRAN release: 2022-05-29
Parallel processes might use different temporary directory paths. To improve the performance, it is recommended to set a shared temporary directory, hence this version
- Allows temporary directories to be set via environment variable
RAVETOOLS_TEMPDIRor optionravetools.tempdir.
ravetools 0.0.3
CRAN release: 2022-02-16
This version fixes a memory issue reported by CRAN check (gcc-UBSAN).
- There is a potential integer overflow where
NA_INTEGERis subtracted by one before being converted toR_xlen_ttype. This update fixes this issue - Removed
RcppParalleland copied part of it intoinst/includefolder, withTBBremoved under theGPL-3license framework.
ravetools 0.0.2
CRAN release: 2022-02-14
This is an initial version of ravetools. Although a bare minimal set of signal processing functions are provided, it is sufficient to perform preprocess pipelines on most iEEG signals. Some functions are added from the dipsaus package, with considerable performance improvement. The C++ functions have been tested on all major platforms, with different architectures (ARM, i386, x64).
Documentation
- Added
READMEfile to demonstrate basic usage - Added a
NEWS.mdfile to track changes to the package.
Signal processing functions
- Re-implemented
decimatewithFIRfilters creating the same results as inMatlab - Added
detrendfunction to - Added
diagnose_channelto visually inspect channel signals - Added
morlet_waveletto enable fast and memory efficient wavelet decomposition; the result agrees with existingMatlabcode with floating errors (10^-7) - Added
multitaper - Added
pwelch(Welchperiodogram) - Added
notch_filterto remove line noise
High-performance functions
The following functions are implemented in C++ parallel. They tend to be faster than normal base-R implementations, depending on the number of CPU cores used.
- Added
collapseto collapse arrays - Added
shift_arrayto shift array along certain indices - Added
fast_covto calculatepearsoncovariance matrix in parallel - Added
baseline_arrayto calculate baseline arrays with multiple margins