Skip to content

Commit

Permalink
Merge branch 'feature/profile-grids' of ssh://localhost:14147/Users/p…
Browse files Browse the repository at this point in the history
…ett/src/chimerax into feature/profile-grids
  • Loading branch information
e-pettersen committed Dec 28, 2024
2 parents f5c8da2 + 139b296 commit b7b40d0
Show file tree
Hide file tree
Showing 64 changed files with 414 additions and 525 deletions.
14 changes: 14 additions & 0 deletions .github/workflows/flatpak_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,20 @@ jobs:
linux-bundles.tar.gz
linux-include.tar.gz
key: linux-bundles-${{ inputs.release_type }}-${{ github.sha }}
- name: Install jq
run: dnf install -y jq
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX FlatPak / flatpak-build"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: flatpak
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- run: chown -R $(id -u):$(id -g) $PWD
- name: Unpack the bundles to build/sync
run: |
Expand Down
14 changes: 13 additions & 1 deletion .github/workflows/mac_arm_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:
uses: Homebrew/actions/setup-homebrew@master
- run: |
brew install [email protected]
python3.10 -m pip install lief==0.12.2 dmgbuild
python3.10 -m pip install lief dmgbuild
patch --ignore-whitespace -d /opt/homebrew/lib/python3.10/site-packages/dmgbuild -N -p0 < ./utils/build/macos/dmgbuild.patch
- uses: actions/checkout@v4
- run: ${PWD}/utils/set_up_macos.sh
Expand All @@ -52,6 +52,18 @@ jobs:
platform: macos
architecture: arm64
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for arm64 macOS / build-arm-macos"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: mac_arm64
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- run: MAKEOPTS="-j$(sysctl -n hw.logicalcpu)" make -j$(sysctl -n hw.logicalcpu) install-rbvi
- name: Run the legacy test suite
run: make test
Expand Down
17 changes: 16 additions & 1 deletion .github/workflows/mac_intel_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@ on:
MAC_NOTARIZATION_EMAIL:
required: true

env:
MACOSX_DEPLOYMENT_TARGET: 11

jobs:
build-intel-macos:
name: Build ChimeraX for Intel Macs
Expand All @@ -41,7 +44,7 @@ jobs:
uses: Homebrew/actions/setup-homebrew@master
- run: |
brew install [email protected]
python3.10 -m pip install lief==0.12.2 dmgbuild
python3.10 -m pip install lief dmgbuild
patch --ignore-whitespace -d /usr/local/lib/python3.10/site-packages/dmgbuild -N -p0 < ./utils/build/macos/dmgbuild.patch
# Temporarily force this to succeed. The container's Python conflicts with homebrew's,
# but we don't really use it anyway.
Expand All @@ -52,6 +55,18 @@ jobs:
platform: macos
architecture: x86_64
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for Intel macOS / Build ChimeraX for Intel Macs"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: macosx
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- run: MAKEOPTS="-j$(sysctl -n hw.logicalcpu)" make -j$(sysctl -n hw.logicalcpu) install-rbvi
- name: Run the legacy test suite
run: make test
Expand Down
19 changes: 18 additions & 1 deletion .github/workflows/mac_universal_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,22 @@ jobs:
run: |
brew install [email protected]
python3.10 -m pip install setuptools==54.0
python3.10 -m pip install lief==0.12.2
python3.10 -m pip install lief
python3.10 -m pip install dmgbuild
# Make dmgbuild allocate an adult sized DMG
patch --ignore-whitespace -d /opt/homebrew/lib/python3.10/site-packages/dmgbuild -N -p0 < ./utils/build/macos/dmgbuild.patch
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build Universal ChimeraX for macOS / build-mac-universal"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: mac_universal
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- uses: ./utils/ci/download_mac_chimerax
with:
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
Expand All @@ -60,6 +72,11 @@ jobs:
- name: Make the universal build
run: |
python3.10 ./utils/build/macos/make_universal.py chimerax_arm64.app chimerax_intel.app ChimeraX.app 2>&1
# Local machines keep the executable bits on these files. Runner machines for whatever reason do not.
# Perhaps they are quarantined? al2co doesn't have this problem?
- name: Make ambertools executable
run: |
chmod +x ChimeraX.app/Contents/bin/amber*/bin/*
- name: Remove unneeded ChimeraXes
run: |
rm -r chimerax_arm64.app
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Nightly Build
on:
workflow_dispatch:
schedule:
- cron: "0 8 * * *" # 8AM UTC / 12AM PST / 1AM PDT
- cron: "0 7 * * *" # 7AM UTC / 11PM PST / 12AM PDT

jobs:
build-rocky8-docker:
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/rocky8_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@ jobs:
platform: linux
architecture: x86_64
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for Rocky 8 / Build ChimeraX for Rocky 8"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: centos-8
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- run: source /opt/rh/gcc-toolset-10/enable && MAKEOPTS="-j$(nproc)" make -j$(nproc) -f Makefile.centos install-rbvi
- name: Run the legacy test suite
run: make test
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/rocky9_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@ jobs:
platform: linux
architecture: x86_64
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for Rocky 9 / build-rocky9-docker"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: centos-9
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- name: Restore bundles and includes from cache
uses: actions/cache/restore@v4
with:
Expand Down
12 changes: 12 additions & 0 deletions .github/workflows/ubuntu_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,18 @@ jobs:
platform: linux
architecture: x86_64
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for Ubuntu / build-ubuntu (${{ matrix.os }})"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: ${{ matrix.os }}
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- name: Restore bundles and includes from cache
uses: actions/cache/restore@v4
with:
Expand Down
16 changes: 14 additions & 2 deletions .github/workflows/windows_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ on:

jobs:
build-test:
name: Test
name: Windows Build
if: ${{ inputs.release_type == 'test' }}
runs-on: windows-latest
defaults:
Expand All @@ -30,7 +30,7 @@ jobs:
with:
msystem: MINGW64
update: true
install: git mingw-w64-x86_64-imagemagick mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-objc mingw-w64-x86_64-gcc-fortran rsync patch unzip openssh make mingw-w64-x86_64-autotools
install: git mingw-w64-x86_64-imagemagick mingw-w64-x86_64-binutils mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-objc mingw-w64-x86_64-gcc-fortran rsync patch unzip openssh make mingw-w64-x86_64-autotools mingw-w64-x86_64-jq
- run: AUTOMATIC_DISCOVERY=1 . ./vsvars.sh && MAKEOPTS="-j$(nproc)" make -j$(nproc) build-minimal
- name: Run the legacy test suite
run: AUTOMATIC_DISCOVERY=1 . ./vsvars.sh && make test
Expand Down Expand Up @@ -68,6 +68,18 @@ jobs:
platform: windows
architecture: x86
cache_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
- uses: Tiryoh/gha-jobid-action@v1
id: get_job_id
with:
job_name: "Build ChimeraX for Windows / Daily"
- name: Note the run and job IDs on Plato
uses: ./utils/ci/nightly_logs
with:
platform: windows
deploy_key: ${{ secrets.PREBUILT_CACHE_SECRET }}
run_id: ${{ github.run_id }}
job_id: ${{ steps.get_job_id.outputs.job_id }}
build_type: daily
- run: AUTOMATIC_DISCOVERY=1 . ./vsvars.sh && MAKEOPTS="-j$(nproc)" make -j$(nproc) install
- name: Run the legacy test suite
run: AUTOMATIC_DISCOVERY=1 . ./vsvars.sh && make test
Expand Down
28 changes: 13 additions & 15 deletions docs/devel/tutorials/tutorial_command.rst
Original file line number Diff line number Diff line change
Expand Up @@ -209,14 +209,14 @@ the array of atoms, their coordinates, and their center of mass by
calling :py:func:`_get_cofm`. It then

#. computes the distances from each atom to the center of mass
using Numpy (line 88),
using Numpy (line 104),
#. sorts the atom indices by distances so that indices of atoms that
are closer to the center of mass are towards the front of the
sort result (:code:`argsort(distances)`), and select the first
:code:`count` indices (line 94),
#. turn the array of indices into an array of atoms (line 97),
:code:`count` indices (line 110),
#. turn the array of indices into an array of atoms (line 113),
and
#. finally, set the color of the selected atoms (line 101).
#. finally, set the color of the selected atoms (line 117).
The :py:attr:`colors` attribute of the atomic array is an
Nx4 array of integers, where N is the number of atoms and
the rows (of 4 elements) are the RGBA values for each atom.
Expand All @@ -242,29 +242,27 @@ calling :py:func:`_get_cofm`. It then

If the user did not choose specific atoms (when :code:`atoms`
is :code:`None`), the usual ChimeraX interpretation is that all
atoms should be used (lines 123-125).
:py:func:`chimerax.core.commands.atomspec.all_objects` returns
an instance of `chimerax.core.objects.Object` that contains
all open models in the current ChimeraX session, and whose
:py:attr:`atoms` attribute is an array of atoms in the included
atoms should be used (lines 139-141).
:py:func:`chimerax.atomic.structure.all_atoms` returns
an array of atoms from all open
models. Transformed and untransformed coordinates are accessed
using the :py:attr:`scene_coords` and :py:attr:`coords` attributes
of the atom array, respectively (lines 132-135). If atomic mass
of the atom array, respectively (lines 148-151). If atomic mass
need not be included, the "center of mass" is simply the average
of the coordinates (line 141); if a weighted calculation is required,
of the coordinates (line 157); if a weighted calculation is required,
(a) the atomic masses are retrieved by :code:`atoms.elements.masses`
(line 143),
(line 159),
(b) the coordinates are scaled by the corresponding atomic masses
(line 144), and
(c) the weighted average is computed (line 145).
(line 160), and
(c) the weighted average is computed (line 161).

For performance, ChimeraX makes use of `NumPy`_ arrays in many contexts.
The container for atoms is typically a
:py:class:`chimerax.atomic.molarray.Collection`
instance, as are those for bonds, residues, and atomic structures.
Fetching the same attribute, e.g., coordinates, from a collection
of molecular data, e.g., atoms, usually results in a NumPy array.
Although code involving NumPy arrays are sometimes opaque, they are
Although code involving NumPy arrays is sometimes opaque, they are
typically much more efficient than using Python loops.

.. _command help:
Expand Down
4 changes: 4 additions & 0 deletions docs/presentations.html
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,10 @@ <h2>ChimeraX Demonstrations, Talks and Posters</h2>
<a href="https://rbvi.github.io/chimerax-recipes/">ChimeraX recipes</a>
</p>

<p>
<a href="https://www.rbvi.ucsf.edu/chimerax/data/af3-drugs-dec2024/af3_drugs.html">Docking antiviral drugs to Nipah virus, influenza virus and HIV virus proteins using AlphaFold 3</a>. December 18, 2024.
</p>

<p>
<a href="https://www.rbvi.ucsf.edu/chimerax/data/af3-wynton-dec2024/alphafold3_wynton.html">How to run AlphaFold 3 on the UCSF Wynton cluster</a>. December 4, 2024.
</p>
Expand Down
16 changes: 14 additions & 2 deletions docs/user/tools/profilegrid.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,23 @@ <h3><a href="../index.html#tools">Tool</a>: Profile Grid</h3>
in which the rows are the possible sequence characters (residue one-letter
codes and gap), the columns are positions in the alignment
(as in the standard view of a sequence alignment), and the values
in the cells are percentages of that type of residue at that position,
in the cells are the prevalences of that type of residue at that position.
</p><p>
<b>Profile Grid</b> is a reimplementation of the viewer developed
by Alberto Roca, as described in:
</p>
<blockquote>
<a href="https://bmcproc.biomedcentral.com/articles/10.1186/1753-6561-8-S2-S6"
target="_blank">
ProfileGrids: a sequence alignment visualization paradigm that avoids the limitations of Sequence Logos.</a>
Roca AI. <i>BMC Proc.</i> 2014 Aug 28;8(Suppl 2 Proceedings of the
3rd Annual Symposium on Biologica):S6.
</blockquote>
<p>
The values in the ChimeraX <b>Profile Grid</b> are percentages
rounded to the nearest integer. A blank cell means that no sequences
at all have that residue type at that position, whereas a displayed value
of 0 means that some do, but &lt;0.5%.
</p><p>
Much like the <a href="sequenceviewer.html"><b>Sequence Viewer</b></a>,
the <b>Profile Grid</b> tool interacts with any
<a href="sequenceviewer.html#association">associated</a> structures, and it
Expand Down
2 changes: 2 additions & 0 deletions mkcentos.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@
"libglvnd-egl": None,
"libglvnd-glx": None,
"libstdc++": None,
"libtheora": None,
"libuuid": None,
"libwayland-client": None,
"libwayland-cursor": None,
Expand Down Expand Up @@ -181,6 +182,7 @@
"libglvnd-egl": None,
"libglvnd-glx": None,
"libstdc++": None,
"libtheora": None,
"libuuid": None,
"libwayland-client": None,
"libwayland-cursor": None,
Expand Down
3 changes: 3 additions & 0 deletions mkubuntu.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,7 @@
"libsqlite3-0": "3.31.1",
"libssl1.1": "1.1.1f",
"libstdc++6": "10-20200411",
"libtheora": None,
"libtinfo6": "6.2",
"libuuid1": "2.34",
"libwayland-client0": "1.18.0",
Expand Down Expand Up @@ -254,6 +255,7 @@
"libsqlite3-0": "3.31.1",
"libssl3": "3.0.2",
"libstdc++6": "10-20200411",
"libtheora": None,
"libtinfo6": "6.2",
"libuuid1": "2.34",
"libwayland-client0": "1.18.0",
Expand Down Expand Up @@ -324,6 +326,7 @@
"libsqlite3-0": "3.31.1",
"libssl3": "3.0.2",
"libstdc++6": "10-20200411",
"libtheora": None,
"libtinfo6": "6.2",
"libuuid1": "2.34",
"libwayland-client0": "1.18.0",
Expand Down
2 changes: 1 addition & 1 deletion prereqs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ endif
.NOTPARALLEL:

# keep in alphabetical order, dependencies go below
SUBDIRS += ambertools openmm pips PyQt Python
SUBDIRS += ambertools pips PyQt Python


# All needed subdirectories must be set by now.
Expand Down
Loading

0 comments on commit b7b40d0

Please sign in to comment.