return ChimeraX response invisibly and provide example of using the data for a plot

This commit is contained in:
hyginn 2020-09-29 14:12:11 +10:00
parent 12e3de439f
commit 9e77d948e9
2 changed files with 43 additions and 32 deletions

View File

@ -481,16 +481,15 @@ H <- function(x, N) {
# == 4.11 CX() (ChimeraX remote command) =================================== # == 4.11 CX() (ChimeraX remote command) ===================================
CX <- function(cmd, port = CXPORT, quietly = FALSE, capture = FALSE) { CX <- function(cmd, port = CXPORT, quietly = FALSE) {
# send a command to ChimeraX listening on port CXPORT via its REST # send a command to ChimeraX listening on port CXPORT via its REST
# interface. # interface.
# Parameters: # Parameters:
# cmd char a ChireaX commandline command # cmd char a ChireaX commandline command
# port int the portnumber on which ChimeraX is listening # port int the portnumber on which ChimeraX is listening
# quietly logical if FALSE, cat() the contents of the response # quietly logical if FALSE, cat() the contents of the response
# capture logical if TRUE, return the contents of the response
# #
# Value: the reply by ChineraX, or invisible(NULL) # Value: the reply by ChimeraX, invisibly.
CXREST <- sprintf("http://127.0.0.1:%s/run?", CXPORT) CXREST <- sprintf("http://127.0.0.1:%s/run?", CXPORT)
@ -533,11 +532,7 @@ CX <- function(cmd, port = CXPORT, quietly = FALSE, capture = FALSE) {
cat(reply) cat(reply)
} }
if (capture == TRUE) { return(invisible(reply))
return(reply)
} else {
return(invisible(NULL))
}
} }

View File

@ -32,7 +32,7 @@
#TOC> 1 ChimeraX REMOTE SCRIPTING 40 #TOC> 1 ChimeraX REMOTE SCRIPTING 40
#TOC> 1.1 Defining a Port 58 #TOC> 1.1 Defining a Port 58
#TOC> 1.2 Open ChimeraX 80 #TOC> 1.2 Open ChimeraX 80
#TOC> 2 WORKED EXAMPLE: SUPERPOSITION 100 #TOC> 2 WORKED EXAMPLE: SUPERPOSITION 112
#TOC> #TOC>
#TOC> ========================================================================== #TOC> ==========================================================================
@ -96,6 +96,18 @@ CX("camera sbs")
CX("lighting soft") CX("lighting soft")
CX("color sequential #1 & protein target abc palette powderblue:orchid:white") CX("color sequential #1 & protein target abc palette powderblue:orchid:white")
# The command echos Chimera's response if the parameter "quietly" is
# FALSE (default), and we can silence output with quietly = TRUE :
CX("info models #1 attribute num_residues")
CX("info models #1 attribute num_residues", quietly = TRUE)
# Either way, the command also returns Chimera's responses "invisibly";
# i.e. we can use the results by assigning the output to a variable:
hBonds <- CX("hbonds #1 & protein makePseudobonds false log true", quietly=TRUE)
x <- read.table(file = textConnection(hBonds), skip = 9,
blank.lines.skip = TRUE, fill = TRUE)
hist(x[,13], main="H-bonds", xlab="D···A (Å)", ylab="counts", col="#c9dcff")
# = 2 WORKED EXAMPLE: SUPERPOSITION ======================================= # = 2 WORKED EXAMPLE: SUPERPOSITION =======================================
@ -103,31 +115,35 @@ CX("color sequential #1 & protein target abc palette powderblue:orchid:white")
# to explore possible DNA binding regions in 1BM8 # to explore possible DNA binding regions in 1BM8
# The model for 1BM8 is already open as model 1 (#1) # The model for 1BM8 is already open as model 1 (#1)
CX("hide #1 cartoons") # hide chain a cartoon representation CX("hide #1 cartoons") # hide model 1 cartoon representation
CX("open 1DUX") CX("open 1DUX") # assume this is opened as model #2
CX("hide #2") # hide everything ... CX("hide #2") # hide everything ...
CX("show #2/a,b,c cartoons") # ... and show cartoons of chains a, b (DNA) and c CX("select #2/C") # chain c (protein)
CX("view #2/c") # re-center the display CX("show sel cartoons") # ... and show cartoons of chain c (protein)
CX("select #2/a,b") # select the DNA chains CX("color sequential sel target c palette steelblue:darkmagenta")
CX("color sel lightblue") CX("view #2/C") # re-center the display
CX("surface sel enclose sel") # joint surface of both chains CX("cofr #2/C:62@CA") # set pivot to an interface residue
CX("select #2/A,B & nucleic-acid") # chains A, B are the cognate DNA
CX("style sel stick")
CX("show sel target ab") # show atoms/bonds
CX("color sequential #2/A & nucleic-acid target ab palette teal:lightcyan")
CX("color sequential #2/B & nucleic-acid target ab palette teal:lightcyan")
CX("surface sel enclose sel") # compute joint accessible surface of both chains
CX("transparency 50") CX("transparency 50")
CX("select #2/c") # select the protein chain CX("select clear")
CX("color sequential sel target c palette palegreen:lightblue")
# Now superimpose the 1BM8 chain onto 1DUX chain C # Now superimpose the 1BM8 chain onto 1DUX chain C
CX("show #1 cartoons") CX("show #1 cartoons")
CX("matchmaker #1/A to #2/C pairing ss") # the actual superposition CX("matchmaker #1/A to #2/C pairing ss") # the actual superposition
CX("select clear")
# study the general layout, and the position of the 1mb8 secondary structure # study the general layout, and the position of the 1mb8 secondary structure
# elements relative to 1DUX # elements relative to 1DUX
# Let's examine side chain orientations in more detail # Let's examine side chain orientations in more detail
CX("hide #2/c cartoons") # hide the 1DUX protein CX("hide #2/C cartoons") # hide the 1DUX protein
# select all residues in 1BM8 that are within 3.5 A of the DNA chains (a, b) # select all residues in 1BM8 that are within 3.5 A of the DNA chains (a, b)
CX("select zone #2/a,b 3.5 #1 & protein residues true") CX("select zone #2/A,B 3.5 #1 & protein residues true")
CX("~select sel & H") # de-select H atoms CX("~select sel & H") # de-select H atoms
CX("show sel target ab") CX("show sel target ab")
CX("size stickRadius 0.4") CX("size stickRadius 0.4")