% function [Catalog] = merge2Catalog(catalog1,catalog2) % Add values from 1st Catalog to 2nd % % v1.1 - 2021119 - sort according by time was added % (c) Dorota Olszewska IG PAS function [Catalog] = merge2Catalog(Catalog,catalog2,ID) if sum(strcmp(ID,{Catalog.field}))+sum(strcmp(ID,{catalog2.field})) == 0 error([ID,' is not field of both catalogs ', ID]) end ID1=Catalog(strcmp(ID,{Catalog.field})).val; ID2=catalog2(strcmp(ID,{catalog2.field})).val; if length(unique(ID1))~=length(ID1) || length(unique(ID2))~=length(ID2) error([ID,' has not unique variable at both catalogs ']) end no_cols = size(Catalog,2); for j = 1:numel(ID2) llrange = ID2{j} ; l_range(j) = sum(strcmp(llrange,ID1)) ; end catalog2_row=CatalogSelectRange(catalog2,ID,catalog2(strcmp(ID,{catalog2.field})).val(l_range==0)); % add rows by RID no_rows_row = size(catalog2_row(1).val,1); if no_rows_row == 0 else for i=1:no_cols if Catalog(i).type == 3 if sum(strcmp(Catalog(i).field,{catalog2_row.field})) == 0 Catalog(i).val=[Catalog(1).val;repmat({'NaN'},no_rows_row,1)]; else Catalog(i).val=[Catalog(i).val;catalog2_row(strcmp(Catalog(i).field,{catalog2_row.field})).val]; end else if sum(strcmp(Catalog(i).field,{catalog2_row.field})) == 0 Catalog(i).val=[Catalog(i).val;NaN(no_rows_row,1)]; else Catalog(i).val=[Catalog(i).val;catalog2_row(strcmp(Catalog(i).field,{catalog2_row.field})).val]; end end end end ID1=Catalog(strcmp(ID,{Catalog.field})).val; ID2=catalog2(strcmp(ID,{catalog2.field})).val; no_cols = size(Catalog,2); no_rows = size(Catalog(1).val,1); for j = 1:numel(ID2) llrange = ID2{j} ; l_range(j) = sum(strcmp(llrange,ID1)) ; end catalog2_col=CatalogSelectRange(catalog2,ID,catalog2(strcmp(ID,{catalog2.field})).val(l_range==1)); % add columns by RID no_rows_col = size(catalog2_col(1).val,1); if no_rows_col == 0 else column1={Catalog.field}; column2={catalog2_col.field}; for j = 1:numel(column2) llrange2 = column2{j} ; l_range2(j) = sum(strcmp(llrange2,column1)) ; end new_column=column2(l_range2==0); for k=1:numel(new_column) Catalog(no_cols+k).field = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).field; Catalog(no_cols+k).type = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).type; Catalog(no_cols+k).unit = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).unit; Catalog(no_cols+k).description = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).description; Catalog(no_cols+k).fieldType = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).fieldType; for kk=1:no_rows rr=strcmp(Catalog(strcmp(ID,{Catalog.field})).val(kk),catalog2_col(strcmp(ID,{catalog2_col.field})).val); if sum(rr) ==0 Catalog(no_cols+k).val(kk,1)=NaN; else Catalog(no_cols+k).val(kk,1) = catalog2_col(strcmp(new_column{k},{catalog2_col.field})).val(rr); end end end Catalog = sortByTime(Catalog); end