Difference between revisions of "COPSradQC"

From Pnb
Jump to navigation Jump to search
(Created page with "back to C-OPS/CERBERUS Mfiles")
 
 
Line 1: Line 1:
 +
<pre>
 +
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
 +
 +
</pre>
 +
 +
 +
 
back to [[C-OPS/CERBERUS Mfiles]]
 
back to [[C-OPS/CERBERUS Mfiles]]

Latest revision as of 14:22, 13 February 2014

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