OSCR

Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway.

Code ↔ Paper

2 matches between paragraphs of the paper and lines of its authors' code, computed by the harvester (lexical-v1). Click a colored paragraph or line to see its counterpart.

The 2 matches · 1 of them tie a paragraph to a whole file, not to given lines: a weak match, whose lines are not tinted
  1. [1] § Methods › STORM Experiments ↔ ColocalizationTubulins.m, lines 142–279 · score 0.68 · alphaShape, colocalization cluster, reference cluster, overlap, channel, threshold
  2. [2] § Methods › STORM Experiments ↔ Santiago-Ruiz_et_al_Coloc_Pipeline/FindBorders.m, the whole file · a weak match · score 0.62 · border point, alphaShape, written, MATLAB, threshold, cells

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 · 419 lines · 20 KB · GPL-3.0 · 1 match

  1. %% Data Construction
  2. % Load the data
  3. [file,path] = uigetfile('*.mat','Select the file you want to load'); % Open a dialog so you can specify which file you want to load
  4. selectedfile = fullfile(path,file); % Create the name for the file to load
  5. load(selectedfile); % Load the file
  6. % Clear up the work space
  7. clear file path
  8. % Select the reference and the co-localization channels
  9. List = cellfun(@(x) x.name,data,'UniformOutput',false);
  10. RefIndex = [];
  11. ColocIndex = [];
  12. while isempty(RefIndex) || ~(numel(RefIndex) == numel(ColocIndex))
  13. % Reference channel selection
  14. [RefIndex,tf] = listdlg('Name','Select reference channel(s)','PromptString','Select the channel or channels that are refering to the reference data.','ListString',List,'ListSize',[500 300]);
  15. % Stop the loop if ESC/cancel/X is pressed
  16. if tf == 0
  17. break
  18. end
  19. % Reference channel selection
  20. [ColocIndex,tf] = listdlg('Name','Select co-localization channel(s)','PromptString',{'Select the channel or channels that are refering to the co-localization data.',['Please select ' num2str(numel(RefIndex)) ' values.']},'ListString',List,'ListSize',[500 300]);
  21. % Stop the loop if ESC/cancel/X is pressed
  22. if tf == 0
  23. break
  24. end
  25. % Check if the amount of reference and co-localization channels
  26. % selected is the same
  27. if ~(numel(RefIndex) == numel(ColocIndex))
  28. uiwait(msgbox({'The number of reference channels selected is not equal to the number of co-localization channels selected. Please redo the selection.','','Press OK to continue.'}, 'Error','error'));
  29. end
  30. end
  31. % Stop the program if ESC/cancel/X was pressed
  32. if tf == 0
  33. clear;clc
  34. error('The program was cancelled prematurely.')
  35. end
  36. % Clear up the work space
  37. clear List tf
  38. % Show an input dialog for the parameters that can change
  39. input_values = inputdlg('Overlap Percentage Threshold:','',1,{'75'}); % Show up an input dialog
  40. % Extract the input values from the dialog window
  41. ThresholdOverlap = str2double(input_values{1})/100; % The minimum overlap (in %) for it to be co-localized
  42. % Clear up the work space
  43. clear input_values
  44. % Show a wait bar, we start filtering/selection/calculations here
  45. f = waitbar(0,'Step 1 of 3: Extracting reference & co-localization clusters...','Name','Progress of the co-localization process');
  46. set(findall(f),'Units','normalized');
  47. set(f,'Position',[0.3 0.45 0.35 0.075])
  48. pause(0.1)
  49. % Extract the data for the reference channel and co-localziation channel
  50. % Pre-allocate for speed reasons
  51. ClustersRef = cell(numel(RefIndex),1);
  52. % Reference data
  53. for i = 1:numel(RefIndex)
  54. % Update the wait bar
  55. waitbar(i/(numel(RefIndex)*2),f, 'Step 1 of 3: Extracting reference & co-localization clusters...');
  56. DataRef = horzcat(data{1,RefIndex(i)}.x_data,data{1,RefIndex(i)}.y_data, data{1,RefIndex(i)}.area); % Set up the reference data
  57. Groups = findgroups(DataRef(:,3)); % Find unique groups and their number
  58. ClustersRef{i,:} = splitapply(@(x){(x)},DataRef(:,1:3),Groups);
  59. end
  60. ClustersRefComplete = ClustersRef;
  61. % Clear up the work space
  62. clear i DataRef Groups Ref
  63. % Pre-allocate for speed reasons
  64. ClustersColoc = cell(numel(ColocIndex),1);
  65. % Co-localization data
  66. for i = 1:numel(ColocIndex)
  67. % Update the wait bar
  68. waitbar(0.5+i/(numel(ColocIndex)*2),f, 'Step 1 of 3: Extracting reference & co-localization clusters...');
  69. DataColoc = horzcat(data{1,ColocIndex(i)}.x_data,data{1,ColocIndex(i)}.y_data, data{1,ColocIndex(i)}.area); % Extract the data
  70. Groups = findgroups(DataColoc(:,3)); % Find unique groups and their number
  71. ClustersColoc{i,:} = splitapply(@(x){(x)},DataColoc(:,1:3),Groups); % Split the clusters into the corresponding groups
  72. end
  73. % Clear up the work space
  74. clear i DataColoc Groups
  75. % Update the wait bar
  76. waitbar(1,f, 'Step 1 of 3: Extracting reference & co-localization clusters... Complete');
  77. %% Filtering step (remove all clusters outside the reference cluster boundaries)
  78. % Update the wait bar
  79. pause(0.2)
  80. waitbar(0,f,'Step 2 of 3: Filtering co-localization clusters...');
  81. % Pre-allocate for speed reasons
  82. PolyLowResRefExpanded = cell(numel(RefIndex),1);
  83. FilteredColoc = cell(numel(RefIndex),1);
  84. SelectedColoc = cell(numel(RefIndex),1);
  85. % Loop over all the reference/co-localization pairs and filter the
  86. % co-localization clusters
  87. for i = 1:numel(RefIndex)
  88. % Extract the colocalization channel cluster centers
  89. ColocCenter = cell2mat(cellfun(@(x) mean(x(:,1:2)), ClustersColoc{i},'UniformOutput',false));
  90. % Pre-allocate and initialize for speed and convenience reasons
  91. PolyLowResRefExpanded{i} = cell(size(ClustersRef{i},1),1);
  92. PolygonRef = polyshape();
  93. % Create a set of low-resolution coordinates of all the reference cluster
  94. % coordinates
  95. warning('off','all') % Turn off warnings for the creation of the polygons
  96. for j = 1:size(ClustersRef{i},1)
  97. % Update the wait bar
  98. waitbar((i-1)/numel(RefIndex)+(j/size(ClustersRef{i},1))/numel(RefIndex),f,'Step 2 of 3: Filtering co-localization clusters...');
  99. LowResCoords = unique(round(ClustersRef{i}{j}(:,1:2)),'rows'); % Create a low-res version of the reference coordinates
  100. LowResBoundary = boundary(LowResCoords,1); % Calculate the boundary
  101. LowResBoundaryCoords = LowResCoords(LowResBoundary,:); % Extract the coordinates from the boundary
  102. PolyLowResRef = polyshape(LowResBoundaryCoords); % Create a polygon from these coordinates
  103. PolyLowResRefExpanded{i}{j} = polybuffer(PolyLowResRef,5); % Expand the polygon with 5 pixels
  104. PolygonRef = union(PolygonRef,PolyLowResRefExpanded{i}{j}); % Create one polygon only
  105. end
  106. warning('on','all') % Turn the warnings back on
  107. % Clear up the work space
  108. clear j LowResCoords LowResBoundary LowResBoundaryCoords PolyLowResRef
  109. % Update the wait bar
  110. waitbar(i/numel(RefIndex),f,'Step 2 of 3: Filtering co-localization clusters... This might take a minute...');
  111. % Check if the coordinates of the colocalization channel are inside this
  112. % polygon
  113. IsInside = inpolygon(ColocCenter(:,1),ColocCenter(:,2),PolygonRef.Vertices(:,1),PolygonRef.Vertices(:,2));
  114. FilteredColoc{i} = {ClustersColoc{i}{~IsInside}}';
  115. SelectedColoc{i} = {ClustersColoc{i}{IsInside}}';
  116. % Clear up the work space
  117. clear IsInside PolygonRef ColocCenter
  118. end
  119. % Clear up the work space
  120. clear i ClustersColoc
  121. % Update the wait bar
  122. waitbar(1,f,'Step 2 of 3: Filtering co-localization clusters... Complete');
  123. %% Calculate the overlap between the reference clusters and the co-localization clusters
  124. % Update the wait bar
  125. pause(0.2)
  126. waitbar(0,f,'Step 3 of 3: Calculating overlap...');
  127. % Pre-allocate for speed reasons
  128. PercentageInside = cell(numel(RefIndex),1);
  129. ColocalizedClusters = cell(numel(RefIndex),1);
  130. NotColocalizedClusters = cell(numel(RefIndex),1);
  131. IdxClusters = cell(numel(RefIndex),1);
  132. % Loop over all the reference/co-localization pairs to find all the
  133. % co-localization clusters that potentially overlap with the reference
  134. % clusters and calculate the actual overlap percentage
  135. for i = 1:numel(RefIndex)
  136. % Determine the possible reference clusters related to the co-localization
  137. % clusters
  138. ColocCenter = cell2mat(cellfun(@(x) mean(x(:,1:2)),SelectedColoc{i},'UniformOutput',false));
  139. IsInside = cellfun(@(x) inpolygon(ColocCenter(:,1),ColocCenter(:,2),x.Vertices(:,1),x.Vertices(:,2)),PolyLowResRefExpanded{i},'UniformOutput',false);
  140. Idx = cellfun(@(x) find(x), IsInside,'UniformOutput',false);
  141. % Clear up the work space
  142. clear ColocCenter IsInside
  143. % Clean up the reference clusters that do not have any potential
  144. % co-localization clusters associated to them
  145. SelectRefClusters = cell2mat(cellfun(@(x) ~isempty(x),Idx,'UniformOutput',false));
  146. ClustersRef{i} = {ClustersRef{i}{SelectRefClusters}}';
  147. IdxClusters{i} = {Idx{SelectRefClusters}}';
  148. % Clear up the work space
  149. clear SelectRefClusters Idx
  150. % Pre-allocate for speed reasons
  151. PercentageInside{i} = cell(size(ClustersRef{i},1),1);
  152. % Create alpha shapes of the reference clusters and then check if the
  153. % coordinates of the selected clusters are inside these.
  154. for j = 1:size(ClustersRef{i},1)
  155. % Extract the coordinates of the reference cluster and make an
  156. % 'alphashape' of it. This alphashape will keep into account the
  157. % holes inside the reference clusters.
  158. alpha = 0.8; % This was set with Qing that looked good for her tubulins data
  159. xRef = ClustersRef{i}{j}(:,1);
  160. yRef = ClustersRef{i}{j}(:,2);
  161. shp = alphaShape(xRef,yRef,alpha);
  162. % Clear up the work space
  163. clear alpha xRef yRef
  164. % Pre-allocate for speed reasons
  165. PercentageInside{i}{j} = zeros(size(IdxClusters{i}{j},1),1);
  166. % Loop over the different potential overlapping clusters and
  167. % calculate their overlap with the reference cluster
  168. for k = 1:size(IdxClusters{i}{j},1)
  169. % Update the wait bar
  170. waitbar((i-1)/numel(RefIndex)+(j/size(ClustersRef{i},1))/numel(RefIndex),f,['Step 3 of 3: Calculating overlap... - Data set ' num2str(i) ' of ' num2str(numel(RefIndex)) ', Reference cluster ' num2str(j) ' of ' num2str(size(ClustersRef{i},1))]);
  171. % Calculate the actual overlap
  172. ColocCoords = SelectedColoc{i}{IdxClusters{i}{j}(k)}(:,1:2); % Extract the coordinates for the potentially interesting cluster
  173. tf = inShape(shp,ColocCoords(:,1),ColocCoords(:,2)); % Calculate the overlap between reference cluster and co-localization channel cluster
  174. total = numel(tf); % Determine the total number of coordinates
  175. PercentageInside{i}{j}(k) = sum(tf) / total; % The percentage of overlap is calculated as the number of coordinate pairs that overlap with the reference cluster divided by the total number of coordinate pairs
  176. % Clear up the work space
  177. clear ColocCoords tf total
  178. end
  179. % Clear up the work space
  180. clear k shp
  181. end
  182. % Clear up the work space
  183. clear j
  184. % Check if any co-localization cluster got assigned to multiple
  185. % reference clusters. This is possible due to the expanded boundary
  186. % region of the reference clusters
  187. [C,~,IC] = unique(vertcat(IdxClusters{i}{:})); % Find the unique values
  188. IC = accumarray(IC,1); % Count how many times each unique value occurs
  189. C(IC==1,:) = []; % Remove the cluster Ids that only occur once
  190. % Clear up the work space
  191. clear IC
  192. % Only do this if there are duplicate assignments
  193. if ~isempty(C)
  194. % Find out where the duplicates are, to what reference cluster they
  195. % are associated and then remove the unimportant contributions
  196. for j = 1:numel(C)
  197. % For each duplicate assignment, find out to which reference
  198. % cluster is was associated
  199. ClustersWithDuplicates = cellfun(@(x) find(x==C(j)),IdxClusters{i},'UniformOutput',false);
  200. DuplicateIdx = find(~cellfun(@(x) isempty(x), ClustersWithDuplicates));
  201. % Extract the percentages of overlap so that only the maximum
  202. % one can be kept
  203. Percentages = [];
  204. for k = 1:numel(DuplicateIdx)
  205. Percentages(k,:) = [PercentageInside{i}{DuplicateIdx(k)}(IdxClusters{i}{DuplicateIdx(k)}==C(j))];
  206. end
  207. [~,Idx] = max(Percentages);
  208. DuplicateIdx(Idx) = [];
  209. % Remove the co-localization cluster id from the calculations.
  210. % Only 1 assignment per co-localization cluster
  211. for k = 1:numel(DuplicateIdx)
  212. PercentageInside{i}{DuplicateIdx(k)}(IdxClusters{i}{DuplicateIdx(k)}==C(j)) = [];
  213. IdxClusters{i}{DuplicateIdx(k)}(IdxClusters{i}{DuplicateIdx(k)}==C(j)) = [];
  214. end
  215. % Clear up the work space
  216. clear k ClustersWithDuplicates DuplicateIdx Idx Percentages
  217. end
  218. % Clear up the work space
  219. clear j C
  220. % Clean up the reference clusters that do not have any
  221. % co-localization clusters associated to them anymore
  222. SelectRefClusters = cell2mat(cellfun(@(x) ~isempty(x),IdxClusters{i},'UniformOutput',false));
  223. ClustersRef{i} = {ClustersRef{i}{SelectRefClusters}}';
  224. PercentageInside{i} = {PercentageInside{i}{SelectRefClusters}}';
  225. IdxClusters{i} = {IdxClusters{i}{SelectRefClusters}}';
  226. % Clear up the work space
  227. clear SelectRefClusters
  228. end
  229. % Determine whether or not the co-localization clusters pass the
  230. % threshold to be considered co-localized and then filter the ones that
  231. % were from the ones that were not.
  232. ColocalizedOrNot = cellfun(@(x) x>=ThresholdOverlap, PercentageInside{i}, 'UniformOutput',false); % Perform the thresholding to select the ones that were.
  233. % Pre-allocate for speed reasons
  234. ColocClusterIds = cell(size(IdxClusters{i},1),1);
  235. % Loop over the different reference clusters to extract the ones that
  236. % contain co-localized clusters
  237. for j = 1:size(IdxClusters{i},1)
  238. ColocClusterIds{j} = IdxClusters{i}{j}(ColocalizedOrNot{j});
  239. end
  240. ColocClusterIds = vertcat(ColocClusterIds{:});
  241. ColocalizedClusters{i} = {SelectedColoc{i}{ColocClusterIds}}';
  242. NotColocClusterIds = setdiff(1:size(SelectedColoc{i},1),ColocClusterIds)';
  243. NotColocalizedClusters{i} = vertcat(FilteredColoc{i},{SelectedColoc{i}{NotColocClusterIds}}');
  244. % Clear up the work space
  245. clear ColocalizedOrNot ColocClusterIds j NotColocClusterIds
  246. end
  247. % Update the wait bar and then delete it
  248. waitbar(1,f,'Step 3 of 3: Calculating overlap... Complete');
  249. pause(1)
  250. delete(f)
  251. % Clear up the work space
  252. clear i PolyLowResRefExpanded f
  253. %% Plot some figures
  254. % Loop until the user is happy with the threshold
  255. Continue = 1;
  256. while Continue
  257. % Show a histogram of the co-localization percentages with the current
  258. % threshold indicated and a scatterplot of the reference data with the
  259. % co-localized and isolated clusters indicated
  260. for i = 1:numel(RefIndex)
  261. % Extract the individual percentages for each data set
  262. UnfoldedPercentages = cell2mat(PercentageInside{i});
  263. % Do the actual plotting
  264. Fig = figure(i);
  265. set(Fig,'Name',data{1,ColocIndex(i)}.name);
  266. subplot(1,2,1);
  267. histogram(UnfoldedPercentages*100,100,'BinLimits',[0 100],'Normalization','cdf');
  268. axis([0 100 0 1]);axis square;
  269. xlabel('co-localization overlap [%]','FontWeight','bold');
  270. ylabel('Cumulative distribution function [-]','FontWeight','bold');
  271. line([ThresholdOverlap*100 ThresholdOverlap*100],[0 1],'Color','r','LineWidth',2);
  272. text(ThresholdOverlap*100+0.5,0.975,['Threshold: ' num2str(ThresholdOverlap*100)],'Color','r');
  273. set(gca,'FontWeight','bold');
  274. % Clean up the workspace
  275. clear UnfoldedPercentages
  276. % Unfold all cluster coordinates for plotting
  277. ReferenceCoordinates = cell2mat(ClustersRefComplete{i});
  278. ColocalizedCoordinates = cell2mat(ColocalizedClusters{i});
  279. NotColocalizedCoordinates = cell2mat(NotColocalizedClusters{i});
  280. % Do the actual plotting
  281. figure(i);
  282. subplot(1,2,2);
  283. plot(ReferenceCoordinates(:,1),ReferenceCoordinates(:,2),'.','MarkerSize',2);
  284. hold on;
  285. if ~isempty(ColocalizedCoordinates)
  286. plot(ColocalizedCoordinates(:,1),ColocalizedCoordinates(:,2),'.g');
  287. end
  288. if ~isempty(NotColocalizedCoordinates)
  289. plot(NotColocalizedCoordinates(:,1),NotColocalizedCoordinates(:,2),'.r');
  290. end
  291. xlabel('Pixels in x [-]','FontWeight','bold');
  292. ylabel('Pixels in y [-]','FontWeight','bold');
  293. set(gca,'FontWeight','bold');
  294. title('Blue: Reference data; Green: co-localized clusters; Red: non co-localized clusters','FontWeight','bold');
  295. axis square;
  296. hold off;
  297. % Clean up the workspace
  298. clear ReferenceCoordinates ColocalizedCoordinates NotColocalizedCoordinates
  299. end
  300. if numel(RefIndex) ~= 1
  301. % Unfold all overlaps into a single data set
  302. UnfoldedPercentages = cell2mat(vertcat(PercentageInside{:}));
  303. % Plot a global histogram for completeness
  304. Fig = figure(i+1);
  305. set(Fig,'Name','Histogram for all opened data sets together');
  306. histogram(UnfoldedPercentages*100,100,'Normalization','cdf');
  307. axis([0 100 0 1]);axis square;
  308. xlabel('co-localization overlap [%]','FontWeight','bold')
  309. ylabel('Cumulative distribution function [-]','FontWeight','bold')
  310. line([ThresholdOverlap*100 ThresholdOverlap*100],[0 1],'Color','r','LineWidth',2)
  311. text(ThresholdOverlap*100+0.5,0.975,['Threshold: ' num2str(ThresholdOverlap*100)],'Color','r')
  312. set(gca,'FontWeight','bold')
  313. % Clean up the workspace
  314. clear UnfoldedPercentages
  315. end
  316. uiwait(msgbox({'Press OK after inspecting the plots to continue.'}, 'Press OK to continue','help'));
  317. % Ask to keep or change the overlap threshold percentage
  318. input_values = inputdlg('Overlap Percentage Threshold (cancel to keep current one):','',1,{num2str(ThresholdOverlap*100)}); % Show up an input dialog
  319. % If the current one is kept (i.e., cancel is pressed), then break out
  320. % of the loop
  321. if isempty(input_values)
  322. break
  323. end
  324. % If a value ie selected, extract the input values from the dialog
  325. % window
  326. ThresholdOverlap = str2double(input_values{1})/100;
  327. % Redo the co-localization selection
  328. for i = 1:numel(RefIndex)
  329. ColocalizedOrNot = cellfun(@(x) x>=ThresholdOverlap, PercentageInside{i}, 'UniformOutput',false); % Perform the thresholding to select the ones that were.
  330. ColocClusterIds = cell(size(IdxClusters{i},1),1);
  331. for j = 1:size(IdxClusters{i},1)
  332. ColocClusterIds{j} = IdxClusters{i}{j}(ColocalizedOrNot{j});
  333. end
  334. ColocClusterIds = vertcat(ColocClusterIds{:});
  335. ColocalizedClusters{i} = {SelectedColoc{i}{ColocClusterIds}}';
  336. NotColocClusterIds = setdiff(1:size(SelectedColoc{i},1),ColocClusterIds)';
  337. NotColocalizedClusters{i} = vertcat(FilteredColoc{i},{SelectedColoc{i}{NotColocClusterIds}}');
  338. clear ColocalizedOrNot ColocClusterIds j NotColocClusterIds
  339. end
  340. clear i
  341. end
  342. % Clear up the work space
  343. clear i input_values Continue FilteredColoc IdxClusters SelectedColoc ClustersRef
  344. % Store the co-localized and isolated clusters for each data set in the
  345. % session that was loaded before
  346. for i = 1:numel(ColocIndex)
  347. % Unfold the co-localized and isolated clusters to matrices
  348. Colocalized = cell2mat(ColocalizedClusters{i});
  349. NonColocalized = cell2mat(NotColocalizedClusters{i});
  350. % Append the co-localized clusters to the current data set
  351. data{1,end+1} = data{1,ColocIndex(i)};
  352. if ~isempty(Colocalized)
  353. data{1,end}.x_data = Colocalized(:,1);
  354. data{1,end}.y_data = Colocalized(:,2);
  355. data{1,end}.area = Colocalized(:,3);
  356. else
  357. data{1,end}.x_data = [];
  358. data{1,end}.y_data = [];
  359. data{1,end}.area = [];
  360. end
  361. data{1,end}.name = strcat(data{1,end}.name,'_ColocalizedClusters_',num2str(ThresholdOverlap*100),'prOverlap');
  362. % Append the isolated clusters to the current data set
  363. data{1,end+1} = data{1,ColocIndex(i)};
  364. if ~isempty(NonColocalized)
  365. data{1,end}.x_data = NonColocalized(:,1);
  366. data{1,end}.y_data = NonColocalized(:,2);
  367. data{1,end}.area = NonColocalized(:,3);
  368. else
  369. data{1,end}.x_data = [];
  370. data{1,end}.y_data = [];
  371. data{1,end}.area = [];
  372. end
  373. data{1,end}.name = strcat(data{1,end}.name,'_NonColocalizedClusters_',num2str(ThresholdOverlap*100),'prOverlap');
  374. % Clear up the workspace
  375. clear Colocalized NonColocalized
  376. end
  377. clearvars -except data selectedfile
  378. % Save the file with a new name
  379. SaveFile = [extractBefore(selectedfile,'.mat') '_Colocalized.mat'];
  380. save(SaveFile,'data');
  381. % Clear up the workspace
  382. clear selectedfile SaveFile

ColocalizationTubulins.m at commit ddaea08, under GPL-3.0 · at the source

Overview

Authors: Victoria Hannett1,2, A Alejandro Vilcaes1,3, Siewert Hugelier1, Qing Tang4, Melike Lakadamyali1,5, Natali L Chanaday1,6
  1. Department of Physiology, Perelman School of Medicine, University of Pennsylvania, Philadelphia, Pennsylvania, USA
  2. Master of Biotechnology Program, School of Engineering and Applied Science, University of Pennsylvania, Philadelphia, Pennsylvania, USA
  3. Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET), Universidad Nacional de Córdoba, Córdoba, Argentina
  4. Department of Biochemistry, Institute of Agriculture and Natural Resources, College of Arts and Sciences, University of Nebraska‐Lincoln, Lincoln, Nebraska, USA
  5. Penn Muscle Institute and Epigenetics Institute, University of Pennsylvania, Philadelphia, Pennsylvania, USA
  6. Department of Neuroscience, Perelman School of Medicine, University of Pennsylvania, Philadelphia, Pennsylvania, USA
Journal: Journal of neurochemistry, volume 170, issue 9, article e70551
Dates: received 20 November 2025; accepted 4 September 2026; published online 11 September 2026; in print September 2026
Type: Research article · Language: English
License: CC BY
Identifiers: DOI 10.1111/jnc.70551 · PMID 42725393 · PMCID PMC13563309 · OpenAlex W7212287678
Open access: hybrid, a free copy (OpenAlex)
Status: code verified
Categories: rat (organism), cellular / molecular (subfield)
Methods: Evoked potentials, Statistics, fMRI & imaging, Smoothing, state filtering, decompositions
Keywords: dynamin, endocytosis, extracellular vesicle, neuron, synaptic vesicle recycling, synaptobrevin‐2
MeSH: Dynamins*, Extracellular Vesicles*, Neurons*, Vesicle-Associated Membrane Protein 2*, Animals, Cells, Cultured, Endocytosis, Hippocampus, Rats, Rats, Sprague-Dawley, Signal Transduction, Synaptic Vesicles (* major topic)
Topic: Cellular transport and secretion (Cell Biology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: NIGMS NIH HHS (GM152111, RM1 GM136511, GM136511, R35 GM152111); Margaret Q. Landenberger Research Foundation
Citations: not cited yet (Europe PMC); 98 references in the paper
Research resources: Syn1 (1:500 RRID:AB_10805139, and/or MAP2 (1:1000 RRID:AB_2138181, primary antibodies against GFP (1:150 RRID:AB_221569, Syp1 (1:500 RRID:AB_2622239, RRID:CVCL_0045

Abstract

Synaptobrevin‐2 (Syb2) is a SNARE protein essential for neurotransmitter release and communication in the nervous system. We previously showed that Syb2 is also exchanged among neurons via extracellular vesicles (EVs). Host neurons rapidly integrate exogenous Syb2 into their synaptic vesicle cycle to support neurotransmitter release. However, the endocytic mechanism by which neurons incorporate Syb2‐containing EVs is unknown. Here, we use a fusion of Syb2 with the pH‐sensitive GFP (Syb2‐pHluorin) to track the incorporation of Syb2‐containing EVs into rat hippocampal and cortical neurons and the trafficking of exogenous Syb2 to synaptic vesicles at synapses. We determined that Syb2‐containing EVs are endocytosed via a Dynamin‐dependent pathway, largely independently of macropinocytosis. The same endocytic route is used in the somatodendritic and axonal compartment and it occurs very rapidly, with the majority of Syb2‐pHluorin residing in internal acidic organelles at 30 min after EV addition, including synaptic vesicles at synapses. Leveraging this finding, we used EVs to sparsely deliver Syb2‐pHluorin to synapses and track the fusion and endocytosis of single synaptic vesicles. The results indicate that Syb2‐pHluorin‐positive synaptic vesicles are endocytosed with either ultrafast (< 1 s) or fast (~1–3 s) kinetics during synaptic transmission, suggesting limited diffusion and high fidelity in the fast retrieval of synaptic vesicle molecules immediately after fusion. Our findings expand our understanding of the mechanisms EVs use to enter neurons and open the door for future applications of EVs as vehicles to deliver fluorescent molecules in a neuron‐specific, targeted manner.

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 2 matches between paragraphs and lines of code.

melikelakadamyali/StormAnalysisSoftware

License: GPL-3.0
State: the link answers, verified on 26 September 2026
Evidence: files inventoried
Commit: ddaea080d42c03647204e470611ba94146259352, 5 June 2024
Languages: MATLAB (238), Python (3)
Size: 248 files, 241 scripts
Software Heritage: not archived
Found in: the text, “STORM Experiments”
Holds: README, license file
Not found: CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Statistics and Machine Learning Toolbox (37 files), Image Processing Toolbox (8 files), Curve Fitting Toolbox (4 files), Optimization Toolbox (3 files), SciPy (3 files), NumPy (2 files), Matplotlib (1 file), scikit-learn (1 file)
Availability: 1 check, the latest on 26 September 2026: the link answers
  • 26 September 2026: the link answers
243 files

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;
  • 241 scripts, each with its path and the digest of its content;
  • 2 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 Availability Statement

All data and resources generated during this work are available upon reasonable request to the corresponding author (NLC—).

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 3, 28 September 2026

  • Publisher: n/a → Wiley

Version 1, 27 September 2026: the first record

Recorded: type, language, journal, volume, issue, pages, dates, 6 authors, 6 keywords, 12 MeSH terms, 2 funders, 97 references, 5 RRIDs.

Cite

This paper

Hannett, V., Vilcaes, A. A., Hugelier, S., Tang, Q., Lakadamyali, M., & Chanaday, N. L. (2026). Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway. Journal of neurochemistry, 170(9), e70551. https://doi.org/10.1111/jnc.70551

BibTeX

@article{hannett2026synaptobrevin,
author = {Hannett, Victoria and Vilcaes, A Alejandro and Hugelier, Siewert and Tang, Qing and Lakadamyali, Melike and Chanaday, Natali L},
title = {{Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway}},
journal = {Journal of neurochemistry},
year = {2026},
month = sep,
volume = {170},
number = {9},
pages = {e70551},
publisher = {Wiley},
issn = {0022-3042},
doi = {10.1111/jnc.70551},
url = {https://doi.org/10.1111/jnc.70551},
pmid = {42725393},
pmcid = {PMC13563309}
}

RIS

TY - JOUR
AU - Hannett, Victoria
AU - Vilcaes, A Alejandro
AU - Hugelier, Siewert
AU - Tang, Qing
AU - Lakadamyali, Melike
AU - Chanaday, Natali L
TI - Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway
T2 - Journal of neurochemistry
J2 - J Neurochem
PY - 2026
DA - 2026/09/01
VL - 170
IS - 9
SP - e70551
SN - 0022-3042
PB - Wiley
DO - 10.1111/jnc.70551
UR - https://doi.org/10.1111/jnc.70551
LA - en
ER -

CSL-JSON

{
"id": "10.1111/jnc.70551",
"type": "article-journal",
"title": "Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway",
"container-title": "Journal of neurochemistry",
"author": [
{
"family": "Hannett",
"given": "Victoria"
},
{
"family": "Vilcaes",
"given": "A Alejandro"
},
{
"family": "Hugelier",
"given": "Siewert"
},
{
"family": "Tang",
"given": "Qing"
},
{
"family": "Lakadamyali",
"given": "Melike"
},
{
"family": "Chanaday",
"given": "Natali L"
}
],
"container-title-short": "J Neurochem",
"volume": "170",
"issue": "9",
"page": "e70551",
"DOI": "10.1111/jnc.70551",
"PMID": "42725393",
"PMCID": "PMC13563309",
"ISSN": "0022-3042",
"publisher": "Wiley",
"URL": "https://doi.org/10.1111/jnc.70551",
"language": "en",
"issued": {
"date-parts": [
[
2026,
9,
1
]
]
}
}

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.7554/elife.107276 [code]
Deployment of endocytic machinery to periactive zones of nerve terminals is independent of active zone assembly and evoked release.
Journal: eLife
In common: scikit-learn, SciPy, Matplotlib, 1 other tool, cellular / molecular, 7 references
[2] doi:10.1126/sciadv.aeh7220 [code]
Central complex representations of self-movement are sufficient to compute wind direction in flight.
Journal: Science advances
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[3] doi:10.1038/s41467-026-76306-9 [code]
Non-invasive characterization of perivascular subarachnoid spaces.
Journal: Nature communications
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[4] doi:10.1038/s41593-026-02357-2 [code]
Experience reorganizes content-specific memory traces in macaques.
Journal: Nature neuroscience
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[5] doi:10.1038/s41467-026-75347-4 [code]
Sleep reveals dynamics integrating and segregating movement and stimulus representations in V1.
Journal: Nature communications
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[6] doi:10.1038/s41586-026-10631-3 [code]
A prognostic human brain network for diffuse midline glioma.
Journal: Nature
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[7] doi:10.1016/j.neuron.2026.03.034 [code]
Dentate gyrus interneurons modulate winner-take-all network dynamics in freely behaving mice.
Journal: Neuron
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 5 other tools
[8] doi:10.1523/jneurosci.2001-25.2026 [code]
Dynamics of Dentate Gyrus Place Cells and Dentate Spikes during Spatial and Nonspatial Changes in Environments.
Journal: The Journal of neuroscience : the official journal of the Society for Neuroscience
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 4 other tools, rat
[9] doi:10.1016/j.celrep.2026.117646 [code]
Medial entorhinal-hippocampal desynchronization parallels the emergence of memory impairment in a mouse model of Alzheimer's disease pathology.
Journal: Cell reports
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 4 other tools
[10] doi:10.1002/hbm.70602 [code]
Neuroimaging Correlates of Post-Stroke Pain After Ischemic Stroke: Secondary Analysis of the INSPiRE-TMS Trial.
Journal: Human brain mapping
In common: Curve Fitting Toolbox, Optimization Toolbox, Image Processing Toolbox, 4 other tools

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.

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.