function Instmeta = readAQDprfHeader(basefile) %function to get instrument metadata about AWAC deployment from header file % TODO read and save all of the instrument settings in the .hdr file % replacing strncmp with strfind, strncmp need the exact length of string, % many of those were wrong and lots of metadata was going missing. hdrFile = strcat(basefile,'.hdr'); hdr = fopen(hdrFile); str='User setup'; % getting the user setup while isempty(strfind(str,'Hardware configuration')); str=fgetl(hdr); if (strfind(str,'Profile interval')) is=findstr(str,'sec'); Instmeta.AQDProfileInterval = str2num(str(39:is-2)); elseif (strfind(str,'Number of cells')) Instmeta.AQDNumberOfCells = str2num(str(39:end)); elseif (strncmp(str,'Cell size',9)) % strncmp required here to differentiate from the wave cell size is=findstr(str,'cm'); Instmeta.AQDCellSize = str2num(str(39:is-2)); elseif (strfind(str,'Average interval')) is=findstr(str,'sec'); Instmeta.AQDAverageInterval = str2num(str(39:is-2)); elseif (strfind(str,'Measurement load')) is=findstr(str,'%'); Instmeta.AQDMeasurementLoad = str2num(str(39:is-2)); elseif (strfind(str,'Transmit pulse length')) is=findstr(str,'m'); Instmeta.AQDTransmitPulseLength = str(39:end); elseif (strfind(str,'Blanking distance')) is=findstr(str,'m'); Instmeta.AQDBlankingDistance = str2num(str(39:is-2)); elseif (strfind(str,'Compass update rate')) is=findstr(str,'sec'); Instmeta.AQDCompassUpdateRate = str2num(str(39:is-2)); elseif (strfind(str,'Wave measurements')) Instmeta.WaveMeasurements = (str(39:end)); if strcmp(Instmeta.WaveMeasurements,'ENABLED') elseif (strfind(str,'Wave - Powerlevel')) Instmeta.WavePower = (str(39:is-2)); elseif (strfind(str,'Wave - Interval')) is=findstr(str,'sec'); Instmeta.WaveInterval = str2num(str(39:is-2)); elseif (strfind(str,'Wave - Number of samples')) Instmeta.WaveNumberOfSamples = str2num(str(39:42)); elseif (strfind(str,'Wave - Sampling rate')) Instmeta.WaveSampleRate = str(39:42); elseif (strfind(str,'Wave - Cell size')) Instmeta.WaveCellSize = str(39:42); end elseif (strfind(str,'Analog input 1')) Instmeta.AQDAnalogInput1 = str(39:end); elseif (strfind(str,'Analog input 2')) Instmeta.AQDAnalogInput2 = str(39:end); elseif (strfind(str,'Power output')) Instmeta.AQDAnalogPowerOutput = str(39:end); elseif (strfind(str,'Powerlevel')) Instmeta.AQDAnalogPowerLevel = str(39:end); elseif (strfind(str,'Coordinate system')) Instmeta.AQDCoordinateSystem = str(39:end); elseif (strfind(str,'Sound speed')) Instmeta.AQDSoundSpeed = str(39:end); elseif (strfind(str,'Salinity')) Instmeta.AQDSalinity = str(39:end); elseif (strfind(str,'Number of beams')) Instmeta.AQDNumberOfBeams = str2num(str(39:end)); elseif (strfind(str,'Number of pings per burst')) Instmeta.AQDNumberOfPingsPerBurst = str2num(str(39:end)); elseif (strfind(str,'Software version')) Instmeta.AQDSoftwareVersion = str2num(str(39:end)); elseif (strfind(str,'Deployment name')) Instmeta.AQDDeploymentName = str(39:end); elseif (strfind(str,'Deployment time')) Instmeta.AQDDeploymentTime = str(39:end); elseif (strfind(str,'Comments')) Instmeta.AQDComments = str(39:end); end end % getting the hardware configuration while isempty(strfind(str,'Head configuration')); str=fgetl(hdr); if (strfind(str,'Compass')) Instmeta.AQDCompass = str(39:end); elseif (strfind(str,'Tilt sensor')) Instmeta.AQDTilt = str(39:end); elseif (strfind(str,'Pressure sensor calibration')) Instmeta.AQDPressureCal = str2num(str(39:end)); elseif (strfind(str,'Number of beams')) Instmeta.AQDNumBeams = str2num(str(39:end)); elseif (strfind(str,'Serial number')) %Instmeta.SERIAL_NUMBER = str(39:end); Instmeta.AQDSerial_Number = str(39:end); elseif (strfind(str,'Internal code version')) Instmeta.AQDInternalCodeVersion = str(39:end); elseif (strfind(str,'Revision number')) Instmeta.AQDRevisionNumber = str(39:end); elseif (strfind(str,'Recorder size')) Instmeta.AQDRecorderSize = str(39:end); elseif (strfind(str,'Firmware version')) Instmeta.AQDFirmwareVersion = str(39:end); elseif (strfind(str,'Power output')) Instmeta.AQDAnalogPowerOutput = str(39:end); elseif (strfind(str,'Analog input #1 calibration (a0, a1)')) Instmeta.AQDAnalogInputCal1 = str2num(str(39:end)); elseif (strfind(str,'Analog input #2 calibration (a0, a1)')) Instmeta.AQDAnalogInputCal2 = str2num(str(39:end)); elseif (strfind(str,'Sync signal data out delay')) Instmeta.AQDSyncOutDelay = str(39:end); elseif (strfind(str,'Sync signal power down delay')) Instmeta.AQDSyncPowerDelay = str(39:end); end end % getting the head configuration while isempty(strfind(str,'Data file format')); str=fgetl(hdr); if (strfind(str,'Head frequency')) is=findstr(str,'kHz'); Instmeta.AQDFrequency = str2num(str(39:is-2)); elseif (strfind(str,'Serial number')) Instmeta.AQDHeadSerialNumber = str(39:end); elseif (strfind(str,'Transformation matrix')) Instmeta.AQDTransMatrix = zeros(3,3); Instmeta.AQDTransMatrix(1,:) = strread(str(39:end)); str=fgetl(hdr); Instmeta.AQDTransMatrix(2,:) = strread(str(39:end)); str=fgetl(hdr); Instmeta.AQDTransMatrix(3,:) = strread(str(39:end)); elseif (strfind(str,'Pressure sensor calibration')) Instmeta.AQDPressureCal = str2num(str(39:end)); end end % infer some things based on the Aquadopp brochure switch Instmeta.AQDFrequency case 400 Instmeta.AQDBeamWidth = 3.7; case 600 Instmeta.AQDBeamWidth = 3.0; case 1000 Instmeta.AQDBeamWidth = 3.4; case 2000 Instmeta.AQDBeamWidth = 1.7; otherwise Instmeta.AQDBeamWidth = NaN; end Instmeta.AQDBeamPattern = 'convex'; Instmeta.AQDBeamAngle = 25; Instmeta.AQDVelRange = 1000; % cm/s Instmeta.AQDTempRange = [-4 40]; Instmeta.AQDPressRange = [0 100]; % no tilt range given in AQD docs fclose(hdr); % %if waves data were not collected remove wave parameters from metadata % if strfind(Instmeta.AQDWaveStatus,'DISABLED',7) % fields = {'AQDWavePower','AQDWaveInterval','AQDWaveSampleRate','AQDWaveNumberOfSamples'}; % Instmeta = rmfield(Instmeta,fields); % else % end