From 06040bfba1134b42a8011560dbef428daf8c7b7f Mon Sep 17 00:00:00 2001 From: Ralf Meyer Date: Sat, 16 Dec 2023 14:50:12 -0500 Subject: [PATCH] Add test cases for MOF_descriptors --- .../Informatics/MOF/MOF_descriptors.py | 392 ++++++++-------- tests/informatics/test_MOF_descriptors.py | 57 +++ .../inputs/cif_files/odac-21383.cif | 261 +++++++++++ .../inputs/cif_files/odac-21433.cif | 169 +++++++ .../inputs/cif_files/odac-21478.cif | 209 +++++++++ .../inputs/cif_files/odac-21735.cif | 139 ++++++ .../inputs/cif_files/odac-21816.cif | 417 ++++++++++++++++++ .../refs/MOF_descriptors/odac-21383.json | 1 + .../refs/MOF_descriptors/odac-21433.json | 1 + .../refs/MOF_descriptors/odac-21478.json | 1 + .../refs/MOF_descriptors/odac-21735.json | 1 + .../refs/MOF_descriptors/odac-21816.json | 1 + 12 files changed, 1473 insertions(+), 176 deletions(-) create mode 100644 tests/informatics/test_MOF_descriptors.py create mode 100644 tests/testresources/inputs/cif_files/odac-21383.cif create mode 100644 tests/testresources/inputs/cif_files/odac-21433.cif create mode 100644 tests/testresources/inputs/cif_files/odac-21478.cif create mode 100644 tests/testresources/inputs/cif_files/odac-21735.cif create mode 100644 tests/testresources/inputs/cif_files/odac-21816.cif create mode 100644 tests/testresources/refs/MOF_descriptors/odac-21383.json create mode 100644 tests/testresources/refs/MOF_descriptors/odac-21433.json create mode 100644 tests/testresources/refs/MOF_descriptors/odac-21478.json create mode 100644 tests/testresources/refs/MOF_descriptors/odac-21735.json create mode 100644 tests/testresources/refs/MOF_descriptors/odac-21816.json diff --git a/molSimplify/Informatics/MOF/MOF_descriptors.py b/molSimplify/Informatics/MOF/MOF_descriptors.py index e0967e19..6224276b 100644 --- a/molSimplify/Informatics/MOF/MOF_descriptors.py +++ b/molSimplify/Informatics/MOF/MOF_descriptors.py @@ -56,6 +56,7 @@ # This function is commented out and should be uncommented if used. from pymatgen.io.cif import CifParser + def get_primitive(datapath, writepath, occupancy_tolerance=1): """ Calculates and writes the primitive cell of the provided structure. @@ -77,10 +78,12 @@ def get_primitive(datapath, writepath, occupancy_tolerance=1): s = CifParser(datapath, occupancy_tolerance=occupancy_tolerance).get_structures()[0] sprim = s.get_primitive_structure() - sprim.to("cif", writepath) # Output structure to a file. + sprim.to("cif", writepath) # Output structure to a file. + '''<<<< END OF CODE TO COMPUTE PRIMITIVE UNIT CELLS >>>>''' + def load_sbu_lc_descriptors(sbupath): """ Loads the sbu and lc descriptors. @@ -99,17 +102,18 @@ def load_sbu_lc_descriptors(sbupath): """ sbu_descriptor_path = os.path.dirname(sbupath) - if os.path.getsize(sbu_descriptor_path+'/sbu_descriptors.csv')>0: # Checking if there is a file there. + if os.path.getsize(sbu_descriptor_path+'/sbu_descriptors.csv') > 0: # Checking if there is a file there. sbu_descriptors = pd.read_csv(sbu_descriptor_path+'/sbu_descriptors.csv') else: sbu_descriptors = pd.DataFrame() - if os.path.getsize(sbu_descriptor_path+'/lc_descriptors.csv')>0: # Checking if there is a file there. + if os.path.getsize(sbu_descriptor_path+'/lc_descriptors.csv') > 0: # Checking if there is a file there. lc_descriptors = pd.read_csv(sbu_descriptor_path+'/lc_descriptors.csv') else: lc_descriptors = pd.DataFrame() return sbu_descriptor_path, sbu_descriptors, lc_descriptors + def gen_and_append_desc(temp_mol, target_list, depth, descriptor_names, descriptors, Gval, feature_type): """ Generate and append descriptors, both standard and delta. @@ -141,11 +145,23 @@ def gen_and_append_desc(temp_mol, target_list, depth, descriptor_names, descript The updated RAC descriptor values. """ - results_dictionary = generate_atomonly_autocorrelations(temp_mol, target_list, depth=depth, loud=False, oct=False, polarizability=True, Gval=Gval) - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors, results_dictionary['colnames'], results_dictionary['results'], feature_type, 'all') + results_dictionary = generate_atomonly_autocorrelations( + temp_mol, target_list, depth=depth, loud=False, oct=False, + polarizability=True, Gval=Gval + ) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], + results_dictionary['results'], feature_type, 'all' + ) - results_dictionary = generate_atomonly_deltametrics(temp_mol, target_list, depth=depth, loud=False, oct=False, polarizability=True, Gval=Gval) - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors, results_dictionary['colnames'], results_dictionary['results'], f'D_{feature_type}', 'all') + results_dictionary = generate_atomonly_deltametrics( + temp_mol, target_list, depth=depth, loud=False, oct=False, + polarizability=True, Gval=Gval + ) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], + results_dictionary['results'], f'D_{feature_type}', 'all' + ) return results_dictionary, descriptor_names, descriptors @@ -155,8 +171,10 @@ def gen_and_append_desc(temp_mol, target_list, depth, descriptor_names, descript # the vector to be of constant dimension so we can correlate the output property. # ######################################################################################### -def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchoring_atoms, sbupath, linkeranchors_superlist, - Gval, connections_list=False, connections_subgraphlist=False): + +def make_MOF_SBU_RACs( + SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchoring_atoms, sbupath, + linkeranchors_superlist, Gval, connections_list=False, connections_subgraphlist=False): """ Generated RACs on the SBUs of the MOF, as well as on the lc atoms (SBU-connected atoms of linkers). @@ -227,14 +245,14 @@ def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchor For each linker connected to the SBU, find the lc atoms for the lc-RACs. lc atoms are those bonded to a metal. """"""""" - for j, linker in enumerate(connections_list): # Iterating over the different linkers + for j, linker in enumerate(connections_list): # Iterating over the different linkers descriptor_names = [] descriptors = [] - if len(set(SBU).intersection(linker))>0: - #### This means that the SBU and the current linker are connected. + if len(set(SBU).intersection(linker)) > 0: + # This means that the SBU and the current linker are connected. temp_mol = mol3D() - link_list = [] # Will hold the lc atoms for the current linker. - for jj, val2 in enumerate(linker): # linker is a list of global atom indices for the atoms in that linker + link_list = [] # Will hold the lc atoms for the current linker. + for jj, val2 in enumerate(linker): # linker is a list of global atom indices for the atoms in that linker if val2 in anchoring_atoms: link_list.append(jj) # This builds a mol object for the linker --> even though it is in the SBU section. @@ -244,32 +262,40 @@ def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchor """"""""" Generate all of the lc autocorrelations (from the connecting atoms) """"""""" - results_dictionary, descriptor_names, descriptors = gen_and_append_desc(temp_mol, link_list, depth, descriptor_names, descriptors, Gval, 'lc') + results_dictionary, descriptor_names, descriptors = gen_and_append_desc( + temp_mol, link_list, depth, descriptor_names, descriptors, Gval, 'lc') """"""""" If heteroatom functional groups exist (anything that is not C or H, so methyl is missed, also excludes anything lc, so carboxylic metal-coordinating oxygens skipped), compile the list of atoms """"""""" functional_atoms = [] for jj in range(len(temp_mol.graph)): - if not jj in link_list: # linker atom is not bonded to a metal - if not set({temp_mol.atoms[jj].sym}) & set({"C","H"}): # not a carbon nor a hydrogen. syms get symbols. + if jj not in link_list: # linker atom is not bonded to a metal + if not set({temp_mol.atoms[jj].sym}) & set({"C", "H"}): # not a carbon nor a hydrogen. syms get symbols. functional_atoms.append(jj) """"""""" Generate all of the functional group autocorrelations """"""""" if len(functional_atoms) > 0: - results_dictionary, descriptor_names, descriptors = gen_and_append_desc(temp_mol, functional_atoms, depth, descriptor_names, descriptors, Gval, 'func') - else: # There are no functional atoms. + results_dictionary, descriptor_names, descriptors = gen_and_append_desc( + temp_mol, functional_atoms, depth, descriptor_names, descriptors, Gval, 'func') + else: # There are no functional atoms. if Gval: num_atomic_properties = 7 else: num_atomic_properties = 6 - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors,results_dictionary['colnames'],list([np.zeros(int(num_atomic_properties*(depth + 1)))]),'func','all') - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors,results_dictionary['colnames'],list([np.zeros(int(num_atomic_properties*(depth + 1)))]),'D_func','all') + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], + list([np.zeros(int(num_atomic_properties*(depth + 1)))]), 'func', 'all' + ) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], + list([np.zeros(int(num_atomic_properties*(depth + 1)))]), 'D_func', 'all' + ) for val in descriptors: - if not (type(val) == float or isinstance(val, np.float64)): + if not (type(val) is float or isinstance(val, np.float64)): print('Mixed typing. Please convert to python float, and avoid np float') raise AssertionError('Mixed typing creates issues. Please convert your typing.') @@ -284,27 +310,27 @@ def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchor if j == 0: lc_names = descriptor_names - averaged_lc_descriptors = np.mean(np.array(lc_descriptor_list), axis=0) # Average the lc RACs over all of the linkers in the MOF. + averaged_lc_descriptors = np.mean(np.array(lc_descriptor_list), axis=0) # Average the lc RACs over all of the linkers in the MOF. # This CSV will be overwritten until the last SBU, but information on all linkers is being kept thanks to the append function - lc_descriptors.to_csv(sbu_descriptor_path+'/lc_descriptors.csv',index=False) + lc_descriptors.to_csv(sbu_descriptor_path+'/lc_descriptors.csv', index=False) descriptors = [] descriptor_names = [] - SBU_mol_cart_coords=np.array([atom.coords() for atom in SBU_mol.atoms]) - SBU_mol_atom_labels=[atom.sym for atom in SBU_mol.atoms] + SBU_mol_cart_coords = np.array([atom.coords() for atom in SBU_mol.atoms]) + SBU_mol_atom_labels = [atom.sym for atom in SBU_mol.atoms] SBU_mol_adj_mat = np.array(SBU_mol.graph) - ###### WRITE THE SBU MOL TO THE PLACE + # WRITE THE SBU MOL TO THE PLACE xyz_path = f'{sbupath}/{name}_sbu_{i}.xyz' if not os.path.exists(xyz_path): SBU_mol_fcoords_connected = XYZ_connected(cell_v, SBU_mol_cart_coords, SBU_mol_adj_mat) - writeXYZandGraph(xyz_path, SBU_mol_atom_labels, cell_v, SBU_mol_fcoords_connected,SBU_mol_adj_mat) + writeXYZandGraph(xyz_path, SBU_mol_atom_labels, cell_v, SBU_mol_fcoords_connected, SBU_mol_adj_mat) # Write TXT file indicating the connecting atoms sbu_index_connection_indices = [] for item in global_connection_indices: if item in SBU: sbu_index_connection_indices.append(SBU.index(item)) - sbu_index_connection_indices = list(np.sort(sbu_index_connection_indices)) # Sort in ascending order + sbu_index_connection_indices = list(np.sort(sbu_index_connection_indices)) # Sort in ascending order sbu_index_connection_indices = [str(item) for item in sbu_index_connection_indices] with open(f'{sbupath}/{name}_connection_indices_sbu_{i}.txt', 'w') as f: f.write(' '.join(sbu_index_connection_indices)) @@ -312,13 +338,17 @@ def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchor """"""""" Generate all of the SBU based RACs (full scope, mc) """"""""" - results_dictionary = generate_full_complex_autocorrelations(SBU_mol,depth=depth,loud=False,flag_name=False,Gval=Gval) - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors,results_dictionary['colnames'],results_dictionary['results'],'f','all') + results_dictionary = generate_full_complex_autocorrelations( + SBU_mol, depth=depth, loud=False, flag_name=False, Gval=Gval) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], results_dictionary['results'], 'f', 'all') #### Now starts at every metal on the graph and autocorrelates - results_dictionary = generate_multimetal_autocorrelations(molcif,depth=depth,loud=False,Gval=Gval) - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors, results_dictionary['colnames'],results_dictionary['results'],'mc','all') - results_dictionary = generate_multimetal_deltametrics(molcif,depth=depth,loud=False,Gval=Gval) - descriptor_names, descriptors = append_descriptors(descriptor_names, descriptors,results_dictionary['colnames'],results_dictionary['results'],'D_mc','all') + results_dictionary = generate_multimetal_autocorrelations(molcif, depth=depth, loud=False, Gval=Gval) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], results_dictionary['results'], 'mc', 'all') + results_dictionary = generate_multimetal_deltametrics(molcif, depth=depth, loud=False, Gval=Gval) + descriptor_names, descriptors = append_descriptors( + descriptor_names, descriptors, results_dictionary['colnames'], results_dictionary['results'], 'D_mc', 'all') # Some formatting descriptor_names += ['name'] @@ -332,11 +362,14 @@ def make_MOF_SBU_RACs(SBUlist, SBU_subgraph, molcif, depth, name, cell_v, anchor if i == 0: names = descriptor_names - sbu_descriptors.to_csv(sbu_descriptor_path+'/sbu_descriptors.csv',index=False) - averaged_SBU_descriptors = np.mean(np.array(descriptor_list), axis=0) # Average the SBU RACs over all of the SBUs in the MOF. + sbu_descriptors.to_csv(sbu_descriptor_path+'/sbu_descriptors.csv', index=False) + averaged_SBU_descriptors = np.mean(np.array(descriptor_list), axis=0) # Average the SBU RACs over all of the SBUs in the MOF. return names, averaged_SBU_descriptors, lc_names, averaged_lc_descriptors -def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, cell_v, linkerpath, linkeranchors_superlist, Gval): + +def make_MOF_linker_RACs( + linkerlist, linker_subgraphlist, molcif, depth, name, cell_v, + linkerpath, linkeranchors_superlist, Gval): """ Generate RACs on the linkers of the MOF. @@ -375,7 +408,7 @@ def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, c descriptors = [] if linkerpath: linker_descriptor_path = os.path.dirname(linkerpath) - if os.path.getsize(linker_descriptor_path+'/linker_descriptors.csv')>0: # Checking if there is a file there. + if os.path.getsize(linker_descriptor_path+'/linker_descriptors.csv') > 0: # Checking if there is a file there. linker_descriptors = pd.read_csv(linker_descriptor_path+'/linker_descriptors.csv') else: linker_descriptors = pd.DataFrame() @@ -384,15 +417,15 @@ def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, c for item in linkeranchors_superlist: global_connection_indices.extend(list(item)) - for i, linker in enumerate(linkerlist): # Iterating through the linkers. + for i, linker in enumerate(linkerlist): # Iterating through the linkers. # Preparing a mol3D object for the current linker. linker_mol = mol3D() for val in linker: linker_mol.addAtom(molcif.getAtom(val)) linker_mol.graph = linker_subgraphlist[i].todense() - linker_mol_cart_coords=np.array([atom.coords() for atom in linker_mol.atoms]) - linker_mol_atom_labels=[atom.sym for atom in linker_mol.atoms] + linker_mol_cart_coords = np.array([atom.coords() for atom in linker_mol.atoms]) + linker_mol_atom_labels = [atom.sym for atom in linker_mol.atoms] linker_mol_adj_mat = np.array(linker_mol.graph) ###### WRITE THE LINKER MOL TO THE PLACE @@ -406,7 +439,7 @@ def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, c for item in global_connection_indices: if item in linker: linker_index_connection_indices.append(linker.index(item)) - linker_index_connection_indices = list(np.sort(linker_index_connection_indices)) # Sort in ascending order + linker_index_connection_indices = list(np.sort(linker_index_connection_indices)) # Sort in ascending order linker_index_connection_indices = [str(item) for item in linker_index_connection_indices] with open(f'{linkerpath}/{name}_connection_indices_linker_{i}.txt', 'w') as f: f.write(' '.join(linker_index_connection_indices)) @@ -423,18 +456,18 @@ def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, c Generate all of the linker based RACs """"""""" for ii, properties in enumerate(allowed_strings): - if not list(descriptors): # This is the case when just starting and the list is empty. - ligand_ac_full = full_autocorrelation(linker_mol, properties, depth) # RACs + if not list(descriptors): # This is the case when just starting and the list is empty. + ligand_ac_full = full_autocorrelation(linker_mol, properties, depth) # RACs else: ligand_ac_full += full_autocorrelation(linker_mol, properties, depth) this_colnames = [] - for j in range(0,depth+1): + for j in range(0, depth+1): this_colnames.append('f-lig-'+labels_strings[ii] + '-' + str(j)) colnames.append(this_colnames) lig_full.append(ligand_ac_full) # Some formatting - lig_full = [item for sublist in lig_full for item in sublist] # flatten lists + lig_full = [item for sublist in lig_full for item in sublist] # flatten lists colnames = [item for sublist in colnames for item in sublist] colnames += ['name'] lig_full += [name] @@ -444,12 +477,13 @@ def make_MOF_linker_RACs(linkerlist, linker_subgraphlist, molcif, depth, name, c colnames.remove('name') descriptor_list.append(lig_full) - #### We dump the standard lc descriptors without averaging or summing so that the user - #### can make the modifications that they want. By default we take the average ones. + # We dump the standard lc descriptors without averaging or summing so that the user + # can make the modifications that they want. By default we take the average ones. linker_descriptors.to_csv(linker_descriptor_path+'/linker_descriptors.csv', index=False) averaged_ligand_descriptors = np.mean(np.array(descriptor_list), axis=0) return colnames, averaged_ligand_descriptors + def mkdir_if_absent(folder_paths): """ Makes a folder at each path in folder_path if it does not yet exist. @@ -469,6 +503,7 @@ def mkdir_if_absent(folder_paths): if not os.path.exists(folder_path): os.mkdir(folder_path) + def make_file_if_absent(path, filenames): """ Makes the specified files if they do not yet exist. @@ -488,9 +523,10 @@ def make_file_if_absent(path, filenames): for filename in filenames: if not os.path.exists(f'{path}/{filename}'): - with open(f'{path}/{filename}','w') as f: + with open(f'{path}/{filename}', 'w') as f: f.close() + def path_maker(path): """ Makes the required folders and files. @@ -513,6 +549,7 @@ def path_maker(path): required_files = ['sbu_descriptors.csv', 'linker_descriptors.csv', 'lc_descriptors.csv'] make_file_if_absent(path, required_files) + def failure_response(path, failure_str): """ Writes to the log file about the encountered failure. @@ -529,9 +566,10 @@ def failure_response(path, failure_str): """ full_names = [0] full_descriptors = [0] - write2file(path,"/FailedStructures.log",failure_str) + write2file(path, "/FailedStructures.log", failure_str) return full_names, full_descriptors + def bond_information_write(linker_list, linkeranchors_superlist, adj_matrix, molcif, cell_v, path): """ Attains and writes bond information about the bonds between SBUs and linkers. @@ -559,30 +597,30 @@ def bond_information_write(linker_list, linkeranchors_superlist, adj_matrix, mol bond_length_list = [] scaled_bond_length_list = [] - for linker_idx, linker_atoms_list in enumerate(linker_list): # Iterate over all linkers + for linker_idx, linker_atoms_list in enumerate(linker_list): # Iterate over all linkers # Getting the connection points of the linker for anchor_super_idx in range(len(linkeranchors_superlist)): - if list(linkeranchors_superlist[anchor_super_idx])[0] in linker_atoms_list: # Any anchor index in the current entry of linkeranchors_superlist is in the current linker's indices - linker_connection_points = list(linkeranchors_superlist[anchor_super_idx]) # Indices of the connection points in the linker + if list(linkeranchors_superlist[anchor_super_idx])[0] in linker_atoms_list: # Any anchor index in the current entry of linkeranchors_superlist is in the current linker's indices + linker_connection_points = list(linkeranchors_superlist[anchor_super_idx]) # Indices of the connection points in the linker for con_point in linker_connection_points: - connected_atoms = adj_matrix.todense()[con_point,:] + connected_atoms = adj_matrix.todense()[con_point, :] connected_atoms = np.ravel(connected_atoms) - connected_atoms = np.nonzero(connected_atoms)[0] # The indices of atoms connected to atom with index con_point. + connected_atoms = np.nonzero(connected_atoms)[0] # The indices of atoms connected to atom with index con_point. for con_atom in connected_atoms: - con_atom3D = molcif.getAtom(con_atom) # atom3D of an atom connected to the connection point - con_point3D = molcif.getAtom(con_point) # atom3D of the connection point on the linker + con_atom3D = molcif.getAtom(con_atom) # atom3D of an atom connected to the connection point + con_point3D = molcif.getAtom(con_point) # atom3D of the connection point on the linker # Check if the atom is a metal if con_atom3D.ismetal(transition_metals_only=False): # Finding the optimal unit cell shift molcif_cart_coords = np.array([atom.coords() for atom in molcif.atoms]) - fcoords=frac_coord(molcif_cart_coords,cell_v) # fractional coordinates - fcoords[con_atom]+=compute_image_flag(cell_v,fcoords[con_point],fcoords[con_atom]) # Shifting the connected metal to get it close to the connection point + fcoords = frac_coord(molcif_cart_coords, cell_v) # fractional coordinates + fcoords[con_atom] += compute_image_flag(cell_v, fcoords[con_point], fcoords[con_atom]) # Shifting the connected metal to get it close to the connection point ccoords = fractional2cart(fcoords, cell_v) - shifted_con_atom3D = atom3D(Sym=con_atom3D.symbol(), xyz=list(ccoords[con_atom,:])) + shifted_con_atom3D = atom3D(Sym=con_atom3D.symbol(), xyz=list(ccoords[con_atom, :])) - bond_len = shifted_con_atom3D.distance(con_point3D) # Bond length between the connected metal and the connection point. + bond_len = shifted_con_atom3D.distance(con_point3D) # Bond length between the connected metal and the connection point. con_atom_radius = COVALENT_RADII[shifted_con_atom3D.symbol()] con_point_radius = COVALENT_RADII[con_point3D.symbol()] relative_bond_len = bond_len / (con_atom_radius + con_point_radius) @@ -590,8 +628,8 @@ def bond_information_write(linker_list, linkeranchors_superlist, adj_matrix, mol bond_length_list.append(bond_len) scaled_bond_length_list.append(relative_bond_len) - mean_bond_len = np.mean(bond_length_list) # Average over all SBU-linker atom to atom connections - mean_scaled_bond_len = np.mean(scaled_bond_length_list) # Average over all SBU-linker atom to atom connections + mean_bond_len = np.mean(bond_length_list) # Average over all SBU-linker atom to atom connections + mean_scaled_bond_len = np.mean(scaled_bond_length_list) # Average over all SBU-linker atom to atom connections std_bond_len = np.std(bond_length_list) std_scaled_bond_len = np.std(scaled_bond_length_list) @@ -601,6 +639,7 @@ def bond_information_write(linker_list, linkeranchors_superlist, adj_matrix, mol f.write(f'Stdev bond length: {std_bond_len}\n') f.write(f'Stdev scaled bond length: {std_scaled_bond_len}') + def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_v, allatomtypes, name): """ Writes XYZ files for all SBUs provided, with each SBU surrounded by all linkers coordinated to it. @@ -633,8 +672,8 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ for SBU_idx, atoms_sbu in enumerate(SBU_list): # atoms_sbu are the indices of atoms in the SBU with index SBU_idx - connection_atoms = [] # List of lists of the coordinating atoms of each of the connected linkers. Length is # of connected linkers. - atoms_connected_linkers = [] # List of lists of the atoms of each of the connected linkers. Length is # of connected linkers. + connection_atoms = [] # List of lists of the coordinating atoms of each of the connected linkers. Length is # of connected linkers. + atoms_connected_linkers = [] # List of lists of the atoms of each of the connected linkers. Length is # of connected linkers. for atoms_linker in linker_list: atoms_in_common = list(set(atoms_sbu).intersection(set(atoms_linker))) if len(atoms_in_common) != 0: @@ -646,13 +685,13 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ # For each atom index in an inner list in connection_atoms, build out the corresponding linker (inner list) in atoms_connected_linkers. ### Start with the atoms of the SBU - surrounded_sbu = mol3D() # SBU surrounded by linkers + surrounded_sbu = mol3D() # SBU surrounded by linkers starting_atom_idx = atoms_sbu[0] - added_idx = [starting_atom_idx] # This list will contain the SBU indices that no longer need to be considered for branching. + added_idx = [starting_atom_idx] # This list will contain the SBU indices that no longer need to be considered for branching. starting_atom3D = molcif.getAtom(starting_atom_idx) # The mol3D object starts out with a single atom. Atoms will be added branching out from this initial atom. surrounded_sbu.addAtom(starting_atom3D) - atom3D_dict = {starting_atom_idx: starting_atom3D} # atom3D objects of the SBU + atom3D_dict = {starting_atom_idx: starting_atom3D} # atom3D objects of the SBU dense_adj_mat = np.array(adj_matrix.todense()) @@ -663,23 +702,21 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ sbu_atoms_to_branch_from = {starting_atom_idx: atoms_connected_to_start} sbu_atoms_to_branch_from_keys = [starting_atom_idx] - while len(sbu_atoms_to_branch_from_keys) != 0: - # Take from the first key, i.e. [0], of the dictionary my_key = sbu_atoms_to_branch_from_keys[0] - neighbor_idx = sbu_atoms_to_branch_from[my_key][0] # Grabbing a neighbor to calculate its position. + neighbor_idx = sbu_atoms_to_branch_from[my_key][0] # Grabbing a neighbor to calculate its position. # Remove that index from further consideration sbu_atoms_to_branch_from[my_key].remove(neighbor_idx) # If the list associated with a key is now empty, remove the key. if len(sbu_atoms_to_branch_from[my_key]) == 0: - sbu_atoms_to_branch_from_keys.remove(my_key) # sbu_atoms_to_branch_from_keys = [i for i in sbu_atoms_to_branch_from_keys if i != my_key] + sbu_atoms_to_branch_from_keys.remove(my_key) # sbu_atoms_to_branch_from_keys = [i for i in sbu_atoms_to_branch_from_keys if i != my_key] sbu_atoms_to_branch_from.pop(my_key) if neighbor_idx in added_idx: - continue # Skip this index if it has already been added + continue # Skip this index if it has already been added # Getting the optimal position of the neighbor, relative to my_key fcoords_my_key = frac_coord(atom3D_dict[my_key].coords(), cell_v) @@ -687,7 +724,7 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ fcoords_neighbor_initial = frac_coord(molcif.getAtom(neighbor_idx).coords(), cell_v) fcoords_neighbor = fcoords_neighbor_initial + compute_image_flag(cell_v, fcoords_my_key, fcoords_neighbor_initial) coords_neighbor = fractional2cart(fcoords_neighbor, cell_v) - symbol_neighbor = allatomtypes[neighbor_idx] # Element + symbol_neighbor = allatomtypes[neighbor_idx] # Element new_atom3D = atom3D(Sym=symbol_neighbor, xyz=coords_neighbor) surrounded_sbu.addAtom(new_atom3D) @@ -711,7 +748,7 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ for starting_atom_idx in connection_atoms[linker_idx]: atom3D_dict_copy = atom3D_dict.copy() added_idx = [starting_atom_idx] - starting_atom3D = atom3D_dict_copy[starting_atom_idx] # Position of the starting atom in the SBU, which has been built by this point in the code. + starting_atom3D = atom3D_dict_copy[starting_atom_idx] # Position of the starting atom in the SBU, which has been built by this point in the code. atoms_connected_to_start = list(np.nonzero(dense_adj_mat[starting_atom_idx])[0]) atoms_connected_to_start = [i for i in atoms_connected_to_start if i in linker_indices] @@ -722,7 +759,7 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ # Take from the first key, i.e. [0], of the dictionary my_key = linker_atoms_to_branch_from_keys[0] - neighbor_idx = linker_atoms_to_branch_from[my_key][0] # Grabbing a neighbor to calculate its position. + neighbor_idx = linker_atoms_to_branch_from[my_key][0] # Grabbing a neighbor to calculate its position. # Remove that index from further consideration linker_atoms_to_branch_from[my_key].remove(neighbor_idx) @@ -733,7 +770,7 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ linker_atoms_to_branch_from.pop(my_key) if neighbor_idx in added_idx: - continue # Skip this index if it has already been added + continue # Skip this index if it has already been added # Getting the optimal position of the neighbor, relative to my_key fcoords_my_key = frac_coord(atom3D_dict_copy[my_key].coords(), cell_v) @@ -741,12 +778,12 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ fcoords_neighbor_initial = frac_coord(molcif.getAtom(neighbor_idx).coords(), cell_v) fcoords_neighbor = fcoords_neighbor_initial + compute_image_flag(cell_v, fcoords_my_key, fcoords_neighbor_initial) coords_neighbor = fractional2cart(fcoords_neighbor, cell_v) - symbol_neighbor = allatomtypes[neighbor_idx] # Element + symbol_neighbor = allatomtypes[neighbor_idx] # Element new_atom3D = atom3D(Sym=symbol_neighbor, xyz=coords_neighbor) # Only add the new atom if it does not overlap with an atom that is already in surrounded sbu. # If there is overlap, then the atom was already added in the SBU. - min_dist = 100 # Starting from a big number that will be replaced in the subsequent lines. + min_dist = 100 # Starting from a big number that will be replaced in the subsequent lines. num_atoms = surrounded_sbu.getNumAtoms() for i in range(num_atoms): pair_dist = new_atom3D.distance(surrounded_sbu.getAtom(i)) @@ -763,9 +800,9 @@ def surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_ linker_atoms_to_branch_from[neighbor_idx] = atoms_connected_to_neighbor_to_check linker_atoms_to_branch_from_keys.append(neighbor_idx) - surrounded_sbu.writexyz(xyz_path) + def dist_mat_comp(X): """ Computes the pairwise distances between the rows of the coordinate information X. @@ -788,9 +825,10 @@ def dist_mat_comp(X): X1 = np.expand_dims(X, axis=1) X2 = np.expand_dims(X, axis=0) Z = X1 - X2 - dist_mat = np.sqrt(np.sum(np.square(Z), axis=-1)) # The pairwise distance matrix. Distances between all atoms. + dist_mat = np.sqrt(np.sum(np.square(Z), axis=-1)) # The pairwise distance matrix. Distances between all atoms. return dist_mat + def detect_1D_rod(SBU_list, molcif, allatomtypes, cell_v, logpath, name): """ Writes to the log file if the MOF is likely to contain a 1D rod. @@ -824,29 +862,29 @@ def detect_1D_rod(SBU_list, molcif, allatomtypes, cell_v, logpath, name): # allatomtypes_sbus_initial = [i for idx, i in enumerate(allatomtypes) if idx in sbu_atom_indices] cart_coords_sbus_initial = [molcif.getAtom(i).coords() for i in sbu_atom_indices] - allatomtypes_sbus_with_shifts = [] # Will contain the symbols of all SBU atoms, across the 8 unit cell shifts - cart_coords_sbus_with_shifts = [] # Will contain the cartesian coordinates of all SBU atoms, across the 8 unit cell shifts + allatomtypes_sbus_with_shifts = [] # Will contain the symbols of all SBU atoms, across the 8 unit cell shifts + cart_coords_sbus_with_shifts = [] # Will contain the cartesian coordinates of all SBU atoms, across the 8 unit cell shifts # Applying all possible unit cell shifts in 0, 1, for all SBU atoms for idx, i in enumerate(sbu_atom_indices): supercells = np.array(list(itertools.product((0, 1), repeat=3))) fractional_coords = frac_coord(cart_coords_sbus_initial[idx], cell_v) - fractional_coords_shifts = fractional_coords + supercells # 8 versions of fractional_coords, shifted some cells over in different directions + fractional_coords_shifts = fractional_coords + supercells # 8 versions of fractional_coords, shifted some cells over in different directions for j in fractional_coords_shifts: allatomtypes_sbus_with_shifts.append(allatomtypes[i]) cart_coords_sbus_with_shifts.append(fractional2cart(j, cell_v)) - cart_coords_sbus_with_shifts = np.array(cart_coords_sbus_with_shifts) # Converting nested list to a numpy array + cart_coords_sbus_with_shifts = np.array(cart_coords_sbus_with_shifts) # Converting nested list to a numpy array distance_mat = dist_mat_comp(cart_coords_sbus_with_shifts) - adj_matrix, _ = compute_adj_matrix(distance_mat, allatomtypes_sbus_with_shifts, handle_overlap=True) # Ignoring overlap + adj_matrix, _ = compute_adj_matrix(distance_mat, allatomtypes_sbus_with_shifts, handle_overlap=True) # Ignoring overlap # For each connected component, see how long it is adj_matrix = sparse.csr_matrix(adj_matrix) n_components, labels_components = sparse.csgraph.connected_components(csgraph=adj_matrix, directed=False, return_labels=True) # What is the shortest cell vector? - min_vec_len = np.min(np.linalg.norm(cell_v, axis=1)) # Equivalent to min(cpar[:3]) + min_vec_len = np.min(np.linalg.norm(cell_v, axis=1)) # Equivalent to min(cpar[:3]) is_1d_rod = False for i in range(n_components): @@ -860,13 +898,15 @@ def detect_1D_rod(SBU_list, molcif, allatomtypes, cell_v, logpath, name): break if is_1d_rod: - print(f'Likely 1D rod') + print('Likely 1D rod') tmpstr = "MOF SBU is likely a 1D rod" - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) -def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=False, wiggle_room=1, - max_num_atoms=2000, get_sbu_linker_bond_info=False, surrounded_sbu_file_generation=False, detect_1D_rod_sbu=False, - Gval=False): + +def get_MOF_descriptors( + data, depth, path=False, xyzpath=False, graph_provided=False, wiggle_room=1, + max_num_atoms=2000, get_sbu_linker_bond_info=False, surrounded_sbu_file_generation=False, + detect_1D_rod_sbu=False, Gval=False): """ Generates RAC descriptors on a MOF, assuming it has P1 symmetry. Writes three files: sbu_descriptors.csv, linker_descriptors.csv, and lc_descriptors.csv @@ -912,7 +952,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F """ - if not path: # Throw an error if the user did not supply a path to which to write the output. + if not path: # Throw an error if the user did not supply a path to which to write the output. print('Need a directory to place all of the linker, SBU, and ligand objects. Exiting now.') raise ValueError('Base path must be specified in order to write descriptors.') else: @@ -935,7 +975,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F cell_v = mkcell(cpar) cart_coords = fractional2cart(fcoords, cell_v) name = os.path.basename(data).replace(".cif", "") - if len(cart_coords) > max_num_atoms: # Don't deal with large cifs because of computational resources required for their treatment. + if len(cart_coords) > max_num_atoms: # Don't deal with large cifs because of computational resources required for their treatment. print("cif file is too large, skipping it for now...") failure_str = f"Failed to featurize {name}: large primitive cell\n {len(cart_coords)} atoms" full_names, full_descriptors = failure_response(path, failure_str) @@ -944,7 +984,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F """"""""" Getting the adjacency matrix. """"""""" - if not graph_provided: # Make the adjacency matrix. + if not graph_provided: # Make the adjacency matrix. distance_mat = compute_distance_matrix3(cell_v, cart_coords) try: adj_matrix, _ = compute_adj_matrix(distance_mat, allatomtypes, wiggle_room) @@ -952,10 +992,10 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F failure_str = f"Failed to featurize {name}: atomic overlap\n" full_names, full_descriptors = failure_response(path, failure_str) return full_names, full_descriptors - else: # Grab the adjacency matrix from the cif file. + else: # Grab the adjacency matrix from the cif file. adj_matrix_list = [] max_sofar = 0 - with open(data.replace('primitive','cif'),'r') as f: + with open(data.replace('primitive', 'cif'), 'r') as f: readdata = f.readlines() flag = False for i, row in enumerate(readdata): @@ -964,19 +1004,19 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F continue if flag: splitrow = row.split() - atom1 = int(re.findall(r'\d+',splitrow[0])[0]) - atom2 = int(re.findall(r'\d+',splitrow[1])[0]) + atom1 = int(re.findall(r'\d+', splitrow[0])[0]) + atom2 = int(re.findall(r'\d+', splitrow[1])[0]) max_sofar = max(atom1, max_sofar) max_sofar = max(atom2, max_sofar) - adj_matrix_list.append((atom1,atom2)) - adj_matrix = np.zeros((max_sofar+1,max_sofar+1)) # 0 indicates the absence of a bond. + adj_matrix_list.append((atom1, atom2)) + adj_matrix = np.zeros((max_sofar + 1, max_sofar + 1)) # 0 indicates the absence of a bond. for i, row in enumerate(adj_matrix_list): - adj_matrix[row[0],row[1]] = 1 # 1 is indicative of a bond. - adj_matrix[row[1],row[0]] = 1 + adj_matrix[row[0], row[1]] = 1 # 1 is indicative of a bond. + adj_matrix[row[1], row[0]] = 1 adj_matrix = sparse.csr_matrix(adj_matrix) writeXYZandGraph(xyzpath, allatomtypes, cell_v, fcoords, adj_matrix.todense()) - molcif,_,_,_,_ = import_from_cif(data, True) # molcif is a mol3D class of a single unit cell (or the cell of the cif file) + molcif, _, _, _, _ = import_from_cif(data, True) # molcif is a mol3D class of a single unit cell (or the cell of the cif file) molcif.graph = adj_matrix.todense() """"""""" @@ -986,7 +1026,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F """"""""" n_components, labels_components = sparse.csgraph.connected_components(csgraph=adj_matrix, directed=False, return_labels=True) - metal_list = set([at for at in molcif.findMetal(transition_metals_only=False)]) # the atom indices of the metals + metal_list = set([at for at in molcif.findMetal(transition_metals_only=False)]) # the atom indices of the metals # print('##### METAL LIST', metal_list, [molcif.getAtom(val).symbol() for val in list(metal_list)]) # print('##### METAL LIST', metal_list, [val.symbol() for val in molcif.atoms]) if not len(metal_list) > 0: @@ -994,17 +1034,17 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F full_names, full_descriptors = failure_response(path, failure_str) return full_names, full_descriptors for comp in range(n_components): - inds_in_comp = [i for i in range(len(labels_components)) if labels_components[i]==comp] - if not set(inds_in_comp) & metal_list: # In the context of sets, & is the intersection. If the intersection is null, the (&) expression is False; the `not` would then make it True. + inds_in_comp = [i for i in range(len(labels_components)) if labels_components[i] == comp] + if not set(inds_in_comp) & metal_list: # In the context of sets, & is the intersection. If the intersection is null, the (&) expression is False; the `not` would then make it True. # If this if statement is entered, there is an entire connected component that has no metals in it. No connections to any metal. failure_str = f"Failed to featurize {name}: solvent molecules\n" full_names, full_descriptors = failure_response(path, failure_str) return full_names, full_descriptors - if n_components > 1 : # There are multiple connected components that have a metal in them in this case. + if n_components > 1: # There are multiple connected components that have a metal in them in this case. print("structure is interpenetrated") - tmpstr = "%s found to be an interpenetrated structure\n"%(name) - write2file(logpath,"/%s.log"%name,tmpstr) + tmpstr = "%s found to be an interpenetrated structure\n" % (name) + write2file(logpath, "/%s.log" % name, tmpstr) """"""""" step 1: metallic part @@ -1028,7 +1068,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F cn = len(bonded_atoms) cn_atom = ",".join([at for at in bonded_atoms_types]) tmpstr = "atom %i with type of %s found to have %i coordinates with atom types of %s\n"%(metal,allatomtypes[metal],cn,cn_atom) - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) [removelist.update(set([atom])) for atom in SBUlist if all((molcif.getAtom(val).ismetal() or molcif.getAtom(val).symbol().upper() == 'H') for val in molcif.getBondedAtomsSmart(atom))] """"""""" adding hydrogens connected to atoms which are only connected to metals. In particular interstitial OH, like in UiO SBU. @@ -1036,7 +1076,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F for atom in SBUlist: for val in molcif.getBondedAtomsSmart(atom): if molcif.getAtom(val).symbol().upper() == 'H': - removelist.update(set([val])) + removelist.update(set([val])) """"""""" At this point: @@ -1047,21 +1087,21 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F removelist = linkers are all atoms - the removelist (assuming no bond between organiclinkers) """"""""" - allatoms = set(range(0, adj_matrix.shape[0])) # The indices of all the atoms. + allatoms = set(range(0, adj_matrix.shape[0])) # The indices of all the atoms. linkers = allatoms - removelist linker_list, linker_subgraphlist = get_closed_subgraph(linkers.copy(), removelist.copy(), adj_matrix) connections_list = copy.deepcopy(linker_list) connections_subgraphlist = copy.deepcopy(linker_subgraphlist) - linker_length_list = [len(linker_val) for linker_val in linker_list] # The number of atoms in each linker. + linker_length_list = [len(linker_val) for linker_val in linker_list] # The number of atoms in each linker. """"""""" find all anchoring atoms on linkers and ligands (lc identification) The atoms that are bonded to a metal. """"""""" anc_atoms = set() - for linker in linker_list: # Checking all of the linkers one by one. - for atom_linker in linker: # Checking each atom in the current linker. - bonded2atom = np.nonzero(adj_matrix[atom_linker,:])[1] # indices of atoms with bonds to the atom with the index atom_linker - if set(bonded2atom) & metal_list: # This means one of the atoms bonded to the atom with the index atom_linker is a metal. + for linker in linker_list: # Checking all of the linkers one by one. + for atom_linker in linker: # Checking each atom in the current linker. + bonded2atom = np.nonzero(adj_matrix[atom_linker, :])[1] # indices of atoms with bonds to the atom with the index atom_linker + if set(bonded2atom) & metal_list: # This means one of the atoms bonded to the atom with the index atom_linker is a metal. anc_atoms.add(atom_linker) """"""""" step 3: determine whether linker or ligand @@ -1075,9 +1115,9 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F initial_SBU_list, initial_SBU_subgraphlist = get_closed_subgraph(removelist.copy(), linkers.copy(), adj_matrix) templist = linker_list.copy() long_ligands = False - max_min_linker_length , min_max_linker_length = (0,100) # The maximum value of the minimum linker length, and the minimum value of the maximum linker length. Updated later. - linkeranchors_superlist = [] # Will contain the indices of the linker atoms that coordinate to metals - for ii, atoms_list in reversed(list(enumerate(linker_list))): # Loop over all linker subgraphs + max_min_linker_length, min_max_linker_length = (0, 100) # The maximum value of the minimum linker length, and the minimum value of the maximum linker length. Updated later. + linkeranchors_superlist = [] # Will contain the indices of the linker atoms that coordinate to metals + for ii, atoms_list in reversed(list(enumerate(linker_list))): # Loop over all linker subgraphs linkeranchors_list = set() linkeranchors_atoms = set() sbuanchors_list = set() @@ -1087,70 +1127,70 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F To do this, we check if something is connected to more than one SBU. Set to handle cases where primitive cell is small, ambiguous cases are recorded. """"""""" - for iii,atoms in enumerate(atoms_list): # loop over all atom indices in a linker - connected_atoms = np.nonzero(adj_matrix[atoms,:])[1] # indices of atoms with bonds to the atom with the index atoms - for kk, sbu_atoms_list in enumerate(initial_SBU_list): # loop over all SBU subgraphs - for sbu_atoms in sbu_atoms_list: # Loop over SBU - if sbu_atoms in connected_atoms: # found an SBU atom bonded to an atom in the linker defined by atoms_list + for iii, atoms in enumerate(atoms_list): # loop over all atom indices in a linker + connected_atoms = np.nonzero(adj_matrix[atoms, :])[1] # indices of atoms with bonds to the atom with the index atoms + for kk, sbu_atoms_list in enumerate(initial_SBU_list): # loop over all SBU subgraphs + for sbu_atoms in sbu_atoms_list: # Loop over SBU + if sbu_atoms in connected_atoms: # found an SBU atom bonded to an atom in the linker defined by atoms_list linkeranchors_list.add(iii) linkeranchors_atoms.add(atoms) sbuanchors_list.add(sbu_atoms) - sbu_connect_list.add(kk) #Add if unique SBUs - min_length,max_length = linker_length(linker_subgraphlist[ii].todense(), linkeranchors_list) + sbu_connect_list.add(kk) # Add if unique SBUs + min_length, max_length = linker_length(linker_subgraphlist[ii].todense(), linkeranchors_list) linkeranchors_superlist.append(linkeranchors_atoms) - if len(linkeranchors_list) >= 2 : # linker, and in one ambiguous case, could be a ligand. - if len(sbu_connect_list) >= 2: # Something that connects two SBUs is certain to be a linker - max_min_linker_length = max(min_length,max_min_linker_length) - min_max_linker_length = min(max_length,min_max_linker_length) + if len(linkeranchors_list) >= 2: # linker, and in one ambiguous case, could be a ligand. + if len(sbu_connect_list) >= 2: # Something that connects two SBUs is certain to be a linker + max_min_linker_length = max(min_length, max_min_linker_length) + min_max_linker_length = min(max_length, min_max_linker_length) continue else: # check number of times we cross PBC : # TODO: we still can fail in multidentate ligands! linker_cart_coords = np.array([ - at.coords() for at in [molcif.getAtom(val) for val in atoms_list]]) # Cartesian coordinates of the atoms in the linker + at.coords() for at in [molcif.getAtom(val) for val in atoms_list]]) # Cartesian coordinates of the atoms in the linker linker_adjmat = np.array(linker_subgraphlist[ii].todense()) - pr_image_organic = ligand_detect(cell_v,linker_cart_coords,linker_adjmat,linkeranchors_list) # Periodic images for the organic component + pr_image_organic = ligand_detect(cell_v, linker_cart_coords, linker_adjmat, linkeranchors_list) # Periodic images for the organic component sbu_temp = linkeranchors_atoms.copy() - sbu_temp.update({val for val in initial_SBU_list[list(sbu_connect_list)[0]]}) # Adding atoms. Not sure why the [0] is there? TODO + sbu_temp.update({val for val in initial_SBU_list[list(sbu_connect_list)[0]]}) # Adding atoms. Not sure why the [0] is there? TODO sbu_temp = list(sbu_temp) sbu_cart_coords = np.array([ at.coords() for at in [molcif.getAtom(val) for val in sbu_temp]]) - sbu_adjmat = slice_mat(adj_matrix.todense(),sbu_temp) - pr_image_sbu = ligand_detect(cell_v,sbu_cart_coords,sbu_adjmat,set(range(len(linkeranchors_list)))) # Periodic images for the SBU - if not (len(np.unique(pr_image_sbu, axis=0))==1 and len(np.unique(pr_image_organic, axis=0))==1): # linker. More than one periodic image for sbu or organic component - max_min_linker_length = max(min_length,max_min_linker_length) - min_max_linker_length = min(max_length,min_max_linker_length) + sbu_adjmat = slice_mat(adj_matrix.todense(), sbu_temp) + pr_image_sbu = ligand_detect(cell_v, sbu_cart_coords, sbu_adjmat, set(range(len(linkeranchors_list)))) # Periodic images for the SBU + if not (len(np.unique(pr_image_sbu, axis=0)) == 1 and len(np.unique(pr_image_organic, axis=0)) == 1): # linker. More than one periodic image for sbu or organic component + max_min_linker_length = max(min_length, max_min_linker_length) + min_max_linker_length = min(max_length, min_max_linker_length) tmpstr = str(name)+','+' Anchors list: '+str(sbuanchors_list) \ - +','+' SBU connectlist: '+str(sbu_connect_list)+' set to be linker\n' - write2file(ligandpath,"/ambiguous.txt",tmpstr) + + ',' + ' SBU connectlist: ' + str(sbu_connect_list) + ' set to be linker\n' + write2file(ligandpath, "/ambiguous.txt", tmpstr) continue - else: # all anchoring atoms are in the same unitcell -> ligand - removelist.update(set(templist[ii])) # we also want to remove these ligands - SBUlist.update(set(templist[ii])) # we also want to remove these SBUs + else: # all anchoring atoms are in the same unitcell -> ligand + removelist.update(set(templist[ii])) # we also want to remove these ligands + SBUlist.update(set(templist[ii])) # we also want to remove these SBUs linker_list.pop(ii) linker_subgraphlist.pop(ii) tmpstr = str(name)+','+' Anchors list: '+str(sbuanchors_list) \ - +','+' SBU connectlist: '+str(sbu_connect_list)+' set to be ligand\n' - write2file(ligandpath,"/ambiguous.txt",tmpstr) - tmpstr = str(name)+str(ii)+','+' Anchors list: '+ \ - str(sbuanchors_list)+','+' SBU connectlist: '+str(sbu_connect_list)+'\n' - write2file(ligandpath,"/ligand.txt",tmpstr) - else: # definite ligand - write2file(logpath,"/%s.log"%name,"found ligand\n") - removelist.update(set(templist[ii])) # we also want to remove these ligands - SBUlist.update(set(templist[ii])) # we also want to remove these ligands + + ',' + ' SBU connectlist: ' + str(sbu_connect_list) + ' set to be ligand\n' + write2file(ligandpath, "/ambiguous.txt", tmpstr) + tmpstr = str(name)+str(ii)+','+' Anchors list: '\ + + str(sbuanchors_list) + ',' + ' SBU connectlist: ' + str(sbu_connect_list) + '\n' + write2file(ligandpath, "/ligand.txt", tmpstr) + else: # definite ligand + write2file(logpath, "/%s.log" % name, "found ligand\n") + removelist.update(set(templist[ii])) # we also want to remove these ligands + SBUlist.update(set(templist[ii])) # we also want to remove these ligands linker_list.pop(ii) linker_subgraphlist.pop(ii) tmpstr = str(name)+','+' Anchors list: '+str(sbuanchors_list) \ - +','+' SBU connectlist: '+str(sbu_connect_list)+'\n' - write2file(ligandpath,"/ligand.txt",tmpstr) + + ','+' SBU connectlist: '+str(sbu_connect_list)+'\n' + write2file(ligandpath, "/ligand.txt", tmpstr) - tmpstr = str(name) + ", (min_max_linker_length,max_min_linker_length): " + \ - str(min_max_linker_length) + " , " +str(max_min_linker_length) + "\n" - write2file(logpath,"/%s.log"%name,tmpstr) + tmpstr = str(name) + ", (min_max_linker_length,max_min_linker_length): " \ + + str(min_max_linker_length) + " , " + str(max_min_linker_length) + "\n" + write2file(logpath, "/%s.log" % name, tmpstr) if min_max_linker_length < 3: - write2file(linkerpath,"/short_ligands.txt",tmpstr) + write2file(linkerpath, "/short_ligands.txt", tmpstr) if min_max_linker_length > 2: # for N-C-C-N ligand ligand if max_min_linker_length == min_max_linker_length: @@ -1164,26 +1204,26 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F """"""""" linker_length_list = [len(linker_val) for linker_val in linker_list] if len(set(linker_length_list)) != 1: - write2file(linkerpath,"/uneven.txt",str(name)+'\n') # Linkers are different lengths. - if not min_max_linker_length < 2: # treating the 2 atom ligands differently! Need caution + write2file(linkerpath, "/uneven.txt", str(name)+'\n') # Linkers are different lengths. + if not min_max_linker_length < 2: # treating the 2 atom ligands differently! Need caution if long_ligands: tmpstr = "\nStructure has LONG ligand\n\n" - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) # Expanding the number of atoms considered to be part of the SBU - [[SBUlist.add(val) for val in molcif.getBondedAtomsSmart(zero_first_shell)] for zero_first_shell in SBUlist.copy()] #First account for all of the carboxylic acid type linkers, add in the carbons. - truncated_linkers = allatoms - SBUlist # Taking the difference of sets + [[SBUlist.add(val) for val in molcif.getBondedAtomsSmart(zero_first_shell)] for zero_first_shell in SBUlist.copy()] # First account for all of the carboxylic acid type linkers, add in the carbons. + truncated_linkers = allatoms - SBUlist # Taking the difference of sets SBU_list, SBU_subgraphlist = get_closed_subgraph(SBUlist, truncated_linkers, adj_matrix) if not long_ligands: tmpstr = "\nStructure has SHORT ligand\n\n" - write2file(logpath,"/%s.log"%name,tmpstr) - SBU_list, SBU_subgraphlist = include_extra_shells(SBU_list,SBU_subgraphlist,molcif,adj_matrix) + write2file(logpath, "/%s.log" % name, tmpstr) + SBU_list, SBU_subgraphlist = include_extra_shells(SBU_list, SBU_subgraphlist, molcif, adj_matrix) else: - tmpstr = "Structure %s has extremely short ligands, check the outputs\n"%name - write2file(ligandpath,"/ambiguous.txt",tmpstr) + tmpstr = "Structure %s has extremely short ligands, check the outputs\n" % name + write2file(ligandpath, "/ambiguous.txt", tmpstr) tmpstr = "Structure has extremely short ligands\n" - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) tmpstr = "Structure has extremely short ligands\n" - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) truncated_linkers = allatoms - removelist SBU_list, SBU_subgraphlist = get_closed_subgraph(removelist, truncated_linkers, adj_matrix) SBU_list, SBU_subgraphlist = include_extra_shells(SBU_list, SBU_subgraphlist, molcif, adj_matrix) @@ -1192,17 +1232,17 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F """"""""" For the cases that have a linker subgraph, do the featurization. """"""""" - if len(linker_subgraphlist)>=1: # Featurize cases that did not fail. + if len(linker_subgraphlist) >= 1: # Featurize cases that did not fail. # try: descriptor_names, descriptors, lc_descriptor_names, lc_descriptors = make_MOF_SBU_RACs(SBU_list, SBU_subgraphlist, molcif, depth, name, cell_v, anc_atoms, sbupath, linkeranchors_superlist, Gval, connections_list, connections_subgraphlist) lig_descriptor_names, lig_descriptors = make_MOF_linker_RACs(linker_list, linker_subgraphlist, molcif, depth, name, cell_v, linkerpath, linkeranchors_superlist, Gval) full_names = descriptor_names+lig_descriptor_names+lc_descriptor_names #+ ECFP_names full_descriptors = list(descriptors)+list(lig_descriptors)+list(lc_descriptors) - print(len(full_names),len(full_descriptors)) + print(len(full_names), len(full_descriptors)) # except: # full_names = [0] # full_descriptors = [0] - elif len(linker_subgraphlist) == 1: # Only one linker identified. + elif len(linker_subgraphlist) == 1: # Only one linker identified. print(f'Suspicious featurization for {name}: Only one linker identified.') full_names = [1] full_descriptors = [1] @@ -1226,7 +1266,7 @@ def get_MOF_descriptors(data, depth, path=False, xyzpath=False, graph_provided=F surrounded_sbu_gen(SBU_list, linker_list, sbupath, molcif, adj_matrix, cell_v, allatomtypes, name) except: tmpstr = "Failed to generate surrounded SBU" - write2file(logpath,"/%s.log"%name,tmpstr) + write2file(logpath, "/%s.log" % name, tmpstr) if detect_1D_rod_sbu: detect_1D_rod(SBU_list, molcif, allatomtypes, cell_v, logpath, name) diff --git a/tests/informatics/test_MOF_descriptors.py b/tests/informatics/test_MOF_descriptors.py new file mode 100644 index 00000000..22bc518a --- /dev/null +++ b/tests/informatics/test_MOF_descriptors.py @@ -0,0 +1,57 @@ +import pytest +import json +import numpy as np +from molSimplify.Informatics.MOF.MOF_descriptors import get_MOF_descriptors +from molSimplify.utils.timer import DebugTimer + + +@pytest.fixture +def ref_names(depth=3): + + def RACs_names(starts, properties, depth, scope="all"): + names = [] + for start in starts: + for prop in properties: + for d in range(depth + 1): + if scope is None: + names.append(f"{start}-{prop}-{d}") + else: + names.append(f"{start}-{prop}-{d}-{scope}") + return names + + properties = ["chi", "Z", "I", "T", "S", "Gval"] + + names = RACs_names(["f", "mc", "D_mc"], properties, depth) + # f-lig does not include the "scope" + names.extend(RACs_names(["f-lig"], properties, depth, scope=None)) + + # Same for the starts that include the additional property alpha + properties.append("alpha") + names.extend( + RACs_names(["lc", "D_lc", "func", "D_func"], properties, depth)) + return names + + +@pytest.mark.parametrize( + "name", + ["odac-21383.cif", + "odac-21433.cif", + "odac-21478.cif", + "odac-21735.cif", + "odac-21816.cif"]) +def test_get_MOF_descriptors(resource_path_root, tmpdir, name, ref_names): + with DebugTimer("get_MOF_descriptors()"): + full_names, full_descriptors = get_MOF_descriptors( + str(resource_path_root / "inputs" / "cif_files" / name), + depth=3, + path=str(tmpdir), + xyzpath=str(tmpdir / "test.xyz"), + Gval=True, + ) + + with open(resource_path_root / "refs" / "MOF_descriptors" + / name.replace("cif", "json"), "r") as fin: + ref = json.load(fin) + + assert full_names == ref_names + np.testing.assert_allclose(full_descriptors, ref["descriptors"], atol=1e-6) diff --git a/tests/testresources/inputs/cif_files/odac-21383.cif b/tests/testresources/inputs/cif_files/odac-21383.cif new file mode 100644 index 00000000..1d3ed003 --- /dev/null +++ b/tests/testresources/inputs/cif_files/odac-21383.cif @@ -0,0 +1,261 @@ +data_image0 +_chemical_formula_structural Ga36P36O148F16 +_chemical_formula_sum "Ga36 P36 O148 F16" +_cell_length_a 17.7002 +_cell_length_b 32.7061 +_cell_length_c 10.1684 +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Ga Ga1 1.0 0.43059 0.92287 0.05643 1.0000 + Ga Ga2 1.0 0.48410 0.02595 0.02197 1.0000 + Ga Ga3 1.0 0.15815 0.98867 0.88183 1.0000 + Ga Ga4 1.0 0.34659 0.50676 0.58670 1.0000 + Ga Ga5 1.0 0.08393 0.57961 0.42319 1.0000 + Ga Ga6 1.0 0.02252 0.47611 0.45525 1.0000 + Ga Ga7 1.0 0.34114 0.66620 0.58927 1.0000 + Ga Ga8 1.0 0.17185 0.82627 0.88792 1.0000 + Ga Ga9 1.0 0.30408 0.75647 0.92147 1.0000 + Ga Ga10 1.0 0.57037 0.07744 0.55502 1.0000 + Ga Ga11 1.0 0.51611 0.97446 0.52138 1.0000 + Ga Ga12 1.0 0.84196 0.01129 0.38288 1.0000 + Ga Ga13 1.0 0.65341 0.49313 0.08664 1.0000 + Ga Ga14 1.0 0.91594 0.42029 0.92329 1.0000 + Ga Ga15 1.0 0.97747 0.52383 0.95523 1.0000 + Ga Ga16 1.0 0.65877 0.33342 0.08974 1.0000 + Ga Ga17 1.0 0.82830 0.17378 0.38821 1.0000 + Ga Ga18 1.0 0.69648 0.24360 0.42307 1.0000 + Ga Ga19 1.0 0.92996 0.07736 0.05544 1.0000 + Ga Ga20 1.0 0.98407 0.97427 0.02212 1.0000 + Ga Ga21 1.0 0.65807 0.01135 0.88314 1.0000 + Ga Ga22 1.0 0.84658 0.49311 0.58664 1.0000 + Ga Ga23 1.0 0.58408 0.42027 0.42331 1.0000 + Ga Ga24 1.0 0.52254 0.52381 0.45523 1.0000 + Ga Ga25 1.0 0.84123 0.33342 0.58976 1.0000 + Ga Ga26 1.0 0.67187 0.17378 0.88815 1.0000 + Ga Ga27 1.0 0.80356 0.24360 0.92309 1.0000 + Ga Ga28 1.0 0.07041 0.92272 0.55490 1.0000 + Ga Ga29 1.0 0.01582 0.02574 0.52223 1.0000 + Ga Ga30 1.0 0.34172 0.98885 0.38206 1.0000 + Ga Ga31 1.0 0.15340 0.50686 0.08665 1.0000 + Ga Ga32 1.0 0.41599 0.57969 0.92325 1.0000 + Ga Ga33 1.0 0.47749 0.47615 0.95522 1.0000 + Ga Ga34 1.0 0.15876 0.66660 0.08951 1.0000 + Ga Ga35 1.0 0.32817 0.82575 0.38620 1.0000 + Ga Ga36 1.0 0.19617 0.75627 0.42252 1.0000 + P P1 1.0 0.31337 0.99434 0.05803 1.0000 + P P2 1.0 0.52467 0.95466 0.82822 1.0000 + P P3 1.0 0.06651 0.90510 0.84888 1.0000 + P P4 1.0 0.98376 0.54782 0.64882 1.0000 + P P5 1.0 0.19351 0.50343 0.40645 1.0000 + P P6 1.0 0.43845 0.59028 0.62901 1.0000 + P P7 1.0 0.34400 0.75646 0.60991 1.0000 + P P8 1.0 0.32414 0.83918 0.05928 1.0000 + P P9 1.0 0.30802 0.66116 0.89815 1.0000 + P P10 1.0 0.68688 0.00560 0.55914 1.0000 + P P11 1.0 0.47548 0.04576 0.32815 1.0000 + P P12 1.0 0.93349 0.09497 0.34958 1.0000 + P P13 1.0 0.01619 0.45214 0.14882 1.0000 + P P14 1.0 0.80646 0.49652 0.90645 1.0000 + P P15 1.0 0.56162 0.40957 0.12895 1.0000 + P P16 1.0 0.65635 0.24318 0.11197 1.0000 + P P17 1.0 0.67615 0.16085 0.56051 1.0000 + P P18 1.0 0.69209 0.33884 0.39813 1.0000 + P P19 1.0 0.81321 0.00562 0.05928 1.0000 + P P20 1.0 0.02477 0.04560 0.82869 1.0000 + P P21 1.0 0.56658 0.09505 0.84935 1.0000 + P P22 1.0 0.48383 0.45210 0.64886 1.0000 + P P23 1.0 0.69355 0.49651 0.40640 1.0000 + P P24 1.0 0.93839 0.40956 0.62898 1.0000 + P P25 1.0 0.84372 0.24318 0.61195 1.0000 + P P26 1.0 0.82395 0.16081 0.06056 1.0000 + P P27 1.0 0.80794 0.33884 0.89816 1.0000 + P P28 1.0 0.18650 0.99472 0.55712 1.0000 + P P29 1.0 0.97498 0.95435 0.32876 1.0000 + P P30 1.0 0.43347 0.90507 0.34924 1.0000 + P P31 1.0 0.51619 0.54784 0.14887 1.0000 + P P32 1.0 0.30646 0.50345 0.90646 1.0000 + P P33 1.0 0.06160 0.59043 0.12887 1.0000 + P P34 1.0 0.15658 0.75695 0.11105 1.0000 + P P35 1.0 0.17591 0.83898 0.55953 1.0000 + P P36 1.0 0.19176 0.66107 0.39794 1.0000 + O O1 1.0 0.36930 0.56124 0.63882 1.0000 + O O2 1.0 0.13538 0.93385 0.83366 1.0000 + O O3 1.0 0.13323 0.47188 0.45118 1.0000 + O O4 1.0 0.35030 0.77223 0.75240 1.0000 + O O5 1.0 0.02578 0.50758 0.62007 1.0000 + O O6 1.0 0.20934 0.77214 0.83963 1.0000 + O O7 1.0 0.37244 0.02727 0.02004 1.0000 + O O8 1.0 0.48241 0.99468 0.85946 1.0000 + O O9 1.0 0.26051 0.74525 0.58022 1.0000 + O O10 1.0 0.25240 0.85096 0.98186 1.0000 + O O11 1.0 0.26725 0.49188 0.47540 1.0000 + O O12 1.0 0.34503 0.70353 0.92025 1.0000 + O O13 1.0 0.24142 0.00420 0.98193 1.0000 + O O14 1.0 0.00114 0.92187 0.93177 1.0000 + O O15 1.0 0.35517 0.79645 0.02209 1.0000 + O O16 1.0 0.50873 0.57242 0.56275 1.0000 + O O17 1.0 0.49419 0.91819 0.90872 1.0000 + O O18 1.0 0.02066 0.58375 0.57395 1.0000 + O O19 1.0 0.61031 0.95927 0.85926 1.0000 + O O20 1.0 0.33849 0.95034 0.02262 1.0000 + O O21 1.0 0.17320 0.54790 0.44401 1.0000 + O O22 1.0 0.89885 0.54430 0.60927 1.0000 + O O23 1.0 0.29692 0.65271 0.74928 1.0000 + O O24 1.0 0.51714 0.94311 0.68271 1.0000 + O O25 1.0 0.29712 0.99885 0.20677 1.0000 + O O26 1.0 0.20409 0.49766 0.25662 1.0000 + O O27 1.0 0.30596 0.84210 0.20712 1.0000 + O O28 1.0 0.45944 0.60410 0.77088 1.0000 + O O29 1.0 0.98309 0.55794 0.79664 1.0000 + O O30 1.0 0.41696 0.62880 0.54922 1.0000 + O O31 1.0 0.03144 0.89719 0.71005 1.0000 + O O32 1.0 0.09016 0.86348 0.90607 1.0000 + O O33 1.0 0.38689 0.86952 0.02345 1.0000 + O O34 1.0 0.35971 0.62936 0.96217 1.0000 + O O35 1.0 0.37646 0.78989 0.51811 1.0000 + O O36 1.0 0.22762 0.65917 0.95502 1.0000 + O O37 1.0 0.39109 0.71673 0.59096 1.0000 + O O38 1.0 0.63080 0.43859 0.13845 1.0000 + O O39 1.0 0.86463 0.06617 0.33478 1.0000 + O O40 1.0 0.86677 0.52806 0.95121 1.0000 + O O41 1.0 0.65035 0.22706 0.25425 1.0000 + O O42 1.0 0.97419 0.49239 0.12012 1.0000 + O O43 1.0 0.79109 0.22794 0.34040 1.0000 + O O44 1.0 0.62792 0.97264 0.52061 1.0000 + O O45 1.0 0.51828 0.00588 0.35879 1.0000 + O O46 1.0 0.73962 0.25472 0.08150 1.0000 + O O47 1.0 0.74868 0.14943 0.48499 1.0000 + O O48 1.0 0.73273 0.50809 0.97540 1.0000 + O O49 1.0 0.65515 0.29645 0.42014 1.0000 + O O50 1.0 0.75906 0.99570 0.48383 1.0000 + O O51 1.0 0.99891 0.07817 0.43222 1.0000 + O O52 1.0 0.64543 0.20379 0.52464 1.0000 + O O53 1.0 0.49140 0.42745 0.06253 1.0000 + O O54 1.0 0.50551 0.08228 0.40883 1.0000 + O O55 1.0 0.97927 0.41620 0.07401 1.0000 + O O56 1.0 0.38972 0.04098 0.35840 1.0000 + O O57 1.0 0.66225 0.04962 0.52348 1.0000 + O O58 1.0 0.82674 0.45206 0.94402 1.0000 + O O59 1.0 0.10110 0.45567 0.10921 1.0000 + O O60 1.0 0.70310 0.34730 0.24929 1.0000 + O O61 1.0 0.48190 0.05759 0.18258 1.0000 + O O62 1.0 0.70271 0.00112 0.70804 1.0000 + O O63 1.0 0.79589 0.50230 0.75663 1.0000 + O O64 1.0 0.69299 0.15733 0.70856 1.0000 + O O65 1.0 0.54054 0.39589 0.27094 1.0000 + O O66 1.0 0.01692 0.44200 0.29663 1.0000 + O O67 1.0 0.58300 0.37090 0.04979 1.0000 + O O68 1.0 0.96869 0.10281 0.21083 1.0000 + O O69 1.0 0.90998 0.13662 0.40655 1.0000 + O O70 1.0 0.61388 0.13072 0.52021 1.0000 + O O71 1.0 0.64035 0.37061 0.46216 1.0000 + O O72 1.0 0.62400 0.20954 0.02083 1.0000 + O O73 1.0 0.77248 0.34088 0.45509 1.0000 + O O74 1.0 0.60895 0.28284 0.09347 1.0000 + O O75 1.0 0.86921 0.43858 0.63850 1.0000 + O O76 1.0 0.63547 0.06626 0.83488 1.0000 + O O77 1.0 0.63325 0.52804 0.45116 1.0000 + O O78 1.0 0.84968 0.22707 0.75423 1.0000 + O O79 1.0 0.52585 0.49234 0.62010 1.0000 + O O80 1.0 0.70899 0.22793 0.84042 1.0000 + O O81 1.0 0.87235 0.97278 0.02073 1.0000 + O O82 1.0 0.98231 0.00562 0.85957 1.0000 + O O83 1.0 0.76046 0.25473 0.58146 1.0000 + O O84 1.0 0.75143 0.14937 0.98501 1.0000 + O O85 1.0 0.76727 0.50808 0.47539 1.0000 + O O86 1.0 0.84486 0.29644 0.92017 1.0000 + O O87 1.0 0.74119 0.99564 0.98348 1.0000 + O O88 1.0 0.50101 0.07834 0.93188 1.0000 + O O89 1.0 0.85465 0.20374 0.02451 1.0000 + O O90 1.0 0.00861 0.42743 0.56256 1.0000 + O O91 1.0 0.99443 0.08214 0.90892 1.0000 + O O92 1.0 0.52079 0.41616 0.57408 1.0000 + O O93 1.0 0.11043 0.04089 0.85990 1.0000 + O O94 1.0 0.83796 0.04964 0.02387 1.0000 + O O95 1.0 0.67328 0.45204 0.44394 1.0000 + O O96 1.0 0.39893 0.45560 0.60918 1.0000 + O O97 1.0 0.79690 0.34730 0.74932 1.0000 + O O98 1.0 0.01811 0.05723 0.68309 1.0000 + O O99 1.0 0.79723 0.00104 0.20807 1.0000 + O O100 1.0 0.70412 0.50230 0.25658 1.0000 + O O101 1.0 0.80705 0.15737 0.20863 1.0000 + O O102 1.0 0.95948 0.39588 0.77098 1.0000 + O O103 1.0 0.48312 0.44200 0.79669 1.0000 + O O104 1.0 0.91700 0.37090 0.54982 1.0000 + O O105 1.0 0.53158 0.10289 0.71045 1.0000 + O O106 1.0 0.59001 0.13674 0.90626 1.0000 + O O107 1.0 0.88625 0.13064 0.02064 1.0000 + O O108 1.0 0.85968 0.37061 0.96216 1.0000 + O O109 1.0 0.87609 0.20956 0.52077 1.0000 + O O110 1.0 0.72755 0.34089 0.95513 1.0000 + O O111 1.0 0.89111 0.28285 0.59352 1.0000 + O O112 1.0 0.13077 0.56141 0.13839 1.0000 + O O113 1.0 0.36486 0.93401 0.33335 1.0000 + O O114 1.0 0.36679 0.47193 0.95124 1.0000 + O O115 1.0 0.15043 0.77288 0.25355 1.0000 + O O116 1.0 0.47419 0.50759 0.12012 1.0000 + O O117 1.0 0.29075 0.77159 0.33906 1.0000 + O O118 1.0 0.12760 0.02776 0.51858 1.0000 + O O119 1.0 0.01726 0.99438 0.35953 1.0000 + O O120 1.0 0.23993 0.74567 0.08037 1.0000 + O O121 1.0 0.24902 0.85001 0.48481 1.0000 + O O122 1.0 0.23275 0.49191 0.97548 1.0000 + O O123 1.0 0.15479 0.70345 0.41987 1.0000 + O O124 1.0 0.25878 0.00476 0.48239 1.0000 + O O125 1.0 0.49850 0.92183 0.43293 1.0000 + O O126 1.0 0.14485 0.79620 0.52319 1.0000 + O O127 1.0 0.99139 0.57256 0.06240 1.0000 + O O128 1.0 0.00537 0.91783 0.40898 1.0000 + O O129 1.0 0.47925 0.58378 0.07409 1.0000 + O O130 1.0 0.88932 0.95902 0.35999 1.0000 + O O131 1.0 0.16143 0.95090 0.52064 1.0000 + O O132 1.0 0.32676 0.54793 0.94387 1.0000 + O O133 1.0 0.60110 0.54432 0.10925 1.0000 + O O134 1.0 0.20291 0.65263 0.24910 1.0000 + O O135 1.0 0.98165 0.94277 0.18305 1.0000 + O O136 1.0 0.20119 0.99946 0.70616 1.0000 + O O137 1.0 0.29586 0.49760 0.75667 1.0000 + O O138 1.0 0.19274 0.84238 0.70777 1.0000 + O O139 1.0 0.04040 0.60406 0.27087 1.0000 + O O140 1.0 0.51691 0.55794 0.29670 1.0000 + O O141 1.0 0.08297 0.62912 0.04986 1.0000 + O O142 1.0 0.46941 0.89718 0.21113 1.0000 + O O143 1.0 0.40903 0.86353 0.40577 1.0000 + O O144 1.0 0.11446 0.86961 0.51959 1.0000 + O O145 1.0 0.13998 0.62932 0.46198 1.0000 + O O146 1.0 0.12400 0.79067 0.02045 1.0000 + O O147 1.0 0.27211 0.65893 0.45496 1.0000 + O O148 1.0 0.10925 0.71727 0.09222 1.0000 + F F1 1.0 0.59454 0.01931 0.03888 1.0000 + F F2 1.0 0.03282 0.52842 0.36063 1.0000 + F F3 1.0 0.47617 0.97356 0.12043 1.0000 + F F4 1.0 0.41305 0.51613 0.43540 1.0000 + F F5 1.0 0.40605 0.98157 0.53697 1.0000 + F F6 1.0 0.96715 0.47151 0.86070 1.0000 + F F7 1.0 0.52466 0.02671 0.61962 1.0000 + F F8 1.0 0.58697 0.48383 0.93532 1.0000 + F F9 1.0 0.09449 0.98073 0.03817 1.0000 + F F10 1.0 0.53286 0.47150 0.36075 1.0000 + F F11 1.0 0.97607 0.02672 0.11986 1.0000 + F F12 1.0 0.91305 0.48380 0.43533 1.0000 + F F13 1.0 0.90545 0.01913 0.53909 1.0000 + F F14 1.0 0.46722 0.52847 0.86074 1.0000 + F F15 1.0 0.02440 0.97339 0.61988 1.0000 + F F16 1.0 0.08695 0.51615 0.93532 1.0000 diff --git a/tests/testresources/inputs/cif_files/odac-21433.cif b/tests/testresources/inputs/cif_files/odac-21433.cif new file mode 100644 index 00000000..b3554cbd --- /dev/null +++ b/tests/testresources/inputs/cif_files/odac-21433.cif @@ -0,0 +1,169 @@ +data_image0 +_chemical_formula_structural Al24P24O96 +_chemical_formula_sum "Al24 P24 O96" +_cell_length_a 18.7247 +_cell_length_b 18.7247 +_cell_length_c 9.4862 +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90.0001 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Al Al1 1.0 0.95507 0.83477 0.84024 1.0000 + Al Al2 1.0 0.16576 0.93612 0.91662 1.0000 + Al Al3 1.0 0.06583 0.94694 0.33735 1.0000 + Al Al4 1.0 0.54508 0.66527 0.83989 1.0000 + Al Al5 1.0 0.33427 0.56385 0.91669 1.0000 + Al Al6 1.0 0.43405 0.55299 0.33746 1.0000 + Al Al7 1.0 0.66518 0.95501 0.84012 1.0000 + Al Al8 1.0 0.56381 0.16567 0.91648 1.0000 + Al Al9 1.0 0.55294 0.06572 0.33734 1.0000 + Al Al10 1.0 0.83478 0.54492 0.84010 1.0000 + Al Al11 1.0 0.93619 0.33432 0.91650 1.0000 + Al Al12 1.0 0.94709 0.43432 0.33731 1.0000 + Al Al13 1.0 0.04498 0.16528 0.15993 1.0000 + Al Al14 1.0 0.83431 0.06384 0.08358 1.0000 + Al Al15 1.0 0.93429 0.05297 0.66264 1.0000 + Al Al16 1.0 0.45505 0.33472 0.15992 1.0000 + Al Al17 1.0 0.66567 0.43615 0.08362 1.0000 + Al Al18 1.0 0.56571 0.44701 0.66262 1.0000 + Al Al19 1.0 0.33476 0.04486 0.15998 1.0000 + Al Al20 1.0 0.43584 0.83431 0.08383 1.0000 + Al Al21 1.0 0.44704 0.93429 0.66265 1.0000 + Al Al22 1.0 0.16529 0.45519 0.16007 1.0000 + Al Al23 1.0 0.06367 0.66554 0.08351 1.0000 + Al Al24 1.0 0.05303 0.56570 0.66263 1.0000 + P P1 1.0 0.06553 0.83448 0.09144 1.0000 + P P2 1.0 0.83432 0.95131 0.84001 1.0000 + P P3 1.0 0.05645 0.93368 0.66221 1.0000 + P P4 1.0 0.43486 0.66519 0.09112 1.0000 + P P5 1.0 0.66569 0.54866 0.84000 1.0000 + P P6 1.0 0.44356 0.56634 0.66222 1.0000 + P P7 1.0 0.66531 0.06534 0.09135 1.0000 + P P8 1.0 0.54855 0.83433 0.84023 1.0000 + P P9 1.0 0.56631 0.05640 0.66210 1.0000 + P P10 1.0 0.83470 0.43466 0.09137 1.0000 + P P11 1.0 0.95127 0.66568 0.83986 1.0000 + P P12 1.0 0.93370 0.44359 0.66209 1.0000 + P P13 1.0 0.93466 0.16531 0.90868 1.0000 + P P14 1.0 0.16567 0.04871 0.16002 1.0000 + P P15 1.0 0.94364 0.06626 0.33786 1.0000 + P P16 1.0 0.56534 0.33468 0.90868 1.0000 + P P17 1.0 0.33435 0.45122 0.16004 1.0000 + P P18 1.0 0.55633 0.43378 0.33784 1.0000 + P P19 1.0 0.33470 0.93462 0.90842 1.0000 + P P20 1.0 0.45128 0.16564 0.16000 1.0000 + P P21 1.0 0.43369 0.94351 0.33798 1.0000 + P P22 1.0 0.16534 0.56554 0.90885 1.0000 + P P23 1.0 0.04874 0.33439 0.15998 1.0000 + P P24 1.0 0.06634 0.55647 0.33801 1.0000 + O O1 1.0 0.99702 0.84563 0.00411 1.0000 + O O2 1.0 0.05535 0.87068 0.23465 1.0000 + O O3 1.0 0.13060 0.86521 0.01367 1.0000 + O O4 1.0 0.07989 0.75515 0.11712 1.0000 + O O5 1.0 0.87340 0.87943 0.83702 1.0000 + O O6 1.0 0.84495 0.98470 0.98711 1.0000 + O O7 1.0 0.75516 0.93785 0.80993 1.0000 + O O8 1.0 0.86300 0.00156 0.72489 1.0000 + O O9 1.0 0.12251 0.94211 0.75543 1.0000 + O O10 1.0 0.01277 0.00297 0.67165 1.0000 + O O11 1.0 0.01125 0.86919 0.70897 1.0000 + O O12 1.0 0.08168 0.92068 0.51068 1.0000 + O O13 1.0 0.50322 0.65370 0.00367 1.0000 + O O14 1.0 0.44472 0.62910 0.23447 1.0000 + O O15 1.0 0.36937 0.63492 0.01375 1.0000 + O O16 1.0 0.42073 0.74448 0.11697 1.0000 + O O17 1.0 0.62670 0.62057 0.83690 1.0000 + O O18 1.0 0.65506 0.51529 0.98711 1.0000 + O O19 1.0 0.74485 0.56212 0.80992 1.0000 + O O20 1.0 0.63699 0.49842 0.72487 1.0000 + O O21 1.0 0.37751 0.55793 0.75554 1.0000 + O O22 1.0 0.48722 0.49704 0.67163 1.0000 + O O23 1.0 0.48875 0.63084 0.70887 1.0000 + O O24 1.0 0.41833 0.57942 0.51073 1.0000 + O O25 1.0 0.65376 0.99697 0.00380 1.0000 + O O26 1.0 0.62912 0.05522 0.23457 1.0000 + O O27 1.0 0.63467 0.13070 0.01418 1.0000 + O O28 1.0 0.74466 0.07909 0.11661 1.0000 + O O29 1.0 0.62043 0.87340 0.83724 1.0000 + O O30 1.0 0.51506 0.84467 0.98726 1.0000 + O O31 1.0 0.56211 0.75521 0.80990 1.0000 + O O32 1.0 0.49836 0.86302 0.72501 1.0000 + O O33 1.0 0.55786 0.12249 0.75529 1.0000 + O O34 1.0 0.49701 0.01275 0.67166 1.0000 + O O35 1.0 0.63079 0.01121 0.70882 1.0000 + O O36 1.0 0.57921 0.08165 0.51058 1.0000 + O O37 1.0 0.84625 0.50303 0.00382 1.0000 + O O38 1.0 0.87089 0.44479 0.23457 1.0000 + O O39 1.0 0.86532 0.36931 0.01417 1.0000 + O O40 1.0 0.75534 0.42093 0.11661 1.0000 + O O41 1.0 0.87941 0.62662 0.83681 1.0000 + O O42 1.0 0.98460 0.65513 0.98710 1.0000 + O O43 1.0 0.93786 0.74483 0.80977 1.0000 + O O44 1.0 0.00161 0.63701 0.72491 1.0000 + O O45 1.0 0.94215 0.37751 0.75530 1.0000 + O O46 1.0 0.00301 0.48726 0.67169 1.0000 + O O47 1.0 0.86922 0.48878 0.70879 1.0000 + O O48 1.0 0.92081 0.41837 0.51056 1.0000 + O O49 1.0 0.00302 0.15376 0.99624 1.0000 + O O50 1.0 0.94479 0.12914 0.76544 1.0000 + O O51 1.0 0.86929 0.13466 0.98579 1.0000 + O O52 1.0 0.92090 0.24467 0.88341 1.0000 + O O53 1.0 0.12664 0.12060 0.16298 1.0000 + O O54 1.0 0.15504 0.01528 0.01294 1.0000 + O O55 1.0 0.24482 0.06220 0.19004 1.0000 + O O56 1.0 0.13697 0.99848 0.27516 1.0000 + O O57 1.0 0.87754 0.05780 0.24468 1.0000 + O O58 1.0 0.98731 0.99695 0.32837 1.0000 + O O59 1.0 0.98881 0.13075 0.29113 1.0000 + O O60 1.0 0.91837 0.07919 0.48937 1.0000 + O O61 1.0 0.49699 0.34625 0.99624 1.0000 + O O62 1.0 0.55521 0.37086 0.76545 1.0000 + O O63 1.0 0.63071 0.36534 0.98578 1.0000 + O O64 1.0 0.57910 0.25533 0.88342 1.0000 + O O65 1.0 0.37333 0.37931 0.16283 1.0000 + O O66 1.0 0.34499 0.48472 0.01298 1.0000 + O O67 1.0 0.25521 0.43770 0.18996 1.0000 + O O68 1.0 0.36311 0.50131 0.27525 1.0000 + O O69 1.0 0.62242 0.44224 0.24467 1.0000 + O O70 1.0 0.51266 0.50308 0.32841 1.0000 + O O71 1.0 0.51117 0.36929 0.29111 1.0000 + O O72 1.0 0.58161 0.42085 0.48934 1.0000 + O O73 1.0 0.34621 0.00291 0.99621 1.0000 + O O74 1.0 0.37077 0.94496 0.76512 1.0000 + O O75 1.0 0.36555 0.86918 0.98486 1.0000 + O O76 1.0 0.25535 0.92083 0.88312 1.0000 + O O77 1.0 0.37943 0.12657 0.16302 1.0000 + O O78 1.0 0.48467 0.15505 0.01289 1.0000 + O O79 1.0 0.43784 0.24479 0.19007 1.0000 + O O80 1.0 0.50156 0.13699 0.27509 1.0000 + O O81 1.0 0.44233 0.87742 0.24484 1.0000 + O O82 1.0 0.50298 0.98720 0.32856 1.0000 + O O83 1.0 0.36929 0.98878 0.29125 1.0000 + O O84 1.0 0.42075 0.91821 0.48946 1.0000 + O O85 1.0 0.15379 0.49721 0.99639 1.0000 + O O86 1.0 0.12914 0.55535 0.76567 1.0000 + O O87 1.0 0.13471 0.63101 0.98572 1.0000 + O O88 1.0 0.24469 0.57939 0.88358 1.0000 + O O89 1.0 0.12058 0.37347 0.16295 1.0000 + O O90 1.0 0.01533 0.34497 0.01288 1.0000 + O O91 1.0 0.06218 0.25523 0.19006 1.0000 + O O92 1.0 0.99846 0.36305 0.27509 1.0000 + O O93 1.0 0.05782 0.62258 0.24482 1.0000 + O O94 1.0 0.99694 0.51294 0.32853 1.0000 + O O95 1.0 0.13056 0.51102 0.29139 1.0000 + O O96 1.0 0.07926 0.58184 0.48946 1.0000 diff --git a/tests/testresources/inputs/cif_files/odac-21478.cif b/tests/testresources/inputs/cif_files/odac-21478.cif new file mode 100644 index 00000000..81afed13 --- /dev/null +++ b/tests/testresources/inputs/cif_files/odac-21478.cif @@ -0,0 +1,209 @@ +data_image0 +_chemical_formula_structural Zn24P32H32O96 +_chemical_formula_sum "Zn24 P32 H32 O96" +_cell_length_a 17.0323 +_cell_length_b 9.06338 +_cell_length_c 24.5579 +_cell_angle_alpha 89.9998 +_cell_angle_beta 107.472 +_cell_angle_gamma 90 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Zn Zn1 1.0 0.10629 0.75801 0.27142 1.0000 + Zn Zn2 1.0 0.75579 0.72476 0.16434 1.0000 + Zn Zn3 1.0 0.22745 0.48941 0.49468 1.0000 + Zn Zn4 1.0 0.29113 0.98105 0.49893 1.0000 + Zn Zn5 1.0 0.29105 0.29821 0.17638 1.0000 + Zn Zn6 1.0 0.38342 0.74294 0.72159 1.0000 + Zn Zn7 1.0 0.89323 0.25726 0.22752 1.0000 + Zn Zn8 1.0 0.24335 0.22443 0.33461 1.0000 + Zn Zn9 1.0 0.77121 0.99023 0.00498 1.0000 + Zn Zn10 1.0 0.70923 0.48529 0.00071 1.0000 + Zn Zn11 1.0 0.70883 0.79879 0.32336 1.0000 + Zn Zn12 1.0 0.61671 0.24284 0.77848 1.0000 + Zn Zn13 1.0 0.89319 0.24283 0.72816 1.0000 + Zn Zn14 1.0 0.24398 0.27586 0.83543 1.0000 + Zn Zn15 1.0 0.77180 0.51106 0.50487 1.0000 + Zn Zn16 1.0 0.70859 0.01894 0.50086 1.0000 + Zn Zn17 1.0 0.70910 0.70244 0.82375 1.0000 + Zn Zn18 1.0 0.61649 0.25672 0.27818 1.0000 + Zn Zn19 1.0 0.10662 0.74250 0.77230 1.0000 + Zn Zn20 1.0 0.75602 0.77523 0.66485 1.0000 + Zn Zn21 1.0 0.22688 0.00881 0.99562 1.0000 + Zn Zn22 1.0 0.28961 0.51504 0.99903 1.0000 + Zn Zn23 1.0 0.29135 0.20090 0.67666 1.0000 + Zn Zn24 1.0 0.38393 0.75667 0.22232 1.0000 + P P1 1.0 0.92717 0.59618 0.25294 1.0000 + P P2 1.0 0.19101 0.48165 0.24440 1.0000 + P P3 1.0 0.16720 0.76977 0.41317 1.0000 + P P4 1.0 0.65055 0.77972 0.03503 1.0000 + P P5 1.0 0.18043 0.19978 0.54651 1.0000 + P P6 1.0 0.32245 0.71635 0.58862 1.0000 + P P7 1.0 0.44264 0.43047 0.27043 1.0000 + P P8 1.0 0.65617 0.55040 0.23040 1.0000 + P P9 1.0 0.07236 0.09565 0.24466 1.0000 + P P10 1.0 0.80897 0.98124 0.25521 1.0000 + P P11 1.0 0.83042 0.26858 0.08595 1.0000 + P P12 1.0 0.34804 0.27848 0.46396 1.0000 + P P13 1.0 0.82114 0.70454 0.95396 1.0000 + P P14 1.0 0.67750 0.21864 0.91144 1.0000 + P P15 1.0 0.55717 0.93151 0.22952 1.0000 + P P16 1.0 0.34375 0.05029 0.26952 1.0000 + P P17 1.0 0.07262 0.40365 0.74671 1.0000 + P P18 1.0 0.80872 0.51879 0.75566 1.0000 + P P19 1.0 0.83232 0.23083 0.58642 1.0000 + P P20 1.0 0.34816 0.22023 0.96495 1.0000 + P P21 1.0 0.81940 0.80028 0.45346 1.0000 + P P22 1.0 0.67725 0.28350 0.41108 1.0000 + P P23 1.0 0.55765 0.56922 0.72990 1.0000 + P P24 1.0 0.34380 0.44946 0.76954 1.0000 + P P25 1.0 0.92716 0.90369 0.75364 1.0000 + P P26 1.0 0.19144 0.01856 0.74513 1.0000 + P P27 1.0 0.16737 0.73021 0.91405 1.0000 + P P28 1.0 0.65097 0.72130 0.53531 1.0000 + P P29 1.0 0.17863 0.29685 0.04666 1.0000 + P P30 1.0 0.32343 0.78009 0.08921 1.0000 + P P31 1.0 0.44311 0.06806 0.77053 1.0000 + P P32 1.0 0.65611 0.94990 0.73026 1.0000 + H H1 1.0 0.91814 0.68659 0.29737 1.0000 + H H2 1.0 0.11086 0.43129 0.23912 1.0000 + H H3 1.0 0.11732 0.81275 0.44689 1.0000 + H H4 1.0 0.58512 0.81258 0.05681 1.0000 + H H5 1.0 0.11417 0.17164 0.56811 1.0000 + H H6 1.0 0.38491 0.60883 0.60176 1.0000 + H H7 1.0 0.39656 0.38397 0.30626 1.0000 + H H8 1.0 0.57656 0.58850 0.23169 1.0000 + H H9 1.0 0.08112 0.18536 0.20001 1.0000 + H H10 1.0 0.88900 0.93080 0.26015 1.0000 + H H11 1.0 0.88015 0.30503 0.05139 1.0000 + H H12 1.0 0.41332 0.31127 0.44192 1.0000 + H H13 1.0 0.88813 0.67700 0.93311 1.0000 + H H14 1.0 0.61444 0.11233 0.89899 1.0000 + H H15 1.0 0.60284 0.88444 0.19350 1.0000 + H H16 1.0 0.42330 0.08855 0.26816 1.0000 + H H17 1.0 0.08155 0.31322 0.70226 1.0000 + H H18 1.0 0.88882 0.56944 0.76099 1.0000 + H H19 1.0 0.88216 0.18808 0.55265 1.0000 + H H20 1.0 0.41368 0.18674 0.94326 1.0000 + H H21 1.0 0.88564 0.82831 0.43184 1.0000 + H H22 1.0 0.61467 0.39077 0.39781 1.0000 + H H23 1.0 0.60353 0.61539 0.69389 1.0000 + H H24 1.0 0.42343 0.41118 0.76835 1.0000 + H H25 1.0 0.91810 0.81351 0.79810 1.0000 + H H26 1.0 0.11139 0.06904 0.74008 1.0000 + H H27 1.0 0.11754 0.68984 0.94803 1.0000 + H H28 1.0 0.58538 0.68863 0.55705 1.0000 + H H29 1.0 0.11286 0.32684 0.06855 1.0000 + H H30 1.0 0.38724 0.88498 0.10185 1.0000 + H H31 1.0 0.39703 0.11382 0.80645 1.0000 + H H32 1.0 0.57652 0.91145 0.73152 1.0000 + O O1 1.0 0.01335 0.61855 0.24681 1.0000 + O O2 1.0 0.86336 0.64019 0.19667 1.0000 + O O3 1.0 0.91534 0.43790 0.27098 1.0000 + O O4 1.0 0.19214 0.65029 0.25078 1.0000 + O O5 1.0 0.21076 0.43647 0.18976 1.0000 + O O6 1.0 0.25070 0.41342 0.29840 1.0000 + O O7 1.0 0.11465 0.79078 0.35109 1.0000 + O O8 1.0 0.24367 0.86997 0.42780 1.0000 + O O9 1.0 0.18990 0.60571 0.42487 1.0000 + O O10 1.0 0.66054 0.91036 0.99769 1.0000 + O O11 1.0 0.73155 0.76041 0.08387 1.0000 + O O12 1.0 0.62757 0.63454 0.00182 1.0000 + O O13 1.0 0.19243 0.05928 0.51505 1.0000 + O O14 1.0 0.15591 0.33516 0.50732 1.0000 + O O15 1.0 0.25879 0.23394 0.59585 1.0000 + O O16 1.0 0.24142 0.64382 0.55333 1.0000 + O O17 1.0 0.31223 0.77937 0.64439 1.0000 + O O18 1.0 0.35100 0.83788 0.55517 1.0000 + O O19 1.0 0.53016 0.37313 0.29720 1.0000 + O O20 1.0 0.44091 0.59928 0.26977 1.0000 + O O21 1.0 0.40355 0.36564 0.21024 1.0000 + O O22 1.0 0.66408 0.61081 0.17376 1.0000 + O O23 1.0 0.66489 0.38199 0.23275 1.0000 + O O24 1.0 0.71977 0.61876 0.28276 1.0000 + O O25 1.0 0.98644 0.11820 0.25123 1.0000 + O O26 1.0 0.13634 0.13961 0.30087 1.0000 + O O27 1.0 0.08419 0.93709 0.22683 1.0000 + O O28 1.0 0.80799 0.14986 0.24886 1.0000 + O O29 1.0 0.78957 0.93604 0.30998 1.0000 + O O30 1.0 0.74894 0.91289 0.20139 1.0000 + O O31 1.0 0.88413 0.28965 0.14767 1.0000 + O O32 1.0 0.75605 0.37384 0.07170 1.0000 + O O33 1.0 0.80363 0.10596 0.07517 1.0000 + O O34 1.0 0.33789 0.41069 0.50054 1.0000 + O O35 1.0 0.26703 0.25786 0.41517 1.0000 + O O36 1.0 0.37091 0.13391 0.49758 1.0000 + O O37 1.0 0.80811 0.56446 0.98524 1.0000 + O O38 1.0 0.84558 0.83980 0.99340 1.0000 + O O39 1.0 0.74343 0.73967 0.90431 1.0000 + O O40 1.0 0.75825 0.14536 0.94677 1.0000 + O O41 1.0 0.68793 0.27953 0.85543 1.0000 + O O42 1.0 0.64961 0.34218 0.94432 1.0000 + O O43 1.0 0.46946 0.87476 0.20305 1.0000 + O O44 1.0 0.55955 0.10028 0.23014 1.0000 + O O45 1.0 0.59634 0.86662 0.28968 1.0000 + O O46 1.0 0.33578 0.11124 0.32608 1.0000 + O O47 1.0 0.33524 0.88183 0.26752 1.0000 + O O48 1.0 0.28006 0.11816 0.21710 1.0000 + O O49 1.0 0.98641 0.38179 0.75283 1.0000 + O O50 1.0 0.13630 0.35934 0.80298 1.0000 + O O51 1.0 0.08492 0.56183 0.72876 1.0000 + O O52 1.0 0.80769 0.35016 0.74923 1.0000 + O O53 1.0 0.78892 0.56336 0.81033 1.0000 + O O54 1.0 0.74903 0.58708 0.70167 1.0000 + O O55 1.0 0.88501 0.21036 0.64847 1.0000 + O O56 1.0 0.75606 0.13014 0.57194 1.0000 + O O57 1.0 0.80925 0.39471 0.57466 1.0000 + O O58 1.0 0.33718 0.08882 0.00159 1.0000 + O O59 1.0 0.26751 0.24164 0.91595 1.0000 + O O60 1.0 0.37129 0.36487 0.99851 1.0000 + O O61 1.0 0.80739 0.94087 0.48485 1.0000 + O O62 1.0 0.84387 0.66501 0.49270 1.0000 + O O63 1.0 0.74105 0.76582 0.40415 1.0000 + O O64 1.0 0.75819 0.35643 0.44633 1.0000 + O O65 1.0 0.68766 0.22018 0.35541 1.0000 + O O66 1.0 0.64878 0.16206 0.44460 1.0000 + O O67 1.0 0.46992 0.62555 0.70302 1.0000 + O O68 1.0 0.55993 0.40043 0.73083 1.0000 + O O69 1.0 0.59670 0.63473 0.78998 1.0000 + O O70 1.0 0.33586 0.38935 0.82623 1.0000 + O O71 1.0 0.33506 0.61787 0.76711 1.0000 + O O72 1.0 0.28021 0.38096 0.71722 1.0000 + O O73 1.0 0.01339 0.88148 0.74759 1.0000 + O O74 1.0 0.86349 0.85962 0.69733 1.0000 + O O75 1.0 0.91499 0.06190 0.77161 1.0000 + O O76 1.0 0.19251 0.84997 0.75164 1.0000 + O O77 1.0 0.21094 0.06341 0.69037 1.0000 + O O78 1.0 0.25135 0.08713 0.79897 1.0000 + O O79 1.0 0.11457 0.70986 0.85199 1.0000 + O O80 1.0 0.24314 0.62817 0.92837 1.0000 + O O81 1.0 0.19182 0.89376 0.92543 1.0000 + O O82 1.0 0.66115 0.58929 0.49862 1.0000 + O O83 1.0 0.73180 0.74103 0.58430 1.0000 + O O84 1.0 0.62860 0.86623 0.50186 1.0000 + O O85 1.0 0.19053 0.43491 0.01387 1.0000 + O O86 1.0 0.15317 0.15896 0.00882 1.0000 + O O87 1.0 0.25755 0.26405 0.09570 1.0000 + O O88 1.0 0.24289 0.85511 0.05461 1.0000 + O O89 1.0 0.31319 0.71857 0.14520 1.0000 + O O90 1.0 0.35011 0.65656 0.05572 1.0000 + O O91 1.0 0.53062 0.12536 0.79736 1.0000 + O O92 1.0 0.44111 0.89927 0.76938 1.0000 + O O93 1.0 0.40400 0.13366 0.71047 1.0000 + O O94 1.0 0.66418 0.88980 0.67362 1.0000 + O O95 1.0 0.66475 0.11832 0.73271 1.0000 + O O96 1.0 0.71986 0.88156 0.78252 1.0000 diff --git a/tests/testresources/inputs/cif_files/odac-21735.cif b/tests/testresources/inputs/cif_files/odac-21735.cif new file mode 100644 index 00000000..04257992 --- /dev/null +++ b/tests/testresources/inputs/cif_files/odac-21735.cif @@ -0,0 +1,139 @@ +data_image0 +_chemical_formula_structural Zr6H28C48O32 +_chemical_formula_sum "Zr6 H28 C48 O32" +_cell_length_a 14.7589 +_cell_length_b 14.7589 +_cell_length_c 14.7589 +_cell_angle_alpha 60 +_cell_angle_beta 60 +_cell_angle_gamma 60 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Zr Zr1 1.0 0.88062 0.11969 0.11996 1.0000 + Zr Zr2 1.0 0.12013 0.88017 0.88056 1.0000 + Zr Zr3 1.0 0.12016 0.88015 0.12009 1.0000 + Zr Zr4 1.0 0.88064 0.11977 0.88045 1.0000 + Zr Zr5 1.0 0.12023 0.11965 0.88039 1.0000 + Zr Zr6 1.0 0.88068 0.88010 0.12005 1.0000 + H H1 1.0 0.84757 0.13815 0.42213 1.0000 + H H2 1.0 0.13788 0.84700 0.59344 1.0000 + H H3 1.0 0.42387 0.59399 0.84593 1.0000 + H H4 1.0 0.59268 0.42201 0.13852 1.0000 + H H5 1.0 0.42413 0.84540 0.13697 1.0000 + H H6 1.0 0.59269 0.13826 0.84776 1.0000 + H H7 1.0 0.84752 0.42194 0.59324 1.0000 + H H8 1.0 0.13673 0.59430 0.42380 1.0000 + H H9 1.0 0.14064 0.41983 0.84925 1.0000 + H H10 1.0 0.84564 0.59468 0.13590 1.0000 + H H11 1.0 0.59265 0.84762 0.42169 1.0000 + H H12 1.0 0.42175 0.13851 0.59242 1.0000 + H H13 1.0 0.13802 0.84688 0.42275 1.0000 + H H14 1.0 0.84746 0.13835 0.59276 1.0000 + H H15 1.0 0.59471 0.42348 0.84588 1.0000 + H H16 1.0 0.42215 0.59267 0.13829 1.0000 + H H17 1.0 0.84496 0.42476 0.13513 1.0000 + H H18 1.0 0.14171 0.58942 0.85040 1.0000 + H H19 1.0 0.42195 0.84756 0.59238 1.0000 + H H20 1.0 0.59241 0.13860 0.42173 1.0000 + H H21 1.0 0.42207 0.13802 0.84789 1.0000 + H H22 1.0 0.59467 0.84563 0.13689 1.0000 + H H23 1.0 0.84721 0.59266 0.42270 1.0000 + H H24 1.0 0.13680 0.42375 0.59451 1.0000 + H H25 1.0 0.09476 0.09447 0.09434 1.0000 + H H26 1.0 0.09454 0.09444 0.71734 1.0000 + H H27 1.0 0.09490 0.71699 0.09501 1.0000 + H H28 1.0 0.71748 0.09426 0.09440 1.0000 + C C1 1.0 0.91052 0.07496 0.46055 1.0000 + C C2 1.0 0.07483 0.91013 0.55508 1.0000 + C C3 1.0 0.46183 0.55557 0.90931 1.0000 + C C4 1.0 0.55488 0.46050 0.07501 1.0000 + C C5 1.0 0.46184 0.90899 0.07423 1.0000 + C C6 1.0 0.55491 0.07469 0.91050 1.0000 + C C7 1.0 0.91027 0.46057 0.55527 1.0000 + C C8 1.0 0.07397 0.55569 0.46178 1.0000 + C C9 1.0 0.07685 0.45886 0.91155 1.0000 + C C10 1.0 0.90968 0.55553 0.07373 1.0000 + C C11 1.0 0.55441 0.91066 0.46003 1.0000 + C C12 1.0 0.46012 0.07531 0.55423 1.0000 + C C13 1.0 0.07491 0.91008 0.46089 1.0000 + C C14 1.0 0.91045 0.07504 0.55473 1.0000 + C C15 1.0 0.55607 0.46147 0.90927 1.0000 + C C16 1.0 0.46073 0.55467 0.07493 1.0000 + C C17 1.0 0.90937 0.46169 0.07332 1.0000 + C C18 1.0 0.07726 0.55255 0.91208 1.0000 + C C19 1.0 0.46024 0.91062 0.55422 1.0000 + C C20 1.0 0.55429 0.07537 0.46005 1.0000 + C C21 1.0 0.46076 0.07458 0.91058 1.0000 + C C22 1.0 0.55602 0.90907 0.07416 1.0000 + C C23 1.0 0.91009 0.55482 0.46116 1.0000 + C C24 1.0 0.07408 0.46148 0.55590 1.0000 + C C25 1.0 0.99579 0.99553 0.30909 1.0000 + C C26 1.0 0.99328 0.99303 0.41269 1.0000 + C C27 1.0 0.99550 0.99547 0.70064 1.0000 + C C28 1.0 0.99311 0.99310 0.60190 1.0000 + C C29 1.0 0.30945 0.70036 0.99542 1.0000 + C C30 1.0 0.41319 0.60197 0.99274 1.0000 + C C31 1.0 0.70062 0.30903 0.99560 1.0000 + C C32 1.0 0.60239 0.41290 0.99278 1.0000 + C C33 1.0 0.30949 0.99499 0.99571 1.0000 + C C34 1.0 0.41320 0.99233 0.99304 1.0000 + C C35 1.0 0.70091 0.99512 0.99539 1.0000 + C C36 1.0 0.60241 0.99248 0.99287 1.0000 + C C37 1.0 0.99564 0.30917 0.70075 1.0000 + C C38 1.0 0.99292 0.41288 0.60240 1.0000 + C C39 1.0 0.99535 0.70049 0.30958 1.0000 + C C40 1.0 0.99258 0.60217 0.41335 1.0000 + C C41 1.0 0.99575 0.30905 0.99515 1.0000 + C C42 1.0 -0.00651 0.41240 -0.00717 1.0000 + C C43 1.0 0.99649 0.69948 0.99615 1.0000 + C C44 1.0 0.99412 0.60084 0.99363 1.0000 + C C45 1.0 0.70029 0.99568 0.30883 1.0000 + C C46 1.0 0.60139 0.99347 0.41211 1.0000 + C C47 1.0 0.30899 0.99550 0.70017 1.0000 + C C48 1.0 0.41226 0.99339 0.60127 1.0000 + O O1 1.0 0.92048 0.07421 0.26786 1.0000 + O O2 1.0 0.07371 0.91969 0.73896 1.0000 + O O3 1.0 0.26847 0.73847 0.91985 1.0000 + O O4 1.0 0.73838 0.26782 0.07437 1.0000 + O O5 1.0 0.26822 0.91968 0.07433 1.0000 + O O6 1.0 0.73859 0.07398 0.92022 1.0000 + O O7 1.0 0.92019 0.26801 0.73887 1.0000 + O O8 1.0 0.07413 0.73827 0.26823 1.0000 + O O9 1.0 0.07461 0.26766 0.92002 1.0000 + O O10 1.0 0.92091 0.73751 0.07465 1.0000 + O O11 1.0 0.73820 0.92028 0.26768 1.0000 + O O12 1.0 0.26821 0.07374 0.73851 1.0000 + O O13 1.0 0.07427 0.91999 0.26813 1.0000 + O O14 1.0 0.92029 0.07429 0.73835 1.0000 + O O15 1.0 0.73846 0.26782 0.92029 1.0000 + O O16 1.0 0.26811 0.73802 0.07429 1.0000 + O O17 1.0 0.91983 0.26845 0.07332 1.0000 + O O18 1.0 0.07508 0.73744 0.92073 1.0000 + O O19 1.0 0.26784 0.92014 0.73805 1.0000 + O O20 1.0 0.73860 0.07392 0.26804 1.0000 + O O21 1.0 0.26825 0.07370 0.92034 1.0000 + O O22 1.0 0.73917 0.91951 0.07378 1.0000 + O O23 1.0 0.91995 0.73852 0.26835 1.0000 + O O24 1.0 0.07459 0.26762 0.73840 1.0000 + O O25 1.0 0.95066 0.14914 0.95049 1.0000 + O O26 1.0 0.06794 0.79746 0.06791 1.0000 + O O27 1.0 0.14956 0.95018 0.95055 1.0000 + O O28 1.0 0.79796 0.06743 0.06766 1.0000 + O O29 1.0 0.95067 0.95010 0.95055 1.0000 + O O30 1.0 0.06782 0.06759 0.06769 1.0000 + O O31 1.0 0.95058 0.95027 0.14950 1.0000 + O O32 1.0 0.06780 0.06740 0.79781 1.0000 diff --git a/tests/testresources/inputs/cif_files/odac-21816.cif b/tests/testresources/inputs/cif_files/odac-21816.cif new file mode 100644 index 00000000..0fd41b5d --- /dev/null +++ b/tests/testresources/inputs/cif_files/odac-21816.cif @@ -0,0 +1,417 @@ +data_image0 +_chemical_formula_structural Cu16H88C192N16O80 +_chemical_formula_sum "Cu16 H88 C192 N16 O80" +_cell_length_a 18.9609 +_cell_length_b 18.9609 +_cell_length_c 34.7406 +_cell_angle_alpha 90 +_cell_angle_beta 90 +_cell_angle_gamma 90.0002 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + Cu Cu1 1.0 0.73250 0.29250 0.22324 1.0000 + Cu Cu2 1.0 0.26750 0.70750 0.22324 1.0000 + Cu Cu3 1.0 0.70750 0.73250 0.22324 1.0000 + Cu Cu4 1.0 0.29250 0.26750 0.22324 1.0000 + Cu Cu5 1.0 0.76750 0.79250 0.27676 1.0000 + Cu Cu6 1.0 0.23250 0.20750 0.27676 1.0000 + Cu Cu7 1.0 0.79250 0.23250 0.27676 1.0000 + Cu Cu8 1.0 0.20750 0.76750 0.27676 1.0000 + Cu Cu9 1.0 0.26750 0.70750 0.77676 1.0000 + Cu Cu10 1.0 0.73249 0.29251 0.77678 1.0000 + Cu Cu11 1.0 0.29251 0.26749 0.77678 1.0000 + Cu Cu12 1.0 0.70750 0.73249 0.77676 1.0000 + Cu Cu13 1.0 0.23249 0.20750 0.72324 1.0000 + Cu Cu14 1.0 0.76749 0.79252 0.72322 1.0000 + Cu Cu15 1.0 0.20750 0.76750 0.72324 1.0000 + Cu Cu16 1.0 0.79252 0.23249 0.72322 1.0000 + H H1 1.0 0.01520 0.45173 0.06202 1.0000 + H H2 1.0 0.96906 0.35933 0.09267 1.0000 + H H3 1.0 0.90202 0.32039 0.14556 1.0000 + H H4 1.0 0.01255 0.24349 0.24520 1.0000 + H H5 1.0 0.12878 0.29649 0.14259 1.0000 + H H6 1.0 0.98480 0.54827 0.06202 1.0000 + H H7 1.0 0.03094 0.64067 0.09267 1.0000 + H H8 1.0 0.09798 0.67961 0.14556 1.0000 + H H9 1.0 0.98745 0.75651 0.24520 1.0000 + H H10 1.0 0.87122 0.70351 0.14259 1.0000 + H H11 1.0 0.54827 0.01520 0.06202 1.0000 + H H12 1.0 0.64067 0.96906 0.09267 1.0000 + H H13 1.0 0.67961 0.90202 0.14556 1.0000 + H H14 1.0 0.75651 0.01255 0.24520 1.0000 + H H15 1.0 0.70351 0.12879 0.14259 1.0000 + H H16 1.0 0.45173 0.98480 0.06202 1.0000 + H H17 1.0 0.35933 0.03094 0.09267 1.0000 + H H18 1.0 0.32039 0.09798 0.14556 1.0000 + H H19 1.0 0.24349 0.98745 0.24520 1.0000 + H H20 1.0 0.29649 0.87121 0.14259 1.0000 + H H21 1.0 0.48480 0.95173 0.43798 1.0000 + H H22 1.0 0.53094 0.85933 0.40733 1.0000 + H H23 1.0 0.59798 0.82039 0.35444 1.0000 + H H24 1.0 0.48745 0.74349 0.25479 1.0000 + H H25 1.0 0.37121 0.79649 0.35741 1.0000 + H H26 1.0 0.51520 0.04827 0.43798 1.0000 + H H27 1.0 0.46906 0.14067 0.40733 1.0000 + H H28 1.0 0.40202 0.17961 0.35444 1.0000 + H H29 1.0 0.51255 0.25651 0.25480 1.0000 + H H30 1.0 0.62879 0.20351 0.35741 1.0000 + H H31 1.0 0.95173 0.51520 0.43798 1.0000 + H H32 1.0 0.85933 0.46906 0.40733 1.0000 + H H33 1.0 0.82039 0.40202 0.35444 1.0000 + H H34 1.0 0.74349 0.51255 0.25480 1.0000 + H H35 1.0 0.79649 0.62878 0.35741 1.0000 + H H36 1.0 0.04827 0.48480 0.43798 1.0000 + H H37 1.0 0.14067 0.53094 0.40733 1.0000 + H H38 1.0 0.17961 0.59798 0.35444 1.0000 + H H39 1.0 0.25651 0.48745 0.25480 1.0000 + H H40 1.0 0.20351 0.37122 0.35741 1.0000 + H H41 1.0 0.98480 0.54827 0.93795 1.0000 + H H42 1.0 0.03095 0.64067 0.90731 1.0000 + H H43 1.0 0.09799 0.67961 0.85442 1.0000 + H H44 1.0 0.98745 0.75652 0.75478 1.0000 + H H45 1.0 0.87122 0.70351 0.85739 1.0000 + H H46 1.0 0.01520 0.45173 0.93795 1.0000 + H H47 1.0 0.96905 0.35933 0.90731 1.0000 + H H48 1.0 0.90201 0.32039 0.85442 1.0000 + H H49 1.0 0.01255 0.24348 0.75478 1.0000 + H H50 1.0 0.12878 0.29649 0.85739 1.0000 + H H51 1.0 0.45173 0.98480 0.93795 1.0000 + H H52 1.0 0.35935 0.03095 0.90731 1.0000 + H H53 1.0 0.32041 0.09798 0.85442 1.0000 + H H54 1.0 0.24348 0.98745 0.75478 1.0000 + H H55 1.0 0.29649 0.87122 0.85739 1.0000 + H H56 1.0 0.54826 0.01521 0.93795 1.0000 + H H57 1.0 0.64066 0.96906 0.90730 1.0000 + H H58 1.0 0.67961 0.90203 0.85441 1.0000 + H H59 1.0 0.75653 0.01253 0.75476 1.0000 + H H60 1.0 0.70345 0.12880 0.85738 1.0000 + H H61 1.0 0.51521 0.04826 0.56205 1.0000 + H H62 1.0 0.46906 0.14066 0.59269 1.0000 + H H63 1.0 0.40203 0.17961 0.64559 1.0000 + H H64 1.0 0.51255 0.25648 0.74525 1.0000 + H H65 1.0 0.62880 0.20345 0.64262 1.0000 + H H66 1.0 0.48480 0.95173 0.56205 1.0000 + H H67 1.0 0.53095 0.85935 0.59269 1.0000 + H H68 1.0 0.59798 0.82041 0.64558 1.0000 + H H69 1.0 0.48745 0.74347 0.74522 1.0000 + H H70 1.0 0.37122 0.79649 0.64261 1.0000 + H H71 1.0 0.04827 0.48480 0.56205 1.0000 + H H72 1.0 0.14067 0.53095 0.59269 1.0000 + H H73 1.0 0.17961 0.59799 0.64558 1.0000 + H H74 1.0 0.25652 0.48745 0.74522 1.0000 + H H75 1.0 0.20351 0.37122 0.64261 1.0000 + H H76 1.0 0.95173 0.51520 0.56205 1.0000 + H H77 1.0 0.85933 0.46905 0.59269 1.0000 + H H78 1.0 0.82039 0.40201 0.64558 1.0000 + H H79 1.0 0.74348 0.51255 0.74522 1.0000 + H H80 1.0 0.79649 0.62878 0.64261 1.0000 + H H81 1.0 0.08231 0.26766 0.99999 1.0000 + H H82 1.0 0.91769 0.73234 0.99999 1.0000 + H H83 1.0 0.73234 0.08231 0.99999 1.0000 + H H84 1.0 0.26766 0.91769 0.99999 1.0000 + H H85 1.0 0.41769 0.76766 0.50001 1.0000 + H H86 1.0 0.58231 0.23234 0.50001 1.0000 + H H87 1.0 0.76766 0.58231 0.50001 1.0000 + H H88 1.0 0.23234 0.41769 0.50001 1.0000 + C C1 1.0 0.02268 0.42546 0.03444 1.0000 + C C2 1.0 0.04692 0.35574 0.03464 1.0000 + C C3 1.0 0.06127 0.31811 0.07185 1.0000 + C C4 1.0 0.01555 0.31019 0.13907 1.0000 + C C5 1.0 0.95177 0.30591 0.15919 1.0000 + C C6 1.0 0.95068 0.28183 0.19722 1.0000 + C C7 1.0 0.01337 0.26264 0.21569 1.0000 + C C8 1.0 0.07714 0.26950 0.19585 1.0000 + C C9 1.0 0.07871 0.29250 0.15757 1.0000 + C C10 1.0 0.88158 0.27570 0.21757 1.0000 + C C11 1.0 0.14553 0.25531 0.21584 1.0000 + C C12 1.0 0.97732 0.57454 0.03444 1.0000 + C C13 1.0 0.95308 0.64426 0.03464 1.0000 + C C14 1.0 0.93873 0.68189 0.07185 1.0000 + C C15 1.0 0.98445 0.68981 0.13907 1.0000 + C C16 1.0 0.04823 0.69409 0.15919 1.0000 + C C17 1.0 0.04932 0.71817 0.19722 1.0000 + C C18 1.0 0.98663 0.73736 0.21569 1.0000 + C C19 1.0 0.92286 0.73050 0.19585 1.0000 + C C20 1.0 0.92129 0.70750 0.15757 1.0000 + C C21 1.0 0.11842 0.72430 0.21757 1.0000 + C C22 1.0 0.85447 0.74469 0.21584 1.0000 + C C23 1.0 0.57454 0.02268 0.03444 1.0000 + C C24 1.0 0.64426 0.04693 0.03464 1.0000 + C C25 1.0 0.68189 0.06127 0.07185 1.0000 + C C26 1.0 0.68981 0.01555 0.13907 1.0000 + C C27 1.0 0.69409 0.95177 0.15919 1.0000 + C C28 1.0 0.71817 0.95069 0.19722 1.0000 + C C29 1.0 0.73736 0.01337 0.21569 1.0000 + C C30 1.0 0.73050 0.07715 0.19585 1.0000 + C C31 1.0 0.70750 0.07871 0.15757 1.0000 + C C32 1.0 0.72430 0.88158 0.21757 1.0000 + C C33 1.0 0.74469 0.14553 0.21584 1.0000 + C C34 1.0 0.42546 0.97732 0.03444 1.0000 + C C35 1.0 0.35574 0.95307 0.03464 1.0000 + C C36 1.0 0.31811 0.93873 0.07185 1.0000 + C C37 1.0 0.31019 0.98445 0.13907 1.0000 + C C38 1.0 0.30591 0.04823 0.15919 1.0000 + C C39 1.0 0.28183 0.04931 0.19722 1.0000 + C C40 1.0 0.26264 0.98663 0.21569 1.0000 + C C41 1.0 0.26950 0.92285 0.19585 1.0000 + C C42 1.0 0.29250 0.92129 0.15757 1.0000 + C C43 1.0 0.27570 0.11842 0.21757 1.0000 + C C44 1.0 0.25531 0.85447 0.21584 1.0000 + C C45 1.0 0.47732 0.92546 0.46556 1.0000 + C C46 1.0 0.45307 0.85574 0.46536 1.0000 + C C47 1.0 0.43873 0.81811 0.42815 1.0000 + C C48 1.0 0.48445 0.81019 0.36093 1.0000 + C C49 1.0 0.54823 0.80591 0.34081 1.0000 + C C50 1.0 0.54931 0.78183 0.30278 1.0000 + C C51 1.0 0.48663 0.76264 0.28431 1.0000 + C C52 1.0 0.42286 0.76950 0.30415 1.0000 + C C53 1.0 0.42129 0.79250 0.34243 1.0000 + C C54 1.0 0.61842 0.77570 0.28243 1.0000 + C C55 1.0 0.35447 0.75531 0.28416 1.0000 + C C56 1.0 0.52268 0.07454 0.46556 1.0000 + C C57 1.0 0.54693 0.14426 0.46536 1.0000 + C C58 1.0 0.56127 0.18189 0.42815 1.0000 + C C59 1.0 0.51555 0.18981 0.36093 1.0000 + C C60 1.0 0.45177 0.19409 0.34081 1.0000 + C C61 1.0 0.45069 0.21817 0.30278 1.0000 + C C62 1.0 0.51337 0.23736 0.28431 1.0000 + C C63 1.0 0.57715 0.23050 0.30415 1.0000 + C C64 1.0 0.57871 0.20750 0.34243 1.0000 + C C65 1.0 0.38158 0.22430 0.28243 1.0000 + C C66 1.0 0.64553 0.24469 0.28416 1.0000 + C C67 1.0 0.92546 0.52268 0.46556 1.0000 + C C68 1.0 0.85574 0.54692 0.46536 1.0000 + C C69 1.0 0.81811 0.56127 0.42815 1.0000 + C C70 1.0 0.81019 0.51555 0.36093 1.0000 + C C71 1.0 0.80591 0.45177 0.34081 1.0000 + C C72 1.0 0.78183 0.45068 0.30278 1.0000 + C C73 1.0 0.76264 0.51337 0.28431 1.0000 + C C74 1.0 0.76950 0.57714 0.30415 1.0000 + C C75 1.0 0.79250 0.57871 0.34243 1.0000 + C C76 1.0 0.77570 0.38158 0.28243 1.0000 + C C77 1.0 0.75531 0.64553 0.28416 1.0000 + C C78 1.0 0.07454 0.47732 0.46556 1.0000 + C C79 1.0 0.14426 0.45308 0.46536 1.0000 + C C80 1.0 0.18189 0.43873 0.42815 1.0000 + C C81 1.0 0.18981 0.48445 0.36093 1.0000 + C C82 1.0 0.19409 0.54823 0.34081 1.0000 + C C83 1.0 0.21817 0.54932 0.30278 1.0000 + C C84 1.0 0.23736 0.48663 0.28431 1.0000 + C C85 1.0 0.23050 0.42286 0.30415 1.0000 + C C86 1.0 0.20750 0.42129 0.34243 1.0000 + C C87 1.0 0.22430 0.61842 0.28243 1.0000 + C C88 1.0 0.24469 0.35447 0.28416 1.0000 + C C89 1.0 0.97731 0.57453 0.96554 1.0000 + C C90 1.0 0.95307 0.64426 0.96533 1.0000 + C C91 1.0 0.93873 0.68188 0.92812 1.0000 + C C92 1.0 0.98445 0.68981 0.86091 1.0000 + C C93 1.0 0.04823 0.69409 0.84079 1.0000 + C C94 1.0 0.04932 0.71817 0.80276 1.0000 + C C95 1.0 0.98663 0.73736 0.78429 1.0000 + C C96 1.0 0.92286 0.73050 0.80414 1.0000 + C C97 1.0 0.92129 0.70750 0.84241 1.0000 + C C98 1.0 0.11842 0.72431 0.78241 1.0000 + C C99 1.0 0.85448 0.74470 0.78415 1.0000 + C C100 1.0 0.02268 0.42547 0.96554 1.0000 + C C101 1.0 0.04693 0.35574 0.96533 1.0000 + C C102 1.0 0.06127 0.31812 0.92812 1.0000 + C C103 1.0 0.01555 0.31020 0.86091 1.0000 + C C104 1.0 0.95177 0.30591 0.84079 1.0000 + C C105 1.0 0.95068 0.28182 0.80276 1.0000 + C C106 1.0 0.01337 0.26263 0.78429 1.0000 + C C107 1.0 0.07714 0.26950 0.80414 1.0000 + C C108 1.0 0.07870 0.29250 0.84241 1.0000 + C C109 1.0 0.88158 0.27569 0.78241 1.0000 + C C110 1.0 0.14552 0.25530 0.78415 1.0000 + C C111 1.0 0.42547 0.97731 0.96554 1.0000 + C C112 1.0 0.35574 0.95307 0.96533 1.0000 + C C113 1.0 0.31812 0.93873 0.92812 1.0000 + C C114 1.0 0.31019 0.98445 0.86091 1.0000 + C C115 1.0 0.30591 0.04823 0.84079 1.0000 + C C116 1.0 0.28184 0.04932 0.80276 1.0000 + C C117 1.0 0.26264 0.98663 0.78429 1.0000 + C C118 1.0 0.26950 0.92286 0.80414 1.0000 + C C119 1.0 0.29250 0.92129 0.84241 1.0000 + C C120 1.0 0.27570 0.11842 0.78241 1.0000 + C C121 1.0 0.25530 0.85448 0.78415 1.0000 + C C122 1.0 0.57453 0.02268 0.96553 1.0000 + C C123 1.0 0.64426 0.04693 0.96533 1.0000 + C C124 1.0 0.68187 0.06129 0.92812 1.0000 + C C125 1.0 0.68980 0.01557 0.86092 1.0000 + C C126 1.0 0.69405 0.95179 0.84077 1.0000 + C C127 1.0 0.71811 0.95069 0.80275 1.0000 + C C128 1.0 0.73747 0.01338 0.78429 1.0000 + C C129 1.0 0.73070 0.07713 0.80420 1.0000 + C C130 1.0 0.70757 0.07871 0.84244 1.0000 + C C131 1.0 0.72430 0.88157 0.78240 1.0000 + C C132 1.0 0.74486 0.14556 0.78422 1.0000 + C C133 1.0 0.52268 0.07453 0.53447 1.0000 + C C134 1.0 0.54693 0.14426 0.53467 1.0000 + C C135 1.0 0.56129 0.18187 0.57188 1.0000 + C C136 1.0 0.51557 0.18979 0.63908 1.0000 + C C137 1.0 0.45179 0.19406 0.65922 1.0000 + C C138 1.0 0.45069 0.21813 0.69725 1.0000 + C C139 1.0 0.51337 0.23739 0.71573 1.0000 + C C140 1.0 0.57713 0.23058 0.69583 1.0000 + C C141 1.0 0.57871 0.20752 0.65757 1.0000 + C C142 1.0 0.38157 0.22430 0.71760 1.0000 + C C143 1.0 0.64554 0.24485 0.71581 1.0000 + C C144 1.0 0.47731 0.92547 0.53446 1.0000 + C C145 1.0 0.45307 0.85574 0.53467 1.0000 + C C146 1.0 0.43873 0.81812 0.57188 1.0000 + C C147 1.0 0.48445 0.81019 0.63909 1.0000 + C C148 1.0 0.54824 0.80591 0.65921 1.0000 + C C149 1.0 0.54932 0.78184 0.69724 1.0000 + C C150 1.0 0.48663 0.76264 0.71571 1.0000 + C C151 1.0 0.42286 0.76950 0.69586 1.0000 + C C152 1.0 0.42129 0.79250 0.65759 1.0000 + C C153 1.0 0.61842 0.77570 0.71759 1.0000 + C C154 1.0 0.35448 0.75530 0.71585 1.0000 + C C155 1.0 0.07453 0.47731 0.53446 1.0000 + C C156 1.0 0.14426 0.45307 0.53467 1.0000 + C C157 1.0 0.18188 0.43873 0.57188 1.0000 + C C158 1.0 0.18981 0.48445 0.63909 1.0000 + C C159 1.0 0.19409 0.54823 0.65921 1.0000 + C C160 1.0 0.21817 0.54932 0.69724 1.0000 + C C161 1.0 0.23736 0.48663 0.71571 1.0000 + C C162 1.0 0.23050 0.42286 0.69586 1.0000 + C C163 1.0 0.20750 0.42129 0.65759 1.0000 + C C164 1.0 0.22431 0.61842 0.71759 1.0000 + C C165 1.0 0.24470 0.35448 0.71585 1.0000 + C C166 1.0 0.92547 0.52268 0.53446 1.0000 + C C167 1.0 0.85574 0.54693 0.53467 1.0000 + C C168 1.0 0.81812 0.56127 0.57188 1.0000 + C C169 1.0 0.81020 0.51555 0.63909 1.0000 + C C170 1.0 0.80591 0.45177 0.65921 1.0000 + C C171 1.0 0.78182 0.45068 0.69724 1.0000 + C C172 1.0 0.76263 0.51337 0.71571 1.0000 + C C173 1.0 0.76950 0.57714 0.69586 1.0000 + C C174 1.0 0.79250 0.57870 0.65759 1.0000 + C C175 1.0 0.77569 0.38158 0.71759 1.0000 + C C176 1.0 0.75530 0.64552 0.71585 1.0000 + C C177 1.0 0.01131 0.46250 0.99999 1.0000 + C C178 1.0 0.06101 0.32106 0.99999 1.0000 + C C179 1.0 0.98869 0.53750 0.99999 1.0000 + C C180 1.0 0.93899 0.67894 0.99999 1.0000 + C C181 1.0 0.53750 0.01131 0.99999 1.0000 + C C182 1.0 0.67894 0.06102 0.99999 1.0000 + C C183 1.0 0.46250 0.98869 0.99999 1.0000 + C C184 1.0 0.32106 0.93899 0.99999 1.0000 + C C185 1.0 0.48869 0.96250 0.50001 1.0000 + C C186 1.0 0.43899 0.82106 0.50001 1.0000 + C C187 1.0 0.51131 0.03750 0.50001 1.0000 + C C188 1.0 0.56102 0.17894 0.50001 1.0000 + C C189 1.0 0.96251 0.51131 0.50001 1.0000 + C C190 1.0 0.82106 0.56101 0.50001 1.0000 + C C191 1.0 0.03750 0.48869 0.50001 1.0000 + C C192 1.0 0.17894 0.43899 0.50001 1.0000 + N N1 1.0 0.01423 0.33489 0.10091 1.0000 + N N2 1.0 0.98577 0.66511 0.10091 1.0000 + N N3 1.0 0.66511 0.01424 0.10091 1.0000 + N N4 1.0 0.33489 0.98576 0.10091 1.0000 + N N5 1.0 0.48576 0.83489 0.39909 1.0000 + N N6 1.0 0.51424 0.16511 0.39909 1.0000 + N N7 1.0 0.83489 0.51423 0.39909 1.0000 + N N8 1.0 0.16511 0.48577 0.39909 1.0000 + N N9 1.0 0.98577 0.66510 0.89907 1.0000 + N N10 1.0 0.01423 0.33490 0.89907 1.0000 + N N11 1.0 0.33489 0.98577 0.89907 1.0000 + N N12 1.0 0.66512 0.01423 0.89906 1.0000 + N N13 1.0 0.51423 0.16511 0.60093 1.0000 + N N14 1.0 0.48577 0.83489 0.60093 1.0000 + N N15 1.0 0.16510 0.48577 0.60093 1.0000 + N N16 1.0 0.83490 0.51423 0.60093 1.0000 + O O1 1.0 0.11088 0.27687 0.07571 1.0000 + O O2 1.0 0.82726 0.29868 0.19968 1.0000 + O O3 1.0 0.88252 0.24752 0.25100 1.0000 + O O4 1.0 0.20061 0.28036 0.19948 1.0000 + O O5 1.0 0.14353 0.22109 0.24748 1.0000 + O O6 1.0 0.88912 0.72313 0.07571 1.0000 + O O7 1.0 0.17273 0.70131 0.19968 1.0000 + O O8 1.0 0.11748 0.75248 0.25100 1.0000 + O O9 1.0 0.79939 0.71964 0.19947 1.0000 + O O10 1.0 0.85647 0.77891 0.24748 1.0000 + O O11 1.0 0.72313 0.11088 0.07571 1.0000 + O O12 1.0 0.70132 0.82727 0.19968 1.0000 + O O13 1.0 0.75248 0.88252 0.25100 1.0000 + O O14 1.0 0.71964 0.20061 0.19947 1.0000 + O O15 1.0 0.77891 0.14353 0.24748 1.0000 + O O16 1.0 0.27687 0.88912 0.07571 1.0000 + O O17 1.0 0.29868 0.17273 0.19968 1.0000 + O O18 1.0 0.24752 0.11748 0.25100 1.0000 + O O19 1.0 0.28036 0.79939 0.19947 1.0000 + O O20 1.0 0.22109 0.85647 0.24748 1.0000 + O O21 1.0 0.38912 0.77687 0.42429 1.0000 + O O22 1.0 0.67273 0.79868 0.30032 1.0000 + O O23 1.0 0.61748 0.74752 0.24900 1.0000 + O O24 1.0 0.29939 0.78036 0.30053 1.0000 + O O25 1.0 0.35647 0.72109 0.25252 1.0000 + O O26 1.0 0.61088 0.22314 0.42429 1.0000 + O O27 1.0 0.32727 0.20132 0.30032 1.0000 + O O28 1.0 0.38252 0.25248 0.24900 1.0000 + O O29 1.0 0.70061 0.21964 0.30053 1.0000 + O O30 1.0 0.64353 0.27891 0.25252 1.0000 + O O31 1.0 0.77687 0.61088 0.42429 1.0000 + O O32 1.0 0.79869 0.32727 0.30032 1.0000 + O O33 1.0 0.74752 0.38252 0.24900 1.0000 + O O34 1.0 0.78036 0.70061 0.30053 1.0000 + O O35 1.0 0.72109 0.64353 0.25252 1.0000 + O O36 1.0 0.22313 0.38912 0.42429 1.0000 + O O37 1.0 0.20132 0.67274 0.30032 1.0000 + O O38 1.0 0.25248 0.61748 0.24900 1.0000 + O O39 1.0 0.21964 0.29939 0.30052 1.0000 + O O40 1.0 0.27891 0.35647 0.25252 1.0000 + O O41 1.0 0.88912 0.72312 0.92426 1.0000 + O O42 1.0 0.17273 0.70133 0.80031 1.0000 + O O43 1.0 0.11748 0.75249 0.74899 1.0000 + O O44 1.0 0.79940 0.71965 0.80051 1.0000 + O O45 1.0 0.85647 0.77892 0.75251 1.0000 + O O46 1.0 0.11088 0.27688 0.92426 1.0000 + O O47 1.0 0.82727 0.29866 0.80031 1.0000 + O O48 1.0 0.88251 0.24751 0.74899 1.0000 + O O49 1.0 0.20059 0.28035 0.80051 1.0000 + O O50 1.0 0.14352 0.22108 0.75251 1.0000 + O O51 1.0 0.27688 0.88911 0.92426 1.0000 + O O52 1.0 0.29864 0.17274 0.80031 1.0000 + O O53 1.0 0.24752 0.11747 0.74898 1.0000 + O O54 1.0 0.28036 0.79940 0.80051 1.0000 + O O55 1.0 0.22108 0.85647 0.75251 1.0000 + O O56 1.0 0.72313 0.11087 0.92425 1.0000 + O O57 1.0 0.70131 0.82728 0.80032 1.0000 + O O58 1.0 0.75251 0.88254 0.74900 1.0000 + O O59 1.0 0.71968 0.20061 0.80053 1.0000 + O O60 1.0 0.77886 0.14349 0.75250 1.0000 + O O61 1.0 0.61087 0.22313 0.57575 1.0000 + O O62 1.0 0.32728 0.20131 0.69968 1.0000 + O O63 1.0 0.38253 0.25251 0.75100 1.0000 + O O64 1.0 0.70059 0.21964 0.69949 1.0000 + O O65 1.0 0.64351 0.27892 0.74750 1.0000 + O O66 1.0 0.38911 0.77688 0.57574 1.0000 + O O67 1.0 0.67274 0.79864 0.69969 1.0000 + O O68 1.0 0.61747 0.74752 0.75102 1.0000 + O O69 1.0 0.29940 0.78036 0.69949 1.0000 + O O70 1.0 0.35647 0.72108 0.74749 1.0000 + O O71 1.0 0.22312 0.38912 0.57574 1.0000 + O O72 1.0 0.20133 0.67273 0.69969 1.0000 + O O73 1.0 0.25249 0.61748 0.75101 1.0000 + O O74 1.0 0.21965 0.29940 0.69949 1.0000 + O O75 1.0 0.27892 0.35647 0.74749 1.0000 + O O76 1.0 0.77688 0.61088 0.57574 1.0000 + O O77 1.0 0.79866 0.32727 0.69969 1.0000 + O O78 1.0 0.74751 0.38251 0.75101 1.0000 + O O79 1.0 0.78035 0.70059 0.69949 1.0000 + O O80 1.0 0.72108 0.64352 0.74749 1.0000 diff --git a/tests/testresources/refs/MOF_descriptors/odac-21383.json b/tests/testresources/refs/MOF_descriptors/odac-21383.json new file mode 100644 index 00000000..ebf0883d --- /dev/null +++ b/tests/testresources/refs/MOF_descriptors/odac-21383.json @@ -0,0 +1 @@ +{"names": ["f-chi-0-all", "f-chi-1-all", "f-chi-2-all", "f-chi-3-all", "f-Z-0-all", "f-Z-1-all", "f-Z-2-all", "f-Z-3-all", "f-I-0-all", "f-I-1-all", "f-I-2-all", "f-I-3-all", "f-T-0-all", "f-T-1-all", "f-T-2-all", "f-T-3-all", "f-S-0-all", "f-S-1-all", "f-S-2-all", "f-S-3-all", "f-Gval-0-all", "f-Gval-1-all", "f-Gval-2-all", "f-Gval-3-all", "mc-chi-0-all", "mc-chi-1-all", "mc-chi-2-all", "mc-chi-3-all", "mc-Z-0-all", "mc-Z-1-all", "mc-Z-2-all", "mc-Z-3-all", "mc-I-0-all", "mc-I-1-all", "mc-I-2-all", "mc-I-3-all", "mc-T-0-all", "mc-T-1-all", "mc-T-2-all", "mc-T-3-all", "mc-S-0-all", "mc-S-1-all", "mc-S-2-all", "mc-S-3-all", "mc-Gval-0-all", "mc-Gval-1-all", "mc-Gval-2-all", "mc-Gval-3-all", "D_mc-chi-0-all", "D_mc-chi-1-all", "D_mc-chi-2-all", "D_mc-chi-3-all", "D_mc-Z-0-all", "D_mc-Z-1-all", "D_mc-Z-2-all", "D_mc-Z-3-all", "D_mc-I-0-all", "D_mc-I-1-all", "D_mc-I-2-all", "D_mc-I-3-all", "D_mc-T-0-all", "D_mc-T-1-all", "D_mc-T-2-all", "D_mc-T-3-all", "D_mc-S-0-all", "D_mc-S-1-all", "D_mc-S-2-all", "D_mc-S-3-all", "D_mc-Gval-0-all", "D_mc-Gval-1-all", "D_mc-Gval-2-all", "D_mc-Gval-3-all", "f-lig-chi-0", "f-lig-chi-1", "f-lig-chi-2", "f-lig-chi-3", "f-lig-Z-0", "f-lig-Z-1", "f-lig-Z-2", "f-lig-Z-3", "f-lig-I-0", "f-lig-I-1", "f-lig-I-2", "f-lig-I-3", "f-lig-T-0", "f-lig-T-1", "f-lig-T-2", "f-lig-T-3", "f-lig-S-0", "f-lig-S-1", "f-lig-S-2", "f-lig-S-3", "f-lig-Gval-0", "f-lig-Gval-1", "f-lig-Gval-2", "f-lig-Gval-3", "lc-chi-0-all", "lc-chi-1-all", "lc-chi-2-all", "lc-chi-3-all", "lc-Z-0-all", "lc-Z-1-all", "lc-Z-2-all", "lc-Z-3-all", "lc-I-0-all", "lc-I-1-all", "lc-I-2-all", "lc-I-3-all", "lc-T-0-all", "lc-T-1-all", "lc-T-2-all", "lc-T-3-all", "lc-S-0-all", "lc-S-1-all", "lc-S-2-all", "lc-S-3-all", "lc-Gval-0-all", "lc-Gval-1-all", "lc-Gval-2-all", "lc-Gval-3-all", "lc-alpha-0-all", "lc-alpha-1-all", "lc-alpha-2-all", "lc-alpha-3-all", "D_lc-chi-0-all", "D_lc-chi-1-all", "D_lc-chi-2-all", "D_lc-chi-3-all", "D_lc-Z-0-all", "D_lc-Z-1-all", "D_lc-Z-2-all", "D_lc-Z-3-all", "D_lc-I-0-all", "D_lc-I-1-all", "D_lc-I-2-all", "D_lc-I-3-all", "D_lc-T-0-all", "D_lc-T-1-all", "D_lc-T-2-all", "D_lc-T-3-all", "D_lc-S-0-all", "D_lc-S-1-all", "D_lc-S-2-all", "D_lc-S-3-all", "D_lc-Gval-0-all", "D_lc-Gval-1-all", "D_lc-Gval-2-all", "D_lc-Gval-3-all", "D_lc-alpha-0-all", "D_lc-alpha-1-all", "D_lc-alpha-2-all", "D_lc-alpha-3-all", "func-chi-0-all", "func-chi-1-all", "func-chi-2-all", "func-chi-3-all", "func-Z-0-all", "func-Z-1-all", "func-Z-2-all", "func-Z-3-all", "func-I-0-all", "func-I-1-all", "func-I-2-all", "func-I-3-all", "func-T-0-all", "func-T-1-all", "func-T-2-all", "func-T-3-all", "func-S-0-all", "func-S-1-all", "func-S-2-all", "func-S-3-all", "func-Gval-0-all", "func-Gval-1-all", "func-Gval-2-all", "func-Gval-3-all", "func-alpha-0-all", "func-alpha-1-all", "func-alpha-2-all", "func-alpha-3-all", "D_func-chi-0-all", "D_func-chi-1-all", "D_func-chi-2-all", "D_func-chi-3-all", "D_func-Z-0-all", "D_func-Z-1-all", "D_func-Z-2-all", "D_func-Z-3-all", "D_func-I-0-all", "D_func-I-1-all", "D_func-I-2-all", "D_func-I-3-all", "D_func-T-0-all", "D_func-T-1-all", "D_func-T-2-all", "D_func-T-3-all", "D_func-S-0-all", "D_func-S-1-all", "D_func-S-2-all", "D_func-S-3-all", "D_func-Gval-0-all", "D_func-Gval-1-all", "D_func-Gval-2-all", "D_func-Gval-3-all", "D_func-alpha-0-all", "D_func-alpha-1-all", "D_func-alpha-2-all", "D_func-alpha-3-all"], "descriptors": [163.84707499999993, 282.7215999999999, 752.2832500000001, 685.3979999999997, 4297.75, 7988.0, 14373.5, 14474.0, 19.0, 41.0, 74.5, 93.0, 115.5, 298.0, 444.5, 484.0, 16.196425000000005, 34.64880000000001, 56.01739999999996, 74.81300000000002, 564.75, 966.0, 2345.5, 2568.0, 3.2761, 32.69262222222223, 19.495711111111117, 91.75493333333337, 961.0, 1295.1111111111109, 2927.7777777777787, 3651.11111111111, 1.0, 5.1111111111111125, 5.1111111111111125, 14.666666666666663, 26.444444444444454, 52.88888888888891, 114.0, 151.11111111111114, 1.5375999999999987, 4.604533333333335, 6.966044444444439, 13.265244444444447, 9.0, 94.66666666666669, 70.0, 265.33333333333337, 0.0, -8.811111111111106, -1.5199999999999987, -24.146666666666654, 0.0, 116.6666666666667, 64.0, 336.8888888888888, 0.0, 0.0, 0.0, 0.0, 0.0, 16.222222222222225, 4.444444444444444, 46.22222222222221, 0.0, 2.6244444444444435, 0.719999999999999, 7.488888888888883, 0.0, -16.222222222222225, -8.0, -44.44444444444445, 52.13049999999999, 60.26880000000003, 142.00320000000008, 0.0, 481.0, 960.0, 768.0, 0.0, 5.0, 8.0, 12.0, 0.0, 20.0, 32.0, 12.0, 0.0, 3.255200000000001, 6.190400000000004, 6.394800000000002, 0.0, 169.0, 240.0, 432.0, 0.0, 12.350606451612895, 6.318503225806441, 29.774864516128968, 0.0, 66.19354838709677, 100.64516129032258, 161.03225806451613, 0.0, 1.0, 0.8387096774193549, 2.5161290322580645, 0.0, 0.8387096774193549, 3.3548387096774195, 2.5161290322580645, 0.0, 0.5291838709677413, 0.6489935483870964, 1.3408451612903223, 0.0, 37.67741935483871, 25.161290322580644, 90.58064516129032, 0.0, 26.270335483870994, 111.12903225806451, 70.67806451612923, 0.0, 0.0, 1.0483870967741935, 0.0, 0.0, 0.0, -5.870967741935484, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.5161290322580645, 0.0, 0.0, 0.0, -0.27677419354838634, 0.0, 0.0, 0.0, 0.8387096774193549, 0.0, 0.0, 0.0, -16.522580645161316, 0.0, 0.0, 4.022535483870977, 25.274012903225763, 0.0, 0.0, 188.70967741935485, 402.5806451612903, 0.0, 0.0, 0.8387096774193549, 3.3548387096774195, 0.0, 0.0, 13.419354838709678, 13.419354838709678, 0.0, 0.0, 0.9423741935483863, 2.5959741935483858, 0.0, 0.0, 20.967741935483872, 100.64516129032258, 0.0, 0.0, 524.1935483870968, 444.51612903225805, 0.0, 0.0, 0.0, -4.193548387096774, 0.0, 0.0, 0.0, 23.483870967741936, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 10.064516129032258, 0.0, 0.0, 0.0, 1.1070967741935454, 0.0, 0.0, 0.0, -3.3548387096774195, 0.0, 0.0, 0.0, 66.09032258064526, 0.0, 0.0]} diff --git a/tests/testresources/refs/MOF_descriptors/odac-21433.json b/tests/testresources/refs/MOF_descriptors/odac-21433.json new file mode 100644 index 00000000..1b10bc94 --- /dev/null +++ b/tests/testresources/refs/MOF_descriptors/odac-21433.json @@ -0,0 +1 @@ +{"names": ["f-chi-0-all", "f-chi-1-all", "f-chi-2-all", "f-chi-3-all", "f-Z-0-all", "f-Z-1-all", "f-Z-2-all", "f-Z-3-all", "f-I-0-all", "f-I-1-all", "f-I-2-all", "f-I-3-all", "f-T-0-all", "f-T-1-all", "f-T-2-all", "f-T-3-all", "f-S-0-all", "f-S-1-all", "f-S-2-all", "f-S-3-all", "f-Gval-0-all", "f-Gval-1-all", "f-Gval-2-all", "f-Gval-3-all", "mc-chi-0-all", "mc-chi-1-all", "mc-chi-2-all", "mc-chi-3-all", "mc-Z-0-all", "mc-Z-1-all", "mc-Z-2-all", "mc-Z-3-all", "mc-I-0-all", "mc-I-1-all", "mc-I-2-all", "mc-I-3-all", "mc-T-0-all", "mc-T-1-all", "mc-T-2-all", "mc-T-3-all", "mc-S-0-all", "mc-S-1-all", "mc-S-2-all", "mc-S-3-all", "mc-Gval-0-all", "mc-Gval-1-all", "mc-Gval-2-all", "mc-Gval-3-all", "D_mc-chi-0-all", "D_mc-chi-1-all", "D_mc-chi-2-all", "D_mc-chi-3-all", "D_mc-Z-0-all", "D_mc-Z-1-all", "D_mc-Z-2-all", "D_mc-Z-3-all", "D_mc-I-0-all", "D_mc-I-1-all", "D_mc-I-2-all", "D_mc-I-3-all", "D_mc-T-0-all", "D_mc-T-1-all", "D_mc-T-2-all", "D_mc-T-3-all", "D_mc-S-0-all", "D_mc-S-1-all", "D_mc-S-2-all", "D_mc-S-3-all", "D_mc-Gval-0-all", "D_mc-Gval-1-all", "D_mc-Gval-2-all", "D_mc-Gval-3-all", "f-lig-chi-0", "f-lig-chi-1", "f-lig-chi-2", "f-lig-chi-3", "f-lig-Z-0", "f-lig-Z-1", "f-lig-Z-2", "f-lig-Z-3", "f-lig-I-0", "f-lig-I-1", "f-lig-I-2", "f-lig-I-3", "f-lig-T-0", "f-lig-T-1", "f-lig-T-2", "f-lig-T-3", "f-lig-S-0", "f-lig-S-1", "f-lig-S-2", "f-lig-S-3", "f-lig-Gval-0", "f-lig-Gval-1", "f-lig-Gval-2", "f-lig-Gval-3", "lc-chi-0-all", "lc-chi-1-all", "lc-chi-2-all", "lc-chi-3-all", "lc-Z-0-all", "lc-Z-1-all", "lc-Z-2-all", "lc-Z-3-all", "lc-I-0-all", "lc-I-1-all", "lc-I-2-all", "lc-I-3-all", "lc-T-0-all", "lc-T-1-all", "lc-T-2-all", "lc-T-3-all", "lc-S-0-all", "lc-S-1-all", "lc-S-2-all", "lc-S-3-all", "lc-Gval-0-all", "lc-Gval-1-all", "lc-Gval-2-all", "lc-Gval-3-all", "lc-alpha-0-all", "lc-alpha-1-all", "lc-alpha-2-all", "lc-alpha-3-all", "D_lc-chi-0-all", "D_lc-chi-1-all", "D_lc-chi-2-all", "D_lc-chi-3-all", "D_lc-Z-0-all", "D_lc-Z-1-all", "D_lc-Z-2-all", "D_lc-Z-3-all", "D_lc-I-0-all", "D_lc-I-1-all", "D_lc-I-2-all", "D_lc-I-3-all", "D_lc-T-0-all", "D_lc-T-1-all", "D_lc-T-2-all", "D_lc-T-3-all", "D_lc-S-0-all", "D_lc-S-1-all", "D_lc-S-2-all", "D_lc-S-3-all", "D_lc-Gval-0-all", "D_lc-Gval-1-all", "D_lc-Gval-2-all", "D_lc-Gval-3-all", "D_lc-alpha-0-all", "D_lc-alpha-1-all", "D_lc-alpha-2-all", "D_lc-alpha-3-all", "func-chi-0-all", "func-chi-1-all", "func-chi-2-all", "func-chi-3-all", "func-Z-0-all", "func-Z-1-all", "func-Z-2-all", "func-Z-3-all", "func-I-0-all", "func-I-1-all", "func-I-2-all", "func-I-3-all", "func-T-0-all", "func-T-1-all", "func-T-2-all", "func-T-3-all", "func-S-0-all", "func-S-1-all", "func-S-2-all", "func-S-3-all", "func-Gval-0-all", "func-Gval-1-all", "func-Gval-2-all", "func-Gval-3-all", "func-alpha-0-all", "func-alpha-1-all", "func-alpha-2-all", "func-alpha-3-all", "D_func-chi-0-all", "D_func-chi-1-all", "D_func-chi-2-all", "D_func-chi-3-all", "D_func-Z-0-all", "D_func-Z-1-all", "D_func-Z-2-all", "D_func-Z-3-all", "D_func-I-0-all", "D_func-I-1-all", "D_func-I-2-all", "D_func-I-3-all", "D_func-T-0-all", "D_func-T-1-all", "D_func-T-2-all", "D_func-T-3-all", "D_func-S-0-all", "D_func-S-1-all", "D_func-S-2-all", "D_func-S-3-all", "D_func-Gval-0-all", "D_func-Gval-1-all", "D_func-Gval-2-all", "D_func-Gval-3-all", "D_func-alpha-0-all", "D_func-alpha-1-all", "D_func-alpha-2-all", "D_func-alpha-3-all"], "descriptors": [69.11089999999997, 104.57600000000002, 170.21039999999996, 180.80639999999997, 1325.0, 1792.0, 2328.0, 2880.0, 9.0, 16.0, 20.0, 24.0, 36.0, 80.0, 80.0, 48.0, 8.213599999999994, 13.5488, 17.07960000000001, 18.57119999999999, 253.0, 384.0, 552.0, 720.0, 2.5921000000000016, 22.153599999999987, 14.103600000000007, 66.46080000000005, 169.0, 416.0, 780.0, 1248.0, 1.0, 4.0, 4.0, 12.0, 16.0, 32.0, 64.0, 96.0, 1.5876000000000017, 3.6791999999999985, 5.342399999999999, 11.0376, 9.0, 72.0, 60.0, 216.0, 0.0, -7.319999999999994, -2.32, -21.959999999999983, 0.0, 20.0, -8.0, 60.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.0, 0.0, 24.0, 0.0, 2.119999999999999, 0.8000000000000006, 6.360000000000002, 0.0, -12.0, -8.0, -36.0, 52.13049999999999, 60.268800000000034, 142.00320000000008, 0.0, 481.0, 960.0, 768.0, 0.0, 5.0, 8.0, 12.0, 0.0, 20.0, 32.0, 12.0, 0.0, 3.2552000000000008, 6.1904, 6.394800000000001, 0.0, 169.0, 240.0, 432.0, 0.0, 11.833600000000011, 7.533599999999988, 35.500799999999934, 0.0, 64.0, 120.0, 192.0, 0.0, 1.0, 1.0, 3.0, 0.0, 1.0, 4.0, 3.0, 0.0, 0.5328999999999996, 0.7738, 1.598699999999999, 0.0, 36.0, 30.0, 108.0, 0.0, 28.090000000000007, 132.5, 84.27000000000021, 0.0, 0.0, 1.25, 0.0, 0.0, 0.0, -7.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3.0, 0.0, 0.0, 0.0, -0.3299999999999992, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, -19.70000000000003, 0.0, 0.0, 4.796100000000009, 30.134399999999953, 0.0, 0.0, 225.0, 480.0, 0.0, 0.0, 1.0, 4.0, 0.0, 0.0, 16.0, 16.0, 0.0, 0.0, 1.1235999999999993, 3.0952, 0.0, 0.0, 25.0, 120.0, 0.0, 0.0, 625.0, 530.0, 0.0, 0.0, 0.0, -5.0, 0.0, 0.0, 0.0, 28.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 1.3199999999999967, 0.0, 0.0, 0.0, -4.0, 0.0, 0.0, 0.0, 78.80000000000013, 0.0, 0.0]} diff --git a/tests/testresources/refs/MOF_descriptors/odac-21478.json b/tests/testresources/refs/MOF_descriptors/odac-21478.json new file mode 100644 index 00000000..34d79043 --- /dev/null +++ b/tests/testresources/refs/MOF_descriptors/odac-21478.json @@ -0,0 +1 @@ +{"names": ["f-chi-0-all", "f-chi-1-all", "f-chi-2-all", "f-chi-3-all", "f-Z-0-all", "f-Z-1-all", "f-Z-2-all", "f-Z-3-all", "f-I-0-all", "f-I-1-all", "f-I-2-all", "f-I-3-all", "f-T-0-all", "f-T-1-all", "f-T-2-all", "f-T-3-all", "f-S-0-all", "f-S-1-all", "f-S-2-all", "f-S-3-all", "f-Gval-0-all", "f-Gval-1-all", "f-Gval-2-all", "f-Gval-3-all", "mc-chi-0-all", "mc-chi-1-all", "mc-chi-2-all", "mc-chi-3-all", "mc-Z-0-all", "mc-Z-1-all", "mc-Z-2-all", "mc-Z-3-all", "mc-I-0-all", "mc-I-1-all", "mc-I-2-all", "mc-I-3-all", "mc-T-0-all", "mc-T-1-all", "mc-T-2-all", "mc-T-3-all", "mc-S-0-all", "mc-S-1-all", "mc-S-2-all", "mc-S-3-all", "mc-Gval-0-all", "mc-Gval-1-all", "mc-Gval-2-all", "mc-Gval-3-all", "D_mc-chi-0-all", "D_mc-chi-1-all", "D_mc-chi-2-all", "D_mc-chi-3-all", "D_mc-Z-0-all", "D_mc-Z-1-all", "D_mc-Z-2-all", "D_mc-Z-3-all", "D_mc-I-0-all", "D_mc-I-1-all", "D_mc-I-2-all", "D_mc-I-3-all", "D_mc-T-0-all", "D_mc-T-1-all", "D_mc-T-2-all", "D_mc-T-3-all", "D_mc-S-0-all", "D_mc-S-1-all", "D_mc-S-2-all", "D_mc-S-3-all", "D_mc-Gval-0-all", "D_mc-Gval-1-all", "D_mc-Gval-2-all", "D_mc-Gval-3-all", "f-lig-chi-0", "f-lig-chi-1", "f-lig-chi-2", "f-lig-chi-3", "f-lig-Z-0", "f-lig-Z-1", "f-lig-Z-2", "f-lig-Z-3", "f-lig-I-0", "f-lig-I-1", "f-lig-I-2", "f-lig-I-3", "f-lig-T-0", "f-lig-T-1", "f-lig-T-2", "f-lig-T-3", "f-lig-S-0", "f-lig-S-1", "f-lig-S-2", "f-lig-S-3", "f-lig-Gval-0", "f-lig-Gval-1", "f-lig-Gval-2", "f-lig-Gval-3", "lc-chi-0-all", "lc-chi-1-all", "lc-chi-2-all", "lc-chi-3-all", "lc-Z-0-all", "lc-Z-1-all", "lc-Z-2-all", "lc-Z-3-all", "lc-I-0-all", "lc-I-1-all", "lc-I-2-all", "lc-I-3-all", "lc-T-0-all", "lc-T-1-all", "lc-T-2-all", "lc-T-3-all", "lc-S-0-all", "lc-S-1-all", "lc-S-2-all", "lc-S-3-all", "lc-Gval-0-all", "lc-Gval-1-all", "lc-Gval-2-all", "lc-Gval-3-all", "lc-alpha-0-all", "lc-alpha-1-all", "lc-alpha-2-all", "lc-alpha-3-all", "D_lc-chi-0-all", "D_lc-chi-1-all", "D_lc-chi-2-all", "D_lc-chi-3-all", "D_lc-Z-0-all", "D_lc-Z-1-all", "D_lc-Z-2-all", "D_lc-Z-3-all", "D_lc-I-0-all", "D_lc-I-1-all", "D_lc-I-2-all", "D_lc-I-3-all", "D_lc-T-0-all", "D_lc-T-1-all", "D_lc-T-2-all", "D_lc-T-3-all", "D_lc-S-0-all", "D_lc-S-1-all", "D_lc-S-2-all", "D_lc-S-3-all", "D_lc-Gval-0-all", "D_lc-Gval-1-all", "D_lc-Gval-2-all", "D_lc-Gval-3-all", "D_lc-alpha-0-all", "D_lc-alpha-1-all", "D_lc-alpha-2-all", "D_lc-alpha-3-all", "func-chi-0-all", "func-chi-1-all", "func-chi-2-all", "func-chi-3-all", "func-Z-0-all", "func-Z-1-all", "func-Z-2-all", "func-Z-3-all", "func-I-0-all", "func-I-1-all", "func-I-2-all", "func-I-3-all", "func-T-0-all", "func-T-1-all", "func-T-2-all", "func-T-3-all", "func-S-0-all", "func-S-1-all", "func-S-2-all", "func-S-3-all", "func-Gval-0-all", "func-Gval-1-all", "func-Gval-2-all", "func-Gval-3-all", "func-alpha-0-all", "func-alpha-1-all", "func-alpha-2-all", "func-alpha-3-all", "D_func-chi-0-all", "D_func-chi-1-all", "D_func-chi-2-all", "D_func-chi-3-all", "D_func-Z-0-all", "D_func-Z-1-all", "D_func-Z-2-all", "D_func-Z-3-all", "D_func-I-0-all", "D_func-I-1-all", "D_func-I-2-all", "D_func-I-3-all", "D_func-T-0-all", "D_func-T-1-all", "D_func-T-2-all", "D_func-T-3-all", "D_func-S-0-all", "D_func-S-1-all", "D_func-S-2-all", "D_func-S-3-all", "D_func-Gval-0-all", "D_func-Gval-1-all", "D_func-Gval-2-all", "D_func-Gval-3-all", "D_func-alpha-0-all", "D_func-alpha-1-all", "D_func-alpha-2-all", "D_func-alpha-3-all"], "descriptors": [69.24129999999998, 105.67680000000001, 170.91119999999998, 180.80639999999997, 2056.0, 2880.0, 4368.0, 2880.0, 9.0, 16.0, 20.0, 24.0, 36.0, 80.0, 80.0, 48.0, 8.342099999999997, 13.8408, 17.503600000000002, 18.57119999999999, 388.0, 816.0, 912.0, 720.0, 2.722499999999997, 22.704000000000004, 14.454000000000006, 59.92800000000005, 900.0, 960.0, 1800.0, 2040.0, 1.0, 4.0, 4.0, 12.0, 16.0, 32.0, 64.0, 80.0, 1.7161, 3.825199999999999, 5.5544, 9.589200000000003, 144.0, 288.0, 240.0, 624.0, 0.0, -7.1599999999999975, -2.1599999999999984, -16.519999999999985, 0.0, 88.0, 60.0, 292.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.0, 0.0, 28.0, 0.0, 2.3200000000000003, 1.0, 8.400000000000004, 0.0, 24.0, 28.0, 92.0, 45.13689999999998, 54.837600000000016, 116.40959999999997, 0.0, 418.0, 750.0, 432.0, 0.0, 5.0, 8.0, 12.0, 0.0, 20.0, 32.0, 12.0, 0.0, 2.859200000000001, 5.427199999999999, 4.8180000000000005, 0.0, 134.0, 190.0, 252.0, 0.0, 11.833600000000011, 7.533599999999988, 31.235200000000045, 0.0, 64.0, 120.0, 136.0, 0.0, 1.0, 1.0, 3.0, 0.0, 1.0, 4.0, 3.0, 0.0, 0.5328999999999996, 0.7738, 1.335899999999998, 0.0, 36.0, 30.0, 78.0, 0.0, 28.090000000000007, 132.5, 80.06768300000016, 0.0, 0.0, 1.25, 1.239999999999998, 0.0, 0.0, -7.0, 7.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -3.0, 0.0, 0.0, 0.0, -0.3299999999999992, 0.35999999999999965, 0.0, 0.0, 1.0, 5.0, 0.0, 0.0, -19.70000000000003, 0.7928899999999999, 0.0, 4.796100000000009, 27.41879999999996, 0.0, 0.0, 225.0, 375.0, 0.0, 0.0, 1.0, 4.0, 0.0, 0.0, 16.0, 16.0, 0.0, 0.0, 1.1235999999999993, 2.7136000000000067, 0.0, 0.0, 25.0, 95.0, 0.0, 0.0, 625.0, 510.1777500000006, 0.0, 0.0, 0.0, -3.759999999999995, 0.0, 0.0, 0.0, 35.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 12.0, 0.0, 0.0, 0.0, 1.680000000000004, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 79.59288999999991, 0.0, 0.0]} diff --git a/tests/testresources/refs/MOF_descriptors/odac-21735.json b/tests/testresources/refs/MOF_descriptors/odac-21735.json new file mode 100644 index 00000000..e339690e --- /dev/null +++ b/tests/testresources/refs/MOF_descriptors/odac-21735.json @@ -0,0 +1 @@ +{"names": ["f-chi-0-all", "f-chi-1-all", "f-chi-2-all", "f-chi-3-all", "f-Z-0-all", "f-Z-1-all", "f-Z-2-all", "f-Z-3-all", "f-I-0-all", "f-I-1-all", "f-I-2-all", "f-I-3-all", "f-T-0-all", "f-T-1-all", "f-T-2-all", "f-T-3-all", "f-S-0-all", "f-S-1-all", "f-S-2-all", "f-S-3-all", "f-Gval-0-all", "f-Gval-1-all", "f-Gval-2-all", "f-Gval-3-all", "mc-chi-0-all", "mc-chi-1-all", "mc-chi-2-all", "mc-chi-3-all", "mc-Z-0-all", "mc-Z-1-all", "mc-Z-2-all", "mc-Z-3-all", "mc-I-0-all", "mc-I-1-all", "mc-I-2-all", "mc-I-3-all", "mc-T-0-all", "mc-T-1-all", "mc-T-2-all", "mc-T-3-all", "mc-S-0-all", "mc-S-1-all", "mc-S-2-all", "mc-S-3-all", "mc-Gval-0-all", "mc-Gval-1-all", "mc-Gval-2-all", "mc-Gval-3-all", "D_mc-chi-0-all", "D_mc-chi-1-all", "D_mc-chi-2-all", "D_mc-chi-3-all", "D_mc-Z-0-all", "D_mc-Z-1-all", "D_mc-Z-2-all", "D_mc-Z-3-all", "D_mc-I-0-all", "D_mc-I-1-all", "D_mc-I-2-all", "D_mc-I-3-all", "D_mc-T-0-all", "D_mc-T-1-all", "D_mc-T-2-all", "D_mc-T-3-all", "D_mc-S-0-all", "D_mc-S-1-all", "D_mc-S-2-all", "D_mc-S-3-all", "D_mc-Gval-0-all", "D_mc-Gval-1-all", "D_mc-Gval-2-all", "D_mc-Gval-3-all", "f-lig-chi-0", "f-lig-chi-1", "f-lig-chi-2", "f-lig-chi-3", "f-lig-Z-0", "f-lig-Z-1", "f-lig-Z-2", "f-lig-Z-3", "f-lig-I-0", "f-lig-I-1", "f-lig-I-2", "f-lig-I-3", "f-lig-T-0", "f-lig-T-1", "f-lig-T-2", "f-lig-T-3", "f-lig-S-0", "f-lig-S-1", "f-lig-S-2", "f-lig-S-3", "f-lig-Gval-0", "f-lig-Gval-1", "f-lig-Gval-2", "f-lig-Gval-3", "lc-chi-0-all", "lc-chi-1-all", "lc-chi-2-all", "lc-chi-3-all", "lc-Z-0-all", "lc-Z-1-all", "lc-Z-2-all", "lc-Z-3-all", "lc-I-0-all", "lc-I-1-all", "lc-I-2-all", "lc-I-3-all", "lc-T-0-all", "lc-T-1-all", "lc-T-2-all", "lc-T-3-all", "lc-S-0-all", "lc-S-1-all", "lc-S-2-all", "lc-S-3-all", "lc-Gval-0-all", "lc-Gval-1-all", "lc-Gval-2-all", "lc-Gval-3-all", "lc-alpha-0-all", "lc-alpha-1-all", "lc-alpha-2-all", "lc-alpha-3-all", "D_lc-chi-0-all", "D_lc-chi-1-all", "D_lc-chi-2-all", "D_lc-chi-3-all", "D_lc-Z-0-all", "D_lc-Z-1-all", "D_lc-Z-2-all", "D_lc-Z-3-all", "D_lc-I-0-all", "D_lc-I-1-all", "D_lc-I-2-all", "D_lc-I-3-all", "D_lc-T-0-all", "D_lc-T-1-all", "D_lc-T-2-all", "D_lc-T-3-all", "D_lc-S-0-all", "D_lc-S-1-all", "D_lc-S-2-all", "D_lc-S-3-all", "D_lc-Gval-0-all", "D_lc-Gval-1-all", "D_lc-Gval-2-all", "D_lc-Gval-3-all", "D_lc-alpha-0-all", "D_lc-alpha-1-all", "D_lc-alpha-2-all", "D_lc-alpha-3-all", "func-chi-0-all", "func-chi-1-all", "func-chi-2-all", "func-chi-3-all", "func-Z-0-all", "func-Z-1-all", "func-Z-2-all", "func-Z-3-all", "func-I-0-all", "func-I-1-all", "func-I-2-all", "func-I-3-all", "func-T-0-all", "func-T-1-all", "func-T-2-all", "func-T-3-all", "func-S-0-all", "func-S-1-all", "func-S-2-all", "func-S-3-all", "func-Gval-0-all", "func-Gval-1-all", "func-Gval-2-all", "func-Gval-3-all", "func-alpha-0-all", "func-alpha-1-all", "func-alpha-2-all", "func-alpha-3-all", "D_func-chi-0-all", "D_func-chi-1-all", "D_func-chi-2-all", "D_func-chi-3-all", "D_func-Z-0-all", "D_func-Z-1-all", "D_func-Z-2-all", "D_func-Z-3-all", "D_func-I-0-all", "D_func-I-1-all", "D_func-I-2-all", "D_func-I-3-all", "D_func-T-0-all", "D_func-T-1-all", "D_func-T-2-all", "D_func-T-3-all", "D_func-S-0-all", "D_func-S-1-all", "D_func-S-2-all", "D_func-S-3-all", "D_func-Gval-0-all", "D_func-Gval-1-all", "D_func-Gval-2-all", "D_func-Gval-3-all", "D_func-alpha-0-all", "D_func-alpha-1-all", "D_func-alpha-2-all", "D_func-alpha-3-all"], "descriptors": [486.6785999999997, 920.8192000000006, 4251.559199999997, 4714.176000000003, 12084.0, 33088.0, 72384.0, 91776.0, 54.0, 152.0, 432.0, 672.0, 632.0, 2336.0, 4812.0, 6360.0, 38.94480000000001, 137.0648000000001, 306.56640000000027, 470.5872000000002, 1444.0, 3504.0, 13344.0, 13536.0, 1.7689000000000001, 36.60160000000001, 26.493600000000004, 105.06999999999998, 1600.0, 2560.0, 7440.0, 7360.0, 1.0, 8.0, 10.0, 24.0, 64.0, 176.0, 368.0, 464.0, 2.3716000000000004, 8.9936, 15.369200000000005, 27.227200000000014, 16.0, 192.0, 136.0, 544.0, 0.0, -16.88, -6.619999999999998, -47.07999999999999, 0.0, 256.0, 214.0, 776.0, 0.0, 0.0, 0.0, 0.0, 0.0, 42.0, 34.0, 134.0, 0.0, 6.480000000000003, 5.420000000000001, 19.28, 0.0, -16.0, 6.0, -40.0, 118.7144, 219.096, 337.3204, 385.387, 548.0, 1008.0, 1456.0, 1420.0, 16.0, 32.0, 48.0, 58.0, 80.0, 192.0, 256.0, 250.0, 7.422399999999999, 16.262400000000003, 23.044800000000006, 24.6794, 276.0, 480.0, 720.0, 708.0, 11.833599999999999, 8.771999999999998, 20.605599999999995, 17.543999999999997, 64.0, 48.0, 112.0, 96.0, 1.0, 1.0, 2.0, 2.0, 1.0, 3.0, 4.0, 6.0, 0.5328999999999998, 0.5621, 1.095, 1.1242, 36.0, 24.0, 60.0, 48.0, 28.09, 59.88999999999999, 87.98, 119.77999999999999, 0.0, 0.8900000000000002, 0.8900000000000002, 1.7800000000000005, 0.0, 2.0, 2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.0, -2.0, -4.0, 0.0, -0.040000000000000036, -0.040000000000000036, -0.08000000000000007, 0.0, 2.0, 2.0, 4.0, 0.0, -6.000000000000001, -6.000000000000001, -12.000000000000002, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]} diff --git a/tests/testresources/refs/MOF_descriptors/odac-21816.json b/tests/testresources/refs/MOF_descriptors/odac-21816.json new file mode 100644 index 00000000..cbb3741f --- /dev/null +++ b/tests/testresources/refs/MOF_descriptors/odac-21816.json @@ -0,0 +1 @@ +{"names": ["f-chi-0-all", "f-chi-1-all", "f-chi-2-all", "f-chi-3-all", "f-Z-0-all", "f-Z-1-all", "f-Z-2-all", "f-Z-3-all", "f-I-0-all", "f-I-1-all", "f-I-2-all", "f-I-3-all", "f-T-0-all", "f-T-1-all", "f-T-2-all", "f-T-3-all", "f-S-0-all", "f-S-1-all", "f-S-2-all", "f-S-3-all", "f-Gval-0-all", "f-Gval-1-all", "f-Gval-2-all", "f-Gval-3-all", "mc-chi-0-all", "mc-chi-1-all", "mc-chi-2-all", "mc-chi-3-all", "mc-Z-0-all", "mc-Z-1-all", "mc-Z-2-all", "mc-Z-3-all", "mc-I-0-all", "mc-I-1-all", "mc-I-2-all", "mc-I-3-all", "mc-T-0-all", "mc-T-1-all", "mc-T-2-all", "mc-T-3-all", "mc-S-0-all", "mc-S-1-all", "mc-S-2-all", "mc-S-3-all", "mc-Gval-0-all", "mc-Gval-1-all", "mc-Gval-2-all", "mc-Gval-3-all", "D_mc-chi-0-all", "D_mc-chi-1-all", "D_mc-chi-2-all", "D_mc-chi-3-all", "D_mc-Z-0-all", "D_mc-Z-1-all", "D_mc-Z-2-all", "D_mc-Z-3-all", "D_mc-I-0-all", "D_mc-I-1-all", "D_mc-I-2-all", "D_mc-I-3-all", "D_mc-T-0-all", "D_mc-T-1-all", "D_mc-T-2-all", "D_mc-T-3-all", "D_mc-S-0-all", "D_mc-S-1-all", "D_mc-S-2-all", "D_mc-S-3-all", "D_mc-Gval-0-all", "D_mc-Gval-1-all", "D_mc-Gval-2-all", "D_mc-Gval-3-all", "f-lig-chi-0", "f-lig-chi-1", "f-lig-chi-2", "f-lig-chi-3", "f-lig-Z-0", "f-lig-Z-1", "f-lig-Z-2", "f-lig-Z-3", "f-lig-I-0", "f-lig-I-1", "f-lig-I-2", "f-lig-I-3", "f-lig-T-0", "f-lig-T-1", "f-lig-T-2", "f-lig-T-3", "f-lig-S-0", "f-lig-S-1", "f-lig-S-2", "f-lig-S-3", "f-lig-Gval-0", "f-lig-Gval-1", "f-lig-Gval-2", "f-lig-Gval-3", "lc-chi-0-all", "lc-chi-1-all", "lc-chi-2-all", "lc-chi-3-all", "lc-Z-0-all", "lc-Z-1-all", "lc-Z-2-all", "lc-Z-3-all", "lc-I-0-all", "lc-I-1-all", "lc-I-2-all", "lc-I-3-all", "lc-T-0-all", "lc-T-1-all", "lc-T-2-all", "lc-T-3-all", "lc-S-0-all", "lc-S-1-all", "lc-S-2-all", "lc-S-3-all", "lc-Gval-0-all", "lc-Gval-1-all", "lc-Gval-2-all", "lc-Gval-3-all", "lc-alpha-0-all", "lc-alpha-1-all", "lc-alpha-2-all", "lc-alpha-3-all", "D_lc-chi-0-all", "D_lc-chi-1-all", "D_lc-chi-2-all", "D_lc-chi-3-all", "D_lc-Z-0-all", "D_lc-Z-1-all", "D_lc-Z-2-all", "D_lc-Z-3-all", "D_lc-I-0-all", "D_lc-I-1-all", "D_lc-I-2-all", "D_lc-I-3-all", "D_lc-T-0-all", "D_lc-T-1-all", "D_lc-T-2-all", "D_lc-T-3-all", "D_lc-S-0-all", "D_lc-S-1-all", "D_lc-S-2-all", "D_lc-S-3-all", "D_lc-Gval-0-all", "D_lc-Gval-1-all", "D_lc-Gval-2-all", "D_lc-Gval-3-all", "D_lc-alpha-0-all", "D_lc-alpha-1-all", "D_lc-alpha-2-all", "D_lc-alpha-3-all", "func-chi-0-all", "func-chi-1-all", "func-chi-2-all", "func-chi-3-all", "func-Z-0-all", "func-Z-1-all", "func-Z-2-all", "func-Z-3-all", "func-I-0-all", "func-I-1-all", "func-I-2-all", "func-I-3-all", "func-T-0-all", "func-T-1-all", "func-T-2-all", "func-T-3-all", "func-S-0-all", "func-S-1-all", "func-S-2-all", "func-S-3-all", "func-Gval-0-all", "func-Gval-1-all", "func-Gval-2-all", "func-Gval-3-all", "func-alpha-0-all", "func-alpha-1-all", "func-alpha-2-all", "func-alpha-3-all", "D_func-chi-0-all", "D_func-chi-1-all", "D_func-chi-2-all", "D_func-chi-3-all", "D_func-Z-0-all", "D_func-Z-1-all", "D_func-Z-2-all", "D_func-Z-3-all", "D_func-I-0-all", "D_func-I-1-all", "D_func-I-2-all", "D_func-I-3-all", "D_func-T-0-all", "D_func-T-1-all", "D_func-T-2-all", "D_func-T-3-all", "D_func-S-0-all", "D_func-S-1-all", "D_func-S-2-all", "D_func-S-3-all", "D_func-Gval-0-all", "D_func-Gval-1-all", "D_func-Gval-2-all", "D_func-Gval-3-all", "D_func-alpha-0-all", "D_func-alpha-1-all", "D_func-alpha-2-all", "D_func-alpha-3-all"], "descriptors": [127.89880000000002, 244.9279999999999, 456.19520000000006, 525.632, 2338.0, 4480.0, 4832.0, 6016.0, 14.0, 32.0, 48.0, 64.0, 80.0, 192.0, 256.0, 320.0, 10.4436, 25.112000000000002, 34.054399999999994, 43.099199999999996, 594.0, 1440.0, 1856.0, 2208.0, 3.61, 26.144000000000002, 19.38, 45.524, 841.0, 928.0, 696.0, 1624.0, 1.0, 4.0, 4.0, 8.0, 16.0, 32.0, 48.0, 80.0, 1.9043999999999992, 4.029600000000001, 4.2504, 8.28, 121.0, 264.0, 176.0, 440.0, 0.0, -6.1599999999999975, -2.600000000000001, -8.76, 0.0, 84.0, 92.0, 176.0, 0.0, 0.0, 0.0, 0.0, 0.0, 8.0, 4.0, 12.0, 0.0, 2.600000000000001, 2.439999999999998, 5.039999999999998, 0.0, 20.0, 28.0, 48.0, 692.2384000000012, 1367.6209999999999, 2187.9464000000007, 2846.5820000000003, 3226.0, 6392.0, 9824.0, 11120.0, 94.0, 198.0, 312.0, 420.0, 510.0, 1278.0, 1864.0, 2180.0, 44.379000000000026, 102.30460000000001, 154.956, 191.3699999999999, 1610.0, 3032.0, 4784.0, 5472.0, 11.833599999999992, 8.771999999999993, 20.605599999999985, 17.543999999999986, 64.0, 48.0, 112.0, 96.0, 1.0, 1.0, 2.0, 2.0, 1.0, 3.0, 4.0, 6.0, 0.5328999999999998, 0.5621000000000005, 1.0949999999999998, 1.124200000000001, 36.0, 24.0, 60.0, 48.0, 28.09, 59.89000000000004, 87.98, 119.78000000000009, 0.0, 0.8900000000000005, 0.8900000000000005, 1.780000000000001, 0.0, 2.0, 2.0, 4.0, 0.0, 0.0, 0.0, 0.0, 0.0, -2.0, -2.0, -4.0, 0.0, -0.040000000000000036, -0.040000000000000036, -0.08000000000000007, 0.0, 2.0, 2.0, 4.0, 0.0, -6.000000000000001, -6.000000000000001, -12.000000000000002, 10.5376, 15.481999999999985, 26.471599999999995, 39.13400000000001, 56.5, 69.5, 143.0, 167.0, 1.0, 2.0, 3.0, 5.0, 5.0, 12.0, 18.0, 26.0, 0.5476999999999994, 0.9972999999999994, 1.6948000000000005, 2.4107000000000003, 30.5, 34.5, 72.0, 84.0, 41.424999999999976, 130.24130700000012, 194.59500000000003, 302.37145549999997, 0.0, 1.3550000000000013, 1.18, 3.775000000000002, 0.0, 5.0, 2.5, 14.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.15, -0.050000000000000044, 0.4599999999999995, 0.0, 4.0, 2.5, 11.5, 0.0, -5.453554999999997, -8.85, -13.510665000000005]}