Repository navigation
v1.2.0
What's Changed
- updates for empty by @stevevanhooser in #659
- Update prepare-release-modular.yml by @stevevanhooser in #667
- updates to EMPTY by @stevevanhooser in #658
- Update NDI Cloud API clients for soft delete and undelete by @google-labs-jules[bot] in #668
- Pass on new updates by @stevevanhooser in #669
- Update epochprobemap_daqsystem_vhlab for stimulus triggers log by @google-labs-jules[bot] in #670
- Add vhtaste_sync DAQ system by @google-labs-jules[bot] in #671
- Fix: Enable reading rising events in stimulator probe by @google-labs-jules[bot] in #672
- Haley nansen tutorial by @jesshaley in #675
- Tutorials updates by @jesshaley in #674
- Add EDAM ontology lookup for 'format' prefix by @jesshaley in #677
- Add NDI Cloud Developer Manual documentation by @stevevanhooser in #678
- Add ndi.fun.plot.stimulusTimeseries wrapper by @google-labs-jules[bot] in #679
- Add commonTriggersOverlappingEpochs syncrule by @google-labs-jules[bot] in #673
- Return stimulus data and time data from ndi.fun.plot.stimulusTimeseries by @google-labs-jules[bot] in #680
- Add guide for writing new stimulus reader classes by @google-labs-jules[bot] in #662
- Fix cloud test cleanup and pagination by @google-labs-jules[bot] in #682
- Increase test pauses to improve stability by @google-labs-jules[bot] in #681
- fixing case where one epoch maps to multiple epochs on another device by @stevewds in #683
- Update cloud sync documentation for SyncOptions defaults by @google-labs-jules[bot] in #684
- Support linked sessions in database_existbinarydoc and fix dataset_erase bug by @jesshaley in #685
- Add downloadGenericFiles function to ndi.cloud by @jesshaley in #676
- Fix ndi.ontology.EMPTY lookup and parsing by @jesshaley in #686
- Update README.md by @stevevanhooser in #687
- fix jules bug by @stevevanhooser in #688
- Add filter and pyraview NDI documents by @google-labs-jules[bot] in #689
- Enhancement/manual by @stevevanhooser in #691
- Update RRID lookup to return species by @jesshaley in #690
- Update syncgraph.m by @stevevanhooser in #692
- Ontology table row add dependency output by @jesshaley in #694
- docs: refactor neuron extracellular snippet to bypass table conversion by @google-labs-jules[bot] in #695
- Add epochNodeName function and tests by @google-labs-jules[bot] in #696
- Enhancement/pyraviewer by @stevevanhooser in #697
- Fix file skipping for large files in zipForUpload by @google-labs-jules[bot] in #700
- Bugs/intan ingestion by @stevevanhooser in #698
- feat(probe): add ndi.fun.probe.export_binary and tests by @google-labs-jules[bot] in #701
- feat: implement randomPulses sync rule and move syncRandomTriggers by @google-labs-jules[bot] in #702
- Feature/sync random triggers by @stevevanhooser in #703
- Add initial symmetry testing artifact generator and instructions by @google-labs-jules[bot] in #704
- Silence missing artifact warnings in NDI symmetry testing by @google-labs-jules[bot] in #705
- Add CI workflow for NDI symmetry tests by @stevevanhooser in #706
- Add dataset symmetry tests for MATLAB and Python artifact validation by @stevevanhooser in #707
- Add symmetry tests for blank sessions across lab configurations by @stevevanhooser in #708
- Export JSON documents for each session in dataset artifacts by @stevevanhooser in #709
- Make compareSessionSummary order-independent for cell arrays by @stevewds in #710
- Add symmetry test suite for session ingestion artifacts by @stevevanhooser in #711
- Add symmetry tests for downloadIngested dataset functionality by @stevevanhooser in #712
- Make session summary comparison order-independent for struct arrays by @stevevanhooser in #713
- Make dataset directory detection dynamic in artifact tests by @stevevanhooser in #714
- Remove macOS resource fork files from extracted artifacts by @stevevanhooser in #715
- Add dataset-level summary and comparison utilities by @stevevanhooser in #716
- Handle EDAM sub-ontology prefixes in OBO ID lookups by @stevevanhooser in #717
- Replace isequal with isequaln for NaN-aware comparisons by @stevevanhooser in #718
- added sync that allows for some missing pulses by @stevewds in #719
- Add logging for trigger count mismatches in sync rule by @stevevanhooser in #720
- Add find_calculator_subclasses static method to discover calculator implementations by @stevevanhooser in #721
- Fix calcbuild crash when documentation_structure.mat is missing by @stevevanhooser in #723
- Skip empty template placeholder dependencies in document resolution by @stevevanhooser in #725
- Updates to tableDocMaker, dependency_value_n, dateUpdated by @jesshaley in #724
- Errors with openbinarydoc and zipUpload for linked session by @jesshaley in #726
- Add testLogin function to validate NDI Cloud authentication by @stevevanhooser in #727
- Replace websave with ndi.cloud.api.files.getFile for cloud downloads by @stevevanhooser in #728
- Clarify file overwrite behavior in getFile documentation by @stevevanhooser in #729
- Add integration test for reading ingested cloud datasets by @stevevanhooser in #730
- Update requirements.txt by @stevewds in #732
- Add vhneuropixels DAQ system configuration by @stevevanhooser in #734
- Add analog event detection support to MFDAQ reader by @stevevanhooser in #735
- Add Neuropixels GLX stimulus reader for Nielsen visual stimulus by @stevevanhooser in #737
- Babu data import by @jesshaley in #733
- Refactor session copying and add linked-to-ingested conversion by @stevevanhooser in #736
- Kristina neuropixels by @stevevanhooser in #738
- Add vhlab Neuropixels GLX support with AJBPod stimulus reader by @stevevanhooser in #739
- Add comprehensive documentation to graphical_edit_calculator method by @stevevanhooser in #740
- Fix docfiletext argument in graphical_edit_calculator by @stevevanhooser in #741
- Docs: drop stale tutorial pointer; document specific_test_inds and typed I/O for generate_mock_docs by @stevevanhooser in #742
- Add document class counts API endpoint support by @stevevanhooser in #743
- Test /ndiquery scope-by-dataset-IDs form by @stevevanhooser in #744
- Add bulkFetch API for synchronous multi-document retrieval by @stevevanhooser in #745
- Replace websave with curl-based downloads to prevent corruption by @stevevanhooser in #746
- Default uploads to curl with pinned headers by @stevevanhooser in #747
- update babu-import to test by @stevevanhooser in #749
- Remove isRaw field from file listing API response by @stevevanhooser in #751
- Merge pull request #749 from VH-Lab/main by @stevevanhooser in #750
- Split test suite into cloud and non-cloud workflows by @stevevanhooser in #752
- Extract ontology system into separate ndi-ontology-matlab package by @stevevanhooser in #753
- Add retry logic and convergence delay to dataset deletion in tests by @stevevanhooser in #754
- Add bulk upload job polling and status tracking APIs by @stevevanhooser in #756
- Add polling functions for dataset publication status by @stevevanhooser in #757
- Improve device detection for epoch probe mapping by checking for .rhd files by @stevevanhooser in #760
- Add ndi.preferences singleton for managing user preferences by @stevevanhooser in #758
- Improve NDI Cloud authentication validation and organization handling by @stevevanhooser in #761
- Improve cloud login testing with token validation and UI login by @stevevanhooser in #762
- Improve documentation for ndi.session.dir constructor by @stevevanhooser in #765
- Update dir.m documentation by @jesshaley in #764
- Add MATLAB BYOL license management and hello-matlab pipeline support by @stevevanhooser in #766
- Add verbose logging to ndi.cloud.testLogin for debugging by @stevevanhooser in #763
- Refactor ComputeTest: separate pipeline completion from abort testing by @stevevanhooser in #769
- Make NDI_CLOUD_TEST_USER_HAS_MATLAB_LICENSE a required configuration by @stevevanhooser in #770
- Parallelize cloud API tests across multiple CI runners by @stevevanhooser in #771
- Add RHD series file navigators for prefix-grouped recordings by @stevevanhooser in #772
- Add cross-platform preferences and cloud profile persistence by @stevevanhooser in #773
- Improve API error handling with robust formatApiError utility by @stevevanhooser in #791
- Refactor stimulus on/off pairing to handle clipped events by @stevevanhooser in #790
- Fix sync index corruption when document or binary uploads fail by @stevevanhooser in #806
- Tolerate heterogeneous file entries in ListFiles.execute (#807) by @jesshaley in #808
- Skip all hidden files and directories in epoch navigator by @stevevanhooser in #810
- Don't treat HTTP 504 as success in bulkDeleteDocuments by @jesshaley in #811
- Improve NDI_CLOUD_RUN_HELLO_MATLAB environment variable handling by @stevevanhooser in #818
- Filter out macOS AppleDouble shadow files from epochprobemap matching by @stevevanhooser in #819
- Add Kilosort curated-output import pipeline for probes by @stevevanhooser in #814
- Add image-series (frame-based) DAQ system support to NDI by @stevevanhooser in #824
- Add vhPrairie2p file navigator (epochs from BASE/BASE-NNN directory pairs) by @stevevanhooser in #825
- Audit remediation (cloud/security/perf/symmetry) + review refinements by @stevevanhooser in #828
- Audit remediation: cloud API/sync, security, Java validator, perf, symmetry infra by @audriB in #827
- Authenticate GitHub API requests in CI workflows to avoid rate limiting by @stevevanhooser in #830
- Add ensemble document type and sparse array I/O utilities by @stevevanhooser in #833
- Add blech_clust HDF5 export function for ensemble spike data by @stevevanhooser in #832
- Add NDI Navigator GUI with collapsible pane architecture by @stevevanhooser in #837
- Expand pyraview probe support beyond n-trode probes by @stevevanhooser in #838
- Apply NDI Cloud design system to navigator UI by @stevevanhooser in #839
- Dock progress bars into navigator pane instead of standalone window by @stevevanhooser in #840
- Add KIASORT spike-sorting integration and electrode-geometry tools by @stevevanhooser in #834
- Add Katz Lab blech_clust HDF5 exporter GUI app by @stevevanhooser in #842
- cedspike2: read 64-bit son64/.smrx files via NDR (sonpipe dispatch) by @stevevanhooser in #843
- Add lab-specific sync rules to ndi.setup.lab by @stevevanhooser in #844
- Remove redundant MATLAB path restoration steps from CI workflows by @stevevanhooser in #845
- Add VHLab spike sorter wrapper app to NDI GUI by @stevevanhooser in #841
- Restrict badge commit workflow to pull requests only by @stevevanhooser in #846
- vhlab PrairieView imaging: DAQ system, image probe timeseries + sub-frame timing, SelectC/SelectZ by @stevevanhooser in #847
- Add UCLA and NeuroNexus probe geometry definitions and improve library by @stevevanhooser in #849
- Add session info window and ingestion status badges to navigator by @stevevanhooser in #848
- Add object-type marker system for quick session/dataset detection by @stevevanhooser in #852
- Replace DAQ tree view with table layout in session info panel by @stevevanhooser in #853
- Add NDI navigator shortcut and fix ingestion status handling by @stevevanhooser in #850
- Fix spike array dimension ordering for blech_clust HDF5 compatibility by @stevevanhooser in #856
- Add wide mean waveform recalculation from raw binary for Kilosort by @stevevanhooser in #857
- Add session management and filter improvements to GUI by @stevevanhooser in #854
- Add organization name and upload permission fields to user API by @stevevanhooser in #858
- Add NDI Cloud dataset synchronization UI to datasets pane by @stevevanhooser in #859
- Make dataset cloud status on-demand (Check Cloud status menu item) by @stevevanhooser in #860
- Add cache-clearing: session menu item, ndi.fun.clearAllCaches, and a broom button by @stevevanhooser in #861
- Fix vhajbpod_np epoch matching: one epoch per Epoch_Set, per-set NI-DAQ triggers by @stevevanhooser in #863
- Kilosort import: prompt for raw file and high-pass filter when recalculating spike shapes by @stevevanhooser in #864
- Add stimulus parameter analysis UI to stimulus decoder by @stevevanhooser in #865
- Add Pipeline Editor GUI app wrapper by @stevevanhooser in #866
- Add streaming mean waveform recalculation for Kilosort imports by @stevevanhooser in #867
- Fix curl library path issues on Linux/macOS after MATLAB upgrades by @stevevanhooser in #868
- Fix Windows SQLite-locked teardown: close all connections before rmdir (#870) by @stevevanhooser in #874
- Skip samplerate query for eventmarktext channels in mfdaq reader by @stevevanhooser in #875
- Fix RayoLab stimulus metadata ingestion (# wildcard in metadata regexp) by @stevevanhooser in #876
- Update GMC_Sorter export to support Version 4 multi-shank API by @stevevanhooser in #877
- Add forceUpdate option to lab and rayolab setup functions by @stevevanhooser in #880
- Make probe folder names platform-independent by sanitizing illegal characters by @stevevanhooser in #881
- Give calculator self-tests a way to verify their results by @stevevanhooser in #882
- Stop mock elements from colliding on a reused reference number by @stevevanhooser in #883
- Seed the mock trial-to-trial variability by @stevevanhooser in #884
- Draw the mock trial-to-trial noise fresh on every run by @stevevanhooser in #885
- Add a calculator document type by @stevevanhooser in #888
- Declare the calculator type on simple_calc and tuningcurve_calc, with versioned schemas by @stevevanhooser in #889
- Regenerate the stored expectations at class_version 2, and fix run()'s return value by @stevevanhooser in #890
- Validate document-supplied class names by lineage; stop cancelling the prod cloud suite mid-run by @stevevanhooser in #891
- Cloud security and correctness fixes, plus the MATLAB symmetry battery (supersedes #886) by @stevevanhooser in #892
- NDI-matlab — security/correctness proposals + symmetry counterparts (14 commits), JAR-free by @audriB in #886
- Read analyzer trialno as a list of stimulus sequence positions by @stevevanhooser in #893
- Supply the cloud file handler when adding documents, not just when opening them by @stevevanhooser in #894
- Fix duplicate document deletion and add required files to tests by @stevevanhooser in #895
- Fix three ndi_common JSON defects DID's validator now rejects by @stevevanhooser in #896
- Fail loudly when the DID database has branches but not 'a' by @stevevanhooser in #899
- Fix syncrule document resurrection in syncgraph updates by @stevevanhooser in #900
- Fail the whatVaries divergence audit, and retire the entry it caught by @stevevanhooser in #901
- Compare stimulus parameters with isequaln, so an all-NaN one is constant by @stevevanhooser in #902
- Document the blech_clust spike_array axis order for both readers by @stevevanhooser in #904
- Make a missing symmetry artifact an assumption failure, not a silent pass by @stevevanhooser in #903
- Accumulate the upper x-limit in plot_extracellular_spikeshapes, not the running minimum by @stevevanhooser in #905
- Add the ndi.fun.parseText symmetry battery by @stevevanhooser in #906
- Add the VHSB round-trip symmetry battery by @stevevanhooser in #908
- Add the shrinking-interval VHSB case, now that vhlab-toolbox-matlab#145 is fixed by @stevevanhooser in #909
- Fix regex syntax error in babu PT3602 parser rule by @stevevanhooser in #910
- Add the statusIcon badge cross-language battery (MATLAB side) by @stevevanhooser in #911
- Add the elementClass cross-language battery (tests only) by @stevevanhooser in #913
- Assign cloudDatasetId before uploadDataset's ingestion refusal returns by @stevevanhooser in #915
- Track failed document downloads and exclude from sync index by @stevevanhooser in #917
- writeSyncIndex: atomic write, checked fopen, no leaked handles by @stevevanhooser in #919
- +cloud/profile: move preferences to ~/.ndi/ and let findIndex accept nickname/email/UID by @stevevanhooser in #921
- +common/PathConstants + +session/sessiontable: land preferences in ~/.ndi/ by @stevevanhooser in #923
- OldDatasetTest: explain why the corpus is copied before opening (parity note for ndi-python#99) by @stevevanhooser in #924
- +ndi/dataset: route database_closebinarydoc through the session that opened the binarydoc (#509) by @stevevanhooser in #925
- simple_calc_v2_schema: use Infinity, not Inf (invalid JSON) by @stevevanhooser in #926
- Symmetry battery for ndi.fun.ensemble.filter by @stevevanhooser in #927
- ensembleFilterCases: add sparse activity coverage by @stevevanhooser in #928
- Add spatial gene expression and gene list document schemas by @stevevanhooser in #887
- Add GMC_Sorter exporter for raw voltage spike sorting by @stevevanhooser in #851
- Add JRCLUST spike sorting pipeline integration by @stevevanhooser in #879
- Add JRCLUST spike sorting pipeline to NDI (export, run, curate, import, GUI) by @stevevanhooser in #930
- Fix invalid bare Inf in two ndi_common schema JSON files by @stevevanhooser in #931
- Move the GEF reader out of ndi.fun.doc.gene into NDR by @stevevanhooser in #929
- Add ndi.gui.app.GeneIngest: list, ingest and delete spatial transcriptomics datasets by @stevevanhooser in #932
- Add signed URL set API endpoints for cloud file access by @stevevanhooser in #934
- compute: thread organizationId through startSession + tests (#936) by @stevevanhooser in #937
- Signed URL set client in ndi.cloud.api.documents by @stevevanhooser in #939
- ProgressBarWindow: add silent (headless) mode by @stevevanhooser in #942
- Push CI badges to a dedicated
badgesbranch by @stevevanhooser in #943 - Make ndi.document a subclass of did.document by @stevevanhooser in #940
- Fix #946: extract_docs_files drops files.series_info into the dataset it writes by @stevevanhooser in #947
- Fix main: a dataset copy of a populated file series is refused, not stored by @stevevanhooser in #951
- Two silent-failure fixes in the cloud document path by @stevevanhooser in #949
- Fix #945: stop destroying files.series_info after download, and test the round trip that found it by @stevevanhooser in #944
- Fix #912: pass the blank's stimulus id to vlt's control_stimid by @stevevanhooser in #954
- Replace fatalAssert* with assert* in cloud test suite (#935) by @stevevanhooser in #953
- Batch presign in download_file_from_cloud (DID #173 step 3) by @stevevanhooser in #955
- extract_docs_files: copy the series members, not just the manifest by @stevevanhooser in #957
- Reconstruct series ingest_locations on cloud download by @stevevanhooser in #959
- Drop dead isfile(destPath) short-circuit in download_file_from_cloud by @stevevanhooser in #960
- Upload file series members, not just the series manifest by @stevevanhooser in #961
- Fix #964: retire uploadToNDICloud and scanForUpload; newDataset delegates to uploadDataset by @stevevanhooser in #965
- Route downloadGenericFiles through batchSignedUrlLookup by @stevevanhooser in #963
- Lift the .gef/.h5ad ingestion path out of the GUI, and remember where a tile landed by @stevevanhooser in #933
- Read a series member's bytes back out of the cloud (#966) by @stevevanhooser in #967
- Reach the bulk-download all-documents branch, and cover it (#948) by @stevevanhooser in #970
- Insist the batch presign path is used, and say so when it is not (#968) by @stevevanhooser in #969
- Correct two class headers that #969 falsified by @stevevanhooser in #972
- Pin openMINDS_MATLAB to v0.11.0, fix renamed base class by @ehennestad in #973
- GEF Manager, an HDF5 table of contents, and one-based tile files by @stevevanhooser in #977
- GEF Manager: raise the open window for a session instead of duplicating it by @stevevanhooser in #985
- Offline test for a cloud-only series manifest (SyncFiles=false shape) (#986) by @stevevanhooser in #987
- Cloud companion: SyncFiles=false round-trip in FileSeriesRoundTripTest (#986) by @stevevanhooser in #988
- Retry once when the batch signer returns a partial map by @stevevanhooser in #992
- Clamp the ingested mfdaq reader's window to what the epoch has by @stevevanhooser in #994
- feat(cloud.api): file-tier control wrappers by @stevevanhooser in #990
- perf(dataset): add ingested session without a 2x temp-copy stage by @stevevanhooser in #998
- Refactor file listing API to support pagination by @stevevanhooser in #1002
- Make listFiles/listFilesAll keyset (cursor) based by @stevevanhooser in #1004
- largeFileListingScenario: assert getDataset.fileCount and fix numRequests reference by @stevevanhooser in #1006
- Upgrade openminds-metadata-models-for-matlab to 0.12.0 by @stevevanhooser in #1009
- Add ndi.cloud.api.feedback commands and ndi.unittest.cloud.feedbackTest by @stevevanhooser in #1023
- Fix cloud login: decode JWT payload with matlab.net.base64decode by @stevevanhooser in #1024
- NDI Cloud file CRC-32: lookupFiles, checksummed uploads, crc32 in file listings by @stevevanhooser in #1025
- Add ndi.cloud.api.files.waitForFileUpload; wait for upload processing in uploadSingleFile and FilesTest by @stevevanhooser in #1027
- Lightsheet pyramids: ingest from OME-Zarr or SmartSPIM, chunk materialization, cloud round trip, and napari viewing by @stevevanhooser in #979
- ProgressBarWindow: the bar fills its row (R2026a draws it 2.7 px tall) by @jesshaley in #1020
- Fix tuningcurve calculator dealing over a single stimulus property by @stevevanhooser in #1029
- Wait up to 60 s for each bulk document download chunk by @stevevanhooser in #1030
- Add ndi.cloud.api.admin organization and user commands by @stevevanhooser in #1031
- Make cloud upload/download batch sizes configurable via preferences by @stevevanhooser in #1033
- Find external programs automatically: install/find NDI-python's tools, ffmpeg and Rscript (ndi.python.install, ndi.fun.findExecutable) by @stevevanhooser in #1032
- Keep other NDI versions' preferences when saving NDI_Preferences.json by @stevevanhooser in #1036
- Support users in multiple NDI Cloud organizations by @stevevanhooser in #1037
- Add update check/install for git and toolbox installs, with an Update button in the navigator by @stevevanhooser in #1038
- Updater: leave untracked files alone; stop only for ones in the way by @stevevanhooser in #1039
- ndi_install: put stashed changes back after updating by @stevevanhooser in #1042
- Cloud CI: upload coverage of the cloud package to Codecov by @stevevanhooser in #1043
- CI: tests badge sums the no-cloud run and the Cloud CI shards by @stevevanhooser in #1044
- Report actual and expected values when a calculator self-test fails by @stevevanhooser in #1046
New Contributors
Full Changelog: v1.1.2...v1.2.0