Code section clarification - function
9 views (last 30 days)
Show older comments
Hi everyone,
I am quite new to matlab, but I have some background knowlege in python and java.
I have been given this code to analyse and i am struggling to understand section 3 and 4. If anyone could tell me what those section do, i would greatly appreciate it.
This code is for analysing UV-VIS data ( x,y) = ( wavelenght , absorption) for a region between 400 - 800 nm. I believe section 3 doesnt need "for" and "end "syntax.
Many thanks for your help
function Analyse_UV( ConcnVector )
% Analyse_UV
% Function loads UV/Vis data, finds SPR band, fits model gaussian
% function to it using an evolutionary algorithm, and prepares the data
% for calculation of fwhm.
%% USER INPUTS
% 1) Save the csv file containing the UV/Vis data as 'data.csv'.
% 2) Create a vector (ConcnVector) e.g. [1 2 3 4 ...] containing the
% concentration values of the titrate (in uM).
% 3) If last dataset is of purified nanoparticles, the code reports the
% new NP concentration based on the input argument 'NPConc'.
% 3) Label the titrate for 'xlabel' in Section 8
close all
clc
%% NP CONCENTRATION
NPConc = 20;
%% 1) Import data file, and sort into headings and data
[NUM,TXT,NAW] = xlsread('Test1.xls');
ConcnVector = ConcnVector';
for i=1:1:length(ConcnVector);
legend2{i}=num2str(ConcnVector(i))';
end
%% 2) Acquire Dimensions & Resize
dim=size(NUM);
imax=(dim(1,2));
%% 3) Import Headings
for
i=1:2:imax
headings0(i)=[TXT(1,i)];
end
headings=headings0';
headings(cellfun(@isempty,headings))=[]; % delete empty entries
%% 4) Normalise Spectra to First Measurement
% Algorithm assumes first measurement is AuNPs. It then normalises all
% measurements to this measurement.
NcolNUM = size(NUM,2);
if NcolNUM >2
NUM2 = zeros(size(NUM,1),size(NUM,2));
LOWER = NUM(1,2);
for i=1:2:imax
UPPER = NUM(1,i+1);
NUM2(:,i+1) = NUM(:,i+1)-(UPPER-LOWER);
NUM2(:,i) = NUM(:,i);
end
end
NUM = NUM2;
%% 5) Run UV/Vis Analysis
SetSize = 0.5*size(NUM,2);
Results = zeros(SetSize,3); % zeros returns a 0 values array boxes
PlotNum = ceil(SetSize*0.5);
Set = 1;
figure;
hold all
for i=1:2:imax
y = NUM(:,i:i+1);
[SPR, FWHM, lmerr, xdataf, ydataf,SPRBandf] = Average_UV_13nm(y);
Results(((i+1)/2),1) = SPR;
Results(((i+1)/2),2) = FWHM;
Results(((i+1)/2),3) = lmerr;
subplot(2,PlotNum,Set);
plot(xdataf,ydataf,'-','linewidth',1.5);
hold on
plot(xdataf,SPRBandf,'--','linewidth',1.5);
title(headings((i+1)*0.5), 'FontSize',12);
xlim([450 620])
Set = Set+1;
j = (i+1)/2;
Abs(j) = max(SPRBandf);
if i == imax-3
IniAbs = max(SPRBandf); %Report SPR height before purification
end
if i == imax-1
FinAbs = max(SPRBandf); %Report SPR height after purification
end
xlim([400 650]);
end
%
% ConcRatio = FinAbs/IniAbs;
% New_Concentration_in_nM = ConcRatio*NPConc %Calculate new NP conc in nM
% DilutionCalc=(New_Concentration_in_nM, 0.5, 3000)
% hold off
%% 6) Sample Data Plot
%Plots last studied dataset & SPR fit
figure;
plot(xdataf,ydataf,'-','linewidth',1.5);
hold on
plot(xdataf,SPRBandf,'--','linewidth',2);
title('Example of UV/Vis Data with SPR Fit', 'FontSize',18);
xlabel('\lambda /nm', 'FontSize',16);
ylabel('Absorbance', 'FontSize',16);
% LEG=legend('UV/Vis Data','Levenberg-Marquandt fitting of SPR band');
SampleHeadings = {'UV/Vis Data','Levenberg-Marquandt fitting of SPR band'};
legend(SampleHeadings,'FontSize',16,'Location','NorthEast');
set(gca,'FontSize',13)
%LEG = findobj(AX,'type','text');
%set(LEG,'FontSize',14)
%% 7) Plot all UV/Vis Data
% N. B> - Title graph below
L = length(NUM);
figure;
for i=2:2:imax
hold all;
axis([400 800 0 2.2]) % Axis Lengths
plot(double(NUM(1:L,1)),double(NUM(1:L,i)),'linewidth',2);
set(gca, 'XTick', 0:50:800, 'FontSize',12);
end
Last = NUM(:,end);
JJJ = max(Last(1:350))*1.2;
axis([400 800 0 JJJ]) % Axis Lengths
legend(headings,'FontSize',13,'Location','SouthWest');
title('UV/Vis Absorption of Au^1^3NPs', 'FontSize',18); % More appropriate title required
xlabel('\lambda /nm', 'FontSize',20);
ylabel('Absorbance', 'FontSize',20);
figure;
uitable('Data', Results, 'ColumnName', {'SPR', 'FWHM', 'lmerr'},'RowName', headings,'Position', [20 20 1000 400]);
%% 8) Plot SPR & FWHM Data
SPR = Results(:,1);
SPR = SPR(:,1)-SPR(1,1);
FWHM = abs(Results(:,2));
FWHM = FWHM(:,1)-FWHM(1,1);
figure;
plot(ConcnVector,SPR,'--o','linewidth',2,'markers',9);
hold on
plot(ConcnVector,FWHM,'--*','linewidth',2,'markers',9);
axis auto
set(gca,'FontSize',13)
xlim([ConcnVector(1),ConcnVector(end)+1]);
ylim([0,SPR(end)+2]);
xlabel('Concentration of pHLIP/ \muM', 'FontSize',18); %% User Input Required %%
ylabel('\Delta\lambda /nm', 'FontSize',18);
SPR_Headings = {'Surface Plasmon Resonance \lambda_m_a_x','Full Width at Half Maximum'};
legend(SPR_Headings,'FontSize',13,'Location','NorthEast');
figure;
MaxAbs = max(Abs)*1.2;
MinAbs = min(Abs)*0.8;
[haxes,hline1,hline2] = plotyy(ConcnVector,SPR,ConcnVector,Abs);
set(hline1,'linewidth',1.5);
set(hline2,'linewidth',1.5);
set(haxes(2),'YLim',[MinAbs MaxAbs]); %MinAbs MaxAbs %adjust axes here!!!
set(haxes(2), 'YTick', MinAbs:0.2:MaxAbs, 'FontSize',13); %adjust axes here!!!
set(haxes(1),'YLim',[0 SPR(end)+2]);
set(haxes(1), 'YTick', 0:1:SPR(end)+4, 'FontSize',13);
ylabel(haxes(1),'\Delta\lambda /nm', 'FontSize',18); % left y-axis
ylabel(haxes(2),'Absorbance', 'FontSize',18) % right y-axis
xlim([ConcnVector(1),ConcnVector(end)+1]);
set(hline1,'Marker','o','MarkerSize',9);
set(hline1,'LineStyle','--');
set(hline2,'Marker','+','MarkerSize',9);
set(hline2,'LineStyle','--');
hold on
hline3 = plot(ConcnVector,FWHM,'-');
set(hline3,'linewidth',1.5);
set(hline3,'Marker','*','MarkerSize',9);
set(hline3,'LineStyle','--');
SPR_Headings2 = {'Surface Plasmon Resonance \lambda_m_a_x','Full Width at Half Maximum','Absorption'};
legend(SPR_Headings2,'FontSize',13,'Location','NorthWest');
xlabel('Concentration of EuL /\muM','FontSize',18);
set(haxes(2),'XLim',[ConcnVector(1),ConcnVector(end)+0.1]);
%
set(haxes(1),'XLim',[ConcnVector(1),ConcnVector(end)+0.1]);
set(haxes(2),'XTick',[]) % Remove ticks of axis 2 (leaves right-hand ticks of axis 1)
set(haxes(1),'Box','off')
set(haxes(1),'FontSize',14);
xlim([ConcnVector(1),ConcnVector(end)+0.1]);
end
0 Comments
Answers (1)
Walter Roberson
on 15 Feb 2021
for
i=1:2:imax
headings0(i)=[TXT(1,i)];
end
The for should be the same line as the i=
You are correct that a loop is not necessary
headings0(1:2:imax) = TXT(1,1:2:imax);
Every second heading is being copied.
0 Comments
See Also
Categories
Find more on Log Plots 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!