100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Matlab
		
	
	
	
	
	
| % 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 |