function [k,name] = aandread(SerNo,TempRange)
% function [k,name] = aandread(SerNo,TempRange)
%
% Funktion zum Einlesen der Eichkoefizienten von Aanderaa-Str�mungsmessern.
% Bei Aufruf von "aandread" ist die Angabe von Serien-Nr. und Temperaturbereich
% notwendig.	
% 
% Bsp.: [k,name]=aandread(13220,'a')
% INPUT:
% SerNo:
%    can be given as number or as string
%    a String starting with the capital letter D
%    is normally used to denote a DCM 
% TempRange:
%    Possible inputs are:
%       'l' = Temp.Low
%	'w' = Temp.Wide
%	'h' = Temp.High
%	'a' = Temp.Arctic
%       'DCM' = means seach for DCM data
%    Bei Auswahl von Arctic wird f�r weitere, nicht auf "arctic" eingestellte
%    Temperaturf�hler automatisch "low" gew�hlt.
  

%   Markus Kreus, Date: 2002/03/09, J.Holfort 2003,2004,2005


Chan(1).Var='';
%#### Fehler bei der Eingabe der Serien-Nummer korrigieren ####
errormsg  = 'Fehler! Aufruf der Funktion nicht korrekt.';
SerNomsg  = 'Bitte Sersor-Nummer eingeben: ';
TempRmsg  = 'Bitte Temperaturbereich angeben: l/w/h/a ? ';
if nargin<1
   SerNo=input([errormsg,'\n',SerNomsg]);
   while sum([exist('SerNo') ~ischar(SerNo)])~=2
      SerNo=input([errormsg,'\n',SerNomsg]);
   end
end
if nargin<2
    TempRange=input([errormsg,'\n',TempRmsg]);
end
if ~ischar(TempRange); error('TempRange must be a 1 character string'); ...
      end
if isempty(strmatch(TempRange,{'DCM' 'l' 'w' 'h' 'a'}))  
   error('TempRange must be a character string [DCM,l,w,h,a]'); 
end

if ~ischar(SerNo); SerNo=num2str(SerNo); end
if strcmp(TempRange,'DCM')
  if ~strncmp(SerNo,'D',1); SerNo=['D' SerNo]; end
end
  
%#### Identifikation von Datei und Verzeichnis ####
global aanderaacalibrationfile;
if isempty(aanderaacalibrationfile)
   y=which('aandread');
   y=[fileparts(y) filesep 'aandcalibrationsheet.txt'];
   if exist(y)==2; aanderaacalibrationfile=y; end
end
if isempty(aanderaacalibrationfile)
   [filename, Verzeichnis] = uigetfile( '*',['Verzeichniss der Aanderaa-Datei']);
   aanderaacalibrationfile=[Verzeichnis, filename];
end

label={'SerialNo';'ChNo';'Parameter';'SensorNo';'A';'a';'B';'b';'C';'D'};

%#### Datei �ffnen und Kalibrierungsdaten des angegebenen Sensors einlesen ####
fid = fopen(aanderaacalibrationfile,'r');
arctic=0;
while fid~=-1
    line = fgetl(fid);
    if line==-1, break, end 
    ii=find(line==' '); 
    %length(line)<length(SerNo); continue; end
    [L_SerNo,line]=strtok(line);
    if strcmp(L_SerNo,SerNo)
        [L_chan,line]=strtok(line);
        ii=str2num(L_chan);
        [Parameter,line]=strtok(line);
        if ii==1 & strcmp(Chan(ii).Var,'Reference');
            error(sprintf('\n  Zu der Serien-Nummer %s existieren mehrere Datenbl�tter.\n%s',SerNo,...
                '  Bitte Kalibrierungskoeffizienten dem Datenblatt entnehmen!'));
        end 
        if strncmp(Parameter,'Temp',4)
	    if length(Chan)<ii;
	        % weiter, erster wert wird immer genommen
		% gegebenenfals aber ueberschrieben
            elseif strcmp(Parameter,'Temp.Wide');
                if ~strcmp(TempRange,'w'); continue; end
            elseif strcmp(Parameter,'Temp.High')
                if ~strcmp(TempRange,'h'); continue; end
            elseif strcmp(Parameter,'Temp.Arctic')
                if ~strcmp(TempRange,'a'); continue; end
                arctic=1;
            elseif strcmp(Parameter,'Temp.Low')
                if strcmp(TempRange,'a') & arctic==1; 
		  continue; 
                elseif ~strcmp(TempRange,'l');
                    continue                   
                end
            end
        end    
        Chan(ii).Var=Parameter;
        [Chan(ii).Serial,line]=strtok(line);
        [A,line]=strtok(line); A=str2num(A);
        [a,line]=strtok(line); if strcmp(a,'-'); a=0; else a=str2num(a); end
        [B,line]=strtok(line); B=str2num(B);
        [b,line]=strtok(line); if strcmp(b,'-'); b=0; else b=str2num(b); end
        [C,line]=strtok(line);
        if isempty(C);    % nur A,B,C,D angegeben
            D=b; C=B; B=a;
        else
            C=str2num(C);
            [D,line]=strtok(line); D=str2num(D);
            A=A+a;
            B=B+b;
        end
        Chan(ii).Coeff=[A B C D];
    end 
end
fclose(fid);	% #### Datei schliessen ####

%keyboard;
%if sum([isempty('A') isempty('B') isempty('C') isempty('D')])==4
k=zeros(6,4); k(:,2)=1;
name={'Chn-1';'Chn-2';'Chn-3';'Chn-4';'Chn-5';'Chn-6'};
if length(Chan)<2 & strncmpi(SerNo,'D',1)
   warning('using standard DCM calibration (new)!');
   Chan(1).Var='Reference'; Chan(1).Coeff=[0 1 0 0];
   Chan(2).Var='WaterLevel'; Chan(2).Coeff=[0 0.6E-1 0 0]; %.4.11.05 chanel 2 anstatt 1
   Chan(3).Var='WaveHeight'; Chan(3).Coeff=[0 1.0E-2 0 0]; %.4.11.05 chanel 3 anstatt 1
   for ii=1:5
     Chan(4+ii*2).Var=sprintf('VELO_%1.1i',ii);  Chan(4+ii*2).Coeff=[0 1 0 0];
     Chan(5+ii*2).Var=sprintf('DIRE_%1.1i',ii);  Chan(5+ii*2).Coeff=[0 1 0 0];
   end
elseif length(Chan)<2
   warning('Es wurden keine Kalibrierungsdaten f�r den angegebenen Sensor gefunden!');
   return
end

for ii=1:length(Chan)
   if isfield(Chan(ii),'Coeff')
     if isempty(Chan(ii).Coeff)
       %fprintf('Channel not set? %i\n',ii)
     else
       k(ii,:)=Chan(ii).Coeff(:)';
     end
   end
   if isfield(Chan(ii),'Var')
     if isempty(Chan(ii).Var)
       name{ii}='NODATA'; 
     else  
       name{ii}=Chan(ii).Var;
     end
   end
end

return;
