Help creating a for loop for research purposes
1 view (last 30 days)
Show older comments
Noah Wilson
on 4 Aug 2020
Commented: Sudheer Bhimireddy
on 5 Aug 2020
Attached is the data I am using. Each frame is seperated by 1340 cells. I have some code to do what I want for one frame but I am struggling on how to expand this to a for loop to do the same thing for all 60 frames.
%Workspace must be cleared before using this script
clear
clc
%Input the folder location containing data that is being analyzed
MainFolder = 'C:\Users\nefwa\Documents\AcetoneResearch\07_16_2020_TempCheck';
cd(MainFolder)
rawdatafile = dir('*.csv');
rawdata = rawdatafile.name;
RawDataMatrix = csvread(rawdata, 1,0);
%Creates Rawdata folder in MainFolder
mkdir('Rawdata')
cd('Rawdata')
%Converting .csv file to .dat file
[~,fnm] = fileparts(rawdata);
rawdat = sprintf('%s.dat',fnm);
dlmwrite(rawdat, RawDataMatrix)
raw = '\Rawdata';
RawDir= strcat(MainFolder, raw);
%% Data
%Changes to first folder and then to Finaldata folder
cd(MainFolder)
cd('Rawdata')
%Searches for Acetone data
Tempfile = dir('*.dat');
Tempdata1 = Tempfile.name;
Tempdata = importdata(Tempdata1);
% N2 Main Peak Sum
N2peak = sum(Tempdata(436:461,3));
%N2 low rotational lines
N2low = sum(Tempdata(476:491,3));
%N2 high rotational lines
N2high = sum(Tempdata(520:610,3));
%H20 Main Peak Sum
H20peak = sum(Tempdata(1279:1303,3));
So in this code I am finding the sum of these peaks and rotational lines for one frame currently. I am hoping to expand this into a for loop to encompass all 60 frames I have (seperated by 1340 cells). I also would like to have each sum saved as like N2peak{1}, N2peak{2}, etc. Thank you in advanced for the help!
0 Comments
Accepted Answer
Sudheer Bhimireddy
on 4 Aug 2020
You have frame numbers in the first column of the file, which can be used to build a cell array.
Try this:
RawDataMatrix = csvread('2020_July_16_12_34_43.csv', 1,0);
% After reading your matrix, give the frame ID where you would like to start
frame_id = 2;
frame_count = 1;
i_start = 1;
% Initialize cell array for frames
nFrames = 60;
Temp_frame_array = cell(nFrames,1);
% Start loop
for i = 1:size(RawDataMatrix,1)
if RawDataMatrix(i,1) == frame_id
% Do Nothing
else
% Store eveything till this row in to a cell
Temp_frame_array{frame_count,1} = RawDataMatrix(i_start:i-1,:);
% Update the row number for next set
i_start = i;
% update frame_id, frame_count and resume binning
frame_id = RawDataMatrix(i,1);
frame_count = frame_count + 1;
end
end
% For the last frame the IF condition won't go to ELSE, so
Temp_frame_array{frame_count,1} = RawDataMatrix(i_start:end,:);
% Now loop through frames
for i = 1:nFrames
Tempdata = Temp_frame_array{i,1};
N2peak(i,1) = sum(Tempdata(436:461,3));
N2low(i,1) = sum(Tempdata(476:491,3));
N2high(i,1) = sum(Tempdata(520:610,3));
H20peak(i,1) = sum(Tempdata(1279:1303,3));
end
Hope this helps.
2 Comments
More Answers (0)
See Also
Categories
Find more on Data Type Conversion 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!