Opened 2 years ago
Closed 2 years ago
#9193 closed enhancement (fixed)
Computing molecular solvent excluded surface is slow for large numbers of atoms
| Reported by: | Eric Pettersen | Owned by: | Tom Goddard |
|---|---|---|---|
| Priority: | normal | Milestone: | |
| Component: | Surface | Version: | |
| Keywords: | Cc: | phil.cruz@… | |
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
The following bug report has been submitted:
Platform: macOS-10.16-x86_64-i386-64bit
ChimeraX Version: 1.6.1 (2023-05-09 17:57:07 UTC)
Description
Computing molecule SES surfaces with large numbers of atoms (>500,000) is much slower than expected. For a 6 million atom virus capsid (6b1t) it took an hour using large grid spacing 2.5. These surfaces are computed by the NIAID NIH 3D pipeline.
Log:
Could not find tool "Tabbed Toolbar"
UCSF ChimeraX version: 1.6.1 (2023-05-09)
© 2016-2023 Regents of the University of California. All rights reserved.
How to cite UCSF ChimeraX
> open 2bbv format mmcif fromDatabase pdbe_bio maxAssemblies 1
Summary of feedback from opening 2bbv fetched from pdbe_bio
---
warning | Missing or incomplete entity_poly_seq table. Inferred polymer
connectivity.
2bbv bioassembly 1 title:
The refined three-dimensional structure of an insect virus At 2.8 angstroms
resolution [more info...]
Chain information for 2bbv bioassembly 1 #1
---
Chain | Description
A AA AAA AAB AAC AAD AAE AAF AAG AAH AAI AAJ AAK AAL AAM AAN AAO AAP AAQ AAR
AAS AAT AAU AAV AAW AAX AAY AAZ AB ABA ABB ABC ABD ABE ABF ABG AC AD AE AF AG
AH AI AJ AK AL AM AN AO AP AQ AR AS AT AU AV AW AX AY AZ | RNA
(5'-R(*UP*CP*UP*UP*AP*UP*AP*UP*CP*U)-3')
B BA BAA BAB BAC BAD BAE BAF BAG BAH BAI BAJ BAK BAL BAM BAN BAO BAP BAQ BAR
BAS BAT BAU BAV BAW BAX BAY BAZ BB BBA BBB BBC BBD BBE BBF BBG BC BD BE BF BG
BH BI BJ BK BL BM BN BO BP BQ BR BS BT BU BV BW BX BY BZ D DA DAA DAB DAC DAD
DAE DAF DAG DAH DAI DAJ DAK DAL DAM DAN DAO DAP DAQ DAR DAS DAT DAU DAV DAW
DAX DAY DAZ DB DBA DBB DBC DBD DBE DBF DBG DC DD DE DF DG DH DI DJ DK DL DM DN
DO DP DQ DR DS DT DU DV DW DX DY DZ | PROTEIN (BLACK BEETLE VIRUS CAPSID
PROTEIN)
C CA CAA CAB CAC CAD CAE CAF CAG CAH CAI CAJ CAK CAL CAM CAN CAO CAP CAQ CAR
CAS CAT CAU CAV CAW CAX CAY CAZ CB CBA CBB CBC CBD CBE CBF CBG CC CD CE CF CG
CH CI CJ CK CL CM CN CO CP CQ CR CS CT CU CV CW CX CY CZ E EA EAA EAB EAC EAD
EAE EAF EAG EAH EAI EAJ EAK EAL EAM EAN EAO EAP EAQ EAR EAS EAT EAU EAV EAW
EAX EAY EAZ EB EBA EBB EBC EBD EBE EBF EBG EC ED EE EF EG EH EI EJ EK EL EM EN
EO EP EQ ER ES ET EU EV EW EX EY EZ G GA GAA GAB GAC GAD GAE GAF GAG GAH GAI
GAJ GAK GAL GAM GAN GAO GAP GAQ GAR GAS GAT GAU GAV GAW GAX GAY GAZ GB GBA GBB
GBC GBD GBE GBF GBG GC GD GE GF GG GH GI GJ GK GL GM GN GO GP GQ GR GS GT GU
GV GW GX GY GZ | PROTEIN (BLACK BEETLE VIRUS CAPSID PROTEIN)
F FA FAA FAB FAC FAD FAE FAF FAG FAH FAI FAJ FAK FAL FAM FAN FAO FAP FAQ FAR
FAS FAT FAU FAV FAW FAX FAY FAZ FB FBA FBB FBC FBD FBE FBF FBG FC FD FE FF FG
FH FI FJ FK FL FM FN FO FP FQ FR FS FT FU FV FW FX FY FZ | PROTEIN (BLACK
BEETLE VIRUS CAPSID PROTEIN)
Non-standard residues in 2bbv bioassembly 1 #1
---
CA — (CA)
2bbv bioassembly 1 mmCIF Assemblies
---
1| complete icosahedral assembly
2| icosahedral asymmetric unit
3| icosahedral pentamer
4| icosahedral 23 hexamer
5| icosahedral asymmetric unit, std point frame
6| crystal asymmetric unit, crystal frame
Opened 1 biological assemblies for 2bbv
> time surface enclose #1 sharp false grid 2.0
> surface enclose #1 sharpBoundaries false gridSpacing 2.0
command time 26.56 seconds
draw time 0.07606 seconds
OpenGL version: 4.1 ATI-4.12.7
OpenGL renderer: AMD Radeon Pro 580 OpenGL Engine
OpenGL vendor: ATI Technologies Inc.
Python: 3.9.11
Locale: UTF-8
Qt version: PyQt6 6.4.2, Qt 6.4.2
Qt runtime version: 6.4.3
Qt platform: cocoa
Hardware:
Hardware Overview:
Model Name: iMac
Model Identifier: iMac18,3
Processor Name: Quad-Core Intel Core i7
Processor Speed: 4.2 GHz
Number of Processors: 1
Total Number of Cores: 4
L2 Cache (per Core): 256 KB
L3 Cache: 8 MB
Hyper-Threading Technology: Enabled
Memory: 32 GB
System Firmware Version: 512.0.0.0.0
OS Loader Version: 577~170
SMC Version (system): 2.41f2
Software:
System Software Overview:
System Version: macOS 13.4 (22F66)
Kernel Version: Darwin 22.5.0
Time since boot: 14 days, 23 hours, 10 minutes
Graphics/Displays:
Radeon Pro 580:
Chipset Model: Radeon Pro 580
Type: GPU
Bus: PCIe
PCIe Lane Width: x16
VRAM (Total): 8 GB
Vendor: AMD (0x1002)
Device ID: 0x67df
Revision ID: 0x00c0
ROM Revision: 113-D000AA-931
VBIOS Version: 113-D0001A1X-025
EFI Driver Version: 01.00.931
Metal Support: Metal 2
Displays:
iMac:
Display Type: Built-In Retina LCD
Resolution: Retina 5K (5120 x 2880)
Framebuffer Depth: 30-Bit Color (ARGB2101010)
Main Display: Yes
Mirror: Off
Online: Yes
Automatically Adjust Brightness: Yes
Connection Type: Internal
Installed Packages:
alabaster: 0.7.13
appdirs: 1.4.4
appnope: 0.1.3
asttokens: 2.2.1
Babel: 2.12.1
backcall: 0.2.0
beautifulsoup4: 4.11.2
blockdiag: 3.0.0
build: 0.10.0
certifi: 2021.10.8
cftime: 1.6.2
charset-normalizer: 3.1.0
ChimeraX-AddCharge: 1.5.9.1
ChimeraX-AddH: 2.2.5
ChimeraX-AlignmentAlgorithms: 2.0.1
ChimeraX-AlignmentHdrs: 3.3.1
ChimeraX-AlignmentMatrices: 2.1
ChimeraX-Alignments: 2.9.3
ChimeraX-AlphaFold: 1.0
ChimeraX-AltlocExplorer: 1.0.3
ChimeraX-AmberInfo: 1.0
ChimeraX-Arrays: 1.1
ChimeraX-Atomic: 1.43.10
ChimeraX-AtomicLibrary: 10.0.6
ChimeraX-AtomSearch: 2.0.1
ChimeraX-AxesPlanes: 2.3.2
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.8
ChimeraX-Bumps: 1.0
ChimeraX-BundleBuilder: 1.2.2
ChimeraX-ButtonPanel: 1.0.1
ChimeraX-CageBuilder: 1.0.1
ChimeraX-CellPack: 1.0
ChimeraX-Centroids: 1.3.2
ChimeraX-ChangeChains: 1.0.2
ChimeraX-CheckWaters: 1.3.1
ChimeraX-ChemGroup: 2.0.1
ChimeraX-Clashes: 2.2.4
ChimeraX-Clipper: 0.20.0
ChimeraX-ColorActions: 1.0.3
ChimeraX-ColorGlobe: 1.0
ChimeraX-ColorKey: 1.5.3
ChimeraX-CommandLine: 1.2.5
ChimeraX-ConnectStructure: 2.0.1
ChimeraX-Contacts: 1.0.1
ChimeraX-Core: 1.6.1
ChimeraX-CoreFormats: 1.1
ChimeraX-coulombic: 1.4.2
ChimeraX-Crosslinks: 1.0
ChimeraX-Crystal: 1.0
ChimeraX-CrystalContacts: 1.0.1
ChimeraX-DataFormats: 1.2.3
ChimeraX-Dicom: 1.2
ChimeraX-DistMonitor: 1.4
ChimeraX-DockPrep: 1.1.1
ChimeraX-Dssp: 2.0
ChimeraX-EMDB-SFF: 1.0
ChimeraX-ESMFold: 1.0
ChimeraX-FileHistory: 1.0.1
ChimeraX-FunctionKey: 1.0.1
ChimeraX-Geometry: 1.3
ChimeraX-gltf: 1.0
ChimeraX-Graphics: 1.1.1
ChimeraX-Hbonds: 2.4
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-ISOLDE: 1.6.dev0
ChimeraX-ItemsInspection: 1.0.1
ChimeraX-Label: 1.1.7
ChimeraX-ListInfo: 1.1.1
ChimeraX-Log: 1.1.5
ChimeraX-LookingGlass: 1.1
ChimeraX-Maestro: 1.8.2
ChimeraX-Map: 1.1.4
ChimeraX-MapData: 2.0
ChimeraX-MapEraser: 1.0.1
ChimeraX-MapFilter: 2.0.1
ChimeraX-MapFit: 2.0
ChimeraX-MapSeries: 2.1.1
ChimeraX-Markers: 1.0.1
ChimeraX-Mask: 1.0.2
ChimeraX-MatchMaker: 2.0.12
ChimeraX-MDcrds: 2.6
ChimeraX-MedicalToolbar: 1.0.2
ChimeraX-Meeting: 1.0.1
ChimeraX-MLP: 1.1.1
ChimeraX-mmCIF: 2.12
ChimeraX-MMTF: 2.2
ChimeraX-Modeller: 1.5.9
ChimeraX-ModelPanel: 1.3.7
ChimeraX-ModelSeries: 1.0.1
ChimeraX-Mol2: 2.0
ChimeraX-Mole: 1.0
ChimeraX-Morph: 1.0.2
ChimeraX-MouseModes: 1.2
ChimeraX-Movie: 1.0
ChimeraX-Neuron: 1.0
ChimeraX-Nifti: 1.0
ChimeraX-NRRD: 1.0
ChimeraX-Nucleotides: 2.0.3
ChimeraX-OpenCommand: 1.10.1
ChimeraX-PDB: 2.7.2
ChimeraX-PDBBio: 1.0
ChimeraX-PDBLibrary: 1.0.2
ChimeraX-PDBMatrices: 1.0
ChimeraX-PhenixUI: 1.1.7
ChimeraX-PickBlobs: 1.0.1
ChimeraX-PICKLUSTER: 0.1
ChimeraX-Positions: 1.0
ChimeraX-PresetMgr: 1.1
ChimeraX-PubChem: 2.1
ChimeraX-QScore: 1.0
ChimeraX-ReadPbonds: 1.0.1
ChimeraX-Registration: 1.1.1
ChimeraX-RemoteControl: 1.0
ChimeraX-RenderByAttr: 1.1
ChimeraX-RenumberResidues: 1.1
ChimeraX-ResidueFit: 1.0.1
ChimeraX-RestServer: 1.1
ChimeraX-RMF: 0.12
ChimeraX-RNALayout: 1.0
ChimeraX-RotamerLibMgr: 3.0
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.1
ChimeraX-Segger: 1.0
ChimeraX-Segment: 1.0.1
ChimeraX-SelInspector: 1.0
ChimeraX-SeqView: 2.8.3
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.10.3
ChimeraX-STL: 1.0.1
ChimeraX-Storm: 1.0
ChimeraX-StructMeasure: 1.1.2
ChimeraX-Struts: 1.0.1
ChimeraX-Surface: 1.0.1
ChimeraX-SwapAA: 2.0.1
ChimeraX-SwapRes: 2.2.1
ChimeraX-TapeMeasure: 1.0
ChimeraX-Test: 1.0
ChimeraX-Toolbar: 1.1.2
ChimeraX-ToolshedUtils: 1.2.1
ChimeraX-Topography: 1.0
ChimeraX-Tug: 1.0.1
ChimeraX-TugLigands: 1.1
ChimeraX-UI: 1.28.4
ChimeraX-uniprot: 2.2.2
ChimeraX-UnitCell: 1.0.1
ChimeraX-ViewDockX: 1.2
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.2
ChimeraX-WebServices: 1.1.1
ChimeraX-Zone: 1.0.1
colorama: 0.4.6
comm: 0.1.3
contourpy: 1.0.7
cxservices: 1.2.2
cycler: 0.11.0
Cython: 0.29.33
debugpy: 1.6.7
decorator: 5.1.1
docutils: 0.19
executing: 1.2.0
filelock: 3.9.0
fonttools: 4.39.3
funcparserlib: 1.0.1
grako: 3.16.5
h5py: 3.8.0
html2text: 2020.1.16
idna: 3.4
ihm: 0.35
imagecodecs: 2022.2.22
imagesize: 1.4.1
importlib-metadata: 6.6.0
ipykernel: 6.21.1
ipython: 8.10.0
ipython-genutils: 0.2.0
ipywidgets: 8.0.6
jedi: 0.18.2
Jinja2: 3.1.2
jupyter-client: 8.0.2
jupyter-core: 5.3.0
jupyterlab-widgets: 3.0.7
kiwisolver: 1.4.4
line-profiler: 4.0.2
lxml: 4.9.2
lz4: 4.3.2
MarkupSafe: 2.1.2
matplotlib: 3.6.3
matplotlib-inline: 0.1.6
msgpack: 1.0.4
nest-asyncio: 1.5.6
netCDF4: 1.6.2
networkx: 2.8.8
nibabel: 5.0.1
nptyping: 2.5.0
numexpr: 2.8.4
numpy: 1.23.5
openvr: 1.23.701
opt-einsum: 3.3.0
packaging: 21.3
ParmEd: 3.4.3
parso: 0.8.3
pep517: 0.13.0
pexpect: 4.8.0
pickleshare: 0.7.5
Pillow: 9.3.0
pip: 23.0
pkginfo: 1.9.6
platformdirs: 3.5.0
prompt-toolkit: 3.0.38
psutil: 5.9.4
ptyprocess: 0.7.0
pure-eval: 0.2.2
pycollada: 0.7.2
pydicom: 2.3.0
Pygments: 2.14.0
pynrrd: 1.0.0
PyOpenGL: 3.1.5
PyOpenGL-accelerate: 3.1.5
pyparsing: 3.0.9
pyproject-hooks: 1.0.0
PyQt6-commercial: 6.4.2
PyQt6-Qt6: 6.4.3
PyQt6-sip: 13.4.1
PyQt6-WebEngine-commercial: 6.4.0
PyQt6-WebEngine-Qt6: 6.4.3
python-dateutil: 2.8.2
pytz: 2023.3
pyzmq: 25.0.2
qtconsole: 5.4.0
QtPy: 2.3.1
RandomWords: 0.4.0
requests: 2.28.2
scipy: 1.9.3
setuptools: 67.4.0
setuptools-scm: 7.0.5
sfftk-rw: 0.7.3
six: 1.16.0
snowballstemmer: 2.2.0
sortedcontainers: 2.4.0
soupsieve: 2.4.1
sphinx: 6.1.3
sphinx-autodoc-typehints: 1.22
sphinxcontrib-applehelp: 1.0.4
sphinxcontrib-blockdiag: 3.0.0
sphinxcontrib-devhelp: 1.0.2
sphinxcontrib-htmlhelp: 2.0.1
sphinxcontrib-jsmath: 1.0.1
sphinxcontrib-qthelp: 1.0.3
sphinxcontrib-serializinghtml: 1.1.5
stack-data: 0.6.2
tables: 3.7.0
tcia-utils: 1.2.0
tifffile: 2022.10.10
tinyarray: 1.2.4
tomli: 2.0.1
tornado: 6.3.1
traitlets: 5.9.0
typing-extensions: 4.5.0
tzdata: 2023.3
urllib3: 1.26.15
wcwidth: 0.2.6
webcolors: 1.12
wheel: 0.38.4
wheel-filename: 1.4.1
widgetsnbextension: 4.0.7
zipp: 3.15.0
Change History (2)
comment:1 by , 2 years ago
| Cc: | added |
|---|---|
| Component: | Unassigned → Surface |
| Owner: | set to |
| Platform: | → all |
| Project: | → ChimeraX |
| Reporter: | changed from to |
| Status: | new → assigned |
| Summary: | ChimeraX bug report submission → Computing molecular solvent excluded surface is slow for large numbers of atoms |
| Type: | defect → enhancement |
comment:2 by , 2 years ago
| Resolution: | → fixed |
|---|---|
| Status: | assigned → closed |
Fixed.
The 6b1t virus capsid (6 million atoms) where the surface at grid spacing 2.5 took 3600 seconds on my iMac now takes 20 second (180 times faster). And the 2bbv virus capsid (470K atoms) that took 20 seconds now takes 1.3 seconds (15 times faster).
These large single surfaces are for the NIH 3D pipeline and we decide to lower the grid spacing to 2.0 and those times are similarly fast, 6b1t 23 seconds (13 million triangles), 2bbv 1.5 seconds (1 million triangles).
There was a surprising bottleneck in the SES surface calculation code when making a single surface over a large number of atoms (> 500,000). It was eliminating artifact surfaces created by the grid SES code that appear one probe sphere diameter away from the true surface. It located those surfaces because they are too far from all atoms. But it turns out the algorithm can produce 10000 or more such artifact surface patches and the code to eliminate each compared the distance of one patch vertex to all the atom positions which was very slow. I changed it to use the accelerated find_close_points() C++ code.
It is embarrassing and fantastic to be able to improve the surface speed. In practice the speed-up is small in practical cases, e.g. 5% for computing surfaces for all chains of a ribosome. The speed-up is only large when a single surfaces covers a large number of atoms. Also at the default grid spacing of 0.5 Angstroms which is almost always used the speedup is much less, a factor of 3 for making a single surface on the 2bbv virus capsid of 470000 atoms (27 seconds instead of 90 seconds). Single surfaces on large numbers of atoms are rarely calculated because the default ChimeraX surface behavior is to make a separate surface for each chain. Still the optimization is huge for the rare cases.
Eric identified this problem in this email.