Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI.
The 11 matches
- [1] § Methods › Data processing › Cell extraction and validation ↔ camri_code/preprocess/preprocess_neural.py, lines 115–168 · score 0.90 · gSiz, gSig, min_corr, min_pnr, ring, decay
- [2] § Methods › Data processing › Support vector machines and recursive feature elimination ↔ camri_code/functions/decoder_distance_rfe.m, lines 295–420 · score 0.82 · recursive feature elimination, SVM RFE, lowest ranking, ranking criteria, subset, trained
- [3] § Results › Neuronal responses exhibit diametric activation patterns depending on their distance to the local vasculature ↔ camri_code/scripts/run_figure_3.m, lines 61–164 · score 0.74 · distance histogram, Euclidean distance, SVM RFE, ranking criteria, proximity, decoding
- [4] § Results › Neuronal responses exhibit diametric activation patterns depending on their distance to the local vasculature ↔ camri_code/scripts/run_suppl_figure_6.m, lines 61–131 · score 0.73 · distance histogram, Euclidean distance, SVM RFE, ranking criteria, proximity, decoding
- [5] § Results › Neuronal responses exhibit diametric activation patterns depending on their distance to the local vasculature ↔ camri_code/scripts/run_figure_3.m, lines 61–164 · score 0.73 · Euclidean distance, annotated vascular, weight elimination, ranking criteria, location, lowest
- [6] § Results › Neuronal responses exhibit diametric activation patterns depending on their distance to the local vasculature ↔ camri_code/scripts/run_suppl_figure_6.m, lines 61–131 · score 0.73 · Euclidean distance, annotated vascular, weight elimination, ranking criteria, location, lowest
- [7] § Methods › Data processing › Vascular activity derived from microscopy ↔ camri_code/preprocess/process_vascular.m, lines 48–99 · score 0.64 · Gaussian filter, motion corrected, Frangi, ROI, videos, vessel
- [8] § Methods › Data processing › Support vector machines and recursive feature elimination ↔ camri_code/functions/decoder_distance_rfe.m, lines 295–420 · score 0.61 · weight elimination, ranking criteria, decoder, lowest, recursive, machines
- [9] § Methods › Data processing › Annotation of the vascular structure and neuron-vascular proximity ↔ camri_code/scripts/process_data.m, lines 3–26 · score 0.60 · 100–150 Hz, vessel patterns, 100 Hz, filter, microscopic
- [10] § Results › From local population measurements to large-scale recordings of brain connectomes ↔ camri_code/scripts/run_figure_4.m, lines 61–123 · score 0.55 · Magnitude map, cross validated, ipsi, contra, NRMSE, shuffled
- [11] § Results › From local population measurements to large-scale recordings of brain connectomes ↔ camri_code/scripts/run_suppl_figure_8.m, lines 142–263 · score 0.53 · Magnitude map, cross validated, ipsi, contra, NRMSE, shuffled
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
MATLAB · 420 lines · 13 KB · no license · 2 matches
- function [results] = decoder_distance_rfe( ...
- neural_data, mri_data, p, exclude)
- %% Checks
- % Check if fields are equal
- fields_mri = fieldnames(mri_data);
- fields_mri(strcmp(fields_mri, 'results')) = [];
- fields_neural = fieldnames(neural_data);
- fields_neural(strcmp(fields_neural, 'results')) = [];
- if ~isequal(sort(fields_mri), sort(fields_neural))
- fprintf('Fields of modalities are not equal...')
- else
- fields = fields_neural;
- end
- % Check start times
- start_times = p.start_times/1000;
- end_times = p.end_times/1000;
- %% MRI
- % Arrange parameters
- mri_fields = fieldnames(p.plot.mri);
- for i = 1:size(mri_fields, 1)
- field = mri_fields{i};
- p_mri.plot.(field) = p.plot.mri.(field);
- end
- % Get session data
- [mri_avg_traces, mri_avg_ts, ...
- mri_avg_subject_idx, mri_avg_channel_idx] = ...
- get_session(mri_data, p_mri, exclude);
- % Adjust timestamps for plotting
- mri_avg_ts = median(mri_avg_ts, 1, 'omitmissing');
- mri_avg_ts = mri_avg_ts/1000;
- %% Single cells (individual)
- % Arrange parameters
- cells_ind_fields = fieldnames(p.plot.cells_ind);
- for i = 1:size(cells_ind_fields, 1)
- field = cells_ind_fields{i};
- p_cells_ind.plot.(field) = p.plot.cells_ind.(field);
- end
- % Get session data
- [cells_ind_traces, cells_ind_ts, ...
- cells_ind_subject_idx, cells_ind_channel_idx] = ...
- get_session(neural_data, p_cells_ind, exclude);
- % Adjust timestamps for plotting
- cells_ind_ts = median(cells_ind_ts, 1, 'omitmissing');
- cells_ind_ts = cells_ind_ts/1000;
- %% Converge data
- if size(cells_ind_ts, 2) >= size(mri_avg_ts, 2)
- if ~any(cells_ind_ts(1:size(mri_avg_ts, 2)) ~= mri_avg_ts)
- ts = cells_ind_ts(1, 1:size(mri_avg_ts, 2));
- cells_ind_traces = cells_ind_traces(:, 1:size(mri_avg_ts, 2));
- else
- fprintf('Timestamps do not overlap...\n')
- return
- end
- elseif size(mri_avg_ts, 2) >= size(cells_ind_ts, 2)
- if ~any(cells_ind_ts ~= mri_avg_ts(1:size(cells_ind_ts, 2)))
- ts = mri_avg_ts(1, 1:size(cells_ind_ts, 2));
- mri_avg_traces = mri_avg_traces(:, 1:size(cells_ind_ts, 2));
- else
- fprintf('Timestamps do not overlap...\n')
- return
- end
- elseif size(mri_avg_ts, 2) == size(cells_ind_ts, 2)
- if ~any(cells_ind_ts ~= mri_avg_ts(1:size(cells_ind_ts, 2)))
- ts = cells_ind_ts(1, 1:size(mri_avg_ts, 2));
- else
- fprintf('Timestamps do not overlap...\n')
- return
- end
- end
- %% Checks
- % Check if subjects are the same for both modalities
- if unique(mri_avg_subject_idx) ~= unique(cells_ind_subject_idx)
- fprintf('Subjects are not equal between modalities...\n')
- return
- else
- subject_idx = unique(mri_avg_subject_idx);
- end
- %% Process traces
- % Adjust data range
- idx = ts(1, :) >= p.plot.decoder_timerange(1) & ...
- ts(1, :) < p.plot.decoder_timerange(2);
- ts = ts(1, idx);
- mri_avg_traces = mri_avg_traces(:, idx);
- cells_ind_traces = cells_ind_traces(:, idx);
- % remove NaN values between trials
- idx_nan = isnan(mean(cells_ind_traces)); % find the NaN values
- idx_nan = medfilt1(double(idx_nan));
- idx_nan = logical(idx_nan);
- ts(idx_nan) = [];
- mri_avg_traces(:, idx_nan) = [];
- cells_ind_traces(:, idx_nan) = [];
- % Remove first and last 2 columns due to NaNs
- ts([1 2 end-1 end]) = [];
- mri_avg_traces(:, [1 2 end-1 end]) = [];
- cells_ind_traces(:, [1 2 end-1 end]) = [];
- % Linear extrapolate over the cell traces to remove NaNs
- for iChannels = 1:size(cells_ind_traces, 1)
- target_trace = cells_ind_traces(iChannels, :);
- nanx = isnan(target_trace);
- t = 1:numel(target_trace);
- cells_ind_traces(iChannels, nanx) = ...
- interp1(t(~nanx), target_trace(~nanx), t(nanx));
- end
- %% Calculate neurovascular distance metric
- subject_idx_dist = [];
- channel_idx_dist = [];
- dist_total = [];
- dist_total_rv = [];
- for iSubjects = 1:size(subject_idx, 1)
- % Determine subject
- target_subject = subject_idx{iSubjects};
- target_channel_idx = cells_ind_channel_idx( ...
- cells_ind_subject_idx == target_subject, :);
- % Get filters and vessel image
- try
- filters = neural_data.(target_subject).cellmaps;
- catch
- fprintf('%s: cellmaps unavailable...\nSkipping...\n', ...
- target_subject)
- continue
- end
- try
- vessels = neural_data.(target_subject).vessels_logical;
- catch
- fprintf('%s: vessel image unavailable...\nSkipping...\n', ...
- target_subject)
- continue
- end
- % Initialize
- dist_rv = [];
- dist_norm = [];
- coords_cell = [];
- coords_vessel = [];
- filter_map = zeros(size(filters, 1:2));
- for iCells = 1:size(filters, 3)
- target_filter = filters(:, :, iCells);
- % Create filter map
- filter_map = filter_map + target_filter;
- % Calculate minimal distance
- [rows, columns] = find(target_filter == max(target_filter(:)));
- rows = rows(1);
- columns = columns(1);
- x_cell = [rows, columns];
- coords_cell(end + 1, :) = x_cell;
- [rows, columns] = find(vessels == max(vessels(:)));
- y_vessel = [rows, columns];
- D = pdist2(x_cell, y_vessel, 'euclidean');
- [~, idx] = min(D);
- dist_rv(iCells, 1) = D(idx);
- coords_vessel(end + 1, :) = y_vessel(idx, :);
- end
- % Plot cellmaps
- fig = figure();
- h = gca;
- hold on
- imshow(((filter_map * 400) / 1.5 + ...
- neural_data.(target_subject).average_image) * 250, ...
- [])
- hold on
- for iDist = 1:size(coords_vessel, 1)
- scatter(coords_cell(:, 2), coords_cell(:, 1), 40, 'ro', ...
- 'MarkerFaceColor', 'r')
- scatter(coords_vessel(:, 2), coords_vessel(:, 1), 15, 'ro', ...
- 'MarkerFaceColor', 'r')
- plot([coords_cell(iDist, 2) coords_vessel(iDist, 2)], ...
- [coords_cell(iDist, 1) coords_vessel(iDist, 1)], '-r', ...
- 'LineWidth', 3)
- end
- set(fig, 'Position', get(0, 'Screensize'));
- % Set image variables
- set(fig, 'color', 'w');
- set(h, 'Layer', 'top')
- set(fig, 'color', 'none');
- set(h, 'color', 'none');
- set(gca, 'XTickLabel', [], 'YTickLabel', []);
- % Save to vector image
- exportgraphics(fig, fullfile(p.path, ...
- replace(p.plot.save_cellmap, "*", target_subject)),...
- 'ContentType', 'vector',...
- 'BackgroundColor', 'none', ...
- 'Resolution', 300)
- close
- % Normalize distance
- dist_norm = mat2gray(dist_rv);
- % Calcute real world distance
- dist_rv = dist_rv * p.cam.pixel_size;
- % Results
- subject_idx_dist = [subject_idx_dist; ...
- repmat(string(target_subject), size(dist_rv))];
- channel_idx_dist = [channel_idx_dist; ...
- target_channel_idx];
- dist_total = [dist_total; dist_norm];
- dist_total_rv = [dist_total_rv; dist_rv];
- end
- % Plot histogram
- fig = figure();
- h = gca;
- hold on
- histogram(dist_total_rv, p.plot.histo.bin_size, ...
- 'EdgeColor', [0 0 0], ...
- 'FaceColor', [0.6 0.6 0.6])
- % Set image variables
- set(fig, 'color', 'w');
- h.LineWidth = p.line_width_axis;
- set(h, 'units', 'centimeters', 'position', [1, 1, p.plot.histo.scale]);
- set(h, 'FontSize', p.font_size, 'FontName', p.font);
- h.YAxis.FontWeight = 'bold';
- h.XAxis.FontWeight = 'bold';
- h.YRuler.TickLabelGapOffset = p.y_offset;
- h.XRuler.TickLabelGapOffset = p.x_offset;
- set(h, 'Layer', 'top')
- set(fig, 'color', 'none');
- set(h, 'color', 'none');
- % Save to vector image
- exportgraphics(fig, fullfile(p.path, ...
- replace(p.plot.save_hist, ".eps", "_tick.eps")),...
- 'ContentType', 'vector',...
- 'BackgroundColor', 'none', ...
- 'Resolution', 300)
- set(gca, 'XTickLabel', [], 'YTickLabel', []);
- exportgraphics(fig, fullfile(p.path, p.plot.save_hist),...
- 'ContentType', 'vector',...
- 'BackgroundColor', 'none', ...
- 'Resolution', 300)
- close
- % Write results
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- neurovascular_distance_ids = [ ...
- subject_idx_dist, ...
- channel_idx_dist];
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- neurovascular_distance = [ ...
- dist_total, ...
- dist_total_rv];
- %% SVM-RFE
- % SVM—RFE stands for Support Vector Machine- Recursive Feature Elimination.
- % It is an embedded approach that recursively removes unimportant features
- % rather than using the weights for ranking criterion as in Relief F. It
- % helps to provide better performance by selecting best features subset.
- % It takes training instances and their class labels as an input to the
- % algorithm and uses ranking criterion based on the weight vector of SVM.
- % From the weight vector of SVM, the ranking of each feature is identified
- % and then features are selected by eliminating those features which have
- % lowest ranking. In bioinformatics, it is a powerful feature selection
- % algorithm to avoid overfitting in case of high number of features. But
- % this algorithm can only be used to linear kernel SVM, because in case of
- % non linear kernel it is quiet difficult to find the weight vector (Cho,
- % B. H., Yu, H., Kim, K. W., Kim, T. H., Kim, I. Y., & Kim, S. I. (2008).
- % Application of irregular and unbalanced data to predict diabetic
- % nephropathy using visualization and feature selection methods.
- % Artificial intelligence in medicine, 42(1), 37-53.)
- % RFE-SVM
- for iCriteria = 1:size(p.plot.rfe.ranking_criteria, 1)
- fprintf('Starting RFE with criteria: %s beta value...\n', ...
- p.plot.rfe.ranking_criteria(iCriteria))
- subject_idx_rfe = [];
- beta_rfe_total = [];
- ranking_rfe_total = [];
- for iSubjects = 1:size(subject_idx, 1)
- % Determine subject
- target_subject = subject_idx{iSubjects};
- target_channel_idx = cells_ind_channel_idx( ...
- cells_ind_subject_idx == target_subject, :);
- % Get data
- x_neural = cells_ind_traces( ...
- cells_ind_subject_idx == target_subject, :)';
- y_bold = mri_avg_traces( ...
- mri_avg_subject_idx == target_subject, :)';
- % Initialize
- included = true(size(x_neural, 2), 1);
- betas = nan(size(x_neural, 2), 1);
- ranking = nan(size(x_neural, 2), 1);
- for iFeatures = 1:size(x_neural, 2)
- rsvm = fitrsvm(x_neural(:, included), y_bold, ...
- 'Standardize', true);
- if size(unique(rsvm.Beta)) ~= size(rsvm.Beta)
- fprintf('Duplicate beta values...\n')
- end
- % Find value based on ranking criterion
- if strcmp(p.plot.rfe.ranking_criteria(iCriteria), ...
- 'lowest_weight_elimination')
- [value_ranking, idx_ranking] = min(rsvm.Beta);
- elseif strcmp(p.plot.rfe.ranking_criteria(iCriteria), ...
- 'highest_weight_elimination')
- [value_ranking, idx_ranking] = max(rsvm.Beta);
- elseif strcmp(p.plot.rfe.ranking_criteria(iCriteria), ...
- 'lowest_abs_weight_elimination')
- [value_ranking, idx_ranking] = min(abs(rsvm.Beta));
- end
- % Calculate the cell number based on the idx_criteria
- idx_criteria_ = target_channel_idx(idx_ranking);
- target_channel_idx(idx_ranking) = [];
- % Remove cell from included feature set
- included(idx_criteria_) = false;
- % Results
- betas(idx_criteria_) = value_ranking;
- ranking(idx_criteria_) = ((size(x_neural, 2) + 1) - iFeatures);
- end
- % Results
- subject_idx_rfe = [subject_idx_rfe; ...
- repmat(string(target_subject), size(betas))];
- beta_rfe_total = [beta_rfe_total; betas];
- ranking_rfe_total = [ranking_rfe_total; ranking];
- end
- % Write results
- if isfield(results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]), ...
- 'ranking')
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking = [ ...
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking, ...
- beta_rfe_total, ...
- ranking_rfe_total];
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking_ids = [ ...
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking_ids, ...
- subject_idx_rfe];
- else
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking = [ ...
- beta_rfe_total, ...
- ranking_rfe_total];
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking_ids = subject_idx_rfe;
- end
- end
- % Write results
- results.(['decoder_distance_rfe_' ...
- p.plot.cells_ind.y_target '_to_' p.plot.mri.y_target]). ...
- ranking_criteria = p.plot.rfe.ranking_criteria;
decoder_distance_rfe.m at commit f6aba95, no license · at the source
Overview
- Institute of Neuroinformatics, ETH Zurich and University of Zurich,Zurich, Switzerland
- Division of Engineering and Applied Science, California Institute of Technology,Pasadena, USA
- Hesse - Optical Consulting, Gießen, Germany
- Department of Psychiatry, Faculty of Medicine, University of Geneva,Genève, Switzerland
- Department of Basic Neurosciences, Faculty of Medicine, University of Geneva,Genève, Switzerland
- ETH AI Center, ETH Zurich,Zurich, Switzerland
Abstract
Functional magnetic resonance imaging (fMRI) based on the blood-oxygen-level-depen
Reproduced under the paper's license (CC BY), from the paper cited above.
Repository
Its files are read in the Code ↔ Paper reader above, with 11 matches between paragraphs and lines of code.
rlemubaghs/camri
f6aba9583f088fab970628c9be9ba2291b00ae06, 5 August 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
160 files
- camri_code/
ext_tools/ , MATLAB, 713 linesViolinplot-Matlab-master / Violin.m - camri_code/
ext_tools/ , MATLAB, 87 linesViolinplot-Matlab-master / test_cases/ testviolinplot.m - camri_code/
ext_tools/ , MATLAB, 193 linesViolinplot-Matlab-master / violinplot.m - camri_code/
ext_tools/ , MATLAB, 245 linesmovieanalysis/ annotation/ annotationTool.m - camri_code/
ext_tools/ , MATLAB, 50 linesmovieanalysis/ annotation/ getEventMovies.m - camri_code/
ext_tools/ , MATLAB, 48 linesmovieanalysis/ annotation/ getEventSnapshots.m - camri_code/
ext_tools/ , MATLAB, 25 linesmovieanalysis/ annotation/ getFilterProps.m - camri_code/
ext_tools/ , MATLAB, 17 linesmovieanalysis/ annotation/ getPeaks.m - camri_code/
ext_tools/ , MATLAB, 68 linesmovieanalysis/ annotation/ get_heuristic_sorting.m - camri_code/
ext_tools/ , MATLAB, 53 linesmovieanalysis/ annotation/ playMovieCutout.m - camri_code/
ext_tools/ , MATLAB, 118 linesmovieanalysis/ annotation/ prepareAnnotation.m - camri_code/
ext_tools/ , MATLAB, 226 linesmovieanalysis/ decoder_distance.m - camri_code/
ext_tools/ , MATLAB, 47 linesmovieanalysis/ misc/ check_decay_times.m - camri_code/
ext_tools/ , MATLAB, 30 linesmovieanalysis/ misc/ compareMovies.m - camri_code/
ext_tools/ , MATLAB, 35 linesmovieanalysis/ misc/ createFolderStructure.m - camri_code/
ext_tools/ , MATLAB, 1,371 linesmovieanalysis/ misc/ imtool3D/ imtool3D.m - camri_code/
ext_tools/ , MATLAB, 18 linesmovieanalysis/ misc/ loadMovie.m - camri_code/
ext_tools/ , MATLAB, 8 linesmovieanalysis/ misc/ saveMovie.m - camri_code/
ext_tools/ , C, 447 linesmovieanalysis/ misc/ turboreg/ C/ BsplnTrf.c - camri_code/
ext_tools/ , C/C++, 161 linesmovieanalysis/ misc/ turboreg/ C/ BsplnTrf.h - camri_code/
ext_tools/ , C, 579 linesmovieanalysis/ misc/ turboreg/ C/ BsplnWgt.c - camri_code/
ext_tools/ , C/C++, 77 linesmovieanalysis/ misc/ turboreg/ C/ BsplnWgt.h - camri_code/
ext_tools/ , C, 449 linesmovieanalysis/ misc/ turboreg/ C/ convolve.c - camri_code/
ext_tools/ , C/C++, 60 linesmovieanalysis/ misc/ turboreg/ C/ convolve.h - camri_code/
ext_tools/ , C, 2,620 linesmovieanalysis/ misc/ turboreg/ C/ getPut.c - camri_code/
ext_tools/ , C/C++, 924 linesmovieanalysis/ misc/ turboreg/ C/ getPut.h - camri_code/
ext_tools/ , C, 338 linesmovieanalysis/ misc/ turboreg/ C/ main.c - camri_code/
ext_tools/ , C, 19 linesmovieanalysis/ misc/ turboreg/ C/ phil.c - camri_code/
ext_tools/ , C/C++, 36 linesmovieanalysis/ misc/ turboreg/ C/ phil.h - camri_code/
ext_tools/ , C, 68 linesmovieanalysis/ misc/ turboreg/ C/ pyrFilt.c - camri_code/
ext_tools/ , C, 27 linesmovieanalysis/ misc/ turboreg/ C/ pyrGetSz.c - camri_code/
ext_tools/ , C, 1,961 linesmovieanalysis/ misc/ turboreg/ C/ quant.c - camri_code/
ext_tools/ , C/C++, 76 linesmovieanalysis/ misc/ turboreg/ C/ quant.h - camri_code/
ext_tools/ , C, 1,645 linesmovieanalysis/ misc/ turboreg/ C/ reg0.c - camri_code/
ext_tools/ , C/C++, 244 linesmovieanalysis/ misc/ turboreg/ C/ reg0.h - camri_code/
ext_tools/ , C, 445 linesmovieanalysis/ misc/ turboreg/ C/ reg1.c - camri_code/
ext_tools/ , C/C++, 76 linesmovieanalysis/ misc/ turboreg/ C/ reg1.h - camri_code/
ext_tools/ , C, 670 linesmovieanalysis/ misc/ turboreg/ C/ reg2.c - camri_code/
ext_tools/ , C/C++, 224 linesmovieanalysis/ misc/ turboreg/ C/ reg2.h - camri_code/
ext_tools/ , C, 275 linesmovieanalysis/ misc/ turboreg/ C/ reg3.c - camri_code/
ext_tools/ , C/C++, 117 linesmovieanalysis/ misc/ turboreg/ C/ reg3.h - camri_code/
ext_tools/ , C, 590 linesmovieanalysis/ misc/ turboreg/ C/ regFlt3d.c - camri_code/
ext_tools/ , C/C++, 155 linesmovieanalysis/ misc/ turboreg/ C/ regFlt3d.h - camri_code/
ext_tools/ , C/C++, 93 linesmovieanalysis/ misc/ turboreg/ C/ register.h - camri_code/
ext_tools/ , C, 286 linesmovieanalysis/ misc/ turboreg/ C/ svdcmp.c - camri_code/
ext_tools/ , C/C++, 32 linesmovieanalysis/ misc/ turboreg/ C/ svdcmp.h - camri_code/
ext_tools/ , C, 108 linesmovieanalysis/ misc/ turboreg/ C/ transfturboreg.c - camri_code/
ext_tools/ , C, 498 linesmovieanalysis/ misc/ turboreg/ C/ turboreg.c - camri_code/
ext_tools/ , MATLAB, 11 linesmovieanalysis/ misc/ writeAvi.m - camri_code/
ext_tools/ , MATLAB, 21 linesmovieanalysis/ preprocessing/ cropMovie.m - camri_code/
ext_tools/ , MATLAB, 41 linesmovieanalysis/ preprocessing/ debleachMovie.m - camri_code/
ext_tools/ , MATLAB, 16 linesmovieanalysis/ preprocessing/ dfofMovie.m - camri_code/
ext_tools/ , MATLAB, 38 linesmovieanalysis/ preprocessing/ downsampleMovie.m - camri_code/
ext_tools/ , MATLAB, 30 linesmovieanalysis/ preprocessing/ filterImage.m - camri_code/
ext_tools/ , MATLAB, 32 linesmovieanalysis/ preprocessing/ filterMovie.m - camri_code/
ext_tools/ , MATLAB, 42 linesmovieanalysis/ preprocessing/ getCropCoords.m - camri_code/
ext_tools/ , MATLAB, 44 linesmovieanalysis/ preprocessing/ preprocessMovie.m - camri_code/
ext_tools/ , MATLAB, 87 linesmovieanalysis/ preprocessing/ registerMovie.m - camri_code/
ext_tools/ , MATLAB, 32 linesmovieanalysis/ preprocessing/ runPreprocessing.m - camri_code/
ext_tools/ , MATLAB, 209 linesmovieanalysis/ preprocessing/ testFilters.m - camri_code/
ext_tools/ , MATLAB, 82 linesmovieanalysis/ runScripts/ run_analysis_2DAA.m - camri_code/
ext_tools/ , MATLAB, 86 linesmovieanalysis/ runScripts/ run_analysis_2TAA.m - camri_code/
ext_tools/ , MATLAB, 38 linesmovieanalysis/ runScripts/ run_analysis_AAFC.m - camri_code/
ext_tools/ , MATLAB, 93 linesmovieanalysis/ runScripts/ run_analysis_FC.m - camri_code/
ext_tools/ , MATLAB, 86 linesmovieanalysis/ sessionAlignment/ alignCellMaps.m - camri_code/
ext_tools/ , MATLAB, 70 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_2DAA_su b4.m - camri_code/
ext_tools/ , MATLAB, 63 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_2DAA_su b6.m - camri_code/
ext_tools/ , MATLAB, 87 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_FC_sub1 1.m - camri_code/
ext_tools/ , MATLAB, 70 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_FC_sub4 .m - camri_code/
ext_tools/ , MATLAB, 66 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_FC_sub5 .m - camri_code/
ext_tools/ , MATLAB, 79 linesmovieanalysis/ sessionAlignment/ coarseAlignments/ coarse_alignment_FC_this Sub84.m - camri_code/
ext_tools/ , MATLAB, 68 linesmovieanalysis/ sessionAlignment/ generateCoarseAlignments .m - camri_code/
ext_tools/ , MATLAB, 48 linesmovieanalysis/ sessionAlignment/ runAlignment.m - camri_code/
ext_tools/ , MATLAB, 34 linesmovieanalysis/ setup.m - camri_code/
ext_tools/ , MATLAB, 46 linesmovieanalysis/ signalExtraction/ compute_pca.m - camri_code/
ext_tools/ , MATLAB, 26 linesmovieanalysis/ signalExtraction/ extractSignals.m - camri_code/
ext_tools/ , MATLAB, 18 linesmovieanalysis/ signalExtraction/ ica/ compute_ica_pairs.m - camri_code/
ext_tools/ , MATLAB, 32 linesmovieanalysis/ signalExtraction/ ica/ compute_ica_weights.m - camri_code/
ext_tools/ , MATLAB, 17 linesmovieanalysis/ signalExtraction/ ica/ compute_spatiotemporal_i ca_input.m - camri_code/
ext_tools/ , MATLAB, 54 linesmovieanalysis/ signalExtraction/ jointExtraction/ applyFiltersJoint.m - camri_code/
ext_tools/ , MATLAB, 121 linesmovieanalysis/ signalExtraction/ jointExtraction/ compute_pca_joint.m - camri_code/
ext_tools/ , MATLAB, 64 linesmovieanalysis/ signalExtraction/ jointExtraction/ detectOutliers.m - camri_code/
ext_tools/ , MATLAB, 51 linesmovieanalysis/ signalExtraction/ jointExtraction/ extractJoint.m - camri_code/
ext_tools/ , MATLAB, 88 linesmovieanalysis/ signalExtraction/ jointExtraction/ normalizeTraces.m - camri_code/
ext_tools/ , MATLAB, 30 linesmovieanalysis/ signalExtraction/ jointExtraction/ prepareBatch.m - camri_code/
ext_tools/ , MATLAB, 15 linesmovieanalysis/ signalExtraction/ jointExtraction/ runApplyFiltersJoint.m - camri_code/
ext_tools/ , MATLAB, 12 linesmovieanalysis/ signalExtraction/ jointExtraction/ runJointExtraction.m - camri_code/
ext_tools/ , MATLAB, 26 linesmovieanalysis/ signalExtraction/ runSignalExtraction.m - camri_code/
ext_tools/ , MATLAB, 46 linesmovieanalysis/ signalExtraction/ run_pca_ica.m - camri_code/
functions/ , MATLAB, 65 linesbloodvessels_prepare.m - camri_code/
functions/ , MATLAB, 45 linesbloodvessels_process.m - camri_code/
functions/ , MATLAB, 141 linescalculate_snr.m - camri_code/
functions/ , MATLAB, 163 linescell_process.m - camri_code/
functions/ , MATLAB, 273 linesconnectivity_analysis.m - camri_code/
functions/ , MATLAB, 48 linesconnectivity_analysis_ex pl_var.m - camri_code/
functions/ , MATLAB, 211 linesconnectivity_analysis_pl ot.m - camri_code/
functions/ , MATLAB, 625 linesconnectivity_analysis_pl ot_example.m - camri_code/
functions/ , MATLAB, 217 linesconnectivity_analysis_pl ot_sub.m - camri_code/
functions/ , MATLAB, 274 linesconnectivity_analysis_sh uffle.m - camri_code/
functions/ , MATLAB, 293 linesconnectivity_analysis_sh uffle_sub.m - camri_code/
functions/ , MATLAB, 89 linesconnectivity_analysis_si gnificance.m - camri_code/
functions/ , MATLAB, 92 linesconnectivity_analysis_si gnificance_ipsi_contra.m - camri_code/
functions/ , MATLAB, 97 linesconnectivity_analysis_si gnificance_ipsi_contra_s ub.m - camri_code/
functions/ , MATLAB, 97 linesconnectivity_analysis_si gnificance_sub.m - camri_code/
functions/ , MATLAB, 293 linesconnectivity_analysis_su b.m - camri_code/
functions/ , MATLAB, 133 linescreate_video.m - camri_code/
functions/ , MATLAB, 200 linesdecoder_distance_plot.m - camri_code/
functions/ , MATLAB, 537 linesdecoder_distance_plot_ra ster_supl.m - camri_code/
functions/ , MATLAB, 467 linesdecoder_distance_plot_tr ials.m - camri_code/
functions/ , MATLAB, 665 linesdecoder_distance_plot_tr ials_supl.m - camri_code/
functions/ , MATLAB, 102 linesdecoder_distance_proximi ty_plot.m - camri_code/
functions/ , MATLAB, 420 lines, 2 matchesdecoder_distance_rfe.m - camri_code/
functions/ , MATLAB, 104 linesdecoder_distance_signifi cance.m - camri_code/
functions/ , MATLAB, 320 linesdecoder_performance.m - camri_code/
functions/ , MATLAB, 279 linesdecoder_performance_shuf fle.m - camri_code/
functions/ , MATLAB, 59 linesdecoder_performance_sign ificance.m - camri_code/
functions/ , MATLAB, 76 linesdelta.m - camri_code/
functions/ , MATLAB, 58 linesget_session.m - camri_code/
functions/ , MATLAB, 76 linesget_trials.m - camri_code/
functions/ , MATLAB, 54 linesmotion_camera.m - camri_code/
functions/ , MATLAB, 90 linesmotion_process.m - camri_code/
functions/ , MATLAB, 77 linesmri_pca_process.m - camri_code/
functions/ , MATLAB, 104 linesmri_process.m - camri_code/
functions/ , MATLAB, 67 linesneuropil_process.m - camri_code/
functions/ , MATLAB, 122 linesplot_example_cellmap.m - camri_code/
functions/ , MATLAB, 355 linesplot_example_trials.m - camri_code/
functions/ , MATLAB, 338 linesplot_movement.m - camri_code/
functions/ , MATLAB, 76 linesplot_session.m - camri_code/
functions/ , MATLAB, 74 linesplot_trials.m - camri_code/
functions/ , MATLAB, 107 linesplot_tsnr.m - camri_code/
functions/ , MATLAB, 31 linestime_to_peak.m - camri_code/
functions/ , MATLAB, 97 linesvasculature_process.m - camri_code/
functions/ , MATLAB, 12 lineswrite_results.m - camri_code/
main.m , MATLAB, 52 lines - camri_code/
preprocess/ , MATLAB, 240 linesext/ vessel_thickness/ blobness2D.m - camri_code/
preprocess/ , MATLAB, 260 linesext/ vessel_thickness/ blobness3D.m - camri_code/
preprocess/ , C, 363 linesext/ vessel_thickness/ eig3volume.c - camri_code/
preprocess/ , MATLAB, 32 linesext/ vessel_thickness/ example_blobness2D.m - camri_code/
preprocess/ , MATLAB, 30 linesext/ vessel_thickness/ example_blobness3D.m - camri_code/
preprocess/ , MATLAB, 32 linesext/ vessel_thickness/ example_vesselness2D.m - camri_code/
preprocess/ , MATLAB, 30 linesext/ vessel_thickness/ example_vesselness3D.m - camri_code/
preprocess/ , MATLAB, 238 linesext/ vessel_thickness/ vesselness2D.m - camri_code/
preprocess/ , MATLAB, 261 linesext/ vessel_thickness/ vesselness3D.m - camri_code/
preprocess/ , MATLAB, 155 linespreprocess_frames.m - camri_code/
preprocess/ , Python, 418 linespreprocess_mri.py - camri_code/
preprocess/ , Python, 299 lines, 1 matchpreprocess_neural.py - camri_code/
preprocess/ , MATLAB, 188 linesprocess_mri.m - camri_code/
preprocess/ , MATLAB, 205 linesprocess_mri_roi.m - camri_code/
preprocess/ , MATLAB, 158 linesprocess_neural.m - camri_code/
preprocess/ , MATLAB, 220 lines, 1 matchprocess_vascular.m - camri_code/
scripts/ , MATLAB, 331 linesload_data.m - camri_code/
scripts/ , MATLAB, 143 lines, 1 matchprocess_data.m - camri_code/
scripts/ , MATLAB, 13 linesrun_figure_1.m - camri_code/
scripts/ , MATLAB, 362 linesrun_figure_2.m - camri_code/
scripts/ , MATLAB, 164 lines, 2 matchesrun_figure_3.m - camri_code/
scripts/ , MATLAB, 219 lines, 1 matchrun_figure_4.m - camri_code/
scripts/ , MATLAB, 14 linesrun_suppl_figure_4.m - camri_code/
scripts/ , MATLAB, 105 linesrun_suppl_figure_5.m - camri_code/
scripts/ , MATLAB, 373 lines, 2 matchesrun_suppl_figure_6.m - camri_code/
scripts/ , MATLAB, 281 lines, 1 matchrun_suppl_figure_8.m
Code availability
The MATLAB and Python code scripts detailing all aspects of the performed analysis are made publicly available on github (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 160 scripts, each with its path and the digest of its content;
- 11 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- figshare:31389115, at figshare; found in “Data availability”
Data availability
Source data is publicly available via figshare (10.6084/
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Publisher: n/a → Nature Portfolio
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 7 authors, 4 keywords, 9 MeSH terms, 2 funders, 80 references.
Cite
This paper
Ubaghs, R. L., Boehringer, R., Marks, M., Hesse, H. K., Yanik, M. F., Zerbi, V., & Grewe, B. F. (2026). Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI. Nature methods, 23(8), 1637-1646. https://
BibTeX
@article{ubaghs2026simul
author = {Ubaghs, Rik L.E.M. and Boehringer, Roman and Marks, Markus and Hesse, Helke K. and Yanik, Mehmet Fatih and Zerbi, Valerio and Grewe, Benjamin F.},
title = {{Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI}},
journal = {Nature methods},
year = {2026},
month = jul,
volume = {23},
number = {8},
pages = {1637--1646},
publisher = {Nature Portfolio},
issn = {1548-7091},
doi = {10.1038/
url = {https://
pmid = {42458100},
pmcid = {PMC13441971}
}
RIS
TY - JOUR
AU - Ubaghs, Rik L.E.M.
AU - Boehringer, Roman
AU - Marks, Markus
AU - Hesse, Helke K.
AU - Yanik, Mehmet Fatih
AU - Zerbi, Valerio
AU - Grewe, Benjamin F.
TI - Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI
T2 - Nature methods
J2 - Nat Methods
PY - 2026
DA - 2026/
VL - 23
IS - 8
SP - 1637
EP - 1646
SN - 1548-7091
PB - Nature Portfolio
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI",
"container-title": "Nature methods",
"author": [
{
"family": "Ubaghs",
"given": "Rik L.E.M."
},
{
"family": "Boehringer",
"given": "Roman"
},
{
"family": "Marks",
"given": "Markus"
},
{
"family": "Hesse",
"given": "Helke K."
},
{
"family": "Yanik",
"given": "Mehmet Fatih"
},
{
"family": "Zerbi",
"given": "Valerio"
},
{
"family": "Grewe",
"given": "Benjamin F."
}
],
"container-title-short":
"volume": "23",
"issue": "8",
"page": "1637-1646",
"DOI": "10.1038/
"PMID": "42458100",
"PMCID": "PMC13441971",
"ISSN": "1548-7091",
"publisher": "Nature Portfolio",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
15
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1038/s41467-026-71887-x [code]
- Magnetic resonance identification tags for ultra-flexible electrodes.Journal: Nature communicationsIn common: tifffile, OpenCV, scikit-learn, 4 other tools, 3 references, 2 authors
- [2] doi:10.1038/s41467-026-71151-2 [code]
- Common and distinct neural correlates of social interaction processing and theory of mind in narratives.Journal: Nature communicationsIn common: Nipype, Violinplot-Matlab, Parallel Computing Toolbox, 11 other tools
- [3] doi:10.1038/s41467-026-71270-w [code]
- Spatiotemporal dynamics of the human cortical functional hierarchy across the lifespan.Journal: Nature communicationsIn common: PyBIDS, Violinplot-Matlab, Parallel Computing Toolbox, 10 other tools, fMRI
- [4] doi:10.1038/s41467-026-71923-w [code]
- Integrating optogenetic fMRI and spatial transcriptomics to reveal circuit-specific gene signatures in fronto- and hippo-thalamic networks.Journal: Nature communicationsIn common: Nilearn, NiBabel, scikit-learn, 4 other tools, fMRI, mouse, 5 references
- [5] doi:10.1038/s41597-026-06869-1 [code]
- Individual Brain Charting: fifth release of high-resolution fMRI data for cognitive mapping.Journal: Scientific dataIn common: PyBIDS, Nipype, FSL, 8 other tools, fMRI, 1 reference
- [6] doi:10.1162/imag.a.1198 [code]
- MEPrep: A robust pipeline for multi-echo fMRI denoising and preprocessing.Journal: Imaging neuroscience (Cambridge, Mass.)In common: PyBIDS, Nipype, FSL, 7 other tools, fMRI, 2 references
- [7] doi:10.1038/s41586-026-10631-3 [code]
- A prognostic human brain network for diffuse midline glioma.Journal: NatureIn common: Parallel Computing Toolbox, FSL, Nilearn, 10 other tools, 1 reference
- [8] doi:10.1126/sciadv.adx5109 [code]
- Substance P regulates Tacr1 neurons, which control nitric oxide-mediated neurovascular coupling in the mouse cortex.Journal: Science advancesIn common: Image Processing Toolbox, Signal Processing Toolbox, Statistics and Machine Learning Toolbox, mouse, 7 references
- [9] doi:10.1162/imag.a.1262 [code]
- Frame-wise multi-echo distortion correction for superior functional MRI.Journal: Imaging neuroscience (Cambridge, Mass.)In common: PyBIDS, Parallel Computing Toolbox, FSL, 8 other tools, fMRI, 1 reference
- [10] doi:10.1162/imag.a.1357
- Biphasic acclimation for simultaneous wide-field fluorescent Ca&
lt;sup& gt;2+& lt;/ sup& gt; imaging and fMRI of awake mice. Journal: Imaging neuroscience (Cambridge, Mass.)In common: optical imaging (calcium, voltage, 2-photon), fMRI, mouse, 8 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 1 repository of the authors' code, each at its verified commit and with its license, 160 scripts, and 11 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:736b11dc9998e942…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
