function output_array = calibrate_ecofl2(input_array,p,prop) % m1_ecofl_calibrate - Provide calibrated output data for the Fluorometer. % % Use as: output_array = m1_ecofl_calibrate(input_array) % % Inputs: input_array = Array of raw counts data and configuration % directory as a string. % % Output: output_array = an array of raw and calibrated data elements. % % Example: % output_array = m1_ecofl_calibrate(input_array,'//tornado/diatom/cimt/configuration/ECO/ecofl.properties') % % Where Col(1)=datenum, Col(2)=OASIS time, Col(3)=reference, Col(4)=signal, and Col(5)=thermistor. % MC Harlan % 21 Nov 2003 % Updated for the CIMT Mooring. Add the temperature correction % re: new device FLNTUS a combination scattering meter with fluorometer and % backscatter % Where Col(1)=datenum, Col(2)=OASIS time, Col(3)=fl_reference, Col(4)=fl_signal, col(5)=bb_ref col(6)=bb_signal and Col(7)=thermistor. % These calculations are from the WetLabs Calibration sheet. rpm % The averaged ECOFL raw data counts are in column 2, thermistor counts are in column 5 % Read the calibration constants from cal file disp(['Calibrations for ECOFL device ', p.dev, ', serial number ', p.serial]) SCALE_FACTOR=str2num(getProperty(prop,'calibration.SCALE_FACTOR')); CWO=str2num(getProperty(prop,'calibration.CWO')); %SCALE_FACTOR = 0.0079; % from calibration sheet [rows,cols] = size(input_array) % returns the size of matrix X in separate variables. fprintf(1,'ecofl calibrate: rows=%d cols=%d\n', rows, cols); output_array = input_array; % chlorophyll calculation for row = 1:rows % alrighty let's calculate the temperature correction temp_correction = input_array(row,2)/(0.2805 * (input_array(row,5)/547.645)/0.7204); % and now the chlorophyll calc output_array(row, cols+1) = (input_array(row,2) - CWO) * SCALE_FACTOR; %ecofl_cal output_array(row, cols+2) = (temp_correction - CWO) * SCALE_FACTOR; %ecofl_cal_corr output_array(row, cols+3) = temp_correction; end % assign variables and calculate interim values siam_date=output_array(:,4); % SIAM style timestamp otime=output_array(:,6); % OASIS style timestamp ecoflcal=output_array(:,9); %calibrated fluorescence ecoflraw=output_array(:,2); % averaged raw fluorescence counts ecoflcaltemp=output_array(:,10); %temperature corrected calibrated fluorescence ecofltemp=output_array(:,11); % temperature corrected value ecofltempraw=output_array(:,5); % averaged raw thermistor counts ecoflrefraw=output_array(:,7); % averaged raw reference light counts sdn=output_array(:,1); % serial date number timestamp jday=date2jul(sdn); year=datestr(sdn,10); date_time=datestr(sdn,0); hours=datestr(sdn,15); hour=(str2num(hours(:,1))*10)+str2num(hours(:,2)); min=(str2num(hours(:,4))*10)+str2num(hours(:,5)); jtime=jday+((hour/24) + ((min/60)/24)); pacific_date = sdn-(7/24); output_array(:,cols+4) = pacific_date; % Write results to output file if strcmp(p.otype,'plot') outfile=[p.ddir,'/ecofl_calibrated.csv']; t='w'; else outfile=[p.ddir,'/ecofl.csv']; t='at+'; end %if strcmp(p.otype,'plot') fid=fopen(outfile,t); if t=='w' fprintf(fid,'%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s\n','%date_time','sdn','siam_date','year','jday','otime','ecoflcal','ecoflcaltemp','ecoflraw','ecotempcorr','ecotempraw','ecorefraw','Pacific_time' ); end [row col]=size(output_array); for J=1: row fprintf(fid,'%s,%f,%f,%s,%i,%f,%f,%f,%f,%f,%f,%f,%f\n',date_time(J,:),sdn(J,:),siam_date(J,:),num2str(year(J,:)),jday(J,:),otime(J,:),ecoflcal(J,:),ecoflcaltemp(J,:),ecoflraw(J,:),ecofltemp(J,:),ecofltempraw(J,:) ,ecoflrefraw(J,:),pacific_date(J,:)); end fclose(fid); % Write to log file fid=fopen([p.ldir,'/',p.log],'at+'); fprintf(fid,'%s\n',[' 4. ECOFL_CALIBRATE: scale_factor=',num2str(SCALE_FACTOR), ' CWO=',num2str(CWO)]); fprintf(fid,'%s\n',[' Rows processed: ',num2str(rows), ' columns processed: ', num2str(cols) ]); fprintf(fid,'%s\n',[' Calibrated data file: ',outfile]); fclose(fid); return;