Difference between revisions of "User:Remig/plico/toABnt"

From Jmol
Jump to navigation Jump to search
m
(add single NT mode)
Line 1: Line 1:
'''ToABnt''' allows the user to convert a polynucleotide chain or chain pair from A-form to B-form and ''vice versa''. Both chains are converted in double helixes.
+
'''ToABnt''' allows the user to convert a nucleotide or a polynucleotide chain or chain pair from A-form to B-form and ''vice versa''.
 +
 
 
When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form.  The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation.  The A-form is characteristic of RNA while the B-form is characteristic of DNA.
 
When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form.  The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation.  The A-form is characteristic of RNA while the B-form is characteristic of DNA.
 +
 +
When you SHIFT-CLICK on any atom, you are prompted to convert just the selected nucleotide.
  
 
This routine is called automatically by the Plico routine [[Recycling_Corner/DNA_Generator|Polymeraze]] when a polynucleotide is generated.
 
This routine is called automatically by the Plico routine [[Recycling_Corner/DNA_Generator|Polymeraze]] when a polynucleotide is generated.
Line 11: Line 14:
 
Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt.
 
Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt.
 
<pre>#  toABnt - Jmol script by Ron Mignery
 
<pre>#  toABnt - Jmol script by Ron Mignery
#  v1.8 beta    7/11/2014 -add multi-frame support
+
#  v1.9 beta    8/18/2014 -add single NT mode
 
#
 
#
#  Convert a polynucleotide chain from A-form to B-form or vice versa
+
#  Convert a nucleotide or polynucleotide chain
 +
from A-form to B-form or vice versa
 
#
 
#
gToab = FALSE
+
gToab = false
gToabAlt = FALSE
+
gToabAlt = false
gToA = FALSE
+
gToA = false
gBusy = FALSE
+
gBusy = false
  
 
function to_ab_nt_auto(iChain, toA) {
 
function to_ab_nt_auto(iChain, toA) {
Line 27: Line 31:
 
     gChain1 = iChain
 
     gChain1 = iChain
 
     gToA = toA
 
     gToA = toA
     to_ab_nt(TRUE)
+
     to_ab_nt(true)
 +
}
 +
 
 +
function to_ab_single_nt(res, iChain) {
 +
    f = {atomIndex=_atomPicked}.file
 +
    m = {atomIndex=_atomPicked}.model
 +
    var isForm = (is_form_a( res, iChain) ? "A" : "B")
 +
    var p = prompt(format("Convert residue %d from %s-form to:",
 +
        res, isForm), "A-form|B-form|Cancel", true)
 +
    var toab = false
 +
    if (p == "A-form") {
 +
        toab = true
 +
    }
 +
    else if (p != "B-form") {
 +
        color {all} @gScheme
 +
        return # early exit
 +
    }
 +
   
 +
    # Call worker function
 +
    to_ab_nt_res(res, res+1, iChain, toab)
 
}
 
}
  
 
function to_ab_nt(auto) {
 
function to_ab_nt(auto) {
 +
    var f = (_frameID/1000000)
 +
    var m = (_frameID%1000000)
 
     if (not gBusy) {
 
     if (not gBusy) {
         gBusy = TRUE
+
         gBusy = true
        var f = (_frameID/1000000)
 
        var m = (_frameID%1000000)
 
 
         var toab = (gToA ? "A" : "B")
 
         var toab = (gToA ? "A" : "B")
         var a = (gToA ? 20.8 : 19.3)
+
       
         var s = (gToA ? 4.44 : 4.73)
+
         var a = (gToA ? 24.0 : 19.3)
 +
         var s = (gToA ? 4.6 : 4.73)
  
 
         var minres = {(chain=gChain1) and (file=f)and (model=m)}.resno.min
 
         var minres = {(chain=gChain1) and (file=f)and (model=m)}.resno.min
 
         var maxres = {(chain=gChain1) and (file=f)and (model=m)}.resno.max
 
         var maxres = {(chain=gChain1) and (file=f)and (model=m)}.resno.max
         var maxP = atom_rcn(maxres, gChain1, "P")
+
         var a0 = within(kDtolerance, {0 0 0})
         var cp = maxP.xyz
+
         if (auto == false) {
        var w = array()
+
             f = {atomIndex=_atomPicked}.file
        for (var i = maxres-1; i <= minres; i--) {
+
            m = {atomIndex=_atomPicked}.model
             w += who_pairs(i, gChain1)
 
        }
 
        if (auto == FALSE) {
 
 
             var isForm = (is_form_a( maxres, gChain1) ? "A" : "B")
 
             var isForm = (is_form_a( maxres, gChain1) ? "A" : "B")
 
             var p = prompt(format("Convert chain %s from %s-form to:",
 
             var p = prompt(format("Convert chain %s from %s-form to:",
                 gChain1, isForm), "A-form|B-form", TRUE)
+
                 gChain1, isForm), "A-form|B-form|Cancel", true)
 
             if (p == "A-form") {
 
             if (p == "A-form") {
 
                 toab = "A"
 
                 toab = "A"
                 a = 20.8
+
                 a = 24.0
                 s = 4.44
+
                 s = 4.6
 
             }
 
             }
 
             else if (p == "B-form") {
 
             else if (p == "B-form") {
Line 65: Line 86:
 
                 return # early exit
 
                 return # early exit
 
             }
 
             }
            background ECHO pink
 
            refresh
 
            print format("Converting to %s", p)
 
 
         }
 
         }
 +
        set echo TOP LEFT
 +
        background ECHO pink
 +
        var ps = "Converting to " + toab + " form..."
 +
        echo @ps
 +
        refresh
 +
       
 +
        # Call worker function
 
         adjust_nts(minres, maxres, gChain1, toab, a, s)
 
         adjust_nts(minres, maxres, gChain1, toab, a, s)
         select {(file=f)and (model=m)}
+
 
         var v = cp - maxP.xyz
+
         select {(file=f) and (model=m)}
         translateSelected @v
+
         if (a0.size > 0) {       
 +
            translateSelected @{-a0.xyz}
 +
        }
 +
       
 +
         background ECHO yellow
 +
        echo @gEcho
 +
        gBusy = false
 
     }
 
     }
 
}
 
}
Line 82: Line 113:
 
     color {(chain=gChain1) and (file=f)and (model=m)} @gAltScheme
 
     color {(chain=gChain1) and (file=f)and (model=m)} @gAltScheme
 
     refresh
 
     refresh
     to_ab_nt(FALSE)
+
     to_ab_nt(false)
 +
}
 +
 
 +
# Bound to SHIFT-LEFT-CLICK by plicoto_ab_nt
 +
function to_ab_res_mb() {
 +
    color {(file=f)and (model=m)} @gScheme
 +
    iChain = {atomIndex=_atomPicked}.chain
 +
    res = {atomIndex=_atomPicked}.resno
 +
    color {(chain=iChain) and (file=f)and (model=m) and (resno=res)} @gAltScheme
 +
    refresh
 +
    to_ab_single_nt(res, iChain)
 
}
 
}
  
Line 110: Line 151:
  
 
     gPlico = "TO A-FORM/B-FORM"
 
     gPlico = "TO A-FORM/B-FORM"
     plico_prelim(FALSE)
+
     plico_prelim(false)
  
     gEcho = ("________A <==> B_______|ALT-CLICK=mark chain|DOUBLE-CLICK=exit")
+
     gEcho = ("________A <==> B_______|ALT-CLICK=convert chain" +
 +
        "|SHIFT-CLICK=convert NT|DOUBLE-CLICK=exit")
 
     echo @gEcho
 
     echo @gEcho
 
     gChain = ""
 
     gChain = ""
Line 119: Line 161:
 
     bind "ALT-LEFT-CLICK" "_pickAtom";
 
     bind "ALT-LEFT-CLICK" "_pickAtom";
 
     bind "ALT-LEFT-CLICK" "+:to_ab_chain_mb";
 
     bind "ALT-LEFT-CLICK" "+:to_ab_chain_mb";
 +
    bind "SHIFT-LEFT-CLICK" "_pickAtom";
 +
    bind "SHIFT-LEFT-CLICK" "+:to_ab_res_mb";
 
     bind "DOUBLE" "plico_exit";
 
     bind "DOUBLE" "plico_exit";
 
}
 
}
 
# End of to_ab_nt.SPT
 
# End of to_ab_nt.SPT
 
</pre>
 
</pre>

Revision as of 17:42, 18 August 2014

ToABnt allows the user to convert a nucleotide or a polynucleotide chain or chain pair from A-form to B-form and vice versa.

When you ALT-CLICK on any atom, you are prompted to convert its chain from its current form to either the A-form or the B-form. The two forms differ primarily in the pucker conformation of their sugar moieties. The A-form has its sugars in the C3'-endo conformation whereas the B-form has it in the C2'-endo conformation. The A-form is characteristic of RNA while the B-form is characteristic of DNA.

When you SHIFT-CLICK on any atom, you are prompted to convert just the selected nucleotide.

This routine is called automatically by the Plico routine Polymeraze when a polynucleotide is generated.

ToABnt is a member of the Plico suite of protein folding tools described here. It may be installed and accessed as a macro with the file:

Title=PLICO toAB NT
Script=script <path to your script directory>/toABnt.spt;plico_to_ab_nt

saved as toABnt.macro in your .jmol/macros directory as described in Macro.

Copy and paste the following into a text editor and save in your scripts directory as toABnt.spt.

#   toABnt - Jmol script by Ron Mignery
#   v1.9 beta    8/18/2014 -add single NT mode
#
#   Convert a nucleotide or polynucleotide chain
#   from A-form to B-form or vice versa
#
gToab = false
gToabAlt = false
gToA = false
gBusy = false

function to_ab_nt_auto(iChain, toA) {

    # Load common functions if not already
    load_common()

    gChain1 = iChain
    gToA = toA
    to_ab_nt(true)
}

function to_ab_single_nt(res, iChain) {
    f = {atomIndex=_atomPicked}.file
    m = {atomIndex=_atomPicked}.model
    var isForm = (is_form_a( res, iChain) ? "A" : "B")
    var p = prompt(format("Convert residue %d from %s-form to:",
        res, isForm), "A-form|B-form|Cancel", true)
    var toab = false
    if (p == "A-form") {
        toab = true
    }
    else if (p != "B-form") {
        color {all} @gScheme
        return # early exit
    }
    
    # Call worker function
    to_ab_nt_res(res, res+1, iChain, toab)
}

function to_ab_nt(auto) {
    var f = (_frameID/1000000)
    var m = (_frameID%1000000)
    if (not gBusy) {
        gBusy = true
        var toab = (gToA ? "A" : "B")
        
        var a = (gToA ? 24.0 : 19.3)
        var s = (gToA ? 4.6 : 4.73)

        var minres = {(chain=gChain1) and (file=f)and (model=m)}.resno.min
        var maxres = {(chain=gChain1) and (file=f)and (model=m)}.resno.max
        var a0 = within(kDtolerance, {0 0 0})
        if (auto == false) {
            f = {atomIndex=_atomPicked}.file
            m = {atomIndex=_atomPicked}.model
            var isForm = (is_form_a( maxres, gChain1) ? "A" : "B")
            var p = prompt(format("Convert chain %s from %s-form to:",
                gChain1, isForm), "A-form|B-form|Cancel", true)
            if (p == "A-form") {
                toab = "A"
                a = 24.0
                s = 4.6
            }
            else if (p == "B-form") {
                toab = "B"
                a = 19.3
                s = 4.73
            }
            else {
                color {all} @gScheme
                return # early exit
            }
        }
        set echo TOP LEFT
        background ECHO pink
        var ps = "Converting to " + toab + " form..."
        echo @ps
        refresh
        
        # Call worker function
        adjust_nts(minres, maxres, gChain1, toab, a, s)

        select {(file=f) and (model=m)}
        if (a0.size > 0) {        
            translateSelected @{-a0.xyz}
        }
        
        background ECHO yellow
        echo @gEcho
        gBusy = false
    }
}

# Bound to ALT-LEFT-CLICK by plicoto_ab_nt
function to_ab_chain_mb() {
    color {(file=f)and (model=m)} @gScheme
    gChain1 = {atomIndex=_atomPicked}.chain
    color {(chain=gChain1) and (file=f)and (model=m)} @gAltScheme
    refresh
    to_ab_nt(false)
}

# Bound to SHIFT-LEFT-CLICK by plicoto_ab_nt
function to_ab_res_mb() {
    color {(file=f)and (model=m)} @gScheme
    iChain = {atomIndex=_atomPicked}.chain
    res = {atomIndex=_atomPicked}.resno
    color {(chain=iChain) and (file=f)and (model=m) and (resno=res)} @gAltScheme
    refresh
    to_ab_single_nt(res, iChain)
}

# Load common functions if not already
function load_common() {
    if (kCommon < 3) {
        script $SCRIPT_PATH$plicoCommon.spt
        if (kCommon < 3) {
            prompt ("A newer version of plicoCommon.SPT is required")
            quit
        }
    }
    if (kNTcommon < 4) {
        script $SCRIPT_PATH$plicoNTcommon.spt
        if (kNTcommon < 4) {
            prompt ("A newer version of plicoNTcommon.SPT is required")
            quit
        }
    }
}

# Top level of to_ab_nt
function plico_to_ab_nt() {

    # Load common functions if not already
    load_common()

    gPlico = "TO A-FORM/B-FORM"
    plico_prelim(false)

    gEcho = ("________A <==> B_______|ALT-CLICK=convert chain" +
        "|SHIFT-CLICK=convert NT|DOUBLE-CLICK=exit")
    echo @gEcho
    gChain = ""
    unbind

    bind "ALT-LEFT-CLICK" "_pickAtom";
    bind "ALT-LEFT-CLICK" "+:to_ab_chain_mb";
    bind "SHIFT-LEFT-CLICK" "_pickAtom";
    bind "SHIFT-LEFT-CLICK" "+:to_ab_res_mb";
    bind "DOUBLE" "plico_exit";
}
# End of to_ab_nt.SPT

Contributors

Remig