CPSangQ
Jump to navigation
Jump to search
function CPSangQ(infile,channel_1,channel_2,channel_3,channel_4) %Erik Stassinos 6/7/2011
%This function flags data row with "2" that is over the set angle value
%qrange or flags data rows with a "0" if channels are within qrange.
%qrange is 10
%Channels 3 and 4 are radiance/irradiance channels to check if dark cast
%===SET PARAMETERS===
infid = fopen(infile,'r');
qflag =2;
qrange = 10;
%===MAKE DATA FILE FOR INPUT FILE===
frewind(infid)
dataname = strcat('AQCmat',infile);
dataname = strrep(dataname,'.lcd','');
datafid = fopen(dataname,'w');
while ~feof(infid)
testline = fgets(infid);
if strncmp(testline,'<data>',6) ==1 %start of data section
while strncmp(testline,'<filters_used>',14) ~=1
testline = fgets(infid);
if strncmp(testline,'<filters_used>',14) ==1
break
end
fprintf(datafid,testline);
end
end
end
fclose(datafid);
frewind(infid);
%===FIND CHANNEL 1 and 2 INDEXES===
lineind =0;
while ~feof(infid)
line = fgets(infid);
if strncmp(line,'<sampled_parameters>',20) ==1
while strncmp(line,'<data>',6) ~= 1
lineind = lineind +1;
line = fgets(infid);
if strncmp(line,'<derived_parameters>',20) == 1
lineind = lineind -1;
end
if strncmp(channel_1,line,5) ==1
chanind1 = lineind;
end
end
end
end
chanind1;
frewind(infid);
lineind=0;
while ~feof(infid)
line = fgets(infid);
if strncmp(line,'<sampled_parameters>',20) ==1
while strncmp(line,'<data>',6) ~= 1
lineind = lineind +1;
line = fgets(infid);
if strncmp(line,'<derived_parameters>',20) == 1
lineind = lineind -1;
end
if strncmp(channel_2,line,5) ==1
chanind2 = lineind;
end
end
end
end
chanind2;
%===FIND CHANNEL 3 and 4 INDEXES FOR DRK CAST CHECK===
frewind(infid)
lineind=0;
while ~feof(infid)
line = fgets(infid);
if strncmp(line,'<sampled_parameters>',20) ==1
while strncmp(line,'<data>',6) ~= 1
lineind = lineind +1;
line = fgets(infid);
if strncmp(line,'<derived_parameters>',20) == 1
lineind = lineind -1;
end
if strncmp(channel_3,line,5) ==1
chanind3 = lineind;
end
end
end
end
chanind3;
frewind(infid)
lineind=0;
while ~feof(infid)
line = fgets(infid);
if strncmp(line,'<sampled_parameters>',20) ==1
while strncmp(line,'<data>',6) ~= 1
lineind = lineind +1;
line = fgets(infid);
if strncmp(line,'<derived_parameters>',20) == 1
lineind = lineind -1;
end
if strncmp(channel_4,line,5) ==1
chanind4 = lineind;
end
end
end
end
chanind4;
data2 = load(dataname);
fd4 = find(data2(:,chanind4) > -9.9E35);
fd3 = find(data2(:,chanind3) > -9.9E35);
mean(data2(fd3,chanind3))
mean(data2(fd4,chanind4))
%keyboard
%===DO QUALITY CONTROL AND REPLACE DATA WITH FLAG IF NEEDED===
QCdata = load(dataname);
checkcol_1 = QCdata(:,chanind1);
checkcol_2 = QCdata(:,chanind2);
checkcol = checkcol_1;
y = size(QCdata,1);
x = size(QCdata,2);
QCdata_new = zeros(y,x+1);
QCdata_new(1:y,1:x) = QCdata;
size(QCdata_new);
size(QCdata);
QCdata_new(:,end) = checkcol;
%try qc another way
for i = 1:length(checkcol_1);
if abs(checkcol_1(i)) > qrange || abs(checkcol_2(i)) > qrange
% disp('Tilt')
% checkcol_1(i)
% disp('Roll')
% checkcol_2(i)
QCdata_new(i,end) = qflag;
end
if abs(checkcol_1(i)) < qrange && abs(checkcol_2(i)) < qrange
QCdata_new(i,end) =0;
end
end
%original = load('akrmP101216B_nhd.txt');
dlmwrite(dataname,QCdata_new,'delimiter',' ','precision',6); %overwrite old matrix file
%===INSERT NEW DATA INTO NEW LCD===
frewind(infid);
qclcdname = strcat('an',infile);
qclcd = fopen(qclcdname,'w+');
while ~feof(infid)
pos = fgets(infid);
if strncmp(pos,'<data>',6) ==1 %start of data section
break
end
fprintf(qclcd,pos);
end
%===INSERT NEW DERIVED PARAMS===
newparam = strcat('aq-',channel_1,'-',channel_2);
fprintf(qclcd,'%s\n',newparam);
fprintf(qclcd,'%s\n','<data>');
datafile = fopen(dataname);
while ~feof(datafile)
%for loop = 1:length(QCdata_new)
datln = fgets(datafile);
fprintf(qclcd,datln);
end
%===ADD TO FILTERS USED ON NEW LCD===
while ~feof(infid)
lcdline = fgets(infid);
if strncmp(lcdline,'<filters_used>',14) ==1
fprintf(qclcd,'%s\n','<filters_used>');
while ~feof(infid)
filter = fgets(infid);
fprintf(qclcd,'%s',filter);
end
end
end
%domathstring =strcat(['domath',type,channel1,channel2,num2str(number),outfieldname]);
%fprintf(newlcdfile,'%s\n', domathstring);
fprintf(qclcd,'%s\n','')
fprintf(qclcd,'%s','angQ ');
fprintf(qclcd,'%s',' ');
fprintf(qclcd,'%s',channel_1);
fprintf(qclcd,'%s',' ');
fprintf(qclcd,'%s',channel_2);
fprintf(qclcd,'%s',' ');
fprintf(qclcd,'%s',num2str(qrange));
fprintf(qclcd,'%s',' ');
fprintf(qclcd,'%s',num2str(qflag));
if strncmp(infile(1:2),'an',2) == 1
movefile(qclcdname,infile)
end
fclose('all');
back to C-OPS/CERBERUS Mfiles