CPSangQ

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