Difference between revisions of "CPSangQ"

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

Latest revision as of 15:23, 13 February 2014


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