Difference between revisions of "CPSangQ"
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