COPSradQC

From Pnb
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