finalcif 142__tar.gz → 144__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. {finalcif-142 → finalcif-144}/.gitignore +2 -0
  2. {finalcif-142 → finalcif-144}/PKG-INFO +1 -1
  3. finalcif-144/finalcif/__init__.py +2 -0
  4. {finalcif-142 → finalcif-144}/finalcif/appwindow.py +4 -4
  5. {finalcif-142 → finalcif-144}/finalcif/cif/cif_file_io.py +8 -2
  6. {finalcif-142 → finalcif-144}/finalcif/displaymol/molecule2D.py +16 -2
  7. {finalcif-142 → finalcif-144}/finalcif/report/templated_report.py +6 -6
  8. finalcif-144/finalcif/template/report_default.docx +0 -0
  9. finalcif-144/finalcif/template/template_for_multitable.docx +0 -0
  10. {finalcif-142 → finalcif-144}/finalcif/tools/misc.py +16 -3
  11. {finalcif-142 → finalcif-144}/finalcif/tools/shred.py +5 -0
  12. {finalcif-142 → finalcif-144}/update.exe +0 -0
  13. finalcif-142/finalcif/__init__.py +0 -2
  14. finalcif-142/finalcif/template/report_default.docx +0 -0
  15. finalcif-142/finalcif/template/template_for_multitable.docx +0 -0
  16. {finalcif-142 → finalcif-144}/.gitattributes +0 -0
  17. {finalcif-142 → finalcif-144}/.run/Make Documentation MAC.run.xml +0 -0
  18. {finalcif-142 → finalcif-144}/.run/compile_ui_files.run.xml +0 -0
  19. {finalcif-142 → finalcif-144}/.run/make documentation Windows.run.xml +0 -0
  20. {finalcif-142 → finalcif-144}/CODE_OF_CONDUCT.md +0 -0
  21. {finalcif-142 → finalcif-144}/CONTRIBUTING.md +0 -0
  22. {finalcif-142 → finalcif-144}/Finalcif_installer_win.spec +0 -0
  23. {finalcif-142 → finalcif-144}/Finalcif_linux_onefile.spec +0 -0
  24. {finalcif-142 → finalcif-144}/Finalcif_mac.spec +0 -0
  25. {finalcif-142 → finalcif-144}/Hydrogen_solution_type.cif +0 -0
  26. {finalcif-142 → finalcif-144}/LICENSE +0 -0
  27. {finalcif-142 → finalcif-144}/README.md +0 -0
  28. {finalcif-142 → finalcif-144}/finalcif/app_path.py +0 -0
  29. {finalcif-142 → finalcif-144}/finalcif/cif/__init__.py +0 -0
  30. {finalcif-142 → finalcif-144}/finalcif/cif/all_cif_dicts.py +0 -0
  31. {finalcif-142 → finalcif-144}/finalcif/cif/atoms.py +0 -0
  32. {finalcif-142 → finalcif-144}/finalcif/cif/checkcif/__init__.py +0 -0
  33. {finalcif-142 → finalcif-144}/finalcif/cif/checkcif/checkcif.py +0 -0
  34. {finalcif-142 → finalcif-144}/finalcif/cif/cif_dict_foo.py +0 -0
  35. {finalcif-142 → finalcif-144}/finalcif/cif/cif_order.py +0 -0
  36. {finalcif-142 → finalcif-144}/finalcif/cif/cod/__init__.py +0 -0
  37. {finalcif-142 → finalcif-144}/finalcif/cif/cod/deposit.py +0 -0
  38. {finalcif-142 → finalcif-144}/finalcif/cif/cod/deposit_check.py +0 -0
  39. {finalcif-142 → finalcif-144}/finalcif/cif/cod/deposition_list.py +0 -0
  40. {finalcif-142 → finalcif-144}/finalcif/cif/cod/doi.py +0 -0
  41. {finalcif-142 → finalcif-144}/finalcif/cif/cod/upload.py +0 -0
  42. {finalcif-142 → finalcif-144}/finalcif/cif/cod/website_parser.py +0 -0
  43. {finalcif-142 → finalcif-144}/finalcif/cif/core_dict.py +0 -0
  44. {finalcif-142 → finalcif-144}/finalcif/cif/hkl.py +0 -0
  45. {finalcif-142 → finalcif-144}/finalcif/cif/modulation_dict.py +0 -0
  46. {finalcif-142 → finalcif-144}/finalcif/cif/powder_dict.py +0 -0
  47. {finalcif-142 → finalcif-144}/finalcif/cif/reference.py +0 -0
  48. {finalcif-142 → finalcif-144}/finalcif/cif/restraints_dict.py +0 -0
  49. {finalcif-142 → finalcif-144}/finalcif/cif/text.py +0 -0
  50. {finalcif-142 → finalcif-144}/finalcif/cif/twin_dict.py +0 -0
  51. {finalcif-142 → finalcif-144}/finalcif/datafiles/__init__.py +0 -0
  52. {finalcif-142 → finalcif-144}/finalcif/datafiles/bruker_data.py +0 -0
  53. {finalcif-142 → finalcif-144}/finalcif/datafiles/bruker_frame.py +0 -0
  54. {finalcif-142 → finalcif-144}/finalcif/datafiles/ccdc_mail.py +0 -0
  55. {finalcif-142 → finalcif-144}/finalcif/datafiles/data.py +0 -0
  56. {finalcif-142 → finalcif-144}/finalcif/datafiles/p4p_reader.py +0 -0
  57. {finalcif-142 → finalcif-144}/finalcif/datafiles/sadabs.py +0 -0
  58. {finalcif-142 → finalcif-144}/finalcif/datafiles/saint.py +0 -0
  59. {finalcif-142 → finalcif-144}/finalcif/datafiles/shelx_lst.py +0 -0
  60. {finalcif-142 → finalcif-144}/finalcif/datafiles/utils.py +0 -0
  61. {finalcif-142 → finalcif-144}/finalcif/displaymol/__init__.py +0 -0
  62. {finalcif-142 → finalcif-144}/finalcif/displaymol/sdm.py +0 -0
  63. {finalcif-142 → finalcif-144}/finalcif/displaymol/vtk_molecule.py +0 -0
  64. {finalcif-142 → finalcif-144}/finalcif/equip_property/__init__.py +0 -0
  65. {finalcif-142 → finalcif-144}/finalcif/equip_property/author_loop_templates.py +0 -0
  66. {finalcif-142 → finalcif-144}/finalcif/equip_property/equipment.py +0 -0
  67. {finalcif-142 → finalcif-144}/finalcif/equip_property/properties.py +0 -0
  68. {finalcif-142 → finalcif-144}/finalcif/equip_property/tools.py +0 -0
  69. {finalcif-142 → finalcif-144}/finalcif/finalcif_start.py +0 -0
  70. {finalcif-142 → finalcif-144}/finalcif/gui/__init__.py +0 -0
  71. {finalcif-142 → finalcif-144}/finalcif/gui/block_combobox.py +0 -0
  72. {finalcif-142 → finalcif-144}/finalcif/gui/combobox.py +0 -0
  73. {finalcif-142 → finalcif-144}/finalcif/gui/custom_classes.py +0 -0
  74. {finalcif-142 → finalcif-144}/finalcif/gui/dialogs.py +0 -0
  75. {finalcif-142 → finalcif-144}/finalcif/gui/edit_button.py +0 -0
  76. {finalcif-142 → finalcif-144}/finalcif/gui/equipmenttable.py +0 -0
  77. {finalcif-142 → finalcif-144}/finalcif/gui/file_editor.py +0 -0
  78. {finalcif-142 → finalcif-144}/finalcif/gui/finalcif_gui_ui.py +0 -0
  79. {finalcif-142 → finalcif-144}/finalcif/gui/finalcif_gui_ui.ui +0 -0
  80. {finalcif-142 → finalcif-144}/finalcif/gui/import_selector.py +0 -0
  81. {finalcif-142 → finalcif-144}/finalcif/gui/import_selector_ui.py +0 -0
  82. {finalcif-142 → finalcif-144}/finalcif/gui/import_selector_ui.ui +0 -0
  83. {finalcif-142 → finalcif-144}/finalcif/gui/loop_creator.py +0 -0
  84. {finalcif-142 → finalcif-144}/finalcif/gui/loop_creator_ui.py +0 -0
  85. {finalcif-142 → finalcif-144}/finalcif/gui/loop_creator_ui.ui +0 -0
  86. {finalcif-142 → finalcif-144}/finalcif/gui/loops.py +0 -0
  87. {finalcif-142 → finalcif-144}/finalcif/gui/mainstackwidget.py +0 -0
  88. {finalcif-142 → finalcif-144}/finalcif/gui/mixins.py +0 -0
  89. {finalcif-142 → finalcif-144}/finalcif/gui/new_key_dialog.py +0 -0
  90. {finalcif-142 → finalcif-144}/finalcif/gui/new_key_dialog_ui.py +0 -0
  91. {finalcif-142 → finalcif-144}/finalcif/gui/new_key_dialog_ui.ui +0 -0
  92. {finalcif-142 → finalcif-144}/finalcif/gui/plaintextedit.py +0 -0
  93. {finalcif-142 → finalcif-144}/finalcif/gui/playground.py +0 -0
  94. {finalcif-142 → finalcif-144}/finalcif/gui/propertytable.py +0 -0
  95. {finalcif-142 → finalcif-144}/finalcif/gui/spell_check_edit.py +0 -0
  96. {finalcif-142 → finalcif-144}/finalcif/gui/text_templates_ui.py +0 -0
  97. {finalcif-142 → finalcif-144}/finalcif/gui/text_templates_ui.ui +0 -0
  98. {finalcif-142 → finalcif-144}/finalcif/gui/text_value_editor.py +0 -0
  99. {finalcif-142 → finalcif-144}/finalcif/gui/validators.py +0 -0
  100. {finalcif-142 → finalcif-144}/finalcif/gui/vrf_classes.py +0 -0
  101. {finalcif-142 → finalcif-144}/finalcif/icon/__init__.py +0 -0
  102. {finalcif-142 → finalcif-144}/finalcif/icon/finalcif.png +0 -0
  103. {finalcif-142 → finalcif-144}/finalcif/icon/finalcif2.ico +0 -0
  104. {finalcif-142 → finalcif-144}/finalcif/icon/finalcif2.png +0 -0
  105. {finalcif-142 → finalcif-144}/finalcif/icon/multitable.ico +0 -0
  106. {finalcif-142 → finalcif-144}/finalcif/icon/multitable.png +0 -0
  107. {finalcif-142 → finalcif-144}/finalcif/icon/multitable.xcf +0 -0
  108. {finalcif-142 → finalcif-144}/finalcif/report/__init__.py +0 -0
  109. {finalcif-142 → finalcif-144}/finalcif/report/archive_report.py +0 -0
  110. {finalcif-142 → finalcif-144}/finalcif/report/gui/__init__.py +0 -0
  111. {finalcif-142 → finalcif-144}/finalcif/report/gui/mainwindow.py +0 -0
  112. {finalcif-142 → finalcif-144}/finalcif/report/gui/mainwindow.ui +0 -0
  113. {finalcif-142 → finalcif-144}/finalcif/report/mtools.py +0 -0
  114. {finalcif-142 → finalcif-144}/finalcif/report/references.py +0 -0
  115. {finalcif-142 → finalcif-144}/finalcif/report/report_text.py +0 -0
  116. {finalcif-142 → finalcif-144}/finalcif/report/symm.py +0 -0
  117. {finalcif-142 → finalcif-144}/finalcif/report/tables.py +0 -0
  118. {finalcif-142 → finalcif-144}/finalcif/template/__init__.py +0 -0
  119. {finalcif-142 → finalcif-144}/finalcif/template/bootstrap/bootstrap.min.css +0 -0
  120. {finalcif-142 → finalcif-144}/finalcif/template/machines/D8_VENTURE.cif +0 -0
  121. {finalcif-142 → finalcif-144}/finalcif/template/mathml2omml.xsl +0 -0
  122. {finalcif-142 → finalcif-144}/finalcif/template/report.tmpl +0 -0
  123. {finalcif-142 → finalcif-144}/finalcif/template/template1.docx +0 -0
  124. {finalcif-142 → finalcif-144}/finalcif/template/template_text.docx +0 -0
  125. {finalcif-142 → finalcif-144}/finalcif/template/template_without_text.docx +0 -0
  126. {finalcif-142 → finalcif-144}/finalcif/template/templates.py +0 -0
  127. {finalcif-142 → finalcif-144}/finalcif/template/xsl/convert.py +0 -0
  128. {finalcif-142 → finalcif-144}/finalcif/template/xsl/xmltohtml.xsl +0 -0
  129. {finalcif-142 → finalcif-144}/finalcif/tools/__init__.py +0 -0
  130. {finalcif-142 → finalcif-144}/finalcif/tools/chemparse.py +0 -0
  131. {finalcif-142 → finalcif-144}/finalcif/tools/download.py +0 -0
  132. {finalcif-142 → finalcif-144}/finalcif/tools/dsrmath.py +0 -0
  133. {finalcif-142 → finalcif-144}/finalcif/tools/options.py +0 -0
  134. {finalcif-142 → finalcif-144}/finalcif/tools/platon.py +0 -0
  135. {finalcif-142 → finalcif-144}/finalcif/tools/pupdate.py +0 -0
  136. {finalcif-142 → finalcif-144}/finalcif/tools/settings.py +0 -0
  137. {finalcif-142 → finalcif-144}/finalcif/tools/space_groups.py +0 -0
  138. {finalcif-142 → finalcif-144}/finalcif/tools/spgr_format.py +0 -0
  139. {finalcif-142 → finalcif-144}/finalcif/tools/statusbar.py +0 -0
  140. {finalcif-142 → finalcif-144}/finalcif/tools/sumformula.py +0 -0
  141. {finalcif-142 → finalcif-144}/finalcif.exe +0 -0
  142. {finalcif-142 → finalcif-144}/install_requirements +0 -0
  143. {finalcif-142 → finalcif-144}/install_requirements.bat +0 -0
  144. {finalcif-142 → finalcif-144}/pyproject.toml +0 -0
  145. {finalcif-142 → finalcif-144}/requirements.txt +0 -0
  146. {finalcif-142 → finalcif-144}/requirements_devel.txt +0 -0
  147. {finalcif-142 → finalcif-144}/requirements_doku.txt +0 -0
  148. {finalcif-142 → finalcif-144}/run_finalcif +0 -0
  149. {finalcif-142 → finalcif-144}/run_finalcif.bat +0 -0
  150. {finalcif-142 → finalcif-144}/screenshots/finalcif_checkcif.png +0 -0
  151. {finalcif-142 → finalcif-144}/screenshots/finalcif_details.png +0 -0
  152. {finalcif-142 → finalcif-144}/screenshots/finalcif_loops.png +0 -0
  153. {finalcif-142 → finalcif-144}/screenshots/finalcif_loops2.png +0 -0
  154. {finalcif-142 → finalcif-144}/screenshots/finalcif_main.png +0 -0
  155. {finalcif-142 → finalcif-144}/screenshots/finalcif_report.png +0 -0
  156. {finalcif-142 → finalcif-144}/screenshots/finalcif_responses.png +0 -0
@@ -221,3 +221,5 @@ test.html
221
221
 
222
222
  work/~$test.docx
223
223
  tests/examples/work/report_cu_BruecknerJK_153F40_0m-finalcif_pm.docx
224
+ tests/examples/multi-multitable.docx
225
+ tests/examples/report_multi-finalcif.docx
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: finalcif
3
- Version: 142
3
+ Version: 144
4
4
  Summary: CIF file editor
5
5
  Project-URL: Homepage, https://dkratzert.de/finalcif.html
6
6
  Project-URL: Bug Tracker, https://github.com/dkratzert/FinalCif/issues
@@ -0,0 +1,2 @@
1
+
2
+ VERSION = 144
@@ -24,6 +24,7 @@ from PyQt5.QtWidgets import (QMainWindow, QShortcut, QCheckBox, QListWidgetItem,
24
24
  from gemmi import cif
25
25
 
26
26
  from finalcif import VERSION
27
+ from finalcif.app_path import application_path
27
28
  # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
28
29
  # QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_ShareOpenGLContexts)
29
30
  from finalcif.cif.checkcif.checkcif import MyHTMLParser, AlertHelp, CheckCif
@@ -1104,7 +1105,7 @@ class AppWindow(QMainWindow):
1104
1105
  item = self.ui.docxTemplatesListWidget.item(index)
1105
1106
  if item.checkState() == Qt.Checked:
1106
1107
  if self.templates.report_from_default_template():
1107
- return 'finalcif/template/report_default.docx'
1108
+ return str(application_path / 'template/report_default.docx')
1108
1109
  else:
1109
1110
  return item.text()
1110
1111
 
@@ -1822,9 +1823,8 @@ class AppWindow(QMainWindow):
1822
1823
  self.add_ccdc_number()
1823
1824
  if self.cif.shx and self.cif.shx.abin and not self.cif['_platon_squeeze_void_probe_radius']:
1824
1825
  show_general_warning(self, "A SQUEEZE refinement was detected.\n"
1825
- "Please import the "
1826
- "corresponding .sqf file from PLATON and\n"
1827
- "complete the _platon_squeeze_void_content information"
1826
+ "Please import the corresponding .sqf file\n"
1827
+ "from PLATON and complete the _platon_squeeze_void_content information "
1828
1828
  "in the 'Platon SQUEEZE voids' loop.")
1829
1829
  vheadlist = []
1830
1830
  for row_number in range(self.ui.cif_main_table.model().rowCount()):
@@ -356,6 +356,12 @@ class CifContainer():
356
356
  print('No hkl data found in CIF!, {}'.format(e))
357
357
  return ''
358
358
 
359
+ @property
360
+ def fab_file(self):
361
+ if self['_shelx_fab_file']:
362
+ return self['_shelx_fab_file']
363
+ return ''
364
+
359
365
  @property
360
366
  def hkl_as_cif(self) -> str:
361
367
  return HKL(self.hkl_file, self.block.name, hklf_type=self.hklf_number).hkl_as_cif
@@ -823,7 +829,7 @@ class CifContainer():
823
829
  publ_loop = self.block.find_loop('_geom_angle_publ_flag')
824
830
  angle = namedtuple('angle', ('label1', 'label2', 'label3', 'angle_val', 'symm1', 'symm2'))
825
831
  for label1, label2, label3, angle_val, symm1, symm2, publ in \
826
- zip(label1, label2, label3, angle_val, symm1, symm2, publ_loop):
832
+ zip(label1, label2, label3, angle_val, symm1, symm2, publ_loop):
827
833
  if (without_H and (self.ishydrogen(label1) or self.ishydrogen(label2) or
828
834
  self.ishydrogen(label3)) or (self.yes_not_set(publ))):
829
835
  continue
@@ -895,7 +901,7 @@ class CifContainer():
895
901
  hydr = namedtuple('HydrogenBond', ('label_d', 'label_h', 'label_a', 'dist_dh', 'dist_ha', 'dist_da',
896
902
  'angle_dha', 'symm'))
897
903
  for label_d, label_h, label_a, dist_dh, dist_ha, dist_da, angle_dha, symm, publ in (
898
- zip(label_d, label_h, label_a, dist_dh, dist_ha, dist_da, angle_dha, symm, publ_loop)):
904
+ zip(label_d, label_h, label_a, dist_dh, dist_ha, dist_da, angle_dha, symm, publ_loop)):
899
905
  if self.yes_not_set(publ):
900
906
  continue
901
907
  if self.picometer:
@@ -7,7 +7,7 @@ from typing import List, Union
7
7
  import numpy as np
8
8
  from PyQt5 import QtWidgets
9
9
  from PyQt5.QtCore import Qt
10
- from PyQt5.QtGui import QPainter, QPen, QBrush, QColor, QMouseEvent, QPalette, QImage, QResizeEvent
10
+ from PyQt5.QtGui import QPainter, QPen, QBrush, QColor, QMouseEvent, QPalette, QImage, QResizeEvent, QWheelEvent
11
11
 
12
12
  from finalcif.cif.atoms import get_radius_from_element, element2color
13
13
  from finalcif.cif.cif_file_io import CifContainer
@@ -29,6 +29,7 @@ class MoleculeWidget(QtWidgets.QWidget):
29
29
  super().__init__(parent=parent)
30
30
  self.factor = 1.0
31
31
  self.atoms_size = 12
32
+ self.fontsize = 13
32
33
  self.bond_width = 2
33
34
  self.labels = False
34
35
  self.molecule_center = np.array([0, 0, 0])
@@ -56,6 +57,12 @@ class MoleculeWidget(QtWidgets.QWidget):
56
57
  self.projected_points = []
57
58
  self.zoom = 1.1
58
59
 
60
+ def setLabelFont(self, font_size: int):
61
+ if font_size < 0:
62
+ font_size = 1
63
+ self.fontsize = font_size
64
+ self.update()
65
+
59
66
  def clear(self):
60
67
  self.open_molecule(atoms=[])
61
68
 
@@ -84,7 +91,7 @@ class MoleculeWidget(QtWidgets.QWidget):
84
91
  self.painter = QPainter(self)
85
92
  self.painter.setRenderHint(QPainter.Antialiasing)
86
93
  font = self.painter.font()
87
- font.setPixelSize(13)
94
+ font.setPixelSize(self.fontsize)
88
95
  self.painter.setFont(font)
89
96
  try:
90
97
  self.draw()
@@ -95,6 +102,12 @@ class MoleculeWidget(QtWidgets.QWidget):
95
102
  def mousePressEvent(self, event: QMouseEvent) -> None:
96
103
  self.lastPos = event.pos()
97
104
 
105
+ def wheelEvent(self, event: QWheelEvent):
106
+ if event.angleDelta().y() > 0:
107
+ self.setLabelFont(self.fontsize + 2)
108
+ elif event.angleDelta().y() < 0:
109
+ self.setLabelFont(self.fontsize - 2)
110
+
98
111
  def save_image(self, filename: Path, image_scale=1.5):
99
112
  image = QImage(self.size() * image_scale, QImage.Format_RGB32)
100
113
  image.fill(Qt.white)
@@ -285,6 +298,7 @@ def display(atoms: List[Atomtuple]):
285
298
  render_widget = MoleculeWidget(None)
286
299
  t1 = time.perf_counter()
287
300
  render_widget.open_molecule(atoms, labels=False)
301
+ render_widget.labels = True
288
302
  print(f'Time to display molecule: {time.perf_counter() - t1:5.4} s')
289
303
  # add and show
290
304
  window.setCentralWidget(render_widget)
@@ -40,7 +40,7 @@ from finalcif.report.report_text import (math_to_word, gstr, format_radiation, _
40
40
  from finalcif.report.symm import SymmetryElement
41
41
  from finalcif.tools.misc import (isnumeric, this_or_quest, timessym, angstrom, protected_space,
42
42
  less_or_equal, halbgeviert, minus_sign, ellipsis_mid, _angstrom_to_x, angstrom_to_pm,
43
- angstrom_to_nanometers)
43
+ angstrom_to_nanometers, do_nothing)
44
44
  from finalcif.tools.options import Options
45
45
  from finalcif.tools.space_groups import SpaceGroups
46
46
 
@@ -577,10 +577,10 @@ class Formatter(ABC):
577
577
  radiation_wavelength = cif['_diffrn_radiation_wavelength']
578
578
  try:
579
579
  resolution_angst = float(radiation_wavelength) / (2 * sin(radians(float(theta_max))))
580
- if not cif.picometer:
581
- d_max = f' ({resolution_angst:.2f}{protected_space}{angstrom})'
582
- else:
580
+ if cif.picometer:
583
581
  d_max = f' ({angstrom_to_pm(str(resolution_angst)):.2}{protected_space}pm)'
582
+ else:
583
+ d_max = f' ({resolution_angst:.2f}{protected_space}{angstrom})'
584
584
  # 2theta range:
585
585
  return f"{2 * float(theta_min):.2f} to {2 * float(theta_max):.2f}{d_max}"
586
586
  except ValueError:
@@ -1041,8 +1041,8 @@ class TemplatedReport():
1041
1041
  jinja_env = jinja2.Environment()
1042
1042
  jinja_env.globals.update(strip=str.strip)
1043
1043
  jinja_env.filters['inv_article'] = report_text.get_inf_article
1044
- jinja_env.filters['to_pm'] = angstrom_to_pm
1045
- jinja_env.filters['to_nm'] = angstrom_to_nanometers
1044
+ jinja_env.filters['to_pm'] = angstrom_to_pm if self.options.use_picometers else do_nothing
1045
+ jinja_env.filters['to_nm'] = angstrom_to_nanometers if self.options.use_picometers else do_nothing
1046
1046
  jinja_env.filters['float_num'] = report_text.format_float_with_decimal_places
1047
1047
  # foo[1,2] bar[3]:
1048
1048
  jinja_env.filters['ref_num'] = self.count_reference
@@ -98,15 +98,28 @@ def grouper(inputs, n, fillvalue=None):
98
98
 
99
99
 
100
100
  def angstrom_to_pm(angstrom: str) -> str:
101
- return _angstrom_to_x(angstrom, factor=100)
101
+ try:
102
+ return _angstrom_to_x(angstrom, factor=100)
103
+ except ValueError:
104
+ return '?'
102
105
 
103
106
 
104
107
  def angstrom_to_pm_squared(angstrom: str) -> str:
105
- return _angstrom_to_x(angstrom, factor=100 ** 2)
108
+ try:
109
+ return _angstrom_to_x(angstrom, factor=100 ** 2)
110
+ except ValueError:
111
+ return '?'
106
112
 
107
113
 
108
114
  def angstrom_to_nanometers(angstrom: str) -> str:
109
- return _angstrom_to_x(angstrom, factor=0.001)
115
+ try:
116
+ return _angstrom_to_x(angstrom, factor=0.001)
117
+ except ValueError:
118
+ return '?'
119
+
120
+
121
+ def do_nothing(value: str) -> str:
122
+ return value
110
123
 
111
124
 
112
125
  def _angstrom_to_x(value: str, factor: float = 100) -> str:
@@ -26,9 +26,12 @@ class ShredCIF():
26
26
  suffix='_' + self._cif.block.name + '-finalcif.res')
27
27
  hklfile_path = self._cif.finalcif_file_prefixed(prefix='',
28
28
  suffix='_' + self._cif.block.name + '-finalcif.hkl')
29
+ fabfile_path = self._cif.finalcif_file_prefixed(prefix='',
30
+ suffix='_' + self._cif.block.name + '-finalcif.fab')
29
31
  else:
30
32
  resfile_path = self._cif.finalcif_file.with_suffix('.res')
31
33
  hklfile_path = self._cif.finalcif_file.with_suffix('.hkl')
34
+ fabfile_path = self._cif.finalcif_file.with_suffix('.fab')
32
35
  res_data = None
33
36
  hkl_data = None
34
37
  if not self._cif:
@@ -51,6 +54,8 @@ class ShredCIF():
51
54
  hkl_data = self.format_hkl_data(hkl_data)
52
55
  if not self._write_hkl_file(hklfile_path, hkl_data):
53
56
  return None
57
+ if fab_data := self._cif.fab_file:
58
+ self._write_hkl_file(fabfile_path, fab_data)
54
59
  self._show_info(resfile_path, hklfile_path, res_data, hkl_data)
55
60
 
56
61
  @staticmethod
Binary file
@@ -1,2 +0,0 @@
1
-
2
- VERSION = 142
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes