Save multiple plots to a specific path.
2 views (last 30 days)
Show older comments
Abhilash Sukumari
on 17 Jun 2015
Edited: Abhilash Sukumari
on 18 Jun 2015
Intro: fairly new to matlab coming from mathematica environment.
Question: I have to calculate based on (x,y) 2D data and plot the same with the answer from the calculation shown on every plot. Assuming I have 10 2D arrays that needs to a FWHM calculation and the FWHM answer written to all of them and saved.
Code below for FWHM function:
function width = fwhm(x,y)% Define function for FWHM at 50%
y = y / max(y); % Normalize to 1 so that half max=0.5
N = length(y); % Max length of Y
MicroscopeMag=10; % Magnification of objective
PixelWidth=7.8; % Pixel Pitch is 7.8 Microns - Hamamatsu.
%------- identifies the centre of the peak ---------------%
[~,centerindex] = max(y);% Find center peak and coordinate
%------- Identifies the last index position before half-maximum ------%
%----- Have a range containing the leading edge of the signal -----%
i = 2;
while sign(y(i)-0.5) == sign(y(i-1)-0.5) %trying to see the curve raise
i = i+1;
end
%-----Interpolate the exact point(s) where the signal's value would be 0.5-----%
%----- The next 2 lines are an attempt to determine in fractions of an
%Index exactly where the line would cross the 0.5 value.
%Simple linear interpolation -----%
interp = (0.5-y(i-1)) / (y(i)-y(i-1));
%(gives us the delta_y between the two values either side)/(shortfall)
%=linearly interpolate how far between the two index positions we should go to hit exactly 0.5
tlead = x(i-1) + interp*(x(i)-x(i-1));
% Works out the corresponding delta_x, which gives you the actual distance in terms of the timebase.
i=centerindex+1;
%------- start search for next crossing at center--------------------%
%------- Repeat process for trailing edge --------------------%
while ((sign(y(i)-0.5) == sign(y(i-1)-0.5)) && (i <= N-1))
i = i+1;
end
if i ~= N
interp = (0.5-y(i-1)) / (y(i)-y(i-1));
ttrail = x(i-1) + interp*(x(i)-x(i-1));
% Lateral Magnification x Pixel pitch of 7.8 microns.
width=((ttrail - tlead)/MicroscopeMag)*PixelWidth;
end
Code to calculate the FWHM for every 2D array
clear all;
a=1;
while a<=10;
filename=strcat('S',num2str(a),'.csv');
Array=csvread(filename,15,0);
x = Array(:, 1);
y = Array(:, 2);
fwhm(x,y)
a = a+1;
end
The 10 files are in the zip attached here.
Accepted Answer
Walter Roberson
on 18 Jun 2015
for a = 1 : 10
filename = sprintf('S%d.csv', a);
Array=csvread(filename,15,0);
x = Array(:, 1);
y = Array(:, 2);
width = fwhm(x,y);
outputs = [num2cell(x), num2cell(y)];
outputs{3,1} = width;
newfilename = sprintf('Snew%d.csv', a);
xlswrite(newfilename, outputs);
end
1 Comment
More Answers (0)
See Also
Categories
Find more on Hamamatsu Hardware in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!