Added
- Laser speckle flowmetry (launcher → Blood flow → Laser speckle,
apps/LSCIAnalysisApp.m,core/LaserSpeckle.m): blood-flow maps from
laser speckle images. Loads raw speckle images from the camera, speckle
contrast images, or the perfusion / flux images a commercial system
exports (.mat, multi-frame TIFF or video; the type is judged from the
images when the file does not say). Spatial (N × N window) or temporal
(N frames) speckle contrast after the camera dark level, a flow index
(1/K², or 1/τc from the exposure model with β), the flow of each ROI
over time (K² averaged over the ROI before conversion), trials around
each stimulus (from the stimulus trace in the file or a regular
protocol) as % change from each trial's baseline, the average response
(mean ± SD, with the mean change in a response window) and a response
map. A Checks tab says in plain words what to look at: saturated
pixels, a missing dark level, a small window, an unusual contrast,
trials left out, too few trials. Export as .csv / .mat; Save trials
writes the LDF trial format, so LDF Average and Response features open
it. Sessions, report and methods text (citing Briers & Webster 1996,
Boas & Dunn 2010, Bandyopadhyay et al. 2005, Cheng et al. 2003) as in
every window. New demodemo_lsci.mat(core/demo/demoLSCI.m): raw
speckle with known contrast in cortex, a vessel and static tissue, and
a +25% flow response of an activated area after four stimuli; new Help
topic Laser Speckle with the answers. - Blood-flow recordings from the common acquisition systems
(core/io/SignalSource.m,readSignalText.m,readBiopacACQ.m,
writeBiopacACQ.m): LabChart .mat exports with several blocks, channel
rates, units and comments; LabChart and AcqKnowledge text exports;
BIOPAC AcqKnowledge .acq files (3.x to 5.x, Windows and Mac, compressed
or not, with event markers; checked against the 32 sample files of the
bioread project); AcqKnowledge and Spike2 .mat exports; any delimited
table (PeriSoft, moorVMS-PC, spreadsheets: decimal comma, clock times,
units rows). The flow and stimulus channels are found from their names,
and comments / markers can be the stimulus. New demo files
(core/demo/demoLDFFormats.m): the LDF demo as a LabChart text export,
an AcqKnowledge .acq, a PeriSoft-style table, a Spike2 export and a table
without a time column. core/io/readImageStack.m: one reader for image stacks over time
(.mat, multi-page TIFF with the ImageJ frame interval, channels and
pixel size, and video).- Perimed PeriCam PSI recordings (
core/io/readPerimedDat.m,
perimedPerfusion.m,writePerimedDat.m): PIMSoft .dat files (file
versions 1 to 3) open in the Laser speckle window as speckle contrast
images (β · SD / intensity from the variance and intensity images),
with the frame rate and pixel size of the header; PIMSoft's perfusion
(gain × (1/C − 1), 0–3000 PU) is available as well. Other laser speckle
systems (moorFLPI, RWD, SIM, Omegawave) keep their undocumented files:
open their TIFF, video or MATLAB exports. - TIFF metadata (
core/io/tiffMeta.m,unitScale.m): one reading of
what microscope and slide software writes into TIFFs, used by Histology,
ROI analysis and Laser speckle: ImageJ hyperstacks (channels, slices,
frames, frame interval, z spacing), OME-TIFF (DimensionOrder, sizes,
physical pixel size with units, time increment, plane times, channel
names), ScanImage (saved channels, frame rate, field of view in µm,
slices with flyback frames, frame timestamps) and Aperio .svs (MPP,
magnification). Multi-channel TIFFs open on one channel and the first
slice. - Imaging files from microscope software (
core/io/readImagingFolder.m,
writeImagingFormat.m), in ROI analysis and every reader of image
stacks: Inscopix .isxd movies (uint16, float32, uint8; frame rate and
pixel size from the JSON footer), ThorImageLS folders (Experiment.xml +
.raw, channels, averaging, fast z), Bruker Prairie View T-series and
Z-series (PVScan .xml, one TIFF per frame, frame times, microns per
pixel) and UCLA Miniscope folders (numbered videos, timeStamps.csv /
timestamp.dat, metaData.json). ROI analysis now also reads the frame
interval of TIFFs. - Histology: Import regions (
core/io/readRegions.m,
writeImageJRoi.m): regions drawn in ImageJ / Fiji (.roi and the ROI
Manager's RoiSet.zip: polygon, freehand, traced, rectangle and oval, with
their names) or QuPath (GeoJSON annotations, Polygon and MultiPolygon,
names or classifications) become Histology regions. - Electrophysiology recordings from eight more systems (Extract Ephys
→ Source;core/io/readSpikeGLX.m,readBlackrock.m,
readNeuralynx.m,readPlexon.m,readMCS.m,readIntanRHS.m,
readOpenEphysLegacy.m,readABF.m): SpikeGLX (Neuropixels 1.0 / 2.0
imec and nidq, sync and digital bits), Blackrock NSx 2.1-3.0 with the
NEV digital input, Neuralynx .ncs folders with Events.nev TTLs, Plexon
.plx (continuous channels placed by time stamp, AI and event channels,
sorted spike times), Multi Channel Systems HDF5 (electrode, auxiliary
and digital streams, events; MATLAB only), Intan .rhs (digital and
analog inputs, stimulation current), Open Ephys legacy .continuous
folders and Axon ABF 2 (gap-free or episodic). The format is also
recognized from the file's extension, folder contents or first bytes;
Try demo data writes the demo in each one, and the methods text names
it. Each reader was checked during development against python-neo (and
pyABF) on files from its synthetic writer (write*.m, used by the tests
and the demo); for Multi Channel Systems, the file layout was checked
with McsPyDataTools. - EDF, EDF+ and BDF files (
core/io/readEDF.m,writeEDF.m): the
European Data Format that LabChart, clinical systems and many others
export, with EDF+ annotations (onset, duration, text), discontinuous
EDF+D recordings (records placed at their times) and BioSemi's 24-bit
BDF with its Status trigger word. Extract LDF opens them again (the
annotations can be the stimulus), and EEG analysis reads them as
continuous EEG (the channels in volts, annotations and BioSemi trigger
codes as events); the LDF demo and the rodent EEG demo are also written
as EDF+ (and BDF). - EGI .mff (
core/io/readMFF.m,writeMFF.m): Net Station
recordings (the.mfffolder or itsinfo.xml): float32 blocks,
channel gains, pauses placed at their times, events, sensor positions
and the vertex reference. mffpy and MNE-Python read the files written
here with the same values, gains, pause and events, and readMFF reads
mffpy's files. The rodent EEG demo is also written as.mff. - XDF (
core/io/readXDF.m,writeXDF.m): LabRecorder files (Lab
Streaming Layer): every stream with its time stamps (full or deduced)
and clock offsets; EEG analysis reads the EEG stream and takes the
marker streams as events. pyxdf reads the files written here with the
same values, time stamps and markers. The rodent EEG demo is also
written as XDF. - EEG-BIDS (
core/io/readEEGBIDS.m,writeEEGBIDS.m): EEG analysis
opens thesub-…_eegfile of a BIDS dataset (OpenNeuro) with its
sidecar files: only the EEG channels ofchannels.tsv(bad channels
noted), the events ofevents.tsv, the positions ofelectrodes.tsv
withcoordsystem.json, and the reference and line frequency of
eeg.json. The rodent demo is also written as a BIDS dataset. Checked
during development both ways with MNE-BIDS.
Values and annotations were checked during development against pyedflib
and MNE-Python.
Changed
- Extract LDF opens every recording above, not only the LabChart .mat
export. Step 1 now has LDF, Stimulus and Block choices, guessed from
the channel names (the old convention, stimulus on channel 6 and LDF on
channel 8, stays for LabChart files with 8 or more unnamed channels);
the stimulus can also be the comments / event markers of the file, or
none. The plots are titled with the channel names, the file label shows
the format, rate, duration and channels, and a table without a time
column asks for its sampling rate. The cropped .mat also keeps
flowName,flowUnitsandstimName; sessions store the format and
the channel choice (older sessions still open), and the methods text
names the acquisition software and the channels. - Launcher: Laser speckle joins LDF under Blood flow, so the tiles
now take four rows at the default width (Blood flow and EEG, then
Electrophysiology, Imaging and Across techniques).
Fixed
- README: the version badge said 0.5.1 in the 0.5.2 release.
- Histology: the pixel size of ImageJ TIFFs saved with the unit µm was not
read (ImageJ writes it as\u00B5m); the Greek mu is accepted too, and
an unknown unit falls back to the TIFF resolution tags.
Install: download the source ZIP below, unzip it, open MATLAB in that folder and run NeuroAnalyzerLab. See the README for details.