COPSradQC
Jump to navigation
Jump to search
function COPSradQC(infile,path)%,channel,threshold)
%This is a quality control function for PRR radiometer processing
%check and flag data of spectral channels by comparing each value to a
%threshold
%created by Erik Stassinos 4/27/2011
%This function will process the infile(assume LCD format)
%for now file processing will always be of type 'a' which is a simple
%comparison function between channel values and the threshold
%This script has been modified to work with a list file now 7/1/2011
%====> made a procfile loop and changed added filters loop
intype = 'a'; %hardcoding
type = lower(intype);
chanind =0;
flag = -9.9E35;
ct = 1; %arbitrary counter
infile = strtrim(infile);
if strncmp(type,'a',1) ==1
disp('you are doing a comparison')
%load rcq list
%proclist = load('/home/data65/pb/REPROCESS_2010/PRR/rqclist.txt');
procfile = fopen(path);% modified to tak in path'/home/data65/pb/REPROCESS_2010/PRR/rqclist.txt');
end
while ~feof(procfile)
line = fgets(procfile);
line = strsplit(line);
chan = line{1};
thresh = str2num(line{2});
%[chan, thresh] = textread(path,'%s %f'); %modified to put in path 1-10-2013
if ct ==54
break
end
channel = chan;%{ct}
threshold = thresh;%(ct)
infid = fopen(infile);
%===READ LCD FILE AND GET INDEX OF CHANNEL===
lineind =0;
%frewind(infid)
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,line,5) ==1
chanind = lineind;
end
end
end
end
%===RESET READ LCD AND LOAD ONLY DATA INTO DATA FILE===
frewind(infid)
dataname = strcat('radQCmat',infile);
dataname = strrep(dataname,'.lcd','');
datafid = fopen(dataname,'r+');
if datafid == -1
disp('cant open dataname, creating file')
datafid = fopen(dataname,'w+');
end
if ct ==1;
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
% fprintf(datafid,testline);
% testline
% pause
break
end
fprintf(datafid,testline);
end
end
end
fclose(datafid);
frewind(infid);
end
%===DO QUALITY CONTROL AND REPLACE DATA WITH FLAG IF NEEDED===
QCdata = load(dataname);
checkcol = QCdata(:,chanind);
badloc = find(checkcol < threshold);
checkcol(badloc) = flag;
QCdata_new = QCdata;
%QCdata_new(:,chanind)
QCdata_new(:,chanind) = checkcol;
%QCdata_new(:,chanind)
dlmwrite(dataname,QCdata_new,'delimiter',' ','precision',6); %overwrite old matrix file
%===INSERT NEW DATA INTO NEW LCD===
frewind(infid);
%if ct ==1
qclcd = fopen(strcat('rqc',infile),'w+');
%else
% qclcd = fopen(strcat('rqc',infile),'r+');
%end
while ~feof(infid)
pos = fgets(infid);
fprintf(qclcd,pos);
if strncmp(pos,'<data>',6) ==1 %start of data section
break
end
end
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===
%if ct ==1 %%%new for list file
while ~feof(infid)
lcdline = fgets(infid);
if strncmp(lcdline,'<filters_used>',14) ==1
%fseek(qclcd,0,'eof')
fprintf(qclcd,'%s\n','<filters_used>');
while ~feof(infid)
filter = fgets(infid);
fprintf(qclcd,'%s',filter);
end
end
end
clear channel
clear threshold
ct = ct +1;
fclose(infid);
%keyboard
end
fclose('all');
%===loop to add list of filters
procfile = fopen('/home/oceancolor/Plumes_and_Blooms/workspace/eriks/C-OPS/Copsrqclist.txt');
qclcd = fopen(strcat('rqc',infile),'r+');
fseek(qclcd,0,'eof');
fgets(qclcd);
%[chan,threshold] = textread('/home/oceancolor/Plumes_and_Blooms/workspace/eriks/C-OPS/Copsrqclist.txt','%s ');
chanfid = fopen('/home/oceancolor/Plumes_and_Blooms/workspace/eriks/C-OPS/Copsrqclist.txt');
while ~feof(chanfid)
channelII = fgets(chanfid);
if isempty(strtrim(channelII))
break
end
fprintf(qclcd,'%s','radQC ');
fprintf(qclcd,'%s',intype);
fprintf(qclcd,'%s',' ');
fprintf(qclcd,'%s',channelII);
end
back to C-OPS/CERBERUS Mfiles