def get_atomic_coordinates(self, cif: CifContainer): for at in cif.atoms(without_h=False): yield {'label': at.label, 'type' : at.type, 'x' : at.x.replace('-', minus_sign), 'y' : at.y.replace('-', minus_sign), 'z' : at.z.replace('-', minus_sign), 'part' : at.part.replace('-', minus_sign), 'occ' : at.occ.replace('-', minus_sign), 'u_eq' : at.u_eq.replace('-', minus_sign)}
def add_coords_table(document: Document, cif: CifContainer, table_num: int): """ Adds the table with the atom coordinates. :param document: The current word document. :param cif: the cif object from CifContainer. :return: None """ atoms = list(cif.atoms()) table_num += 1 headline = "Table {}. Atomic coordinates and ".format(table_num) h = document.add_heading(headline, 2) h.add_run('U').font.italic = True h.add_run('eq').font.subscript = True h.add_run('{}[{}'.format(protected_space, angstrom)) h.add_run('2').font.superscript = True h.add_run('] for {}'.format(cif.block.name)) coords_table = document.add_table(rows=len(atoms) + 1, cols=5, style='Table Grid') # Atom x y z U(eq) head_row = coords_table.rows[0] head_row.cells[0].paragraphs[0].add_run('Atom').bold = True px = head_row.cells[1].paragraphs[0] ar = px.add_run('x') ar.bold = True ar.italic = True py = head_row.cells[2].paragraphs[0] ar = py.add_run('y') ar.bold = True ar.italic = True pz = head_row.cells[3].paragraphs[0] ar = pz.add_run('z') ar.bold = True ar.italic = True pu = head_row.cells[4].paragraphs[0] ar = pu.add_run('U') ar.bold = True ar.italic = True ar2 = pu.add_run('eq') ar2.bold = True ar2.font.subscript = True # having a list of column cells before is *much* faster! col0_cells = coords_table.columns[0].cells col1_cells = coords_table.columns[1].cells col2_cells = coords_table.columns[2].cells col3_cells = coords_table.columns[3].cells col4_cells = coords_table.columns[4].cells rowidx = 1 for at in atoms: c0, c1, c2, c3, c4 = col0_cells[rowidx], col1_cells[rowidx], col2_cells[rowidx], \ col3_cells[rowidx], col4_cells[rowidx] rowidx += 1 c0.text = at[0] # label c1.text = (str(at[2])) # x c2.text = (str(at[3])) # y c3.text = (str(at[4])) # z c4.text = (str(at[7])) # ueq p = document.add_paragraph() p.style = document.styles['tabunterschr'] p.add_run('U').font.italic = True p.add_run('eq').font.subscript = True p.add_run(' is defined as 1/3 of the trace of the orthogonalized ') p.add_run('U').font.italic = True ij = p.add_run('ij') ij.font.subscript = True ij.font.italic = True p.add_run(' tensor.') set_column_width(coords_table.columns[0], Cm(2.3)) set_column_width(coords_table.columns[1], Cm(2.8)) set_column_width(coords_table.columns[2], Cm(2.8)) set_column_width(coords_table.columns[3], Cm(2.8)) set_column_width(coords_table.columns[4], Cm(2.8)) document.add_paragraph() return table_num