OSCR

FLIM quantification of temperature-dependent enzyme-NADH binding dynamics.

Code ↔ Paper

4 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 4 matches
  1. [1] § Methods › FLIM analysis ↔ DynamicTempCode.m, lines 1–13 · score 0.68 · SPCimage, 249–256, raw, dimensions, deconvoluted, artifact
  2. [2] § Methods › FLIM analysis ↔ CodeDynamicSoln.m, lines 1–25 · score 0.64 · SPCimage, 249–256, raw, artifact, summed, positions
  3. [3] § Methods › FLIM of solutions and cells ↔ DynamicTempCode.m, lines 457–481 · score 0.60 · instrument response function, urea crystals, IRF, cell
  4. [4] § Methods › FLIM of solutions and cells ↔ CodeDynamicSoln.m, lines 27–48 · score 0.59 · instrument response function, urea crystals, IRF, NADH

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 · 525 lines · 19 KB · no license · 2 matches

  1. %% Import and plot original image w/0 artifact at the end
  2. % Uploading File from SPCimage. (X spatial by Y spatial by Time)
  3. tpsfImage = Convert_ASC_Image('F:\Paper 1\Dynamic Temp\MCF-7\2 MCF7\test_2024_12_26_18_51_binned_raw_data.asc');
  4. irfFile= readmatrix('IRF.txt'); %Loads IRF data for deconvolution
  5. % Artifact produced at the right-hand side, where no viable information is
  6. % Sets artifact pixels as 0 (y positions from 249-256)
  7. tpsfImage(:,249:256,:)= 0;
  8. %tpsfImage(:,196:256,:)= 0;
  9. sumImage = sum(tpsfImage,3); %Sums up dimensions so the intensity image can be created
  10. imagesc(sumImage) %Plots intensities
  11. %% Normalize the data for visualization in imageSegmenter and get the first mask
  12. % Check the intensity range of the summed image
  13. minIntensity = min(sumImage(:));
  14. maxIntensity = max(sumImage(:));
  15. disp(['Min Intensity: ', num2str(minIntensity)]);
  16. disp(['Max Intensity: ', num2str(maxIntensity)]);
  17. % Normalize the image intensity to the range [0, 1]
  18. normalizedImage = sumImage / maxIntensity;
  19. imageSegmenter(normalizedImage);
  20. %% Plotting Mask
  21. croppedImage = maskedImage(:, [1:248]);
  22. imagesc(croppedImage);
  23. %imagesc(maskedImage)
  24. b= colorbar
  25. colormap('parula')
  26. ylabel(b, 'Fluorescence Intensity (a.u)', 'FontSize', 18)
  27. axis image
  28. set(gca, 'XTick', [], 'YTick', []); % This removes the tick marks and labels
  29. clear b
  30. %% Colorbar only
  31. figure;
  32. imagesc([]); % creates an empty axes
  33. colormap('parula');
  34. b = colorbar;
  35. ylabel(b, 'Fluorescence Intensity (a.u)', 'FontSize', 18);
  36. axis off; % hides the axes box and ticks
  37. %% Generate 2D array for timing of laser dwell time (Anna added)
  38. % sumImage= normalizedImage *maxIntensity; %Unnormalizes the intensities
  39. scan_time=[];
  40. time=1; %timing starts at 1
  41. for r=1:height(BW) % Going through each row
  42. for c=1:width(BW) % Going through each column
  43. scan_time(r,c)=time* 0.100; %microsecond dwell time of 100 microseconds
  44. time=time+1;
  45. end
  46. % % flipping row, b/c laser scanning snakes through image (BIDIRECTIONAL)
  47. % if rem(r,2)==0 %if remainder is two (for every alt. row, to flip)
  48. % scan_time(r,:)=flip(scan_time(r,:));
  49. %
  50. % end
  51. end
  52. % Pinpoint timing of region of interest (ROI)
  53. masked_timing= scan_time.*BW; %Filters to have only the time for when there is a cell
  54. clear r c time
  55. % %% Taking into account the bidirectional gathering of data
  56. % % Iterate through each slice in the third dimension
  57. % for k = 1:size(tpsfImage, 3)
  58. % for r = 2:2:size(tpsfImage, 1) % Only even rows
  59. % tpsfImage(r, :, k) = flip(tpsfImage(r, :, k)); % Flip each even row
  60. % end
  61. % end
  62. %% Finding the row and column values for positions= 1 (BW mask) Jocelyn
  63. % Preallocate a cell array to store indices for each row
  64. valOnes = cell(256, 1); % Makes cell array for each row
  65. for r = 1:256 % Loop through each row of the array
  66. columnindex = find(BW(r, :) ~= 0); % Find the column indices of non-zero elements in the current row
  67. % Store the row and corresponding column indices
  68. valOnes{r} = [repmat(r, length(columnindex), 1), columnindex']; % Create a matrix of (row, col) pairs
  69. end
  70. clear columnindex r
  71. %% Getting decay information and time stored (NO BINNING)
  72. % First two columns for row and column indices, next column for information
  73. noBinDecay = []; % Matrix to store decay data without binning
  74. noBinTime = []; %Matrix to store time corresponding to decays without binning
  75. for r = 1:256
  76. if ~isempty(valOnes{r}) % Check if valOnes contains any non-zero elements for this row
  77. rowColPairs = valOnes{r}; % Get the row-column pairs from valOnes
  78. for i = 1:size(rowColPairs, 1)
  79. row = rowColPairs(i, 1); % Extract row index
  80. col = rowColPairs(i, 2); % Extract column index
  81. % Scan_time for each(row, col)
  82. noBinTime = [noBinTime; row, col, scan_time(row, col)];
  83. % Third dimension decay for each (row, col)
  84. thirdDimData = squeeze(tpsfImage(row, col, :))'; % 1x256 vector
  85. % Matrix with row, col, and decay information
  86. noBinDecay = [noBinDecay; row, col, thirdDimData]; % Row, Col, decay data
  87. end
  88. end
  89. end
  90. clear col i r row rowColPairs thirdDimData
  91. %% Binning decay
  92. binNumber = input('How many pixels do you want to average? \n Please type an integer: ');
  93. % Extract the row indices from the first column of noBinDecay
  94. rowIndices = noBinDecay(:, 1);
  95. % Extract the column indices from the second column of noBinDecay
  96. colIndices = noBinDecay(:, 2);
  97. % Find unique row indices
  98. uniqueRowIndices = unique(rowIndices);
  99. % Initialize array to store the final binned data
  100. binDecayTotal = [];
  101. % Loop through each unique row index
  102. for i = 1:length(uniqueRowIndices)
  103. % Find rows in noBinDecay that match the current unique row index
  104. matchingRows = noBinDecay(rowIndices == uniqueRowIndices(i), :);
  105. % Get the number of rows for the current unique row index
  106. numRows = size(matchingRows, 1);
  107. % Check if there are enough rows for the specified binNumber
  108. if numRows >= binNumber
  109. % Determine how many full groups of binNumber can be formed
  110. numGroups = floor(numRows / binNumber); % Number of full groups of binNumber
  111. % Loop through each group
  112. for j = 1:numGroups
  113. % Define the rows for the current group of binNumber within matchingRows
  114. groupRows = (1 + (j-1) * binNumber):(j * binNumber);
  115. % Extract the current column indices for this group
  116. currentColIndices = matchingRows(groupRows, 2); % Get the column indices from the second column
  117. % Sum the information columns for the current group (excluding the first two columns)
  118. summedInfo = sum(matchingRows(groupRows, 3:end), 1); % Summing columns 3 to end
  119. % Store the row index, summed information, and the last column index
  120. binDecayTotal = [binDecayTotal; uniqueRowIndices(i), summedInfo, currentColIndices(end)];
  121. end
  122. end
  123. end
  124. binnedDecay= binDecayTotal(:, 2:257);
  125. indexBinnedDecay= binDecayTotal(:, [1, 258]);
  126. clear colIndices currentColIndices groupRows i j matchingRows numGroups numRows rowIndices summedInfo uniqueRowIndices
  127. clear binDecayTotal
  128. %% Binning time data
  129. binNumber = input('How many pixels do you want to average? \n Please type an integer: ');
  130. % Extract the row indices from the first column of noBinTime
  131. rowIndices = noBinTime(:, 1);
  132. % Extract the column indices from the second column of noBinTime
  133. colIndices = noBinTime(:, 2);
  134. % Find unique row indices
  135. uniqueRowIndices = unique(rowIndices);
  136. % Initialize an array to store the final binned data and corresponding times
  137. binTimeTotal = [];
  138. % Loop through each unique row index
  139. for i = 1:length(uniqueRowIndices)
  140. % Find rows in noBinTime that match the current unique row index
  141. matchingRows = noBinTime(rowIndices == uniqueRowIndices(i), :);
  142. % Get the number of rows for the current unique row index
  143. numRows = size(matchingRows, 1);
  144. % Check if there are enough rows for the specified binNumber
  145. if numRows >= binNumber
  146. % Determine how many full groups of binNumber can be formed
  147. numGroups = floor(numRows / binNumber); % Number of full groups of binNumber
  148. % Loop through each group
  149. for j = 1:numGroups
  150. % Define the rows for the current group of binNumber
  151. groupRows = (1 + (j-1) * binNumber):(j * binNumber);
  152. % Extract the current column indices for this group
  153. currentColIndices = matchingRows(groupRows, 2); % Get the column indices from the second column
  154. % Extract the last row for this group
  155. lastRow = matchingRows(groupRows(end), :); % Get the last row of the group
  156. % Store the row index and the last values of the group
  157. binTimeTotal = [binTimeTotal; lastRow, currentColIndices(end)];
  158. end
  159. end
  160. end
  161. binnedTime= binTimeTotal(:, 3);
  162. indexBinnedTime= binTimeTotal(:, [1,2]);
  163. clear colIndices currentColIndices groupRows i j lastRow matchingRows numGroups numRows rowIndices uniqueRowIndices
  164. %% Normalizes the IRF and produces the alpha 1 Values
  165. irfNorm = irfFile/max(irfFile); %Normalizes the IRF File
  166. size2DbinnedDecay= size(binnedDecay);
  167. nsize= size2DbinnedDecay(1);
  168. % [a1,t1,a2,t2] = Fit_Deconvolution(newdata(1439,:),irfNorm(68:92));
  169. alpha1= zeros([nsize,1]);%Single alpha1 array of nsize
  170. tao1= zeros([nsize, 1]);%Single tao1 array of nsize
  171. alpha2= zeros([nsize,1]);%Single alpha2 array of nsize
  172. tao2= zeros([nsize,1]); %Single tao2 array of nsize
  173. p= 1; %index p starts at 1
  174. %Produces alpha1 values for all data points
  175. for p= 1:nsize
  176. [alpha1(p,1), tao1(p,1), alpha2(p,1), tao2(p,1)]= Fit_Deconvolution(binnedDecay(p,:),irfNorm(68:92));
  177. end
  178. clear p size2DbinnedDecay nsize
  179. %% Calculating alpha1 moving average
  180. binNumber= 8;
  181. alpha1= alpha1*100;
  182. alpha1_mean= movmean(alpha1, binNumber*3);
  183. %% Arranging alpha1 for Heat Map
  184. indexalpha1= [indexBinnedDecay, alpha1_mean];
  185. data = indexalpha1; % Using indexalpha1
  186. % Create a 256x256 array initialized with zeros
  187. heat_alpha1= zeros(256, 256); %Empty
  188. % Loop through each row of the 216x3 array to populate resultArray
  189. for i = 1:size(data, 1)
  190. rowIndex = data(i, 1); % Row index from the first column
  191. colIndex = data(i, 2); % Column index from the second column
  192. infoValue = data(i, 3); % Information from the third column
  193. % Store the information in the corresponding position in the result array
  194. heat_alpha1(rowIndex, colIndex) = infoValue;
  195. % Copy the value to previous columns based on binNumber - 1
  196. for b = 1:(binNumber - 1)
  197. previousCol = colIndex - b; % Calculate the previous column index
  198. % Check if the previous column index is valid
  199. if previousCol >= 1
  200. heat_alpha1(rowIndex, previousCol) = infoValue;
  201. end
  202. end
  203. end
  204. clear data rowIndex b i previousCol
  205. %% Heat map of alpha1 PLOT
  206. heat_alpha1(heat_alpha1 ==0 )= NaN; %Sets values of 0 to NaN
  207. figure;
  208. imagesc(heat_alpha1);
  209. c= colorbar; % Add a color bar to indicate the scale
  210. ylabel(c, 'Free NADH (\alpha_1)', 'FontSize', 18)
  211. caxis([min(heat_alpha1(:)) max(heat_alpha1(:))]);
  212. axis image
  213. % set(gca, 'XTick', [], 'YTick', []); % This removes the tick marks and labels
  214. % Adjust colormap
  215. colormap('parula'); % Choose your desired colormap
  216. % Highlight a specific row (e.g., row 5) in red
  217. artifact= 80;
  218. highlightRow = artifact;
  219. hold on;
  220. plot(1:size(heat_alpha1, 2), highlightRow * ones(1, size(heat_alpha1, 2)), 'w', 'LineWidth', 1); % Plot a red line across the row
  221. clear highlightRow c
  222. %% Plotting Free NADH response over Time
  223. artifact= 52;
  224. index = find(binTimeTotal(:,1) == artifact); %Finds the index where the artifact starts
  225. index_Artifact= index(1); %First occurence of the artifact
  226. [max_Value, max_Index ]= max(alpha1_mean(index_Artifact:end)); %Max value and index of where free NADH is highest
  227. laserOnIndex = index_Artifact; % Index where the laser was turned on
  228. % Calculate the response value (mean after laser is turned on)
  229. responsePeriod = alpha1_mean(laserOnIndex:end); % Data after laser turned on
  230. % Plot the time series data
  231. figure;
  232. p1= plot(binnedTime, alpha1) %No smoothing
  233. hold on
  234. %p2= plot(binnedTime, alpha1_mean,'b', 'LineWidth', 3) %alpha1 smoothing for CONTROL
  235. %Highlight the baseline period
  236. p2= plot(binnedTime(1:laserOnIndex-1), alpha1_mean(1:laserOnIndex-1), 'b', 'LineWidth', 3); %Plots baseline period
  237. %
  238. % %Highlight the response period
  239. p3= plot(binnedTime(laserOnIndex:end), alpha1_mean(laserOnIndex:end), 'r', 'LineWidth', 3); %Plots response period
  240. %
  241. % %Add a vertical line to indicate where the laser was turned on
  242. xline(binnedTime(laserOnIndex), '--k', 'LineWidth', 2); % Add a vertical dashed line for when laser starts
  243. xlabel('Time (ms)', 'FontSize', 28)
  244. ylabel('Free NAD(P)H (%)', 'FontSize', 28)
  245. xlim([0 7000])
  246. xticks(0:2000:7000)
  247. ylim([50 100])
  248. yticks(40:15:100)
  249. set(gca, 'FontSize', 23)
  250. % Display the legend (automatically gathers DisplayNames from each plot)
  251. lgd= legend({'Experiment Data', 'Baseline Period','Response Period'}, 'Location', 'northeast');
  252. lgd.FontSize = 25;
  253. %% Plotting Free NADH response over Time CONTROL
  254. % Plot the time series data
  255. figure;
  256. p1= plot(binnedTime, alpha1) %No smoothing
  257. hold on
  258. p2= plot(binnedTime, alpha1_mean,'b', 'LineWidth', 3) %alpha1 smoothing for CONTROL
  259. xlabel('Time (ms)', 'FontSize', 28)
  260. ylabel('Free NAD(P)H (%)', 'FontSize', 28)
  261. xlim([0 7000])
  262. xticks(0:2000:7000)
  263. ylim([50 100])
  264. yticks(40:15:100)
  265. set(gca, 'FontSize', 23)
  266. % Display the legend (automatically gathers DisplayNames from each plot)
  267. %legend({'Experiment Data', 'Baseline Period','Response Period'}, 'Location', 'Best');
  268. %% Percent change plot CONTROL
  269. baselineValue= mean(alpha1_mean); %for control stuff
  270. percentChange= ((alpha1_mean-baselineValue)/baselineValue)*100; %Computes percent change
  271. % Plot the percent change
  272. figure;
  273. plot(binnedTime, percentChange,'b', 'LineWidth', 2);
  274. % title('Percent Change of Free NADH (\alpha_1)', 'FontSize', 18)
  275. xlabel('Time (ms)', 'FontSize', 28)
  276. ylabel('Percent Change (%)', 'FontSize', 28)
  277. % Optionally, you can add a legend
  278. % legend('Percent Change', 'Baseline Period', 'Response Period', 'Location', 'Best');
  279. % grid on;
  280. xlim([0 7000])
  281. xticks(0:2000:7000)
  282. ylim([-10 70])
  283. yticks(-10:25:70)
  284. set(gca, 'FontSize', 23)
  285. %% Percent change plot use this one
  286. % startIndex= index_Artifact-10;
  287. startIndex= 1; %We are starting at index 1
  288. index_Artifact= laserOnIndex; %This is the index for our artifact
  289. %baselineValue= mean(alpha1_mean); for control stuff
  290. baselineValue= mean(alpha1_mean(1:index_Artifact-1));
  291. percentChange= ((alpha1_mean-baselineValue)/baselineValue)*100; %Computes percent change
  292. % Plot the percent change
  293. figure;
  294. plot(binnedTime(startIndex:end), percentChange(startIndex:end));
  295. hold on
  296. % Highlight the baseline period
  297. plot(binnedTime(startIndex:laserOnIndex-1), percentChange(startIndex:laserOnIndex-1), 'b', 'LineWidth', 2);
  298. % Highlight the response period
  299. plot(binnedTime(laserOnIndex:end), percentChange(laserOnIndex:end), 'r', 'LineWidth', 2);
  300. % Add a vertical line to indicate where the laser was turned on
  301. xline(binnedTime(laserOnIndex), '--k', 'LineWidth', 2); % Add a vertical dashed line
  302. % title('Percent Change of Free NADH (\alpha_1)', 'FontSize', 18)
  303. xlabel('Time (ms)', 'FontSize', 28)
  304. ylabel('Percent Change (%)', 'FontSize', 28)
  305. % Optionally, you can add a legend
  306. lgd= legend('Percent Change', 'Baseline Period', 'Response Period', 'Location', 'northeast');
  307. lgd.FontSize = 25;
  308. % grid on;
  309. xlim([0 7000])
  310. xticks(0:2000:7000)
  311. ylim([-10 70])
  312. yticks(-10:25:70)
  313. set(gca, 'FontSize', 23)
  314. % max_Value= max(alpha1_mean(index_Artifact:index_Artifact+500))
  315. max_Value= max(alpha1_mean(index_Artifact:end))
  316. totalIncrease= max_Value- baselineValue
  317. percentChangeOverall= ((max_Value-baselineValue)/baselineValue)*100
  318. fprintf('Baseline value: %.3f\n', baselineValue)
  319. %% Bins decays in groups of 8 for solutions
  320. nsize = 65536/8; %Dividing decay data into groups of 8
  321. newdata = zeros([nsize,256]); %Empty array of nsize (8192 summed groups) x 256
  322. time = zeros([nsize,1]); %Single time array of nsize (8192 summed groups)
  323. i = 1; %Index i starts at 1
  324. j = 1; %Index j starts at 1
  325. a=0;
  326. while i < 65530
  327. newdata(j,:)=sum(test202212051506binnedrawdata(i:i+7,:),1); %Sums 16 X-val with corresponding y into a 1 dimensional array
  328. if rem((i-256*a),241)==0; %Filters out the last bit of artifact on image
  329. time(j,1)=time(j-1,1)+0.1*2*8;
  330. i=i+8+8;
  331. a=a+1;
  332. else
  333. if j==1;
  334. time(j,1)=0;
  335. else
  336. time(j,1)=time(j-1,1)+0.1*8; %In milliseconds
  337. end
  338. i=i+8; %Adds 16 to i
  339. end
  340. j=j+1; %Adds 1 to j
  341. end
  342. entireTime=time; %Time for entire image (ms)
  343. decayTime = 0:12.5/255:12.5; %In nanoseconds for 1 decay curve
  344. %% Normalizes the IRF and produces the alpha 1 Values
  345. % This is the instrument response function, which is something unique to
  346. % each system, can be obtained imaging urea crystals or YG beads
  347. irfFile= readmatrix('IRF.txt'); %Loads IRF data
  348. irfNorm = irfFile/max(irfFile);
  349. size2DbinnedDecay= size(binnedDecay); %For cells do not need for soln
  350. nsize= size2DbinnedDecay(1); %For cells do not need for soln
  351. alpha1= zeros([nsize,1]);%Single alpha1 array of nsize (8192 summed groups)
  352. tao1= zeros([nsize, 1]);%Single tao1 array of nsize (8192 summed groups)
  353. alpha2= zeros([nsize,1]);%Single alpha2 array of nsize (8192 summed groups)
  354. tao2= zeros([nsize,1]); %Single tao2 array of nsize (8192 summed groups)
  355. p= 1; %index p starts at 1
  356. % for p= 1:nsize
  357. % [alpha1(p,1), tao1(p,1), alpha2(p,1), tao2(p,1)]= Fit_Deconvolution_v1(newdata(p,:),irfNorm(68:92));
  358. % end
  359. for p= 1:nsize
  360. [alpha1(p,1), tao1(p,1), alpha2(p,1), tao2(p,1)]= Fit_Deconvolution_v1(binnedDecay(p,:),irfNorm(68:92));
  361. end
  362. %% Function to deconvolute and fit data/ Function to open up asc file
  363. function [a1Norm,t1,a2Norm,t2] = Fit_Deconvolution(decayCurve,irf)
  364. timeFitting = [1:256]*12.5/256; %Nanoseconds
  365. if max(decayCurve)> 0
  366. deconvDecay = deconvlucy(decayCurve',irf,10); %Deconvolutes data
  367. [~, peakPosition] = max(deconvDecay); %Finds the max peak of decay curve
  368. fittingPart = [deconvDecay(peakPosition:256)' zeros(1,peakPosition-1)];
  369. %Conditions are needed to ensure alpha1 is never above 1
  370. decayFit = fit(timeFitting',fittingPart','exp2','StartPoint',[0.6,-4, 1, -0.8],'Lower',[0.5,-5, 0.03,-1],'Upper',[80,-1.67,60,-0.3]); %Fits data to a 2 exponential form
  371. fittingValues = coeffvalues(decayFit); %Array of all coefficients
  372. a1 = fittingValues(1);
  373. a1Norm = fittingValues(1)/(fittingValues(1) + fittingValues(3) );
  374. t1 = -1/fittingValues(2);
  375. a2 = fittingValues(3);
  376. a2Norm = fittingValues(3)/(fittingValues(1) + fittingValues(3) );
  377. t2 = -1/fittingValues(4);
  378. else
  379. a1Norm = 0;
  380. t1 = 0;
  381. a2Norm = 0;
  382. t2 = 0;
  383. end
  384. % f = fittype('a*exp(b*x) + c*exp(d*x)')
  385. % c = cfit(f,a1,-1/t1,a2,-1/t2)
  386. % plot(c,timeFitting,fittingPart)
  387. % xlabel('Time (ns)');
  388. % ylabel('Decay Amplitude');
  389. % title('Double Exponential Fit');
  390. % legend('Fitted Curve', 'Decay Curve');
  391. % grid on;
  392. end
  393. %Function to open up asc file
  394. function photonDecayImage3D = Convert_ASC_Image(imageDirectory) %Function to read ASC File
  395. PhotonRawDecayImage = importdata(imageDirectory,' ',11);
  396. PhotonDecayImage = PhotonRawDecayImage.data;
  397. photonDecayImage3D = reshape(PhotonDecayImage,[256 256 256]);
  398. photonDecayImage3D = permute(photonDecayImage3D,[2 1 3]);
  399. end

DynamicTempCode.m at commit f5b5071, no license · at the source

Overview

Authors: Jocelyn Martinez1, Anna Theodossiou1, Linghao Hu1, Alex J Walsh1
  1. Department of Biomedical Engineering, Texas A&M University, College Station, TX, 77840, USA
Institutions: Texas A&M University (United States)
Journal: Biomedical optics express, volume 17, issue 7, pages 3776-3791
Dates: received 21 April 2026; accepted 2 June 2026; published online 18 June 2026
Type: Research article · Language: English
License: none stated
Identifiers: DOI 10.1364/boe.603469 · PMID 42460335 · PMCID PMC13372349 · OpenAlex W7163700498
Open access: gold, a free copy (OpenAlex)
Status: code verified
Methods: Statistics, Preprocessing, Smoothing, state filtering, decompositions, Connectivity
Topic: Mitochondrial Function and Pathology (Molecular Biology, Biochemistry, Genetics and Molecular Biology), according to OpenAlex
Funding: NIGMS NIH HHS (R35 GM142990)
Citations: cited by 1 paper (Europe PMC); 46 references in the paper

Abstract

The abstract is not reproduced here: the paper's license (none stated) does not allow it. Read it in the paper, at the publisher or on Europe PMC.

Repository

Its files are read in the Code ↔ Paper reader above, with 4 matches between paragraphs and lines of code.

walshlab/Infrared-Temperature-FLIM

License: none: the authors keep all their rights
State: the link answers, verified on 27 September 2026
Evidence: files inventoried
Commit: f5b5071b387a6d675ac8673f0bc0e8ac52fc9a7e, 6 February 2026
Languages: MATLAB (3)
Size: 9 files, 3 scripts
Software Heritage: not archived
Found in: the references
Not found: README, license file, CITATION.cff, environment file, tests, continuous integration, documentation
Tools: Curve Fitting Toolbox (1 file)
Availability: 1 check, the latest on 27 September 2026: the link answers
  • 27 September 2026: the link answers
3 files

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:

  • 1 repository of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
  • 3 scripts, each with its path and the digest of its content;
  • 4 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.

Code and data availability statement

The paper has a code and data availability statement. Its license (none stated) does not allow reproducing it here; in short, from what the harvester recognized in it:

  • no repository, dataset or request procedure was recognized in it

Read it in the paper: doi.org/10.1364/boe.603469.

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, 4 authors, 1 funder, 44 references.

Cite

This paper

Martinez, J., Theodossiou, A., Hu, L., & Walsh, A. J. (2026). FLIM quantification of temperature-dependent enzyme-NADH binding dynamics. Biomedical optics express, 17(7), 3776-3791. https://doi.org/10.1364/boe.603469

BibTeX

@article{martinez2026flim,
author = {Martinez, Jocelyn and Theodossiou, Anna and Hu, Linghao and Walsh, Alex J},
title = {{FLIM quantification of temperature-dependent enzyme-NADH binding dynamics}},
journal = {Biomedical optics express},
year = {2026},
month = jun,
volume = {17},
number = {7},
pages = {3776--3791},
publisher = {Optica Publishing Group},
issn = {2156-7085},
doi = {10.1364/boe.603469},
url = {https://doi.org/10.1364/boe.603469},
pmid = {42460335},
pmcid = {PMC13372349}
}

RIS

TY - JOUR
AU - Martinez, Jocelyn
AU - Theodossiou, Anna
AU - Hu, Linghao
AU - Walsh, Alex J
TI - FLIM quantification of temperature-dependent enzyme-NADH binding dynamics
T2 - Biomedical optics express
J2 - Biomed Opt Express
PY - 2026
DA - 2026/06/18
VL - 17
IS - 7
SP - 3776
EP - 3791
SN - 2156-7085
PB - Optica Publishing Group
DO - 10.1364/boe.603469
UR - https://doi.org/10.1364/boe.603469
LA - en
ER -

CSL-JSON

{
"id": "10.1364/boe.603469",
"type": "article-journal",
"title": "FLIM quantification of temperature-dependent enzyme-NADH binding dynamics",
"container-title": "Biomedical optics express",
"author": [
{
"family": "Martinez",
"given": "Jocelyn"
},
{
"family": "Theodossiou",
"given": "Anna"
},
{
"family": "Hu",
"given": "Linghao"
},
{
"family": "Walsh",
"given": "Alex J"
}
],
"container-title-short": "Biomed Opt Express",
"volume": "17",
"issue": "7",
"page": "3776-3791",
"DOI": "10.1364/boe.603469",
"PMID": "42460335",
"PMCID": "PMC13372349",
"ISSN": "2156-7085",
"publisher": "Optica Publishing Group",
"URL": "https://doi.org/10.1364/boe.603469",
"language": "en",
"issued": {
"date-parts": [
[
2026,
6,
18
]
]
}
}

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.1117/1.bios.3.3.035001 [code]
Transient infrared laser exposure modulates calcium activity in cortical dendritic spines.
Journal: Biophotonics discovery
In common: 3 references
[2] doi:10.1111/jnc.70551 [code]
Synaptobrevin-2 Containing Extracellular Vesicles Are Rapidly Incorporated Into Mammalian Neurons via a Dynamin-Dependent Pathway.
Journal: Journal of neurochemistry
In common: Curve Fitting Toolbox
[3] 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
[4] doi:10.1016/j.isci.2026.117187 [code]
Functional and structural characterization of dendritic spine pathology in a mouse model of tauopathy.
Journal: iScience
In common: Curve Fitting Toolbox
[5] doi:10.1126/sciadv.aea1037 [code]
Distinct cortical spatial representations learned along disparate visual pathways.
Journal: Science advances
In common: Curve Fitting Toolbox
[6] doi:10.1038/s41467-026-76574-5 [code]
Prefrontal-raphe-habenular circuit drives fear memory recall and updating.
Journal: Nature communications
In common: Curve Fitting Toolbox
[7] 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
[8] doi:10.1038/s41467-026-76581-6 [code]
Thalamocortical bursts encode reward contingencies and drive associative learning.
Journal: Nature communications
In common: Curve Fitting Toolbox
[9] doi:10.1038/s41467-026-76306-9 [code]
Non-invasive characterization of perivascular subarachnoid spaces.
Journal: Nature communications
In common: Curve Fitting Toolbox
[10] doi:10.7554/elife.106081 [code]
Heritability of movie-evoked brain activity and connectivity.
Journal: eLife
In common: Curve Fitting Toolbox

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.