Opened 3 years ago
Last modified 3 years ago
#7589 accepted enhancement
Saving PDB file 8 times slower than saving mmCIF
Reported by: | Owned by: | Eric Pettersen | |
---|---|---|---|
Priority: | low | Milestone: | |
Component: | Input/Output | Version: | |
Keywords: | Cc: | Greg Couch | |
Blocked By: | Blocking: | ||
Notify when closed: | Platform: | all | |
Project: | ChimeraX |
Description
The following bug report has been submitted: Platform: macOS-12.5.1-arm64-arm-64bit ChimeraX Version: 1.5.dev202209022203 (2022-09-02 22:03:17 UTC) Description I'm puzzled why saving a PDB file is so slow, it is almost 10 times slower than saving an mmCIF file. When saving a morph of 16000 atoms with 50 coordinate sets it took 120 seconds. I would avoid this problem by saving as mmCIF, but mmCIF save does not all the allCoordsets option (the subject of another ticket). Log: UCSF ChimeraX version: 1.5.dev202209022203 (2022-09-02) © 2016-2022 Regents of the University of California. All rights reserved. How to cite UCSF ChimeraX > open 6j0b 6j0b title: Cryo-EM Structure of an Extracellular Contractile Injection System, PVC sheath-tube complex in extended state [more info...] Chain information for 6j0b #1 --- Chain | Description | UniProt A B C D E F G H I J K L | Pvc2 | B6VNP3_PHOAA a b c d e f g h i j k l | Pvc1 | B6VNP4_PHOAA > time save test.pdb > save test.pdb command time 6.824 seconds > time save test.cif > save test.cif command time 0.7242 seconds draw time 18.15 seconds draw time 8.073 seconds OpenGL version: 4.1 Metal - 76.3 OpenGL renderer: Apple M1 Max OpenGL vendor: Apple Python: 3.9.11 Locale: en_US.UTF-8 Qt version: PyQt6 6.3.1, Qt 6.3.1 Qt runtime version: 6.3.1 Qt platform: cocoa Hardware: Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro18,2 Chip: Apple M1 Max Total Number of Cores: 10 (8 performance and 2 efficiency) Memory: 32 GB System Firmware Version: 7459.141.1 OS Loader Version: 7459.141.1 Software: System Software Overview: System Version: macOS 12.5.1 (21G83) Kernel Version: Darwin 21.6.0 Time since boot: 20 days 23:53 Graphics/Displays: Apple M1 Max: Chipset Model: Apple M1 Max Type: GPU Bus: Built-In Total Number of Cores: 32 Vendor: Apple (0x106b) Metal Family: Supported, Metal GPUFamily Apple 7 Displays: Color LCD: Display Type: Built-in Liquid Retina XDR Display Resolution: 3456 x 2234 Retina Main Display: Yes Mirror: Off Online: Yes Automatically Adjust Brightness: No Connection Type: Internal Installed Packages: alabaster: 0.7.12 appdirs: 1.4.4 appnope: 0.1.3 asttokens: 2.0.8 Babel: 2.10.3 backcall: 0.2.0 blockdiag: 3.0.0 build: 0.8.0 certifi: 2021.10.8 cftime: 1.6.1 charset-normalizer: 2.1.1 ChimeraX-AddCharge: 1.4 ChimeraX-AddH: 2.2 ChimeraX-AlignmentAlgorithms: 2.0 ChimeraX-AlignmentHdrs: 3.2.1 ChimeraX-AlignmentMatrices: 2.0 ChimeraX-Alignments: 2.5.2 ChimeraX-AlphaFold: 1.0 ChimeraX-AltlocExplorer: 1.0.3 ChimeraX-AmberInfo: 1.0 ChimeraX-Arrays: 1.0 ChimeraX-ArtiaX: 0.1 ChimeraX-Atomic: 1.41.2 ChimeraX-AtomicLibrary: 7.0.2 ChimeraX-AtomSearch: 2.0.1 ChimeraX-AxesPlanes: 2.3 ChimeraX-BasicActions: 1.1.2 ChimeraX-BILD: 1.0 ChimeraX-BlastProtein: 2.1.2 ChimeraX-BondRot: 2.0.1 ChimeraX-BugReporter: 1.0.1 ChimeraX-BuildStructure: 2.7.1 ChimeraX-Bumps: 1.0 ChimeraX-BundleBuilder: 1.2 ChimeraX-ButtonPanel: 1.0.1 ChimeraX-CageBuilder: 1.0.1 ChimeraX-CellPack: 1.0 ChimeraX-Centroids: 1.3.1 ChimeraX-ChangeChains: 1.0 ChimeraX-CheckWaters: 1.1.1 ChimeraX-ChemGroup: 2.0 ChimeraX-Clashes: 2.2.4 ChimeraX-ColorActions: 1.0.1 ChimeraX-ColorGlobe: 1.0 ChimeraX-ColorKey: 1.5.2 ChimeraX-CommandLine: 1.2.4 ChimeraX-ConnectStructure: 2.0.1 ChimeraX-Contacts: 1.0.1 ChimeraX-Core: 1.5.dev202209022203 ChimeraX-CoreFormats: 1.1 ChimeraX-coulombic: 1.3.2 ChimeraX-Crosslinks: 1.0 ChimeraX-cryoDRGN: 1.0 ChimeraX-Crystal: 1.0 ChimeraX-CrystalContacts: 1.0.1 ChimeraX-DataFormats: 1.2.2 ChimeraX-Dicom: 1.1 ChimeraX-DistMonitor: 1.3 ChimeraX-DockPrep: 1.0 ChimeraX-Dssp: 2.0 ChimeraX-EMDB-SFF: 1.0 ChimeraX-ExperimentalCommands: 1.0 ChimeraX-FileHistory: 1.0.1 ChimeraX-FunctionKey: 1.0.1 ChimeraX-Geometry: 1.2 ChimeraX-gltf: 1.0 ChimeraX-Graphics: 1.1 ChimeraX-Hbonds: 2.3.1 ChimeraX-Help: 1.2.1 ChimeraX-HKCage: 1.3 ChimeraX-IHM: 1.1 ChimeraX-ImageFormats: 1.2 ChimeraX-IMOD: 1.0 ChimeraX-IO: 1.0.1 ChimeraX-ItemsInspection: 1.0.1 ChimeraX-Label: 1.1.6 ChimeraX-ListInfo: 1.1.1 ChimeraX-Log: 1.1.5 ChimeraX-LookingGlass: 1.1 ChimeraX-Maestro: 1.8.1 ChimeraX-Map: 1.1.1 ChimeraX-MapData: 2.0 ChimeraX-MapEraser: 1.0.1 ChimeraX-MapFilter: 2.0 ChimeraX-MapFit: 2.0 ChimeraX-MapSeries: 2.1.1 ChimeraX-Markers: 1.0.1 ChimeraX-Mask: 1.0.1 ChimeraX-MatchMaker: 2.0.6 ChimeraX-MDcrds: 2.6 ChimeraX-MedicalToolbar: 1.0.2 ChimeraX-Meeting: 1.0.1 ChimeraX-MLP: 1.1 ChimeraX-mmCIF: 2.7 ChimeraX-MMTF: 2.1 ChimeraX-Modeller: 1.5.6 ChimeraX-ModelPanel: 1.3.6 ChimeraX-ModelSeries: 1.0.1 ChimeraX-Mol2: 2.0 ChimeraX-Mole: 1.0 ChimeraX-Morph: 1.0 ChimeraX-MouseModes: 1.1.1 ChimeraX-Movie: 1.0 ChimeraX-Neuron: 1.0 ChimeraX-Nucleotides: 2.0.3 ChimeraX-OpenCommand: 1.9.1 ChimeraX-PDB: 2.6.7 ChimeraX-PDBBio: 1.0 ChimeraX-PDBLibrary: 1.0.2 ChimeraX-PDBMatrices: 1.0 ChimeraX-PickBlobs: 1.0.1 ChimeraX-Positions: 1.0 ChimeraX-PresetMgr: 1.1 ChimeraX-PubChem: 2.1 ChimeraX-ReadPbonds: 1.0.1 ChimeraX-Registration: 1.1.1 ChimeraX-RemoteControl: 1.0 ChimeraX-RenumberResidues: 1.1 ChimeraX-ResidueFit: 1.0.1 ChimeraX-RestServer: 1.1 ChimeraX-RNALayout: 1.0 ChimeraX-RotamerLibMgr: 2.0.1 ChimeraX-RotamerLibsDunbrack: 2.0 ChimeraX-RotamerLibsDynameomics: 2.0 ChimeraX-RotamerLibsRichardson: 2.0 ChimeraX-SaveCommand: 1.5.1 ChimeraX-SchemeMgr: 1.0 ChimeraX-SDF: 2.0 ChimeraX-Segger: 1.0 ChimeraX-Segment: 1.0 ChimeraX-SelInspector: 1.0 ChimeraX-SeqView: 2.7.2 ChimeraX-Shape: 1.0.1 ChimeraX-Shell: 1.0.1 ChimeraX-Shortcuts: 1.1.1 ChimeraX-ShowSequences: 1.0.1 ChimeraX-SideView: 1.0.1 ChimeraX-Smiles: 2.1 ChimeraX-SmoothLines: 1.0 ChimeraX-SpaceNavigator: 1.0 ChimeraX-StdCommands: 1.9 ChimeraX-STL: 1.0 ChimeraX-Storm: 1.0 ChimeraX-StructMeasure: 1.1 ChimeraX-Struts: 1.0.1 ChimeraX-Surface: 1.0 ChimeraX-SwapAA: 2.0.1 ChimeraX-SwapRes: 2.1.3 ChimeraX-TapeMeasure: 1.0 ChimeraX-Test: 1.0 ChimeraX-Toolbar: 1.1.2 ChimeraX-ToolshedUtils: 1.2.1 ChimeraX-Tug: 1.0.1 ChimeraX-UI: 1.24 ChimeraX-uniprot: 2.2.1 ChimeraX-UnitCell: 1.0.1 ChimeraX-ViewDockX: 1.1.3 ChimeraX-VIPERdb: 1.0 ChimeraX-Vive: 1.1 ChimeraX-VolumeMenu: 1.0.1 ChimeraX-VTK: 1.0 ChimeraX-WavefrontOBJ: 1.0 ChimeraX-WebCam: 1.0.1 ChimeraX-WebServices: 1.1.0 ChimeraX-Zone: 1.0.1 colorama: 0.4.5 cxservices: 1.2 cycler: 0.11.0 Cython: 0.29.32 debugpy: 1.6.3 decorator: 5.1.1 docutils: 0.19 entrypoints: 0.4 executing: 1.0.0 filelock: 3.7.1 fonttools: 4.37.1 funcparserlib: 1.0.0 grako: 3.16.5 h5py: 3.7.0 html2text: 2020.1.16 idna: 3.3 ihm: 0.33 imagecodecs: 2022.2.22 imagesize: 1.4.1 importlib-metadata: 4.12.0 ipykernel: 6.15.1 ipython: 8.4.0 ipython-genutils: 0.2.0 jedi: 0.18.1 Jinja2: 3.1.2 jupyter-client: 7.3.4 jupyter-core: 4.11.1 kiwisolver: 1.4.4 line-profiler: 3.5.1 lxml: 4.9.1 lz4: 4.0.2 MarkupSafe: 2.1.1 matplotlib: 3.5.2 matplotlib-inline: 0.1.6 msgpack: 1.0.4 nest-asyncio: 1.5.5 netCDF4: 1.6.0 networkx: 2.8.5 numexpr: 2.8.3 numpy: 1.23.1 openvr: 1.23.701 packaging: 21.3 pandas: 1.4.3 ParmEd: 3.4.3 parso: 0.8.3 pep517: 0.13.0 pexpect: 4.8.0 pickleshare: 0.7.5 Pillow: 9.2.0 pip: 22.2.1 pkginfo: 1.8.3 prompt-toolkit: 3.0.30 psutil: 5.9.1 ptyprocess: 0.7.0 pure-eval: 0.2.2 pycollada: 0.7.2 pydicom: 2.3.0 Pygments: 2.12.0 PyOpenGL: 3.1.5 PyOpenGL-accelerate: 3.1.5 pyparsing: 3.0.9 PyQt6: 6.3.1 PyQt6-Qt6: 6.3.1 PyQt6-sip: 13.4.0 PyQt6-WebEngine: 6.3.1 PyQt6-WebEngine-Qt6: 6.3.1 python-dateutil: 2.8.2 pytz: 2022.2.1 pyzmq: 23.2.1 qtconsole: 5.3.1 QtPy: 2.2.0 RandomWords: 0.4.0 requests: 2.28.1 scipy: 1.9.0 Send2Trash: 1.8.0 setuptools: 63.3.0 sfftk-rw: 0.7.2 six: 1.16.0 snowballstemmer: 2.2.0 sortedcontainers: 2.4.0 Sphinx: 5.1.1 sphinx-autodoc-typehints: 1.19.1 sphinxcontrib-applehelp: 1.0.2 sphinxcontrib-blockdiag: 3.0.0 sphinxcontrib-devhelp: 1.0.2 sphinxcontrib-htmlhelp: 2.0.0 sphinxcontrib-jsmath: 1.0.1 sphinxcontrib-qthelp: 1.0.3 sphinxcontrib-serializinghtml: 1.1.5 stack-data: 0.5.0 starfile: 0.4.11 superqt: 0.3.3 tables: 3.7.0 tifffile: 2022.7.31 tinyarray: 1.2.4 tomli: 2.0.1 tornado: 6.2 traitlets: 5.3.0 typing-extensions: 4.3.0 urllib3: 1.26.12 wcwidth: 0.2.5 webcolors: 1.12 wheel: 0.37.1 wheel-filename: 1.4.1 zipp: 3.8.1
Change History (4)
comment:1 by , 3 years ago
Cc: | added |
---|---|
Component: | Unassigned → Input/Output |
Owner: | set to |
Platform: | → all |
Project: | → ChimeraX |
Status: | new → assigned |
Summary: | ChimeraX bug report submission → Saving PDB file 8 times slower than saving mmCIF |
Type: | defect → enhancement |
comment:2 by , 3 years ago
You can now save mmCIF files with "allCoordsets true". For a small NMR file, 176d:
open 176d coordsets true 176d has 10 coordinate sets time save foo.pdb allcoordsets true command time 0.07298 seconds time save foo.cif allcoordsets true command time 0.09097 seconds
So, in this test case, saving the mmCIF file was slower.
comment:3 by , 3 years ago
Priority: | normal → low |
---|---|
Status: | assigned → accepted |
While effort was put into optimizing PDB read times, no effort went into optimizing save times, since in 99% of the cases its only a few seconds and also comparatively rarely used. Many other efforts have higher priority.
comment:4 by , 3 years ago
The disparity in speed with mmCIF writing is not as large as inferred from single coordinate set timing. Greg added the allCoordsets option to save mmcif (#7579) and the same 16000 atom 50 coordset save that took 120 seconds in PDB format takes 60 seconds in mmCIF format.
Both of these could surely be faster. The written file is only 65 Mbytes, so it is writing only 1 Mbyte/second.
I agree it as not as important as read speed. But saving a structure is a relatively common operation and it would be nice if it were fast.
The fact that there is no option to save coordsets in mmCIF is ticket #7579.