A hybrid micro-ECoG for functionally targeted multi-site and multi-scale investigation.
The 9 matches
- [1] § Results › Hybrid μECoG for functionally targeted multi-area laminar recordings in the marmoset ↔ Figure_Simulation_MarmoMT_targeting.m, lines 1–36 · score 0.96 · Monte Carlo simulation, Random MT penetrations, RF distance expected, V1 MT RF, RF alignment, retinotopic alignment
- [2] § STAR★Methods › Quantification and statistical analysis ↔ Figure_Simulation_MarmoMT_targeting.m, lines 1–36 · score 0.92 · Monte Carlo simulation, Random MT probe, V1 MT RF, retinotopic alignment, retinotopic map, laminar probe
- [3] § STAR★Methods › Quantification and statistical analysis ↔ FigureECoGwithLaminarCorrelation.m, lines 89–99 · score 0.58 · 100–200 Hz, 10–20 Hz, correlation, filtered, laminar, 100 Hz
- [4] § Results › Hybrid μECoG for optogenetic mapping of local and inter-areal interactions ↔ FigureStats_FeedforwardOpto32ChAtlasProbe_MarmosetMT_MUA.m, lines 115–138 · score 0.55 · Bonferroni corrected, sided signrank, Feedforward, probe, modulation, MUA
- [5] § STAR★Methods › Quantification and statistical analysis ↔ buildRFstruct2.m, lines 1–61 · score 0.53 · band pass filtered, EcoG, 200 Hz, 20 Hz, 100 Hz, channel
- [6] § Results › Hybrid μECoG for optogenetic mapping of local and inter-areal interactions ↔ FigureStats_FeedforwardOpto32ChAtlasProbe_MarmosetMT_MUA.m, lines 115–138 · score 0.52 · Bonferroni corrected, sided signrank, feedforward, modulation, MUA, MT
- [7] § STAR★Methods › Quantification and statistical analysis ↔ Figure_catECoG_bar_sweep_trajectory_area17.m, lines 423–470 · score 0.52 · peak envelope, trajectory, amplitude, SNR, linearly, thresholded
- [8] § Results › Hybrid μECoGs enable multi-scale investigation of cortical activity ↔ FigureECoGwithLaminarCorrelation.m, lines 89–99 · score 0.52 · 100–200 Hz, 10–20 Hz, correlating, laminar, 100 Hz
- [9] § STAR★Methods › Quantification and statistical analysis ↔ buildRFstruct2.m, lines 1–61 · score 0.51 · band pass filtered, delay, PSTH, smoothed, 60 Hz, 90 Hz
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 · 763 lines · 17 KB · CC-BY-4.0 · 2 matches
- % % This script analyzes retinotopic alignment between laminar probes in V1 and MT
- % using µECoG maps from Marmoset001Block37.
- %
- % The first part visualizes the retinotopic maps (µECoG and laminar RFs) to
- % confirm spatial correspondence between the recording modalities.
- %
- % The main analysis simulates random MT probe insertions across the MT µECoG
- % retinotopic map and compares the resulting RF distances to the actual
- % V1–MT laminar probe RF distance. This Monte-Carlo simulation estimates
- % how well the experimentally chosen MT penetration aligns with the V1 site
- % relative to chance targeting.
- %
- % Output:
- % - Distribution of RF distances expected from random MT penetrations
- % - Actual V1–MT RF distance
- % - Percentile of the real penetration relative to random targeting
- % - Bootstrap confidence interval for the V1–MT RF distance
- %
- % Used in manuscript revision to demonstrate that µECoG-guided probe
- % placement improves cross-area RF alignment compared to random insertion.
- % P. Jendritza March 2026
- % data from Marmoset001Block37
- load marmo_RFmapData_V1
- disp('Loaded marmo_RFmapData_V1')
- load marmo_RFmapData_MT
- disp('Loaded marmo_RFmapData_MT')
- load marmo_RFprobe_V1
- disp('Loaded marmo_RFprobe_V1')
- load marmo_RFprobe_MT
- disp('Loaded marmo_RFprobe_MT')
- %% extract maps
- % ECoG (smoothed)
- V1_x_ecog = marmo_RFmapData_V1.retmap_x.smoothHighReswholeRFs;
- V1_y_ecog = marmo_RFmapData_V1.retmap_y.smoothHighReswholeRFs;
- MT_x_ecog = marmo_RFmapData_MT.retmap_x.smoothHighReswholeRFs;
- MT_y_ecog = marmo_RFmapData_MT.retmap_y.smoothHighReswholeRFs;
- % Laminar (unsmoothed)
- V1_x_probe = marmo_RFprobe_V1.retmap_x.wholeRFs;
- V1_y_probe = marmo_RFprobe_V1.retmap_y.wholeRFs;
- MT_x_probe = marmo_RFprobe_MT.retmap_x.wholeRFs;
- MT_y_probe = marmo_RFprobe_MT.retmap_y.wholeRFs;
- % compute color limits
- V1_x_lim = [min([V1_x_ecog(:); V1_x_probe(:)]) max([V1_x_ecog(:); V1_x_probe(:)])];
- V1_y_lim = [min([V1_y_ecog(:); V1_y_probe(:)]) max([V1_y_ecog(:); V1_y_probe(:)])];
- MT_x_lim = [min([MT_x_ecog(:); MT_x_probe(:)]) max([MT_x_ecog(:); MT_x_probe(:)])];
- MT_y_lim = [min([MT_y_ecog(:); MT_y_probe(:)]) max([MT_y_ecog(:); MT_y_probe(:)])];
- %% plot
- figure('Position',[100 100 900 800])
- newColormap = turbo(30);
- % --- V1 ECoG X
- subplot(4,2,1)
- imagesc(V1_x_ecog)
- title('V1 ECoG X')
- clim(V1_x_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- V1 ECoG Y
- subplot(4,2,2)
- imagesc(V1_y_ecog)
- title('V1 ECoG Y')
- clim(V1_y_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- V1 probe X
- subplot(4,2,3)
- imagesc(V1_x_probe)
- title('V1 probe X')
- clim(V1_x_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- V1 probe Y
- subplot(4,2,4)
- imagesc(V1_y_probe)
- title('V1 probe Y')
- clim(V1_y_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- MT ECoG X
- subplot(4,2,5)
- imagesc(MT_x_ecog)
- title('MT ECoG X')
- clim(MT_x_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- MT ECoG Y
- subplot(4,2,6)
- imagesc(MT_y_ecog)
- title('MT ECoG Y')
- clim(MT_y_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- MT probe X
- subplot(4,2,7)
- imagesc(MT_x_probe)
- title('MT probe X')
- clim(MT_x_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- % --- MT probe Y
- subplot(4,2,8)
- imagesc(MT_y_probe)
- title('MT probe Y')
- clim(MT_y_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- sgtitle('Marmoset retinotopic maps (pixel RF space)')
- set(gcf,'color','w')
- %%
- % Purpose: plot MT laminar RFs with correct probe geometry
- % Purpose: plot MT laminar RFs with correct probe geometry
- RFstruct = marmo_RFprobe_MT.RFstruct;
- snrThresh = 0;
- exampleCh = 14;
- chXp = marmo_RFprobe_MT.chXp;
- chYp = marmo_RFprobe_MT.chYp;
- nCh = length(chXp);
- % logical channel masks
- isValidCh = ~isnan(chXp);
- % compute SNR
- vSNR = nan(1,nCh);
- for iCh = find(isValidCh)
- thisRF = RFstruct.DataAllmAll{1,iCh};
- thisBound = RFstruct.LabelMatrixAll{1,iCh};
- vIn = thisRF(thisBound==1);
- vOut = thisRF(thisBound==0);
- vSNR(iCh) = mean(vIn(:)) / mean(vOut(:));
- end
- isHighSNRCh = vSNR > snrThresh;
- % compute RF centers
- cx = nan(1,nCh);
- cy = nan(1,nCh);
- for iCh = find(isValidCh)
- RF = flipud(RFstruct.DataAllmAll{1,iCh});
- mask = flipud(RFstruct.LabelMatrixAll{1,iCh});
- RFmask = RF;
- RFmask(mask==0) = 0;
- [yy,xx] = ndgrid(1:size(RFmask,1),1:size(RFmask,2));
- cx(iCh) = sum(xx(:).*RFmask(:)) / sum(RFmask(:));
- cy(iCh) = sum(yy(:).*RFmask(:)) / sum(RFmask(:));
- end
- % median RF center from GOOD channels
- isGoodValidCh = isValidCh & isHighSNRCh;
- cx_med = median(cx(isGoodValidCh));
- cy_med = median(cy(isGoodValidCh));
- % best SNR RF
- validIdx = find(isValidCh);
- [~,bestRelIdx] = max(vSNR(validIdx));
- bestCh = validIdx(bestRelIdx);
- cx_best = cx(bestCh);
- cy_best = cy(bestCh);
- % store QC results in struct (no saving)
- marmo_RFprobe_MT.isValidCh = isValidCh;
- marmo_RFprobe_MT.isHighSNRCh = isHighSNRCh;
- marmo_RFprobe_MT.SNR = vSNR;
- marmo_RFprobe_MT.cx = cx;
- marmo_RFprobe_MT.cy = cy;
- marmo_RFprobe_MT.cx_med = cx_med;
- marmo_RFprobe_MT.cy_med = cy_med;
- marmo_RFprobe_MT.bestCh = bestCh;
- marmo_RFprobe_MT.cx_best = cx_best;
- marmo_RFprobe_MT.cy_best = cy_best;
- marmo_RFprobe_MT.exampleCh = exampleCh;
- % plot RFs using probe depth order
- validCh = find(isValidCh);
- depth = marmo_RFprobe_MT.chYp(validCh);
- [~,order] = sort(depth); % superficial → deep
- plotCh = validCh(order);
- nPlot = length(plotCh);
- nCols = ceil(sqrt(nPlot));
- nRows = ceil(nPlot/nCols);
- figure('Position',[100 100 900 700])
- for i = 1:nPlot
- iCh = plotCh(i);
- subplot(nRows,nCols,i)
- RF = flipud(RFstruct.DataAllmAll{1,iCh});
- imagesc(RF)
- axis equal
- axis off
- colormap jet
- hold on
- % individual RF center
- plot(cx(iCh),cy(iCh),'k+','LineWidth',1.5,'MarkerSize',8)
- % median RF center
- plot(cx_med,cy_med,'b+','LineWidth',2,'MarkerSize',10)
- % best SNR RF center
- plot(cx_best,cy_best,'m+','LineWidth',2,'MarkerSize',10)
- % SNR text
- text(4,12,sprintf('%.2f',vSNR(iCh)),'Color','k','FontSize',9,'FontWeight','bold')
- % mark bad RF
- if ~isHighSNRCh(iCh)
- text(4,4,'X','Color','r','FontSize',14,'FontWeight','bold')
- end
- % mark example RF
- if iCh == exampleCh
- rectangle('Position',[1 1 size(RF,2)-1 size(RF,1)-1],...
- 'EdgeColor','r','LineWidth',2)
- text(4,size(RF,1)-4,'example','Color','r','FontWeight','bold')
- end
- set(gca,'YDir','normal')
- end
- sgtitle('MT laminar probe RFs (probe geometry)')
- set(gcf,'color','w')
- %% Purpose: plot V1 laminar RFs with correct probe geometry
- % Purpose: plot V1 laminar RFs with correct probe geometry
- RFstruct = marmo_RFprobe_V1.RFstruct;
- snrThresh = 0.0;
- exampleCh = 11;
- chXp = marmo_RFprobe_V1.chXp;
- chYp = marmo_RFprobe_V1.chYp;
- nCh = length(chXp);
- % logical channel masks
- isValidCh = ~isnan(chXp);
- % compute SNR
- vSNR = nan(1,nCh);
- for iCh = find(isValidCh)
- thisRF = RFstruct.DataAllmAll{1,iCh};
- thisBound = RFstruct.LabelMatrixAll{1,iCh};
- vIn = thisRF(thisBound==1);
- vOut = thisRF(thisBound==0);
- vSNR(iCh) = mean(vIn(:)) / mean(vOut(:));
- end
- isHighSNRCh = vSNR > snrThresh;
- % compute RF centers
- cx = nan(1,nCh);
- cy = nan(1,nCh);
- for iCh = find(isValidCh)
- RF = flipud(RFstruct.DataAllmAll{1,iCh});
- mask = flipud(RFstruct.LabelMatrixAll{1,iCh});
- RFmask = RF;
- RFmask(mask==0) = 0;
- [yy,xx] = ndgrid(1:size(RFmask,1),1:size(RFmask,2));
- cx(iCh) = sum(xx(:).*RFmask(:)) / sum(RFmask(:));
- cy(iCh) = sum(yy(:).*RFmask(:)) / sum(RFmask(:));
- end
- % median RF center from GOOD channels
- isGoodValidCh = isValidCh & isHighSNRCh;
- cx_med = median(cx(isGoodValidCh));
- cy_med = median(cy(isGoodValidCh));
- % best SNR RF
- validIdx = find(isValidCh);
- [~,bestRelIdx] = max(vSNR(validIdx));
- bestCh = validIdx(bestRelIdx);
- cx_best = cx(bestCh);
- cy_best = cy(bestCh);
- % store QC results into struct
- marmo_RFprobe_V1.isValidCh = isValidCh;
- marmo_RFprobe_V1.isHighSNRCh = isHighSNRCh;
- marmo_RFprobe_V1.SNR = vSNR;
- marmo_RFprobe_V1.cx = cx;
- marmo_RFprobe_V1.cy = cy;
- marmo_RFprobe_V1.cx_med = cx_med;
- marmo_RFprobe_V1.cy_med = cy_med;
- marmo_RFprobe_V1.bestCh = bestCh;
- marmo_RFprobe_V1.cx_best = cx_best;
- marmo_RFprobe_V1.cy_best = cy_best;
- marmo_RFprobe_V1.exampleCh = exampleCh;
- % plot RFs using depth order
- validCh = find(isValidCh);
- depth = marmo_RFprobe_V1.chYp(validCh);
- [~,order] = sort(depth); % superficial → deep
- plotCh = validCh(order);
- nPlot = length(plotCh);
- nCols = ceil(sqrt(nPlot));
- nRows = ceil(nPlot/nCols);
- figure('Position',[100 100 900 700])
- for i = 1:nPlot
- iCh = plotCh(i);
- subplot(nRows,nCols,i)
- RF = flipud(RFstruct.DataAllmAll{1,iCh});
- imagesc(RF)
- axis equal
- axis off
- colormap jet
- hold on
- % individual RF center
- plot(cx(iCh),cy(iCh),'k+','LineWidth',1.5,'MarkerSize',8)
- % median RF center
- plot(cx_med,cy_med,'b+','LineWidth',2,'MarkerSize',10)
- % best SNR RF center
- plot(cx_best,cy_best,'m+','LineWidth',2,'MarkerSize',10)
- % SNR text
- text(4,12,sprintf('%.2f',vSNR(iCh)),'Color','k','FontSize',9,'FontWeight','bold')
- % mark bad RF
- if ~isHighSNRCh(iCh)
- text(4,4,'X','Color','r','FontSize',14,'FontWeight','bold')
- end
- % mark example RF
- if iCh == exampleCh
- rectangle('Position',[1 1 size(RF,2)-1 size(RF,1)-1],...
- 'EdgeColor','r','LineWidth',2)
- text(4,size(RF,1)-4,'example','Color','r','FontWeight','bold')
- end
- set(gca,'YDir','normal')
- end
- sgtitle('V1 laminar probe RFs (probe geometry)')
- set(gcf,'color','w')
- %%
- % Purpose: plot MT ECoG retinotopic maps using NON-smoothed pixel RF maps
- MT_x_ecog_raw = marmo_RFmapData_MT.retmap_x.wholeRFs;
- MT_y_ecog_raw = marmo_RFmapData_MT.retmap_y.wholeRFs;
- MT_x_lim = [min(MT_x_ecog_raw(:)) max(MT_x_ecog_raw(:))];
- MT_y_lim = [min(MT_y_ecog_raw(:)) max(MT_y_ecog_raw(:))];
- figure('Position',[100 100 700 500])
- newColormap = turbo(30);
- subplot(1,2,1)
- imagesc(MT_x_ecog_raw)
- title('MT ECoG X (raw)')
- clim(MT_x_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- subplot(1,2,2)
- imagesc(MT_y_ecog_raw)
- title('MT ECoG Y (raw)')
- clim(MT_y_lim)
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- sgtitle('MT ECoG retinotopic maps (non-smoothed)')
- set(gcf,'color','w')
- %%
- median(marmo_RFprobe_MT.retmap_x.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh))
- median(marmo_RFprobe_MT.retmap_y.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh))
- %%
- % Purpose: plot smoothed MT ECoG maps and find pixel closest to probe RF median
- MT_x_ecog_smooth = marmo_RFmapData_MT.retmap_x.smoothHighReswholeRFs;
- MT_y_ecog_smooth = marmo_RFmapData_MT.retmap_y.smoothHighReswholeRFs;
- % probe RF medians
- medX = median(marmo_RFprobe_MT.retmap_x.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- medY = median(marmo_RFprobe_MT.retmap_y.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- % find closest pixels
- [~,ix] = min(abs(MT_x_ecog_smooth(:) - medX));
- [~,iy] = min(abs(MT_y_ecog_smooth(:) - medY));
- [rowX,colX] = ind2sub(size(MT_x_ecog_smooth),ix);
- [rowY,colY] = ind2sub(size(MT_y_ecog_smooth),iy);
- figure('Position',[100 100 700 500])
- newColormap = turbo(30);
- subplot(1,2,1)
- imagesc(MT_x_ecog_smooth)
- hold on
- plot(colX,rowX,'k+','LineWidth',2,'MarkerSize',12)
- title('MT ECoG X (smoothed)')
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- subplot(1,2,2)
- imagesc(MT_y_ecog_smooth)
- hold on
- plot(colY,rowY,'k+','LineWidth',2,'MarkerSize',12)
- title('MT ECoG Y (smoothed)')
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- sgtitle('Closest ECoG pixels to laminar RF median')
- set(gcf,'color','w')
- %% Purpose: plot RAW MT ECoG maps and find pixel closest to probe RF median
- MT_x_ecog_raw = marmo_RFmapData_MT.retmap_x.wholeRFs;
- MT_y_ecog_raw = marmo_RFmapData_MT.retmap_y.wholeRFs;
- % probe RF medians
- medX = median(marmo_RFprobe_MT.retmap_x.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- medY = median(marmo_RFprobe_MT.retmap_y.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- % find closest pixels
- [~,ix] = min(abs(MT_x_ecog_raw(:) - medX));
- [~,iy] = min(abs(MT_y_ecog_raw(:) - medY));
- [rowX,colX] = ind2sub(size(MT_x_ecog_raw),ix);
- [rowY,colY] = ind2sub(size(MT_y_ecog_raw),iy);
- figure('Position',[100 100 700 500])
- newColormap = turbo(30);
- subplot(1,2,1)
- imagesc(MT_x_ecog_raw)
- hold on
- plot(colX,rowX,'k+','LineWidth',2,'MarkerSize',12)
- title('MT ECoG X (raw)')
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- subplot(1,2,2)
- imagesc(MT_y_ecog_raw)
- hold on
- plot(colY,rowY,'k+','LineWidth',2,'MarkerSize',12)
- title('MT ECoG Y (raw)')
- colormap(newColormap)
- colorbar
- axis equal
- axis off
- sgtitle('Closest RAW ECoG pixels to laminar RF median')
- set(gcf,'color','w')
- %%
- % distance between V1 and MT laminar median RF locations (good + valid channels)
- d = hypot( ...
- median(marmo_RFprobe_V1.retmap_x.wholeRFs(marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh)) - ...
- median(marmo_RFprobe_MT.retmap_x.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh)), ...
- median(marmo_RFprobe_V1.retmap_y.wholeRFs(marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh)) - ...
- median(marmo_RFprobe_MT.retmap_y.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh)) );
- %%
- % Purpose: simulate random MT locations and compare to actual V1–MT laminar RF distance
- rng(0)
- % V1 laminar median RF
- xV1 = median(marmo_RFprobe_V1.retmap_x.wholeRFs( ...
- marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh));
- yV1 = median(marmo_RFprobe_V1.retmap_y.wholeRFs( ...
- marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh));
- % MT laminar median RF
- xMT = median(marmo_RFprobe_MT.retmap_x.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- yMT = median(marmo_RFprobe_MT.retmap_y.wholeRFs( ...
- marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh));
- % actual distance
- d_actual = hypot(xV1-xMT , yV1-yMT);
- % MT ECoG map
- X = marmo_RFmapData_MT.retmap_x.smoothHighReswholeRFs;
- Y = marmo_RFmapData_MT.retmap_y.smoothHighReswholeRFs;
- valid = ~isnan(X) & ~isnan(Y);
- xvals = X(valid);
- yvals = Y(valid);
- nIter = 10000;
- d_rand = zeros(nIter,1);
- for i = 1:nIter
- idx = randi(length(xvals));
- xr = xvals(idx);
- yr = yvals(idx);
- d_rand(i) = hypot(xV1-xr , yV1-yr);
- end
- %% Purpose: plot distribution and report RF distances (deg)
- pxPerDeg = marmo_RFprobe_MT.pxPerDeg;
- d_actual_deg = d_actual/pxPerDeg;
- d_rand_deg = d_rand/pxPerDeg;
- figure('Color','w','Position',[100 100 600 450])
- clf
- h = histogram(d_rand_deg,40,'Normalization','probability');
- h.FaceColor = [0.6 0.6 0.6];
- h.EdgeColor = 'k';
- hold on
- hLine = xline(d_actual_deg,'r','LineWidth',3);
- xlabel('RF distance (°)','FontSize',12)
- ylabel('Probability','FontSize',12)
- set(gca,'TickDir','out','FontSize',12,'Box','off')
- legend([h hLine],{'Random simulated MT penetrations','Actual penetration'},...
- 'Box','off','Location','northeast')
- set(gcf,'color','w')
- % console output
- fprintf('Actual V1–MT RF distance: %.2f deg\n', d_actual_deg)
- fprintf('Random MT penetration distance: %.2f ± %.2f deg (mean ± SD)\n', ...
- mean(d_rand_deg), std(d_rand_deg))
- percentile = mean(d_rand > d_actual) * 100;
- fprintf('Actual penetration is better aligned than %.1f%% of random penetrations\n', percentile)
- xlim([0 16.5])
- % major ticks (labeled)
- xticks(0:2:16)
- % minor ticks (unlabeled)
- ax = gca;
- ax.XAxis.MinorTickValues = 1:2:15;
- ax.XMinorTick = 'on';
- % lock it for PDF export
- ax.XTickMode = 'manual';
- ax.XMinorTick = 'on';
- %%
- % Purpose: bootstrap CI for V1–MT RF distance
- xV1 = marmo_RFprobe_V1.retmap_x.wholeRFs(marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh);
- yV1 = marmo_RFprobe_V1.retmap_y.wholeRFs(marmo_RFprobe_V1.isHighSNRCh & marmo_RFprobe_V1.isValidCh);
- xMT = marmo_RFprobe_MT.retmap_x.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh);
- yMT = marmo_RFprobe_MT.retmap_y.wholeRFs(marmo_RFprobe_MT.isHighSNRCh & marmo_RFprobe_MT.isValidCh);
- rng(0)
- nBoot = 10000;
- d_boot = zeros(nBoot,1);
- for i = 1:nBoot
- idxV1 = randi(length(xV1),length(xV1),1);
- idxMT = randi(length(xMT),length(xMT),1);
- xm1 = median(xV1(idxV1));
- ym1 = median(yV1(idxV1));
- xm2 = median(xMT(idxMT));
- ym2 = median(yMT(idxMT));
- d_boot(i) = hypot(xm1-xm2 , ym1-ym2);
- end
- pxPerDeg = marmo_RFprobe_MT.pxPerDeg;
- d_boot_deg = d_boot/pxPerDeg;
- d_obs = hypot(median(xV1)-median(xMT) , median(yV1)-median(yMT)) / pxPerDeg;
- d_ci = prctile(d_boot_deg,[2.5 97.5]);
- fprintf('V1–MT RF distance: %.2f deg (95%% CI %.2f–%.2f)\n', d_obs, d_ci(1), d_ci(2))
Figure_Simulation_MarmoMT_targeting.m, under CC-BY-4.0 · at the source
Overview
- Ernst Strüngmann Institute (ESI) for Neuroscience in Cooperation with Max Planck Society, Deutschordenstraße 46, 60528 Frankfurt, Germany
- International Max Planck Research School for Neural Circuits, Max-von-Laue-Straße 4, 60438 Frankfurt, Germany
- Else Kröner Fresenius Center for Optogenetic Therapies, University Medical Center Göttingen, Göttingen, Germany
- Institute for Auditory Neuroscience, University Medical Center Göttingen, Göttingen, Germany
- Visual Circuits & Interfaces group, German Primate Center, Göttingen, Germany
- Laboratory for Biomedical Microtechnology, Department of Microsystems Engineering (IMTEK), BrainLinks-BrainTools Center and the Bernstein Center Freiburg, Albert-Ludwigs-Universität Freiburg, 79110 Freiburg, Germany
- Max Planck Institute for Biological Cybernetics, Max-Planck-Ring 8, 72076 Tübingen, Germany
- Brain Research Institute, University of Zurich, Winterthurerstrasse 190, 8057 Zurich, Switzerland
Abstract
Brain function relies on coordinated activity across spatial and temporal scales. Single neurons integrate local and long-range connectivity and reflect activity across brain-wide networks. Understanding integrated brain function requires tools capable of recording from anatomically connected populations in distributed brain areas to bridge local and global dynamics. Here, we present high-density, micro-electrocorticograp
Reproduced under the paper's license (CC BY-NC), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 9 matches between paragraphs and lines of code.
dataverse.harvard.edu/dataverse/hybridecog
Availability: 5 checks, the latest on 29 September 2026: unreachable at the last attempt (HTTP 202)
- 29 September 2026: unreachable at the last attempt (HTTP 202)
- 28 September 2026: unreachable at the last attempt (HTTP 202)
- 28 September 2026: unreachable at the last attempt (HTTP 202)
- 27 September 2026: unreachable at the last attempt (HTTP 202)
- 27 September 2026: unreachable at the last attempt (HTTP 202)
Zenodo 20089744
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
24 files
- FigureECoGwithLaminarCor
relation.m , MATLAB, 253 lines, 2 matches - FigureFeedforwardOpto_Ma
rmosetMT_Probe1VSProbe2. , MATLAB, 160 linesm - FigureStats_FeedforwardO
pto32ChAtlasProbe_Marmos , MATLAB, 257 lines, 2 matchesetMT_MUA.m - Figure_CatRFs.m, MATLAB, 239 lines
- Figure_ImpedanceComparis
on.m , MATLAB, 102 lines - Figure_LFPtraces.m, MATLAB, 75 lines
- Figure_MT_V1_RF_overlapD
istributions_vsOpto.m , MATLAB, 451 lines - Figure_MarmosetRFs.m, MATLAB, 256 lines
- Figure_OptoResp.m, MATLAB, 165 lines
- Figure_RMSnoise_marmoCat
.m , MATLAB, 184 lines - Figure_Simulation_MarmoM
T_targeting.m , MATLAB, 763 lines, 2 matches - Figure_catECoG_bar_sweep
_trajectory_area17.m , MATLAB, 971 lines, 1 match - ImpedanceComparison.m, MATLAB, 99 lines
- buildRFstruct2.m, MATLAB, 162 lines, 2 matches
- calcRFlfp.m, MATLAB, 272 lines
- calcRFspk.m, MATLAB, 169 lines
- cat17ECoG_fixAnalysis.m, MATLAB, 379 lines
- cat21aECoG_fixAnalysis.m
, MATLAB, 400 lines - fftMT.m, MATLAB, 147 lines
- getSpecta.m, MATLAB, 41 lines
- load_and_compute_RMS_cat
.m , MATLAB, 169 lines - load_and_compute_RMS_mar
moset.m , MATLAB, 166 lines - plotLFPtraces.m, MATLAB, 47 lines
- plotRFsXYmatx.m, MATLAB, 122 lines
The paper's code and data availability statement is in the Data section.
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:
- 2 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 24 scripts, each with its path and the digest of its content;
- 9 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
No dataset and no data link were found in the paper.
Data and code availability
• The datasets supporting the current study are available from the corresponding authors on request. • The code supporting the current study is available on Harvard Dataverse (https://
Reproduced under the paper's license (CC BY-NC), 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 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 5 authors, 10 keywords, 9 MeSH terms, 6 funders, 108 references.
Cite
This paper
Jendritza, P., Liljemalm, R., Stieglitz, T., Fries, P., & Lewis, C. M. (2026). A hybrid micro-ECoG for functionally targeted multi-site and multi-scale investigation. Cell reports methods, 6(8), 101481. https://
BibTeX
@article{jendritza2026hy
author = {Jendritza, Patrick and Liljemalm, Rickard and Stieglitz, Thomas and Fries, Pascal and Lewis, Christopher Murphy},
title = {{A hybrid micro-ECoG for functionally targeted multi-site and multi-scale investigation}},
journal = {Cell reports methods},
year = {2026},
month = jun,
volume = {6},
number = {8},
pages = {101481},
publisher = {Elsevier},
issn = {2667-2375},
doi = {10.1016/
url = {https://
pmid = {42276070},
pmcid = {PMC13494546}
}
RIS
TY - JOUR
AU - Jendritza, Patrick
AU - Liljemalm, Rickard
AU - Stieglitz, Thomas
AU - Fries, Pascal
AU - Lewis, Christopher Murphy
TI - A hybrid micro-ECoG for functionally targeted multi-site and multi-scale investigation
T2 - Cell reports methods
J2 - Cell Rep Methods
PY - 2026
DA - 2026/
VL - 6
IS - 8
SP - 101481
SN - 2667-2375
PB - Elsevier
DO - 10.1016/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1016/
"type": "article-journal",
"title": "A hybrid micro-ECoG for functionally targeted multi-site and multi-scale investigation",
"container-title": "Cell reports methods",
"author": [
{
"family": "Jendritza",
"given": "Patrick"
},
{
"family": "Liljemalm",
"given": "Rickard"
},
{
"family": "Stieglitz",
"given": "Thomas"
},
{
"family": "Fries",
"given": "Pascal"
},
{
"family": "Lewis",
"given": "Christopher Murphy"
}
],
"container-title-short":
"volume": "6",
"issue": "8",
"page": "101481",
"DOI": "10.1016/
"PMID": "42276070",
"PMCID": "PMC13494546",
"ISSN": "2667-2375",
"publisher": "Elsevier",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
11
]
]
}
}
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.21203/rs.3.rs-10218667/v1 [code]
- Combining ultra-flexible electrodes with two-photon imaging to illuminate brain-wide neural dynamicsJournal: Research Square (preprint)In common: Statistics and Machine Learning Toolbox, systems, 6 references, author Christopher M. Lewis
- [2] doi:10.1038/s41467-026-72444-2 [code]
- Broadband synergy versus oscillatory redundancy in the visual cortex.Journal: Nature communicationsIn common: Statistics and Machine Learning Toolbox, intracranial EEG (iEEG / ECoG / SEEG), extracellular electrophysiology (units, LFP), systems, 6 references
- [3] doi:10.1038/s41467-026-71725-0 [code]
- Interactions across hemispheres in prefrontal cortex reflect global cognitive processing.Journal: Nature communicationsIn common: Image Processing Toolbox, Signal Processing Toolbox, Statistics and Machine Learning Toolbox, 6 references
- [4] doi:10.1111/ejn.70582 [code]
- Multifiber Array-Based Photometry System for Multiregional Functional Mapping in the Mouse Brain.Journal: The European journal of neuroscienceIn common: systems, 8 references
- [5] doi:10.1016/j.isci.2026.116728 [code]
- Awake cortex stabilizes traveling waves for global and reliable information routing.Journal: iScienceIn common: shadedErrorBar, Image Processing Toolbox, Signal Processing Toolbox, 1 other tool, 4 references
- [6] doi:10.1093/nsr/nwag420 [code]
- Constructing mesoscale functionomics by neural dynamics subspace clustering.Journal: National science reviewIn common: Statistics and Machine Learning Toolbox, systems, 6 references
- [7] doi:10.1038/s41467-026-73622-y [code]
- Contextual gating of whisker-evoked responses by frontal cortex supports flexible decision making.Journal: Nature communicationsIn common: Image Processing Toolbox, Signal Processing Toolbox, Statistics and Machine Learning Toolbox, 4 references
- [8] doi:10.7554/elife.109717 [code]
- Retrosplenial cortex enables context-dependent goal-directed sensorimotor transformation.Journal: eLifeIn common: Statistics and Machine Learning Toolbox, systems, 5 references
- [9] doi:10.1038/s41593-026-02350-9 [code]
- Probing inter-areal computations with a two-photon holographic mesoscope.Journal: Nature neuroscienceIn common: Image Processing Toolbox, Statistics and Machine Learning Toolbox, systems, 4 references
- [10] doi:10.1038/s41592-026-03154-2 [code]
- Simultaneous single-cell calcium imaging of neuronal population activity and brain-wide BOLD fMRI.Journal: Nature methodsIn common: Image Processing Toolbox, Signal Processing Toolbox, Statistics and Machine Learning Toolbox, 3 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: 2 repositories of the authors' code, each at its verified commit and with its license, 24 scripts, and 9 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:a4c81dc49eb1f9a2…
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
[.
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.
