%------------------------------------------------------------------------ % NAME: qp_x2X % % To be written ... % % The present fields of X are just a first start. Some fields % can be changed and fields will be added. The X-fields will % be adjusted in such way that they can be used to create level % 2 data for Odin-SMR. %------------------------------------------------------------------------ % HISTORY: 2001.10.12 Created by Patrick Eriksson function X = qp_x2X(x,Q,tmpdir,basename,kx_names,kx_index,kx_aux,p_abs,vmrs) nrq = size( kx_names, 1 ); X = cell( nrq, 1 ); ispecies = 0; %= Make sure that HSE is done if it should be done %= (In many cases so has HSE been applied to z_abs, but instead of trying to %= be smart, we do it every time here) % if Q.HSE_IN_ON template = which( 'hse.tmplt' ); [cfile,basename] = qtool( Q, tmpdir, template ); qp_arts( Q, cfile ); end z_abs = read_artsvar( basename ,'z_abs' ); for i = 1:nrq [group,name] = qp_kinfo( kx_names{i} ); X{i}.name = name; ind = kx_index(i,1):kx_index(i,2); %=== Species % if strcmp( group, 'Species' ) % ispecies = ispecies + 1; X{i}.p = kx_aux(ind,1); X{i}.z = interpp( p_abs, z_abs, X{i}.p ); X{i}.apriori = interpp( p_abs, vmrs(ispecies,:)', X{i}.p ); X{i}.x = x(ind) .* X{i}.apriori; X{i}.xfrac = x(ind); %=== Sensor scalars such as pointing off-set % elseif strcmp( group, 'Sensor scalar' ) % X{i}.apriori = 0; X{i}.x = x(ind); % % For frequency is MHz used as internal unit. if strcmp( name, 'Frequency: off-set' ) X{i}.x = X{i}.x * 1e6; end %=== Temperature % elseif strcmp( group, 'Temperature' ) | strcmp( group, 'Continuum' ) % X{i}.p = kx_aux(ind,1); X{i}.z = interpp( p_abs, z_abs, X{i}.p ); X{i}.apriori = kx_aux(ind,2); X{i}.x = x(ind); %=== Continuum fit % elseif strcmp( group, 'Continuum' ) % X{i}.p = kx_aux(ind,1); X{i}.z = interpp( p_abs, z_abs, X{i}.p ); X{i}.apriori = kx_aux(ind,2); X{i}.x = 0.001 * x(ind); %=== Ground emission % elseif strcmp( group, 'Ground emission' ) % X{i}.f = kx_aux(ind,1); X{i}.apriori = kx_aux(ind,2); X{i}.x = x(ind); %=== Polynomial baseline fits % elseif strcmp( group, 'Baseline' ) % X{i}.p = kx_aux(ind,1); X{i}.z = kx_aux(ind,1); X{i}.apriori = kx_aux(ind,2); X{i}.x = x(ind); %=== Reference load temperatures % elseif strcmp( name, 'Reference load temperatures' ) % X{i}.apriori = kx_aux(ind,2); X{i}.x = x(ind); %=== Proportional calibration error % elseif strcmp( name, 'Proportional calibration error' ) % X{i}.apriori = kx_aux(ind,2); X{i}.x = x(ind); else error(sprintf( 'Unknown retrieval identity: %s', X{i}.name )); end end