// debugging alerts through # 12 //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeWireframeAllCheckbox() { var ckscv = ""; var ckaw = ""; var ckhv = ""; if (!sidechainsVisible) ckscv = " checked"; // This is HTML: please do NOT translate! if (allWireframe) ckaw = " checked"; // This is HTML: please do NOT translate! // if (!hydrogensVisible) if (hideHydrogen) ckhv = " checked"; // This is HTML: please do NOT translate! var allw = "
\n" + spanCheckbox + " \ Hide sidechains.
" + spanCheckbox + " \ More detail: Show all non-water atoms colored by element.
" + spanCheckbox + " \ Hide hydrogens. \
"; return allw; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSmallWaterCheckbox() { // This is called whenever the checkbox is offered. var wck = ''; if (waterIsSmall) wck = ' checked'; var smallw = "
" + spanCheckbox + " \ Smaller Water. \
"; return smallw; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSmallLigandCheckbox() // smallerLigands { var slck = ""; if (ligandIsSmall) slck = " checked"; var smalll = "
\n" + spanCheckbox + " \ Smaller Ligands+. \
For even smaller ligands+, use the Vines View. \

"; return smalll; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeNonStandardCheckbox() { var nsc = "
\ Show " + makeNotesLink("Non-Standard", "nsr") + " amino acids and nucleotides as: \
    \ nsc += "
    Caution: Some non-standard residues display \ as ligands+, failing to display as NSR: " + makeNotesLink("More..", "nsr") + "
"; return nsc; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideRadios(cck, gck, ack, rck) { var hr = "Chain†     \ Residue/Group"; if (!isolateMode) hr += "     \ Atom"; hr += "
\ Range of residues in one chain (2 clicks) \ "; return hr; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHelpPrefix(helpname) { var hp = ""; var hhp = makeHiddenHelpPrefix(helpname); var hip = makeIsolatedHelpPrefix(helpname); var fhp = makeFoundHelpPrefix(helpname); var aalp = makeAnimatingAltLocPrefix(helpname); var chp = makeContactsHelpPrefix(helpname); var cshp = makeConsurfHelpPrefix(helpname); var bhp = makeBrowserHelpPrefix(); // browserrec // var jhp = makeJavaHelpPrefix(); // javarec // if ((hip.length + hhp.length + fhp.length + chp.length + cshp.length + // bhp.length + jhp.length) > 0) if ((hip.length + hhp.length + fhp.length + aalp.length + chp.length + cshp.length + bhp.length) > 0) { hp += "
\n" + hip; // Isolate if (hip.length > 0 && hhp.length > 0) hp += "   "; hp += hhp; // Hidden if ((hip.length + hhp.length) > 0 && fhp.length > 0) hp += "   "; hp += fhp; // Found if ((hip.length + hhp.length + fhp.length) > 0 && aalp.length > 0) hp += "   "; hp += aalp; // Animating AltLocs if ((hip.length + hhp.length + fhp.length + aalp.length) > 0 && chp.length > 0) hp += "   "; hp += chp; // Contacts if ((hip.length + hhp.length + fhp.length + chp.length) > 0 && cshp.length > 0) hp += "   "; hp += cshp; // Consurf // hp += bhp + jhp; // Browsers, Java Advice hp += bhp; // Browsers, Java Advice hp += "

"; } // alert("help.js #2: makeHelpPrefix():\n" + hp); return hp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // SEE BROWSERS.TXT // for consurf, apparently getHydrogenCount() is not called in time. // jmolAtomCount uses modelCount not yet defined //var allAtomCountInt = parseInt(jmolAtomCount("all")); var allAtomCountInt = -1; // see below function makeBrowserHelpPrefix(helpname) // browserrec { // Scheme: (retested December 30, 2018) // Scheme: (retested May 2016) // Serious issues (strong yellow): IE // Optional recommendations: Edge if (allAtomCountInt == -1) { //allAtomCountInt = parseInt(jmolEvaluate("{all and model=1 and config=1}.count")); // removed model=1 for alphafold allAtomCountInt = parseInt(jmolEvaluate("{all and config=1}.count")); // alert("help.js #7: allAtomCountInt = " + allAtomCountInt); } var bh = ''; var altbrows = ''; // Part I: SERIOUS Browser Issues var pucf = 'Please use free \ Chrome \ or \ Firefox '; pucf += altbrows + '! \ FirstGlance is currently '; // INTERNET EXPLORER if (!usingJava && isMSIE) bh = pucf + 'running in Microsoft Internet Explorer, which \ runs JSmol very slowly. '; else if (!usingJava && isEdge) bh = pucf + 'running in Microsoft Edge, which \ runs JSmol very slowly. '; if (bh != '') { // put it all in a bright yellow table bh = '
' + bh + '
'; } // Part II: Optional recommendations. if (!hideBrowserAdvice && !preferenceHideBrowserSuggestions && bh=="") { if (isMac) { if (!usingJava) { // Opera is the same as Chrome // Waterfox is unlikely but OK and will ID as Firefox // if (isChrome || isSafari || isOpera) // || isMaxthon) // { // var bnam = "Safari"; // if (isChrome) bnam = "Chrome"; // if (isOpera) bnam = "Opera"; // bh = 'Firefox displays molecules faster than ' + bnam + ': ' + // 'Details.'; // bh += ' (hide)'; //} } } else // Windows { if (!usingJava) { if (isChrome || isOpera) { var bnam = "Chrome"; if (isOpera) bnam = "Opera"; // bh = 'Firefox displays molecules faster than ' + bnam + ': ' + // 'Details.'; // bh += ' (hide)'; } } } // put optional advice in mild yellow if (bh != "") bh = '
' + bh + '
'; } return bh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* javagone function makeJavaHelpPrefix() { var jh = ''; if (!usingJava && !hideJavaAdvice && !preferenceHideJavaRecommendation) { jh = 'For faster/smoother responses, ' + 'use Java! (See the Preferences tab'; if (controlPanel == "consurf") jh += " in the \ FirstGlance \ Control Panel" jh += '.)'; jh += ' (hide)'; jh = '
' + jh + '
'; } return jh; } */ //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHiddenHelpPrefix(helpname) { if (match(helpname, "makehidehelp")) return ""; if (match(helpname, "makecrystalcontact") || match(helpname, "makeunitcell")) return ""; // cleared in the makeHelp() var hhp = ""; var hiddenTot = getHiddenTot(); // hideAltLoc is ALWAYS true when !preferenceDetails. if ((hiddenTot > 0 && preferenceDetails) || (hiddenTot > 1 && !preferenceDetails)) { hhp += "Portions Hidden (\ Re-Display..<\/a>)\ "; } return hhp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeIsolatedHelpPrefix(helpname) { if (match(helpname, "makeisolatehelp")) return ""; if (match(helpname, "makecrystalcontacts") || match(helpname, "makeunitcell")) return ""; // Isolated cleared in the makeHelp() var hhp = ""; if (isolatedDescription != "") { hhp += isolatedDescription + " isolated (\ Undo..<\/a>)\ "; } return hhp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeFoundHelpPrefix(helpname) { // if (match(helpname, "precontacts")) // return ""; var fhp = ""; if (toFind != "") { var tf = toFindShown.replace(/ /g, " "); // fhp = "Halos around: " + tf + "."; fhp = "Halos around: " + tf + "."; if (!match(helpname, "makefindhelp")) fhp += // " (Change<\/a>)"; " (Change<\/a>)"; } return fhp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeAnimatingAltLocPrefix(helpname) { if (!altLocCount) return ""; else if (!animatingAltLoc) return ""; else if (match(helpname, "altloc")) return ""; var aalp = "Stop Animation<\/a>"; return aalp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeContactsHelpPrefix(helpname) { if (!contactsShowing) return ""; if (match(helpname, "contactsshown")) return ""; var chp = "Return " + "to Contacts<\/a>"; return chp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeIsolateHelp() { if (invertHidden) { isolateMode = false; return makeCantIsolateHelp(); } if (isolatedDescription == "") { // alert("help.js #5: isolateMode=" + isolateMode + "\n" + // "hideMode=" + hideMode); if (!isolateMode && hideMode == "") hideMode = "c"; isolateMode = true; if (hideMode == "") hideMode = "c"; } hideHelp = false; return makeHideHelpDetails(); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideHelp() { // alert("help.js #8 hiddenRangeStart=" + hiddenRangeStart + "\n" + // "hideModeClicked=" + hideModeClicked); var hiddenTot = getHiddenTot(); if (hiddenTot == 0 && hideModeClicked == "") { if (hideMode == "") hideMode = "c"; } else if (hideModeClicked != "") { hideMode = hideModeClicked; hideModeClicked = ""; } else if (hiddenRangeStart != "") hidemode = "r"; else // SET HIDEMODE TO THE FIRST HIDDEN CATEGORY { if (hiddenChains.length > 0) hideMode = "c"; else if (hiddenGroups.length > 0) hideMode = "g"; else if (hiddenAtoms.length > 0) hideMode = "a"; else if (hiddenRanges.length > 0) hideMode = "r"; else // hidden item is not a radio button hideMode = "c"; } hideHelp = true; isolateMode = false; return makeHideHelpDetails(); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var isolationPersists = "
Isolation will persist in all views, until you undo it."; function makeHideHelpDetails() { var cck = gck = ack = rck = ""; var hidden; var hiddenTot = getHiddenTot(); var hh = ""; // DEV / DEBUG // hh += //'' + //'hideMode=' + hideMode + '
' + //'hiddenTot=' + hiddenTot + '
' + //'invertHidden=' + invertHidden + '
' + //'isolateMode=' + isolateMode + '
' + //'isolatedDescription=' + isolatedDescription + '
' + //'isolatedAtomExpression=' + isolatedAtomExpression + '
' + //'

'; // SOMETHING IS ISOLATED if (!hideHelp && isolatedDescription != "") { hh += 'Isolated: ' + isolatedDescription; if (isolatedDescription.indexOf("%") != -1) { hh += ' (where "%X" means ' + '
Alternate Location X)'; } hh += "
" + isolationPersists; hh += "

" + IsolateUndo_txt; hh += "

\ Undo Isolation.<\/a> "; hh += "

\ If everything disappeared, you may have isolated atoms that are invisible in the current \ view. For example, one atom per nucleotide (the C5' atom) is not visible in the \ cartoon view. Try the Solid view, which makes all atoms visible."; hh += makeHideIsolatedHelp(); return hh; } if (isolateMode && hideMode == "a") hideMode = "c"; var toHide; var lastHidden; if (hideMode == "c") { cck = " checked "; hidden = top.hiddenChains.length; toHide = "Chain"; lastHidden = top.hiddenChains[hidden - 1]; } else if (hideMode == "g") { gck = " checked "; hidden = top.hiddenGroups.length; toHide = "Residue/Group"; lastHidden = top.hiddenGroups[hidden - 1]; } else if (hideMode == "a") { ack = " checked "; hidden = top.hiddenAtoms.length; toHide = "Atom"; lastHidden = top.hiddenAtoms[hidden - 1]; } else if (hideMode == "r") { rck = " checked "; hidden = top.hiddenRanges.length; toHide = "Range"; lastHidden = top.hiddenRanges[hidden - 1]; } var ivck = ""; if (hiddenTot == 0) invertHidden = false; if (invertHidden) ivck = " checked "; // alert("help.js #1: hidden = " + hidden); hh += "
\n"; if (hiddenRangeStart != "") { hh += "
Range starts at " + hiddenRangeStart.replace(/:/, " in chain ") + " ([)" + ".\n
Click on End of range, or "; if (isolateMode) hh += "
Cancel" else hh += "Cancel" hh += "\n

\n"; } if (isolateMode) hh += " \ \ "; else hh += " \ \ "; if (!invertHidden) { if (isolateMode) hh += "Isolate hides everything except one entity. \n\ Click on any \
" + makeHideRadios(cck, gck, ack, rck) + "
to isolate<\/b> it, or isolate " + makeHideCheckboxes() + "<\/center>"; else hh += "Hide: Click on any \
" + makeHideRadios(cck, gck, ack, rck) + "
to hide<\/b> it, or hide " + makeHideCheckboxes() + "<\/center> \ Currently hidden:" + listHidden(hiddenTot); // hc + "<\/b> Chains, " + // hg + "<\/b>† Residues/Groups, " + // ha + "<\/b>‡ Atoms.\ if (isolateMode) hh += isolationPersists; else hh += "
These will remain hidden in all views, \ until re-displayed: \ "; } // END !invertHidden if (isolateMode) hh += makeIsolateHelpBottom(); else hh += makeHideHelpBottom(hiddenTot, hidden, toHide, ivck); return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideHelpBottom(hiddenTot, hidden, toHide, ivck) { var hh = ""; if (!invertHidden) { if (hidden > 0) hh += "Re-Display<\/a> \ the most recently hidden " + toHide + "<\/b>. \ "; else hh += "(No " + toHide + " hidden to re-display.)<\/font>"; if (hiddenTot > 0) { // if (isolatedDescription == "") hh += "
\
Re-Display Everything.<\/a> "; // else // hh += //"
\ //
Re-Display the Isolated Entity.<\/a> "; } hh += "

\
Center Visible Moieties<\/a> \       \ Center by Clicking<\/a> \
" + spanCheckbox + " Invert Hiding \
\ To isolate a few small parts of a molecule, first hide them, \ and then check Invert Hiding (immediately above). \ To isolate a single small part, use the Isolate dialog instead.

"; } // END of !invertHidden else // BEGIN INVERTED { hh += "Hiding Is Inverted:
\
\
    \ Previously hidden moieties are displayed, and vice versa. \
\ Currently displayed:" + listHidden(hiddenTot); // hc + "<\/b> Chains, " + // hg + "<\/b>† Residues/Groups, " + // ha + "<\/b>‡ Atoms.\ hh += "
Everything else will remain hidden in all views, \ until re-displayed. To change what is displayed (and hidden), \ you must first uncheck Invert Hiding (below). \ "; hh += "

\ Center Visible Moieties<\/a> \       \ Center by Clicking<\/a> \
Invert Hiding \
"; } if (!invertHidden) hh += '<\/form> \ \ † Ligands+ are not hidden when you hide a chain, even if they \ belong to that chain. Use the Residue/Group option, or the \ Ligands+ button to hide them. \
\ Nonstandard residues are not always hidden with the chain, \ but can be hidden as Residues. \
\ * "Protein", "DNA", or "RNA", \ as the terms are used here, exclude amino acids or nucleotides that are not \ part of a \
polymer chain.'; if (preferenceDetails) { hh += '
\ § The primary conformation (config=1) will not be hidden. Other alternate \ conformations/locations (config=2 and higher) will be hidden. \ This checkbox is hidden, but automatically checked, in fewer details mode. \ <\/small>'; } //† Count of hidden Residues/Groups excludes those in entire hidden chains. \ //
\ //‡ Count of hidden Atoms excludes those in entire hidden residues/groups/chains. \ //§ squiggle return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeIsolateHelpBottom() { var ihb = ""; ihb += makeHideIsolatedHelp(); ihb += "

To isolate more than one entity, there are two \ methods: \
    \
  • \ Use Find \ (Focus Box) \ to put halos on the entities that you wish \ to isolate. Then isolate Atoms with Halos. \
  • \ Use Hide \ (Focus Box) \ to hide the entities that you wish to isolate. \ Then, also in Hide, check Invert Hiding. \
"; return ihb; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideCheckboxes() { //alert("help.js #12 hideAltLoc=" + hideAltLoc); var hp = hd = hr = hc = hhy = hha = hal = ""; if (hideProtein) hp = " checked"; if (hideDNA) hd = " checked"; if (hideRNA) hr = " checked"; if (hideCarbohydrate) hc = " checked"; if (hideHydrogen) hhy = " checked"; if (hideHaloed) hha = " checked"; if (hideAltLoc) hal = " checked"; if (isolateMode) hp = hd = hr = hc = hhy = hha = hal = ""; var cbs = " \ "; if (!isolateMode) cbs += ""; cbs += ""; cbs += "<\/table> \ "; return cbs; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function listHidden(hiddenTot) { var is; var curhid = ""; if (hiddenTot > 0) curhid += ""; else return("
   Nothing"); var allhid = ""; if (hideProtein) allhid += "Protein*\n"; if (hideDNA) { if (allhid.length > 0) allhid += ", \n"; allhid += "DNA*\n"; } if (hideRNA) { if (allhid.length > 0) allhid += ", \n"; allhid += "RNA*\n"; } if (hideCarbohydrate) { if (allhid.length > 0) allhid += ", \n"; allhid += "Carbohydrate " + makeNotesLink("[?]", "predef"); } if (hideHydrogen) { if (allhid.length > 0) allhid += ", \n"; allhid += "Hydrogen\n"; } if (hideHaloed) { var formerly = ""; if (toFind != toFindHidden) formerly = " formerly "; if (allhid.length > 0) allhid += ", \n"; allhid += "Atoms " + formerly + " with Halos: " + toFindHiddenShown + "\n"; } if (hideAltLoc && preferenceDetails) { if (allhid.length > 0) allhid += ", \n"; allhid += "Atoms with Alternate Locations\n"; } if (allhid.length > 0) allhid = "
   All " + allhid; curhid += allhid; // CHAINS for (is = 0; is < hiddenChains.length; is++) { if (is == 0) // @@ { if (hiddenChains[0].length > 1) // unnamed Protein or Nucleic chain { curhid += "
   The Unnamed "; } else { curhid += "
   Chain" if (hiddenChains.length > 1) curhid += "s" curhid += " "; } } else curhid += ", " curhid += hiddenChains[is]; if (is == 0 && hiddenChains[0].length > 1) // unnamed Protein or Nucleic chain { if (hiddenChains[0].charAt(0) == "N") curhid += " Acid"; curhid += " Chain"; } } // GROUPS for (is = 0; is < hiddenGroups.length; is++) { if (is == 0) { curhid += "
   " if (hiddenGroups.length == 1) curhid += "Residue/Group "; else curhid += "Residues/Groups "; } else curhid += ", " curhid += hiddenGroups[is]; } if (curhid.indexOf("%") != -1) { curhid += "
     "%X" means " + 'Alternate Location X'; } for (is = 0; is < hiddenAtoms.length; is++) { curhid += "
  " + hiddenAtoms[is].substring( hiddenAtoms[is].indexOf(" ")); // This made a one-line list, before the element name was included // if (is == 0) // { // curhid += "
   Atom Serial" // if (hiddenAtoms.length > 1) // curhid += "s" // curhid += " "; // } // else // curhid += ", " // // curhid += "#" + hiddenAtoms[is]; } for (is = 0; is < hiddenRanges.length; is++) { if (curhid.length > 0) curhid += "
"; curhid += "  " + "Range: " + hiddenRanges[is]; } if (hiddenTot > 0) curhid += "<\/b><\/font>"; return curhid; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideNoMoreHelp() { // Prior to call, lastHideMode is set to hideMode, then hideMode is blanked. // In this implementation, lastHideMode is not used. // (See abandoned unnecessarly complicated idea in 0.98/obsolete/unhideh.js) var uhh = "Hiding Exited: \ Clicked atoms will be identified. \
"; if (getHiddenTot() > 0) uhh += "To re-display hidden moieties, at any time, click Re-Display.. above. \ "; else uhh += "(Nothing is hidden.)"; return uhh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeIsolateCancelHelp() { var uhh = "Isolate Canceled: \ Nothing has been isolated.

\ Clicked atoms will be identified."; if (getHiddenTot() > 0) uhh += "Portions remain hidden. \ To re-display them, click Re-Display.. above. \ "; return uhh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCantIsolateHelp() // for when invertHidden { var cih = "Unable to Isolate:
" + "Isolate is disabled when Invert Hiding is checked. \

\ If you wish to Isolate something, please first return to Hide, \ and uncheck Invert Hiding."; return cih; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSelectRadios(cck, gck, ack, rck, fck) { var hr = "
\ Chains     \ Residues/Groups     \ Atoms \
\ Range of residues in one chain (2 clicks) \
\ or check\n" + spanCheckbox + "Atoms with Halos. " + makeNotesLink("FAQ", "contactsFAQ", "", "Target Selection: Frequently Asked Questions") + "<\/center> "; return hr; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var contactsHalos = ""; function makePreContactsHelp() { if (selectMode == "") { clearSelectedArrays(); selectMode = "c"; } // SET CHECKBOXES var cck = gck = ack = rck = fck = ""; if (selectMode == "c") cck = " checked "; else if (selectMode == "g") gck = " checked "; else if (selectMode == "a") ack = " checked "; else if (selectMode == "r") rck = " checked "; if (selectedFound != "") fck = " checked"; var sfck = ctck = wtck = ""; if (preContactsView == "sf") sfck = " checked"; else ctck = " checked"; if (selectedWater) wtck = " checked"; var swck = ""; if (preContactsWater) swck = " checked"; var hh = "
"; if (selectedRangeStart != "") hh += "Range starts at " + selectedRangeStart.replace(/:/, " in chain ") + ".
Click on End of range, or " + "Cancel" + "

"; hh += "View: \ Spacefill   or   \ Cartoon \
\ \ Select Targets for Contacts: \ \
\ Whose contacts do you want to see? \ Click on the molecule to select, as the target, one or more:
" + makeSelectRadios(cck, gck, ack, rck, fck) + "then
\ Show \ Atoms Contacting Target. \
\
Click again to deselect. \
Hide.. or Find.. \ (Focus Box) \ can be used to make target selection easier. \
" + spanCheckbox + "Show Water. \     " + spanCheckbox + "Target All Water."; //What you select will be decorated with only the atoms within \ //
\ //  \ //3.5 Å (out to weak hydrogen bonds) \ //
\ //  \ //4.0 Å (out to weak salt bridges) \ //
\ //  \ //4.5 Å (out to weak van der Waals interactions) \ //
\ //  \ //7 Å (out to weak cation-pi interactions) \ contactsHalos = ""; hh += "

\ Currently selected: \
" + listContactTargets() + "
Start Over (Deselect All) \
\ <\/form>"; if (preContactsView == "sf") hh += "In this view, all atoms are spacefilling. "; hh += "Protein and nucleic acid \ chains are each given a distinct pastel color, while \ Ligands+ \ and \ Water are colored \ as in Composition. \ "; if (preContactsView != "sf") hh += "For further description of this cartoon view, click on \ Cartoon (top panel above)."; return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeContactsShownHelp() { var ck; // STOP SELECTING selectMode = ""; // STOP HIDING hideMode = ""; // makeContactsShownHelp() var hh = " "; hh += "
Contacts Shown:
"; hh += "The target you selected, \
" + listContactTargets() + "
is decorated with all contacting atoms \ (" + makeNotesLink("Definitions", "contacts", ".)"); // CHECKBOXES, CENTERING // hh += "
    "; hh += "
Protein* \ \ DNA* \ \   Hydrogen \
\ " + makeNotesLink("Carbohydrate", "predef") + "   \ \ RNA* "; if (!isolateMode && preferenceDetails) cbs += " \   \ " + rarr + 'Alternate Locations§' + "
\ \ Atoms \ with Halos. " + makeNotesLink("(?)", "contactsFAQ", "", "What are atoms with halos?") + "
"; hh += "Center Contacts \ "; hh += '
'; var marktarg = "Mark target with *"; if (!labelContacts) { ck = ""; if (markContactsTargets) ck = " checked"; hh += "
" + marktarg + "
"; } else hh += "
\ " + marktarg + "
"; ck = ""; if (backboneContacts) ck = " checked"; // alert("help.js #3 backboneContacts=" + backboneContacts); hh += //"
    \ " Backbones"; // middle spacer cell hh += "
    "; ck = ""; if (labelContacts) ck = " checked"; hh += //"
    \ "
Label Contacts (" + makeNotesLink("?", "contactsLabels", ")", "Explanation of Labeling") + "
"; // hide empty baskets hh += '
' + makeMarkBrokenCheckbox(false) + // false means don't add form tags, short label '
'; ck = ""; if (colorContactsTargetGray) ck = " checked"; if (telAvivMode) hh += "
Color Target Gray \ (for " + serverName + ")‡"; hh += "

"; // VIEW RADIO BUTTONS var cktSF, cktBS, cktCHN, cktCPK; var ckcSF, ckcBS, ckcCHN, ckcCPK; cktSF = cktBS = cktCHN = cktCPK = ""; ckcSF = ckcBS = ckcCHN = ckcCPK = ""; ck = " checked"; if (targetSF) cktSF = ck; else cktBS = ck; if (targetCPK) cktCPK = ck; else cktCHN = ck; if (contactingSF) ckcSF = ck; else ckcBS = ck; if (contactingCPK) ckcCPK = ck; else ckcCHN = ck; var dag, Dag; dag = Dag = ""; // if (targetCPK || contactingCPK) // Dag = "‡"; // if (!targetCPK || !contactingCPK) // CHAIN // dag = "†"; var starstar = ""; // if (!targetSF || !contactingSF) // starstar = "**"; // BEGIN SNAPSHOTS TABLE if (!contactsRadioViews) hh += "
\
Contacts Views -- Click Snapshots:
\
\ \   \ \   \ \   \ \ \
"; // END SNAPSHOTS TABLE // BEGIN RADIO BUTTONS TABLE else hh += "
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
\ View 1§§ \
\ View 2 \
\ View 3 \
\ View 4 \
  Target  Contacts  View†
\ \
\ \
Spacefilled
\ \
\ \
Balls" + starstar + " & Sticks
\ \
\ \
Colored by Chain" + dag + "
\ \
\ \
Colored by Element" + Dag + "
"; // END RADIO BUTTONS TABLE ck = ""; if (contactsRadioViews) ck = " checked"; hh += "
\ Distances: " + makeNotesLink("How?", "distances", "", "How to Measure Distances and Angles") + "  \ Hide. \     \ More views. \
"; // CONSURF COLORS if (useConsurfColors) hh += "Colors: Atoms are colored by ConSurf:" + "
"; // CHAIN COLORS else if (!targetCPK || !contactingCPK) hh += "Colors: \ Protein and nucleic acid chains are each given a distinct \ pastel color. \ Ligands+ \ and \ Water are colored \ as in Composition."; // ELEMENT COLORS else if (targetCPK || contactingCPK) hh += "Colors: \ Atoms are colored by element, except that \ water oxygens are colored magenta. \ Target atom colors are darker. " + colorByElement; hh += "
  \ Uncheck / \ Check \ all.
\ "; // SHOW WATER BRIDGES var watcol = "#" + colorSolvent; if (contactingCPK) watcol = "magenta"; ck = ""; if (showWaterBridges) ck = " checked"; hh += " Show putative " + makeNotesLink("water bridges", "waterbridges", "") + " (target to non-target).
"; // SHOW WATER ck = ""; if (showContactsWater) ck = " checked"; hh += " Show \ water \ putatively " + makeNotesLink("hydrogen bonded", "hbonds", "") + " to target.
\ "; // SHOW HBONDS ck = ""; if (showContactsHBonds) ck = " checked"; hh += " Show putatively " + makeNotesLink("hydrogen bonded", "hbonds", "") + " non-water.
\ "; // SHOW HYDROPHOBIC ck = ""; if (showContactsHphob) ck = " checked"; hh += " Show " + makeNotesLink("hydrophobic (apolar van der Waals)", "hphob") + " interactions.
\ "; // SHOW SALT BRIDGES ck = ""; if (showContactsSB) ck = " checked"; hh += " Show putative protein-protein " + makeNotesLink("salt bridges", "saltbr", ".") + "§" + "
\ "; // SHOW CATION PI ck = ""; if (showContactsCatPi) ck = " checked"; hh += " Show possible protein-protein " + makeNotesLink("cation-pi", "catpi", "") + " interactions§
\ "; // SHOW METALS & MISC ck = ""; if (showContactsMeMi) ck = " checked"; hh += " Show possible " + makeNotesLink("metal and misc", "memi", ".") + " bonds.
\ "; //- - - - - - - - - - - - - - - // SHOW STICKS? if (!contactingSF) // need to make form reading, or use hidden input? { ck = ""; if (showContactsSticks) ck = " checked"; hh += "    Show sticks.
\ "; } // HYDROGENS ck = ""; if (hydrogensContacts) ck = " checked"; hh += "    Show " + makeNotesLink("hydrogens (if present in model)", "hydrogen", "."); /* if (consurfMode) hh += "
"; if (selectonMode) hh += "
NEED SELECTON KEY HERE
"; //@STON if (epitopiaMode) hh += "
NEED EPITOPIA KEY HERE
"; //@EPIT */ // NOTES hh += '
    \
  • ' + '' + ' List Counts  ' + 'of Contacting Atoms & Terms for Find' + '
  • Find.., Hide.. \ or Isolate.. \ (above, in the \ Focus Box) \ can be used on the Contacts display. \
  • Any other view clears the contacts display. \
\ '; // SALT BR/CATPI PROTEIN ONLY hh += "§Salt bridges and cation-pi interactions are shown \ ONLY FOR PROTEIN. FirstGlance cannot detect these interactions \ for ligands or nucleic acids. All other non-covalent interactions listed above \ are shown for protein, nucleic acids, and ligands+. \ "; // "ALL" CONTACTING ATOMS hh += "

All contacting atoms in the model are shown \ (both non-covalent and covalent contacts), \ regardless of whether they were \ hidden during target selection. NOT SHOWN, however, are \ crystal contacts \ and specific oligomeric contacts in the biological unit \ (unless this is a model of the biological unit). \ See the Resources tab for information on biological units. \ "; // PRESET VIEWS if (contactsRadioViews) hh += "
§§ Views 1-4 are the most useful of the 16 possible \ settings of the radio buttons." // BALLS if (!targetSF || !contactingSF) { hh += "

†" + "Small balls signify atoms likely noncovalently (or covalently) bonded \ to the target (" + makeNotesLink("Definitions", "contacts", ").") + " Slightly larger and darker balls are target atoms likely \ non-covalently bonded to the target-contacting atoms.\n"; if (showContactsSticks) hh += "Optionally, residues containing balls are shown as sticks, \ solely for context.\n"; hh += "

Use Center Atom.., Zoom and \ Slab \ (above, in the \ Button Box) \ to see details with less clutter. "; } if (telAvivMode) hh += "

Color Target Gray does not apply when \ " + serverName + "\ colors are applied to the target." hh += "
<\/form>"; return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function listContactTargets() { var is; var cursel = ""; var halos2add = ""; for (is = 0; is < selectedChains.length; is++) { if (cursel.length > 0) cursel += "
" if (selectedChains[is].length > 1) { if (selectedChains[is] == "Protein") cursel += "  The Unnamed Protein Chain"; else cursel += "  The Unnamed Nucleic Acid Chain"; } else cursel += "  Chain " + selectedChains[is]; } for (is = 0; is < selectedGroups.length; is++) { if (cursel.length > 0) cursel += "
" cursel += "  Residue/Group " + selectedGroups[is]; } for (is = 0; is < selectedAtoms.length; is++) { if (cursel.length > 0) cursel += "
" cursel += "  " + selectedAtoms[is].substring(selectedAtoms[is].indexOf(" ")); } // alert( //"help.js #4\n\ //toFind=" + toFind + "\n\ //selectedFound=" + selectedFound + "\n\ //toFindShown=" + toFindShown); // This keeps what was haloed for contacts, regardless of subsequent Find operations. // contactsHalos is blanked when a new cycle of contacts is begun. halos2add = ""; if (contactsHalos.length) halos2add = contactsHalos; else if (selectedFound != "") contactsHalos = halos2add = toFindShown; if (halos2add.length) { if (cursel.length > 0) cursel += "
" cursel += "  Halos: " + halos2add; } for (is = 0; is < selectedRanges.length; is++) { if (cursel.length > 0) cursel += "
"; cursel += "  " + "Range: " + selectedRanges[is]; } if (selectedWater) { if (cursel.length > 0) cursel += "
" cursel += "  All Water"; } if (cursel.length == 0) cursel = "  Nothing"; else cursel = "" + cursel + ""; return cursel; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeFindHelp() // mfh { var hiddenTot = getHiddenTot(); // if (toFindShown.length > 30) alert("toFindShown > 30"); var pfh = " \ Find: "; var rowsNeeded = Math.ceil(toFindShown.length / 30); // rounds up if (rowsNeeded <= 1.0) pfh += ' '; else pfh += // minimum is 2 lines and Enter no longer triggers Find ''; pfh += "Clear Halos \
\
\ \ \ See All Halos Easily\  <- \ Undo \ "; var yellow1 = '
  '; var yellow2 = "  "; var qseqlen = 'Query sequence length is ' + findSequence.length + '. '; // alert("help.js #7a: foundAtomCount=" + foundAtomCount); // REPORT WHEN ATOMS FOUND, OR // NO ATOMS FOUND AND NO SEQUENCE SPECIFIED if ((foundAtomCount == 0 && findSequence.length == 0) || foundAtomCount > 0) { pfh += yellow1; if (findSequence.length > 0) pfh += qseqlen; pfh += foundAtomCount + " atoms were found and marked with halos. \n\ These include " + foundAACount + " amino acid \n\ alpha carbons, " + foundNucleotideC5primeCount + " nucleic pentose C5' atoms, "; if (foundNucleotideC5primeCount > 0) pfh += "(" + foundDNAC5pCount + " DNA, " + foundRNAC5pCount + " RNA), "; pfh += " " + foundLigandPlusCount + " " + makeNotesLink("Ligand+", "lig", "") + " atoms, and " + foundWaterCount + " water atoms."; // water atom count could include hydrogens if ((hiddenTot > 0 && preferenceDetails) || (hiddenTot > 1 && !preferenceDetails) || isolatedDescription != "") pfh += " Hidden atoms (from Hide or Isolate) are not counted and do not have halos."; pfh += yellow2; } // EXPLAIN WHEN NO ATOMS FOUND BUT SEQUENCE SPECIFIED else if (findSequence.length > 0) { pfh += yellow1 + qseqlen + '0 atoms were found. To be found, the entire query sequence \n\ must exist in the 3D model. It won\'t be found if even one residue \n\ is absent.'; if (findSequence.length > 4) pfh += " Try a shorter sub-sequence."; pfh += yellow2; } if (foundAtomCount > 0) // Its -1 before finding. { pfh += "
Center Atoms with Halos"; if (hasMap) { var targj = ""; if (toFindShown != toFind) targj = toFind; pfh += "     " + '' + cap1only(mapName) + ' Density Map'; } } pfh += "

\ In the slot above, enter one or more of (separated by commas): \
    \
  • \ Sequence of amino acids sequence=tlyr, or nucleotides \ sequence=tga. Not found? See * below.\ \
  • Sequence number(s) or ranges (such as 10, 51, 67-82). \
  • Amino acid " + makeNotesLink("3-letter names", "aanames", "") + " (such as PRO, HIS). \ Alpha carbons: (PRO, HIS) AND *.CA. \
  • Nucleotides A, C, G, T, U \ and DNA (or and RNA). \ P atoms only: PHOSPHORUS AND (A, T). \ More.. \
  • Name-sequence combinations (SER41, C9). \
  • To restrict one of the above to a specific \ chain: \ SER41 and chain=A (or SER41:A)\
  • Full name(s) of elements (zinc, selenium). \
  • " + makeNotesLink("More..", "moreFind", ".") + "
\ After pressing Enter, yellow dot-halos will appear \ around the found atoms, and the count of found atoms will be reported \ above. Halos will appear even when \ the atoms themselves are not visible, such as sidechain atoms in a \ cartoon display. \ However, halos will not appear around atoms hidden (with the \ Hide.. or Isolate.. tools), nor will hidden atoms be counted in the report of found atoms. \

\ The halos will remain present in all views until you click Clear Halos \ or Reset above. \ \ "; pfh += '
*Sequence not found: Make sure that all of the sequence \n\ you specified has coordinates in the model. That is, if any of \n\ the residues in your sequence are missing in the model due \n\ to disorder, that sequence is not present in the model. Check \n\ Missing Residues under the ' + tab0Name_txt + ' Tab.'; // if (toFind != toFindShown) pfh += '

The atom expression selected in Jmol \n\ is:
   ' + toFind + "
"; // PUT CURSOR IN SLOT AND SELECT CONTENTS OF SLOT! setTimeout("document.findForm.toFind.select()", 300); return pfh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeBePatientHelp() { var bph = "
\ One moment please! It may take a minute \ or two for \ FirstGlance in Jmol to load at first. Subsequent sessions will \ show the molecule faster. \ "; // if (top.usingSignedApplet) if (usingJava) { bph += '
If you did not trust the signed Jmol applet, \n\ the molecule will never appear. You may prefer to try FirstGlance \n\ without Java (see link below). \n\ \
\n\ Can\'t see the molecule (after waiting a minute or two)? \n\
\n\ Try FirstGlance without Java! \n\ \n\
'; } else bph += '
'; //"
\ //Please click the button above to go to the Introduction. \ bph += "
(Very large molecules will need \ extra time to arrive.) \

"; // if (!usingJava) // bph += makeTryJava(); //if ((isChrome || isOpera) && !usingJava) //{ // var bnam = "Chrome"; // if (isOpera) bnam = "Opera"; // bph += //'You are using the ' + bnam + ' browser. \ //Firefox \ //displays the molecule in about one-third the time. \ //

'; //} if (!usingJava && (isMSIE || isEdge)) { var bnam = "Internet Explorer"; if (isEdge) bnam = "Edge"; bph += '
\ You are using the ' + bnam + ' browser, \ which is very slow with JSmol and FirstGlance. \ Please use free \ Chrome or \ Firefox instead! \
\

'; } //if (!usingJava) // bph += //'
\ //If it takes longer than one minute to display this molecule, consider \ //instructing FirstGlance to use Java. \ //Everything will go 10X faster. \ //
\ //

'; bph += "Please don't reload/refresh until you see the molecule. \
Reloading/refreshing before you see the molecule sometimes prevents the \ molecule from ever appearing. To fix this, just close/quit \ your browser, and restart it. \
\ "; return bph; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeNoJavaURL() { var nju = "fg.htm?mol=" + pdbToLoad + "&NOJAVA"; return nju; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var noClick = ""; /* " (Currently, this does not work for nucleic acids with the \ Cartoon or Secondary Structure displays, but works with the \ N->C Rainbow display or on nucleotide bases as Vines. \ A future version will fix this.) <\/small>"; */ //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var macHover = "(On Macintosh OS X, click on blank background near the molecule \ first.)"; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function identifySubhelp() { var idsubh = "Identify any atom by clicking on it. Its identity will be \ displayed to the lower left of the molecule. " + " " + makeIdentityCodeHelp() + " " + makeNotesLink("More..", "ident", ""); return idsubh; } //After about two seconds of touching an atom, a message will appear its //identity will be displayed. This works best \ //with spinning toggled off. \ //" + macHover; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var inspectSubhelp = "
Click the Slab button (Views or Tools Tab) \ for instructions on how to \ zoom in and see a region of interest, without clutter."; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var addHeteroSubhelp = "Clicking the Ligands+ or Water buttons adds \ these components to the display, if they are not already visible, \ or hides them if they are."; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var hideHeteroSubhelp = "

Clicking the Ligands+ or Water buttons hides \ these components."; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var drumsSubhelp = "

This color scheme is adapted from the \ \ Drums Standardized \ Color Schemes for Macromolecules. \ "; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var colorByElement = "
\
\ \ " + coloredElements + '
\ (more elements..) \
\ "; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSlabHelp() { var ck20 = ck10 = ck6 = ck3 = ""; if (slabThickness == "20") ck20 = " checked"; if (slabThickness == "10") ck10 = " checked"; else if (slabThickness == "6") ck6 = " checked"; else if (slabThickness == "3") ck3 = " checked"; var ckdz = ""; if (slabDepthZero) ckdz = " checked"; var slh = "
" + //
\ //
Molecule disappeared?   \ // Fix!  " + //  (" + // + makeNotesLink("More..", "zoombugs", ")") + //
\ "Slab \ mode hides the front and back of the \ molecule, leaving visible only a thin central slab, \ parallel to the screen. \ This is best appreciated when spinning is toggled off. \
\ Slab thickness: \ 20% \   \ 10% \   \ 6% \   \ 3% \
\ If you want to see the " + makeNotesLink("inside surface of a cavity or channel", "cavity", ":") + "
Don't hide the back of the molecule. \
\ \
\ With slab mode off (so you can see the entire molecule), \ use Center Atom.. \ (above, in the \ Focus Box) \ to center a region \ of interest. " + noClick + "Centering ensures that the region \ of interest will be visible after you turn slab mode on. Next, Zooming \ in may help to see details. \ \

Click Center Atom.. \ (Focus Box) \ to re-center the entire molecule, and \ click Slab again to toggle slab mode off.\ "; // if (usingJava) slh += //" \ // "; // slh += //"Move the mouse to the right edge of Jmol, just inside."; // if (usingJava) slh += //" The cursor will change \ //to up and down arrows."; slh += "

Drag the slab boundaries: \ hold down ALT and SHIFT, then click and drag up and down.

"; slh += identifySubhelp(); // in makeSlabHelp() return slh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeWaterHelp() { var watSize = "van der Waals"; if (waterIsSmall) watSize = "0.6 Å"; var hwa = 'The hidden waters are associated with other hidden components. '; var visibleWaterOxygenCount = jmolAtomCount("water and oxygen and not ~hidden_jdef"); var wath = ""; if (waterCount == 0) { wath += 'There is no water in this model. \n\ \

\n\ \ When present, water '; } else // waterCount is not zero { wath += 'There are ' + waterCount + ' water molecules in '; if (modelCount > 1) wath += 'model 1. '; else wath += 'this model. '; if (visibleWaterOxygenCount == 0) { wath += 'All waters are hidden due to an Isolate operation. ' + hwa + 'When visible, water '; } // waterCount is "water and oxygen" if (waterCount == visibleWaterOxygenCount) wath += 'Their '; else if (visibleWaterOxygenCount > 0) wath += '' + (waterCount - visibleWaterOxygenCount) + ' waters are hidden due to an Isolate operation. ' + hwa + 'The ' + visibleWaterOxygenCount + ' visible water '; } wath += "oxygens are displayed as \ \ red spheres of " + watSize + " radii, \ as shown at left. \ \ " + makeSmallWaterCheckbox() + ' \ \ Typically, only 10-20% of the water in protein crystals is tightly-enough \ bound to be resolved, so 80-90% of the water present is invisible \ (due to disorder). \ Protein crystals are highly hydrated, ranging from about 30% to 70% water in \ different crystals. \ More.. \ '; wath += "

\ \ Hydrogen atoms are not resolved in most \ protein crystallographic results \ (More..). \ This model contains "; if (waterHydrogenCount == 0) { wath += 'no water hydrogen atoms. '; } else { wath += '' + waterHydrogenCount + ' water hydrogen atoms (' + hydrogensPerWater + ' hydrogens/water oxygen). '; } wath += 'When water hydrogen atoms are \ modeled, they are white, and appear \ as shown at left. \ '; return wath; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeLigandsHelp() { var visibleLigandAtoms = jmolAtomCount("not (protein, nucleic, solvent, ~hidden_jdef)"); var totalLigandAtoms = ligandHydrogenCount + ligandNonHCount; var ligh = "Ligands+ "; // alert("help.js #6 hiddenTot=" + hiddenTot); // NO LIGANDS+ if (visibleLigandAtoms == 0) { ligh += "

"; if (totalLigandAtoms > 0) // but none are visible ligh += "Ligands+ atoms are present in this model but all are currently hidden."; else ligh += "There are no Ligands+ atoms in this model."; } else // LIGANDS+ PRESENT { ligh += "atoms "; if (hiddenTot > 0 && isolatedDescription != "") ligh += "(only those not hidden, and in the isolated set) "; else if (hiddenTot > 0) ligh += "(only those not hidden, if any) "; else if (isolatedDescription != "") ligh += "(only those in the isolated set, if any) "; if (ligandIsSmall) ligh += " are displayed as balls and sticks, "; else ligh += " are displayed as spheres of van der Waals radii, "; ligh += "colored by element: " + colorByElement + "There is a clickable list of ligands+ under the " + tab0Name_txt + " tab, where their full names are given."; } // END LIGANDS+ PRESENT ligh += "

\ \ "Ligands+" includes all components of the model that are not \ water, and not " + makeNotesLink("chains", "lig", "") + " of protein, DNA, or RNA. \ Thus, it includes substrate or inhibitors, prosthetic groups such as \ heme, cofactors such as NAD, \ carbohydrate, metal ions, \ and so forth, \ regardless of whether these are covalently \ or non-covalently bound to the protein or nucleic acid chains. \ It also includes monomeric standard amino acids or nucleotides, \ and dipeptides, which, by convention, are considered ligand rather than "chains" (" + makeNotesLink("More about ligands+", "aalig", ")") + " (Caution: Rare ligands may fail to be displayed, but will be displayed \ when you check non-standard residues below. " + makeNotesLink("More..", "lig", ")") + "

\ Clicking the Ligands+ button a second time hides the ligands+. " + makeSmallLigandCheckbox() // smallerLigands + makeNonStandardCheckbox() + "
" + identifySubhelp(); // in makeLigandsHelp() return ligh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var centerAtomHelp = // makeCenterHelp centerHelp " \ \ \ Center Atom (or Entire Molecule) \ \
\ Click on any atom \ to center it. \
\ " // if (foundAtomCount > 0) centerAtomHelp + "At any time, you may
\ Center Atoms with Halos \ (?)\
or \ Re-Center All Visible Atoms\
\
The above link centers the average of atomic positions.
\ Alternatively, you may
\ Center the Boundbox for All Visible \ Atoms
\ 1zms is very asymmetrical due to \ a protruding alpha helix. Try it out to illustrate the difference. \
\ " + inspectSubhelp; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var centeringCancelledHelp = "Centering Exited. \ \

\ At any time, you may \ Re-Center All Visible Atoms. \ "; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var thickerBackboneHelp = "For a slightly thicker backbone, easier to see on a white background, \ depress the Quality button. \
\ For a thicker backbone, use Vines/Sticks.. and Hide Sidechains. \
\ For an even thicker, smoothed backbone trace, use N->C Rainbow in the Views tab. \ " function makeThinBackboneHelp() { var tbh = "Thin Backbone \ displays a very thin \ backbone trace. \

" + makeColorKeys(N2CRainbowKey) + "
" + addHeteroSubhelp + '

' + thickerBackboneHelp; return tbh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeAllModelsHelp() { if (modelCount < 2) // -1 if not found in PDB header return makeThinBackboneHelp(); var allmh = ''; if (modelCount > 1 && !usingJava) allmh += '
\n\ FirstGlance shows only the first of the ' + modelCount + ' models in this data file. \n'; if (validPDBId != "") allmh += 'To see all models: \n\ view ' + validPDBId + ' at RCSB. \n\ There, CHOOSE the NGL viewer (menu at bottom right), \n\ and then set Model to All Models. \n\

'; // allmh += thickerBackboneHelp + '

' + addHeteroSubhelp + '

'; allmh += //"Thin Backbone for All Models \ //displays a very thin \ //backbone trace \ //for each model. \ //When there is more than one model, clicking on an atom reports \ //Model=n, where n is the model number. " + //N2CRainbowKey + "NMR: \
\ \ About 11% of \ 3D macromolecular structure entries in the \ Protein Data Bank \ result from \ solution nuclear magnetic \ resonance spectroscopy (NMR), which typically yields \ multiple models. \ An example is \ 2BBN, whose \ 21 models are shown at left. \ About 89% of PDB entries result from \ \ X-ray crystallography, which nearly always produces \ a single model. \

\ In NMR results, the discrepancies between models can result either from \ thermal motion in solution, or from regionally insufficient data. \ Nothing in the published data file distinguishes these two sources \ of the discrepancies. Also, in contrast to \ resolution \ and \ Rfree \ for crystallographic models, nothing in published NMR data files gives an \ overall measure of \ quality. \

\ In general, NMR results are \ more likely to contain major errors \ than are good-quality crystallographic results. \ "; return allmh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeVinesHelp() { vh = "Vines: All atoms "; var closeparen = ""; // if (!toggleIsDown[waterIndex] || !sidechainsVisible || !hydrogensVisible) if (!toggleIsDown[waterIndex] || !sidechainsVisible || hideHydrogen) { vh += "(except "; closeparen = ")"; } var except = ""; if (!toggleIsDown[waterIndex]) except += "water"; if (!sidechainsVisible) { if (except.length > 0) except += " and "; except += "sidechains"; } // if (!hydrogensVisible) if (hideHydrogen) { if (except.length > 0) except += " and "; except += "hydrogen"; } if (!allWireframe) { if (except.length > 0) except += " and "; except += "backbone"; } vh += except; vh += closeparen + " are displayed as sticks (or tiny balls, if not \ covalently bonded)."; vh += makeColorKeys(colorByElement); if (!allWireframe) vh += "
\ Backbone atoms are hidden, except for \ traces \ connecting protein alpha carbon atoms \ or nucleic acid phosphorus atoms. The \ backbone \ for each chain is given a distinct pastel color. "; vh += makeWireframeAllCheckbox() + addHeteroSubhelp; if (altLocCount > 0) { vh += "

This model includes " + altLocCount + " atoms that have " + 'alternate locations. ' + 'All alternate locations are shown in this Vines view. Hence some atoms ' + 'may be shown in two or more copies.'; //'Put Halos on atoms with alternate locations.'; } vh += "

" + identifySubhelp(); // in makeVinesHelp vh += "
" + inspectSubhelp; return vh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeZoomHelp() { var zoomHelp = "Zoom \

\ In addition to using the zoom-arrow buttons above, \ here are other ways to zoom: \
    \
  • "; if (isMac) zoomHelp += "\ "; else // Win zoomHelp += ""; zoomHelp += "Move the mouse to the right edge of Jmol, just inside."; zoomHelp += " The cursor will change \ to up and down arrows."; zoomHelp += " Click and drag up/down to zoom. \
  • Click on the background of the molecular rectangle; then use \ the wheel on your mouse. \
  • Hold down the Shift key, then drag up or down on the molecule. \
\ Fit molecule to window. \     \ Center visible atoms. \
\ "; //Zooming too large (close to the maximum) may distort the \ //molecule. " + //(More..). \ //"Zoom a bit smaller to correct these distortions. \ return zoomHelp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeGettingChargeHelp() { var gch = 'Protein Charge:' + '

BUSY:
' + 'One moment, please, while the visible charges are characterized ...
'; gch += '
'; return gch; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // can't use makeNotesLink here, something is undefined var endsMethods = 'Detection of chain ends, and their charges, involves \ complicated methods, \ and likely does not handle all cases correctly. \ Please report problematic PDB codes to ' + contactEmail; var proteinNonHCountVisible; function makeChargeHelp() { proteinNonHCountVisible = jmolAtomCount("visible and protein and not hydrogen"); // IF NO PROTEIN IS VISIBLE, SAY SO, AND WE'RE DONE. if (proteinNonHCountVisible == 0) { var tcv = "The Charge view shows and reports charges for protein only. " + "Since no protein is visible, this view does not apply."; return tcv; } // WE HAVE VISIBLE PROTEIN. // endsGotten IS ALWAYS TRUE HERE // GET ENDS BEFORE CHARGES (following precedent in moltab.js) // if (!endsGotten) // { // alert("help.js #11CH: endsGotten false in makeChargeHelp()\n" + // "calling getEndsThenCharges()"); // setTimeout("getEndsThenCharges()", 100); // displays makeChargeHelp2() // } // else // { // getCharges() UNCONDITIONAL BECAUSE it updates for hidden residues // showHelp needs a moment to display before we get busy. // getCharges() is now called by doViewLink when chargesNow //setTimeout("getCharges()", 100); // displays makeChargeHelp2() // } // the progress help is now set up by doViewLink //return makeGettingChargeHelp(); // to display progressDiv return makeChargeHelp2(); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //function getEndsThenCharges() //{ // suppressEndsHelp = true; // getChainEnds(); // Once is enough. No updating for hidden residues. // getChargesAfterEnds(); // Unconditional since it does update for hidden residues. //} //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //function getChargesAfterEnds() //{ // if (!endsGotten) // set to true in getChainEnds() // setTimeout("getChargesAfterEnds()", 200); // else getCharges(); //} //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function showChargeHelp() { showHelp("makeChargeHelp()"); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeChargeHelp2() { var termend, termend2, termend3; // DO WE HAVE INTACT CHAINS? var hiddenTot = getHiddenTot(); var proteinChainsIntact; // boolean var allProteinNonHVisible; // boolean. could have used getAllProteinNonHAtomsVisible() var inVisibleProteinChains = ""; var sayVisibleProtein = ""; if (hiddenTot > 0 || isolatedDescription != "") // hiddenTot is 0 when something is isolated. { proteinChainsIntact = false; allProteinNonHVisible = false; // If only intact chains are hidden or isolated (or non-protein) if (hiddenGroups.length == 0 && hiddenAtoms.length == 0 && hiddenRanges == 0 && isolatedDescription.indexOf("Residue") == -1 && // Isolate doesn't do Atom isolatedDescription.indexOf("Range") == -1 && isolatedDescription.indexOf("Halos") == -1) { proteinChainsIntact = true; } // It is possible that the only things hidden are // non-protein groups/atoms/ranges. So if all // protein non-hydrogen atoms are visible, chains are still intact. if (proteinNonHCount == proteinNonHCountVisible) { proteinChainsIntact = true; allProteinNonHVisible = true; } if (proteinNonHCountVisible < proteinNonHCount) { inVisibleProteinChains = " in visible protein chains "; sayVisibleProtein = " visible protein "; } } else { proteinChainsIntact = true; allProteinNonHVisible = true; } // alert("help.js #9 proteinNonHCount = " + proteinNonHCount + "\n" + // "proteinNonHCountVisible = " + proteinNonHCountVisible + "\n" + // "hiddenTot = " + hiddenTot + "\n" + // "proteinChainsIntact = " + proteinChainsIntact); // ALREADY DONE by makeChargeHelp() // getCharges(); // update for hidden residues or recently unhidden // charge2.7 // getChainEnds(); does NOT update for hidden residues getVisibleProteinChainEnds(); // update for hidden residues getVisChargedIncSides(); var ckcps = ""; if (showPolar) ckcps = " checked"; var ckincs = ""; if (showChargeIncompleteSidechains) ckincs = " checked"; var ckcoa = ""; if (colorChargeOnlyAtoms) ckcoa = " checked"; var charh = // TITLE "
Protein Charge: \ Amino acids are colored \ "; var eside = " (coloring charged atoms* only)"; if (showPolar) eside = " (coloring entire sidechains)"; if (!showPolar && !colorChargeOnlyAtoms) eside = " (coloring entire residues)"; // CATIONIC POSITIVE CHARGES charh += "
    \
  • Cationic + " + eside + "
    " + // charge2.7 //(argCount + lysCount + NTChargedChains.length + NTChargedHetAANames.length) + "+"; // EndNCharged[] does not exclude hidden (argCount + darCount + lysCount + dlyCount + EndNChargedVisibleProteinChains.length + NTChargedHetAANames.length) + "+"; if (posChargeIncSidesVis > 0) charh += ", including " + posChargeIncSidesVis + "+ with incomplete sidechains.
    "; termend = "i"; // charge2.7 //if ((NTChargedChains.length + NTChargedHetAANames.length) == 1) if ((EndNChargedVisibleProteinChains.length + NTChargedHetAANames.length) == 1) termend = "us"; // POSITIVE CHARGES BY AMINO ACID ETC. charh += " (" + argCount + " Arg, "; if (darCount) charh += darCount + ' Dar, '; charh += lysCount + " Lys, "; if (dlyCount) charh += dlyCount + ' Dly, '; // charge2.7 //(NTChargedChains.length + NTChargedHetAANames.length) + " N termin" + termend + ")" + charh += (EndNChargedVisibleProteinChains.length + NTChargedHetAANames.length) + " N termin" + termend + ")" + "
    (" + hisCount + " His"; if (dhiCount) charh += ", " + dhiCount + ' Dhi'; charh += ")" + perModel; if (!allProteinNonHVisible) // if charge count is 0, can be b/c hidden charh += " excluding hidden residues"; charh += "**"; if (!pdbNoHeader) { // ALL N TERMINI MISSING, CHARGED, OR BLOCKED // Can't say this if some protein atoms are hidden. // EndNMissing is boolean, includes invisible chains. // EndNMissingVisibleProteinChains lists chains excluding invisible ones. // charge2.7 // if (proteinChainsIntact && NTChargedChains.length == 0 && NTBlockedChains.length == 0) var allntcharged = allntblocked = allntmissing= false; // Example: 1d66 if (proteinChainsIntact && EndNMissingVisibleProteinChains.length == visProtChains.length) { charh += '
    All N-terminal residues ' + inVisibleProteinChains + ' are ' + linkMissing() + '.'; allntmissing = true; } // Example: 1bl8 else if (proteinChainsIntact && EndNChargedVisibleProteinChains.length == visProtChains.length) { charh += '
    All N-terminal residues ' + inVisibleProteinChains + ' are present & charged.' allntcharged = true; } // Example: 4mdh else if (proteinChainsIntact && EndNBlockedVisibleProteinChains.length == visProtChains.length) { charh += '
    All N-terminal residues ' + inVisibleProteinChains + ' are blocked.' allntblocked = true; } // SOME (BUT NOT ALL) N TERMINAL CHARGES PRESENT // Example: 1bl8 (none missing) // charge2.7 // if (NTChargedChains.length > 0) if (EndNChargedVisibleProteinChains.length > 0 && !allntcharged) { // NTChargedChains = NTChargedChains.sort(); EndNChargedVisibleProteinChains = EndNChargedVisibleProteinChains.sort(); termend = "i"; termend2 = "s "; termend3 = " are "; // if (NTChargedChains.length == 1) if (EndNChargedVisibleProteinChains.length == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    N-termin' + termend + " on " + //NTChargedChains.length + " " + EndNChargedVisibleProteinChains.length + " " + sayVisibleProtein + " chain" + termend2; //for (var itm = 0; itm < NTChargedChains.length; itm++) for (var itm = 0; itm < EndNChargedVisibleProteinChains.length; itm++) { //charh += NTChargedChains[itm]; charh += EndNChargedVisibleProteinChains[itm]; } charh += termend3 + "present & charged."; } // SOME (BUT NOT ALL VISIBLE) N TERMINI MISSING // change2.7 //if (proteinChainsIntact && NTMissingChains.length > 0 && !allntmissing) var enml = EndNMissingVisibleProteinChains.length; if (proteinChainsIntact && enml > 0 && !allntmissing) { //NTMissingChains = NTMissingChains.sort(); EndNMissingVisibleProteinChains = EndNMissingVisibleProteinChains.sort(); termend = "i"; termend2 = "s "; termend3 = " are "; // if (NTMissingChains.length == 1) if (enml == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    N-termin' + termend + " on " + enml + sayVisibleProtein + " chain" + termend2; for (var itm = 0; itm < enml; itm++) { charh += EndNMissingVisibleProteinChains[itm]; } charh += termend3 + " " + linkMissing() + "."; } // SOME (BUT NOT ALL) N TERMINI BLOCKED // Examples: 4gxu, 1ucy (some of each). // change2.7 // if (proteinChainsIntact && NTBlockedChains.length > 0) var enbl = EndNBlockedVisibleProteinChains.length; if (proteinChainsIntact && enbl > 0 && !allntblocked) { EndNBlockedVisibleProteinChains = EndNBlockedVisibleProteinChains.sort(); termend = "i"; termend2 = "s "; termend3 = " are "; if (enbl == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    N-termin' + termend + " on " + enbl + sayVisibleProtein + " chain" + termend2; for (var itm = 0; itm < enbl; itm++) { charh += EndNBlockedVisibleProteinChains[itm]; } charh += termend3 + "blocked, non-standard, or missing main chain atoms."; } // N TERMINAL CHARGES ON HETERO "LIGAND" // Example: 2cyh if (NTChargedHetAANames.length > 0) { termend = "i"; termend2 = "s "; // termend3 = " are "; if (NTChargedHetAANames.length == 1) { termend = "us"; termend2 = " "; // termend3 = " is "; } charh += '
    N-termin' + termend + //termend3 + " present & charged on " + NTChargedHetAANames.length + " visible " + '' + " AA ligand" + ((termend2 == "s ")?"s":"") + ": "; for (var itm = 0; itm < NTChargedHetAANames.length; itm++) { if (itm > 0) charh += ", "; // all std AA so don't need [] charh += NTChargedHetAANames[itm] + NTChargedHetSeqnums[itm]; if (NTChargedHetChains[itm] != "") charh += " associated with chain " + NTChargedHetChains[itm]; } charh += "."; } // REPORT N TERMINI NOT FOUND (GI == -1) // Example: 4ARF (due to swapping of CA and C in Gly2 of chain B) for (eci = 0; eci < EndsChain.length; eci ++) { var notfound = ""; var nfm = ""; var atc = EndsChain[eci]; if (EndNGI[eci] == -1) // N term not found { // if any atoms in this chain are visible // Note that hetero are not hidden by "hide chain" if (jmolAtomCount("chain=" + atc + " and visible and not solvent")) notfound += atc; } if (notfound.length > 0) { nfm = '
    N-terminus of chain ' + notfound + ' not found.'; } if (notfound.length > 1) { nfm = nfm.replace(/terminus/, "termini"); nfm = nfm.replace(/chain /, "chains "); } charh += nfm; } // end N termini not found } // end !pdbNoHeader // else // NO HEADER // { // } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // ANIONIC RED NEGATIVE // OXTCount = visOXTChains.length + visOXTHetAANames.length // HET CODE NEEDS TO BE UPDATED USING ENDS METHOD. // changed2.7 many places. // OXTCount -> alleccl, visOXTChains -> EndCChargedVisibleProteinChains // var eccl = EndCChargedVisibleProteinChains.length; var alleccl = eccl + CTChargedHetAANames.length charh += "
  • Anionic - " + eside + "
    " + (aspCount + dasCount + gluCount + dglCount+ alleccl) + "-"; if (negChargeIncSidesVis > 0) charh += ", including " + negChargeIncSidesVis + "- with incomplete sidechains.
    "; termend = "i"; if (alleccl == 1) termend = "us"; charh += " (" + aspCount + " Asp, "; if (dasCount) charh += dasCount + ' Das, '; charh += gluCount + " Glu, "; if (dglCount) charh += dglCount + ' Dgl, '; charh += alleccl + " C termin" + termend + ")
    " + perModel; if (!allProteinNonHVisible) // if charge count is 0, can be b/c hidden charh += " excluding hidden residues"; charh += "**"; if (!pdbNoHeader) { // ALL CHARGED, BLOCKED, OR MISSING // can't say this if some protein atoms are hidden var allctcharged = allctblocked = allctmissing = false; // Missing Example: 1d66 if (proteinChainsIntact && EndCMissingVisibleProteinChains.length == visProtChains.length) { charh += '
    All C-terminal residues ' + inVisibleProteinChains + ' are ' + linkMissing() + '. '; allctmissing = true; } // Blocked Example: none known yet. // 5FPK has a C-term blocked tetrapeptide. if (proteinChainsIntact && EndCBlockedVisibleProteinChains.length == visProtChains.length) { charh += '
    All C-termini ' + inVisibleProteinChains + ' are blocked. '; allctblocked = true; } // Charged Example: 1bl8 if (proteinChainsIntact && EndCChargedVisibleProteinChains.length == visProtChains.length) { charh += '
    All C-terminal residues ' + inVisibleProteinChains + ' are present & charged. '; allctcharged = true; } // VISIBLE CHARGED C TERMINI (SOME BUT NOT ALL) // Example: 1bl8 (none missing) var vnota = ""; // Visible but None Of The Above (not charged, missing, or blocked) if (eccl > 0 && !allctcharged) // 0 if all missing { //visOXTChains = visOXTChains.sort(); // Array EndCChargedVisibleProteinChains = EndCChargedVisibleProteinChains.sort(); // Array visProtChains = visProtChains.split('').sort().join(''); // string var termend = "i"; var termend2 = "s "; var termend3 = " are "; var itm; if (eccl == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    C-termin' + termend + " on " + eccl + sayVisibleProtein + " chain" + termend2; for (itm = 0; itm < eccl; itm++) { //charh += visOXTChains[itm]; charh += EndCChargedVisibleProteinChains[itm]; } charh += termend3 + " present & charged."; } // GATHER VISIBLE CHAINS LACKING CHARGE (formerly lacking OXT) in vnota //var visoxt = visOXTChains.join(""); // convert array to string, no delimiters var vischg = EndCChargedVisibleProteinChains.join(""); // convert array to string, no delims for (itm = 0; itm < visProtChains.length; itm++) { var atc = visProtChains.charAt(itm); // if a visible protein chain has no charge if (vischg.indexOf(atc) == -1) vnota += atc; } // SOME (BUT NOT ALL) C TERMINI MISSING // change2.7 ADDED THIS BLOCK var ecml = EndCMissingVisibleProteinChains.length; if (proteinChainsIntact && ecml > 0 && !allctmissing) { EndCMissingVisibleProteinChains = EndCMissingVisibleProteinChains.sort(); termend = "i"; termend2 = "s "; termend3 = " are "; if (ecml == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    C-termin' + termend + " on " + ecml + sayVisibleProtein + " chain" + termend2; for (var itm = 0; itm < ecml; itm++) { charh += EndCMissingVisibleProteinChains[itm]; } charh += termend3 + " " + linkMissing() + "."; } // EXCLUDE MISSING FROM vnota var vismis = EndCMissingVisibleProteinChains.join(""); // convert array to string, no delims var newvnota = ""; for (itm = 0; itm < vnota.length; itm++) { var atc = vnota.charAt(itm); // a visible chain with no charge // if a visible, no-charge protein chain is NOT missing, take it away from vnota if (vismis.indexOf(atc) == -1) newvnota += atc; } // alert("help.js #10 vnota=" + vnota + " vismis=" + vismis + " newvnota=" + newvnota); vnota = newvnota; // C TERMINI BLOCKED (SOME BUT NOT ALL) // change2.7 ADDED THIS BLOCK var ecbl = EndCBlockedVisibleProteinChains.length; if (proteinChainsIntact && ecbl > 0 && !allctblocked) { EndCBlockedVisibleProteinChains = EndCBlockedVisibleProteinChains.sort(); termend = "i"; termend2 = "s "; termend3 = " are "; if (ecbl == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    C-termin' + termend + " on " + ecbl + sayVisibleProtein + " chain" + termend2; for (var itm = 0; itm < ecbl; itm++) { charh += EndCBlockedVisibleProteinChains[itm]; } charh += termend3 + "blocked."; } // EXCLUDE BLOCKED FROM vnota var visblok = EndCBlockedVisibleProteinChains.join(""); // convert array to string, no delims newvnota = ""; for (itm = 0; itm < vnota.length; itm++) { var atc = vnota.charAt(itm); // a visible chain with no charge // if a visible, no-charge, not missing protein chain is NOT blocked, take it away from vnota if (visblok.indexOf(atc) == -1) newvnota += atc; } // alert("help.js #10a vnota=" + vnota + " visblok=" + visblok + " newvnota=" + newvnota); vnota = newvnota; // EXCLUDE CHAINS WHOSE C-TERMINI COULD NOT BE FOUND FROM vnota newvnota = ""; for (eci = 0; eci < EndsChain.length; eci++) { var atc = EndsChain[eci]; if (EndCGI[eci] != -1 && vnota.indexOf(atc) != -1) newvnota += atc; } vnota = newvnota; // report vnota = visible chains "none of the above" = not charged, missing, or blocked. // C TERMINI NON-STANDARD or "missing main chain atoms" ??? if (vnota.length > 0) // && proteinChainsIntact? { termend = "i"; termend2 = "s "; termend3 = " are "; if (vnota.length == 1) { termend = "us"; termend2 = " "; termend3 = " is "; } charh += '
    C-termin' + termend + ' on ' + vnota.length + sayVisibleProtein + ' chain' + termend2 + vnota + termend3 + 'non-standard or missing main chain atoms.'; } // REPORT C TERMINI NOT FOUND (GI == -1) // Example: 4ARF (due to swapping of CA and C in Gly2 of chain B) for (eci = 0; eci < EndsChain.length; eci ++) { var notfound = ""; var nfm = ""; var atc = EndsChain[eci]; if (EndCGI[eci] == -1) // N term not found { // if any atoms in this chain are visible // Note that hetero are not hidden by "hide chain" if (jmolAtomCount("chain=" + atc + " and visible and not solvent")) notfound += atc; } if (notfound.length > 0) { nfm = '
    C-terminus of chain ' + notfound + ' not found.'; } if (notfound.length > 1) { nfm = nfm.replace(/terminus/, "termini"); nfm = nfm.replace(/chain /, "chains "); } charh += nfm; } // NEEDS UPDATING, NOT BASED SOLELY ON OXT // C TERMINI CHARGED ON HETERO/LIGANDS if (CTChargedHetAANames.length > 0) { termend = "i"; termend2 = "s "; // termend3 = " are "; if (CTChargedHetAANames.length == 1) { termend = "us"; termend2 = " "; // termend3 = " is "; } charh += '
    C-termin' + termend + //termend3 + " present & charged on " + CTChargedHetAANames.length + " visible " + '' + " AA ligand" + ((termend2 == "s ")?"s":"") + ": "; for (var itm = 0; itm < CTChargedHetAANames.length; itm++) { if (itm > 0) charh += ", "; // all std AA so don't need [] ??? (not verified std for OXT) charh += CTChargedHetAANames[itm] + CTChargedHetSeqnums[itm]; if (CTChargedHetChains[itm] != "") charh += " associated with chain " + CTChargedHetChains[itm]; } charh += "."; } // end of C-termini on ligands/hetero } // end of !pdbNoHeader else { charh += "
    All end-of-chain amino acids are shown and counted as charged. " + "However, missing residues are not listed in this PDB file, so we don't " + "actually know which terminal residues in this model are charged."; } charh += '
    See Ends for details.'; // POLAR, BACKBONE, HYDROPHOBIC COLOR KEY charh += ""; if (showPolar) charh += "
  • Polar, uncharged \
  • Backbone atoms \ (charged or uncharged) \
  • Hydrophobic \ "; charh += "<\/big>
    "; // CHECKBOXES FOR ALTERNATE COLOR SCHEMES if (!showPolar) { charh += "
    \ Color only charged atoms.\n"; if (colorChargeOnlyAtoms) charh += "
    \ Color incomplete sidechains†. \ (S-)"; } charh += "
    \ Color polar (uncharged) sidechains. \ <\/ul> \ "; // EXPLANATIONS if (!showPolar) { // "medium blue" ws colorHisBasic but too light for text on white. charh += "
    \ *Charged atoms at neutral pH: sidechain \ oxygens \ in Asp and Glu, sidechain \ nitrogens \ in Lys, Arg, and His. \ His N-epsilon is \ medium blue \ because it is only partially charged (pKa 6.0). \ Carboxy-terminal \ oxygens and \ amino-terminal \ nitrogens. \ "; if (colorChargeOnlyAtoms) { // light blue/red were colorLightBasic/Acidic but too faint for text on white if (showChargeIncompleteSidechains) charh += "
    † Charged residues with \ incomplete sidechains, \ when present, are shown in \ light blue \ or \ light red (pink). \ Examples with incomplete sidechains include \ 1APM and \ 1BL8."; else charh += "
    Warning: Charged atoms are not colored \ for any residues with incomplete sidechains. \ "; } charh += "

    \ "; } // end if !showPolar // else charh += "
    \n"; charh += 'Regions of proteins with only positive charges may be binding sites \n\ for nucleotides or nucleic acids. For example, examine the \n\ protein surface contacting DNA in \n\ 1d66. \n\ \

    \n\ \ To see chain termini in close detail, go to \ Ends (also available in the Tools tab). '; charh += endsMethods + '

    \n\ \ It is easy to calculate the approximate isoelectric pH (pI) and \n\ the net charge at various pH values for a protein sequence. ' + makeNotesLink("Instructions are provided", "charge", ".") + "

    "; // hidden, altloc, models, missing, inc sidechains charh += '**Counts above exclude \n\ missing residues \n\ (but include residues with \n\ incomplete sidechains), \n\ exclude His (because it is has partial charge near \n\ neutral pH), \n\ are for model 1 only (when there are multiple models), \n\ exclude residues you have hidden with the Hide.. or Isolate.. \n\ tools, and count residues with alternate locations only once.'; charh += "

    Charge on nucleic acids is not indicated. Nucleic acid is shown as \ Cartoons \ with each chain given a different color. \ Ligand and solvent are initially hidden. \
    " + addHeteroSubhelp + "

    " + identifySubhelp(); // in makeChargeHelp() charh += drumsSubhelp; charh += "

    " + 'Examples:
      ' + '
    • 1APM' + ' has charged residues with incomplete sidechains.'; charh += "

      D amino acids" + '
    • 6cnu' + ' has few enough charged D amino acids that you can count them ' + 'to verify the counts reported above by FirstGlance.' + '
    • 5e5t' + ' has D forms of all charged amino acids including Dhi (D-His). ' + 'It has 5 Dly with incomplete sidechains. '; charh += "
    "; return charh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function linkMissing() { return ('missing'); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makePolarityHelp() // makeHydrophobic makePhobic { var polh = "Hydrophobic/Polar: \ Standard L or D amino acids are colored either \
      \
    • Hydrophobic* or \
    • Polar* \ <\/big><\/big> (charged or uncharged) <\/ul> \ White amino acids are non-standard residues. \ Nucleic acid is shown as \ Cartoons \ with each chain given a different color. \ Ligand and solvent are initially hidden. \

      " + 'Use the Slab button to look for hydrophobic cores inside \ soluble proteins (examples: \n\ 1mbo, \n\ 1lzr). \n\ When a long chain forms separate \n\ domains, \n\ each domain will have a separate core. \n\ \

      \n\ \ Extensive hydrophobic surfaces \n\ suggest an integral membrane protein. \n\ Transmembrane proteins typically have a cylindrical hydrophobic surface \n\ with about 25-35 Å between hydrophilic portions of the protein \n\ (examples: \n\ 1bl8, \n\ 7ahl). \n\ See also the estimated lipid bilayer boundaries available in the ' + tab3Name_txt + ' tab. \n\ \

      ' + addHeteroSubhelp + "

      " + identifySubhelp(); // in makePolarityHelp() polh += drumsSubhelp; polh += '

      *\ Hydrophobic amino acids are defined as \n\
      ' + hydrophobicAA + ', ' + hydrophobicDAA + '.\n\
      Sec is selenocysteine, and Mse is selenomethionine.
      \n\
      \ \ Polar amino acids are defined as \n\
      ' + polarAA + ', ' + polarDAA + '. \n\ Those beginning with D, and Med (D-methionine), are the \n\ D forms. \n\ All amino acids not listed above (non-standard residues) are colored white.'; polh += '

      Examples: \n\
      Chain C in \n\ 2z7x \n\ has non-standard amino acids \n\ with long aliphatic hydrophobic sidechains. They are colored white; you \n\ may need Slab to see them buried in the hydrophobic cores. \n\
      2y5m \n\ (gramicidin) contains D-amino acids. \n\ '; return polh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // Before the black table, //
        \ //
      • Protein \ //
      • DNA \ //
      • RNA \ //
      • "Ligand"* \ //
      • Solvent** \ //<\/big><\/ul> \ // Black table with white for zombies. //
        \ // \ // Protein \ //
        DNA \ //
        RNA \ //
        "Ligand"* \ //
        Solvent** \ //
        \ //
        ?*** \ //
        \ //
        \ //
        \ //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCompositionHelp() { var comph = "Composition: \ All atoms are shown as spacefilling spheres of van der Waals radii, colored \ as follows: \
          \
        • Protein \
        • DNA \
        • RNA \
        • "Ligand+"* \
        • Solvent** \ <\/big><\/ul> \ \ * Here, \ "Ligand+" includes everything that is not in a chain \ of protein, DNA, RNA, or solvent. \ (Definition.) \ \
          \ **Solvent is water plus inorganic sulfate or phosphate ions. \
          \ " + hideHeteroSubhelp + "

          " + identifySubhelp(); // in makeCompositionHelp() comph += drumsSubhelp; return comph; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeRainbowHelp() { var bowh = "NC Rainbow \

          \ Protein and nucleic acid chains are shown as \ smooth backbone traces, \ with nucleic acids thicker. \ Amino (N) termini \ of proteins and \ 5' termini \ of nucleic acids are \ blue. \ Carboxy (C) termini \ of proteins and \ 3' termini \ of nucleic acids are \ red. \ Between termini, colors follow a spectral rainbow sequence. \
          " + N2CRainbowKey + "
          "; if (missingCount > 0) bowh += "" + missingCount + " residues are missing from this model. (See \ details in the " + tab0Name_txt + " tab.) There are often missing residues \ at the ends of chains in crystallographic models. \

          "; bowh += addHeteroSubhelp; return bowh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var N2CRainbowKey = "
          \ \ \ \ \ \ \ \ \ \ \ \ \
          N, 5'         C, 3'
          "; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCalculatingSSHelp() { var cssh = "Secondary Structure \

          \ JSmol is calculating protein secondary structure ...

          \ Please do nothing else until the results appear here.


          "; return cssh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var rocketMode = "a"; // JSmol calculated "j", or Authors "a" // XSS var spanCheckbox = ""; function makeRocketHelp() // makesecondary makestructure makesecondarystructure makesecstruc { var allproteinvisible = (jmolAtomCount("*.ca and ~hidden_jdef") == 0); // or hiddenTot + isolatedDescription var thismodel = "this model"; if (validPDBId != "") thismodel = validPDBId; var ckherm = ""; if (hermiteZero) {ckherm = "checked";} var rockh = "
          \ Secondary Structure \
          For faster, smoother rotation, " + spanCheckbox + " \n\ simplify beta strands, and \n\ turn off Quality (in the\n\ Button Box).\n\

          \ This display affects only protein chains; the previous display of non-protein \ moieties (if any) remains unchanged. \ Alpha helices \ are shown as \ "rockets". \ Beta strands \ are shown as \ ribbons. \ Arrowheads point towards the carboxy termini. \ "; var jck = ack = jast = aast = ""; if (rocketMode == "a") { ack = "checked"; aast = "*"; } else { jck = "checked"; jast = "*"; } if (visibleAlphaCarbonCount == 0) { rockh += '

          No protein is currently visible.'; } else // some protein is visible { var visprot = ""; var somehidden = ""; if (!allproteinvisible) { var somehidden = 'Some protein in this model is hidden.
          '; visprot = "the visible protein in "; } if (pdbNoHeader) { rocketMode = "j"; rockh += '

          ' + somehidden + 'According to JSmol*, ' + visprot + 'this model has:'; } else { rockh += "

          " + somehidden + "According to  [" + "JSmol" + jast + "   " + "Authors" + aast + "]  "; rockh += visprot + thismodel + " has:
          "; } // end } // end some protein is visible if (visibleAlphaCarbonCount > 0) { rockh += "
          • Helices:" + "
            • " + "" + helixAlphaPct + "% alpha helices
            • " + "" + helix310Pct + "% 310 helices
            • " + "" + helixPiPct + "% pi helices
            • " + "
            " + "Total: " + helixPct + "% helices of " + "all three types" + "
          • " + sheetPct + "% beta strands
          • "; if (turnCount > 0 || rocketMode == "j") rockh += "" + turnPct + "% turns
          • "; else { rockh += "Turns? See note* below.
          • "; } rockh += coilPct + "% none of the above (white "coil")
          • " + "
          "; if (rocketMode == "j") rockh += "*Secondary structure \n\ determined objectively by JSmol."; else // author mode rockh += '*Secondary structure specified by the authors of the PDB file \n\ (listed in the ' + molTabLabel + ' Tab) \n\ in \n\ HELIX and SHEET records. \n\ Specification of turns is not supported in the \n\ PDB format \n\ used by FirstGlance. FirstGlance does not yet support the \n\ mmCIF format.\n'; } // end if some protein is visible rockh += '

          Slides \n\ for teaching primary, secondary, tertiary and quaternary protein structure

          '; rockh += addHeteroSubhelp + drumsSubhelp; rockh += '

          Examples: \n\
            \n\
          • 1pgb \n\ is a small domain (56 amino acids) with one alpha helix and a 4-stranded beta sheet. \n\
          • 3qhb \n\ has all \n\ three types of helices, \n\ according to JSmol. \n\ In this example, 310 helices were specified by the authors in the PDB format \n\ (helix class 5 in the HELIX records). \n\
          • In \n\ 5cgn, \n\ the authors designated alpha helices for half of the model, but not for the other half. \n\ JSmol determines that both halves are largely alpha helices. \n\
          • 3bog \n\ has an unusual secondary structure, neither helices nor beta sheets. Each chain forms a \n\ compact structure described by the authors as an "amphipathic brick". \n\ Numerous glycines (46% of the amino acids) enable this tight layering. ' + '
          '; return rockh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCartoonHelp() { var carth = "Cartoon \

          \ Each chain \ is a different pastel color. \ Protein alpha helices and beta strands are shown as \ ribbons, \ with arrowheads pointing towards the carboxy termini. \ Random coil is shown as smoothed backbone trace ("rope"). \ Nucleic acids are shown as schematic bases extending from smoothed \ backbone traces. \ This display affects only protein and nucleic acid; the previous display \ of other moieties remains unchanged.

          " + addHeteroSubhelp; return carth; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSolidChainsHelp() { var solh = 'Solid \

          \ Each chain is shown in a different pastel color, with "solid" (spacefilling) \ atoms of van der Waals radii. \n\ Ligands+ are green \n\ (as in Composition). \n\ This view makes it easy to see how multiple chains fit together, and \ whether there are large depressions or pockets in the surface. \

          \ For example, the 4 chains in \ 2hhd \n\ have large interchain contact areas (despite a hole in the middle), \n\ suggesting that the \n\ \ biological unit \n\ is a tetramer. In contrast, the 6 chains in \n\ 5cev \n\ form 2 trimers that \n\ contact each other with a small area, suggesting that the inter-trimer \n\ (yellow to green) contact is a \n\ crystal contact. \n\ To make sure, click Biological Unit under the Resources tab. \n\ \

          \ The Solid view also helps to recognize conformations that are \n\ unlikely because they don\'t have enough contacts for stability. \n\ An example is the unusual triangular helix in \n\ 1k28. \n\ A check at Biological Unit under the Resources tab \n\ shows how this helix is packed with other chains to form a stable \n\ structure. \n\ In other cases, a poorly packed chain may be stabilized by \n\ crystal contacts. \n\ \

          \ Composition, Hydrophobic/Polar, and Charge (all under the \n\ Views tab) are also solid views, but with different color schemes. \n\ Contacts & Non-Covalent Interactions (Tools tab) starts \n\ with the same view as Solid. \n\ \

          '; addHeteroSubhelp; return solh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCheckAtRCSB() { var ckrcsb = "Investigate by "; if (top.validPDBId.length > 0) ckrcsb += "searching for " + top.validPDBId + " at RCSB. "; else ckrcsb += "searching for the PDB code at RCSB."; ckrcsb += "
          • "Status HPUB" means the entry is supposed to be released \ upon publication of the journal article describing it. \ If it was not, contact
            deposit-help@mail.wwpdb.org
            \ citing the PDB ID code and the journal publication.\
          • "; /*
          • If there is an entry "; if (top.validPDBId.length > 0) ckrcsb += "for " + top.validPDBId; ckrcsb += " at RCSB, it may be too large for the PDB format. \ Open the Download Files menu. If \ PDB Format is grayed out with a \ small circled "i", the model is too large. \ FirstGlance has not yet been adapted \ to work with such large models. (Example: 5leg.) \
          • " */ ckrcsb += "
          • "Page Not Found" usually means \ that the PDB code above is incorrect. \
          \ "; return (ckrcsb); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /* javagone function makeTryJava() { var tnj = "
          \ For large molecules or smoother rotation and better performance, try \
          FirstGlance with the Java applet!\
          \ How to enable Java\ . \
          \ "; return tnj; } */ //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeTroubleHelp() { var trh = "Troubleshooting \

          "; // if (!usingJava) // trh += makeTryJava(); trh += "Please be patient! \ The first time you use FirstGlance, it might take up to several \ minutes before the molecule appears. This time is required to transfer \ and initialize Jmol, obtain the molecular model, and process it. \ After the first use, loading will be faster. \ \

          \ Please don't reload/refresh until after you see the molecule. \ Reloading prematurely may prevent the molecule from ever appearing! \ To fix this, just close (quit) your browser, and restart it. \ \

          \ FirstGlance can read structure files only in the \ PDB format. FirstGlance cannot yet process CIF files. \ \

          \ If the white rectangle at right turns completely blank \ ("Jmol" disappears \ from the lower right corner), this could mean that the PDB file was not \ available. Sometimes, this means that the Protein Data Bank has not released \ the data file yet. "; trh += makeCheckAtRCSB(); if (usingJava) trh += "\ This mode of FirstGlance requires " + makeNotesLink("Java", "java", "") + " (but see below to try FirstGlance without Java). \ Some installations of Windows or \ linux may have \ no Java. You can install or update free Java by going to \ java.com. Updating Java is always \ a good idea, especially if FirstGlance does not seem to be working \ properly. " + makeNotesLink("More..", "java", ""); // trh += //"

          \ //All \ //popular browsers \ //work well with FirstGlance. "; if (usingJava) trh += "

          To maximize security, \ you should use a Java-enabled browser only \ for Jmol-requiring resources, and use a different browser \ with Java disabled for general web browsing \ (More..). "; // trh += //" Recommended browsers \ //are the current versions (tested April, 2014) of: \ //
            \ //
          • Windows \ //(get/update java from \ //java.com) \ // \ //
              \ //
            • Internet Explorer 8 (for Windows XP) or 11 (for Windows 7) \ //(see Notes)\ // \ //
            • Firefox \ //(see Notes)\ // \ //
            • Chrome \ //(see Notes)\ // \ //
            \ // \ //
          • Mac OS X \ //(Keeping your Apple \ //Software Updates up to date is recommended."; if (usingJava) trh += ' Keep Java up to date by checking at \ java.com.'; // trh += // //") \ //
              \ //
            • Safari\ //(see Notes)\ // \ //
            • Firefox \ //(see Notes)\ // \ //
            • Chrome \ //(see Notes)\ //
          "; if (usingJava) trh += '

          '; trh += 'Web Browser:'; trh += makeBrowserOverviewTable(); // Invisible unless blocked, for those in the know. // trh += "" + pdbURL + ""; if (typeof(pdbURL) != "undefined") trh += '

          The current data file URL is:
             ' + pdbURL; trh += '

          Questions, bug reports, suggestions? Please write to ' + make_contact_address("From FirstGlance Troubleshooting", "."); return trh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeBrowserOverviewTable() { var bot = ""; bot += '

          \ In brief, the 2021 versions of \ Chrome, Edge, Firefox, and Opera work optimally with FirstGlance. \ Safari is also good, but has choppier rotation of spacefilled views ("solid") \ when they are zoomed to large size.'; //If you will be doing a lot of work with very large structures (>50,000 atoms) //it may be worth your while to \ //instruct FirstGlance to use Java. \ /* Jan 2019: Median weight of 4,195 RNA-containing entries: 70,000. If that were all protein, it would be 70K/14 = 5K atoms. Smaller than 140,000 MW (about 10K atoms): 2,582 RNA-containing structures, which are ~61% of all RNA-containing structures. The largest structures that can be accomodated in the PDB file format (which FirstGlance requires) are <100,000 atoms (protein MW <~1.4 million). */ bot += '

          Smoothness of Rotation vs. Browser \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \
          SystemBrowserJSmol (No Java)
          WindowsChrome \ (notes) \ Good
          Edge \ (notes) \ Good
          Firefox \ (notes) \ Good
          Internet Explorer 11\ (notes) \ Unworkably slow & jerky
          Opera \ (notes) \ Good
          Mac OS XChrome \ (notes) \ Good
          Firefox \ (notes) \ Good
          Opera \ (notes) \ Good
          Safari \ (notes) \ OK, but rotation of zoomed solid views is choppy
          '; bot += //'*Firefox 40-43 in OS X has mouse control problems, only when you use Java: \ //It does not zoom with the mouse wheel, or with Shift-drag. \ //You can still zoom by dragging at the right edge, \ //or with the zoom buttons in FirstGlance. \ 'For details and browser test results, see \ JSmol Rotation Speeds. \
          \ FirstGlance in Jmol may not work properly in any browser \ not listed above. \
          Revised April, 2021. \
          \ '; return bot; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeJava4BigHelp() // javarec { // DISABLED FG 3.0 return ""; /* var bigh = ''; var mucht = ''; var aac = parseInt(allAtomCount); var aacc = numberWithCommas(aac); // DISCREPANCIES BETWEEN MW AND ATOM COUNT ARE DUE TO MISSING RESIDUES, COUNTED IN MW. // SEE SPREADSHEET firstglance-loading-times.xlx // 7ahl MW 22,778 atoms but 19%H, 17K non-H atoms, 233K MW // November 2017: // 260KMW 5%; Atoms: 5xp3=18K, 5ykb=17K, 5wj9=15K, 5np7=16K // 320KMW 4%: Atoms: 5o5k=19K, 4u0z=21K // 500KMW 2%: Atoms: 5vyw=31K, 4rjj=36K // 850KMW 1%: Atoms: 5udd=51K, 5lmt=56K // 3j36=60,167 atoms, 2,300KMW (much RNA) // was 20K in FG 2.73 (2018) // 7ahl 23K atoms seems fine in slowest likely browser (FF), so raised to 30K in FG 2.74. if (!usingJava && (aac >= 30000)) // 5vyw = 31K atoms. { // ALL ATOM COUNT var highpct; // 30K to 40K atoms if (aac < 40000) // 4rjj = 36K atoms. { highpct = "4"; } // 40K to 60K atoms else if (aac < 60000) // 1g3i = 45K atoms. 5lmt = 56K. { highpct = "2"; mucht = "much "; } else // >= 60,000 atoms, 3j36=60.2K { highpct = "1"; mucht = "much, much "; } bigh += 'Java will give ' + mucht + 'faster, smoother performance with this data file, \n\ which has ' + aacc + ' atoms, putting it in the largest ' + highpct + '% of entries in the Protein Data Bank. See the Preferences tab above to \n\ try Java.'; // put it in a yellow table bigh = '
          ' + bigh + '
          '; } return bigh; */ } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeIntroHelp() { //"
          Introduction<\/center> \ var introHelp = ""; //introHelp += makeJava4BigHelp(); // disabled FG 3.0 introHelp += "
          \ \ \ introHelp += "
           IntroductionWhat's ?"; //   \ //español
          "; if (missingCount <= 0) // -1 for no header, so no missingCount available introHelp += " \ "; else introHelp += '
          \n\ \n\
          \n\ Empty basket at missing residue(s). \n\
          \n\ '; introHelp += "FirstGlance in Jmol \ is an easy to use, \ free \ tool for macromolecular visualization. \ The initial display is \ Cartoon \ plus \ Ligands+.\
          \ \ "; // NONSTANDARD RESIDUES nonStandardResidueCount = jmolEvaluate("{hetero and (protein, nucleic)}.groupindex.all.count().length"); if (nonStandardResidueCount > 0) { introHelp += "X"; if (DAACount) { introHelp += " or D"; } introHelp += " marks " + makeNotesLink("most non-standard residues", "nsr") + " (" + nonStandardResidueCount + " here). "; } // MISSING RESIDUES: EMPTY BASKETS if (missingCount > 0) { introHelp += 'Regions with the \n\ ' + missingCount + ' residues missing ' if (validPDBId != "") introHelp += ' in ' + validPDBId; introHelp += ' \n\ are marked with empty baskets.'; } // INCOMPLETE SIDECHAINS incompleteSidechainsCount = jmolEvaluate("{~incomplete_sidechains}.count"); if (incompleteSidechainsCount > 0) { introHelp += ' The ' + incompleteSidechainsCount + ' residues'; if (validPDBId != "" && missingCount <= 0) { introHelp += ' in ' + validPDBId; } introHelp += ' with ' + makeNotesLink("incomplete sidechains", "icsc") + ' are marked S- (' + makeNotesLink("Hide S-?", "labels") + ').'; } if (preferenceDetails) { // ALTERNATE LOCATIONS ALTLOC if (altLocCount > 0) { introHelp += ' ' + altLocC1Count + ' atoms in this model have ' + 'alternate locations.'; } } // End if preferenceDetails //if (incompleteSidechainsCount > 0 || altLocCount > 0) if (altLocCount > 0) { introHelp += " " + makeDetailsToggle(); } introHelp += "\n"; // END FIRST PARAGRAPH // SAVE ANIMATIONS /* '
          \ \ \ \ \ Save presentation-ready animations or images of any view.\
          \ '; */ introHelp += "

          \ \ Overview & Design Goals on YouTube.\ \ \
          "; // BEGIN BULLET PARAGRAPHS introHelp += "
            \
          • Rotate the molecule by dragging near it with the mouse. \
          • " + identifySubhelp(); // in makeIntroHelp() introHelp += "
          • Center a region of interest using Center Atom \ (in the Focus Box near the bottom of any of the first 4 tabs). " + noClick + "You can then inspect details by zooming in. \ Regions distant from the centered moiety can be hidden by \ toggling on Slab (in the " + tab1Name_txt + " or " + tab2Name_txt + " tabs). When finished, \ Center Atom offers the option to re-center the entire molecule. \ \ \

            \ \
          • \ Save \ \ Powerpoint-ready images or animations.\ \

            \
          • For a quick tour of what FirstGlance can do, \ visit the Snapshot Gallery \ and see \ What Is FirstGlance?. \ \
          • All About FirstGlance in Jmol \ has instructions on setting up links to display molecules, \ troubleshooting, copyright/license, acknowledgements, version history, and \ extensive technical information. \ \
          • The most reliable address for FirstGlance in Jmol is \ firstglance.jmol.org. \
          \ As you work, this help panel will change frequently, but there will \ always be a link here at the bottom to return to this Introduction. \ "; // if (!usingJava) // introHelp += makeTryJava(); return introHelp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeMoreViewsHelp() { var ack = ucck = bbck = aack = aadots = aass = ""; if (axesOn) ack = "checked "; if (unitcellOn) ucck = "checked "; if (boundboxOn) bbck = "checked "; if (showAnomalous) aack = " checked"; if (anomalousDots) aadots = " checked"; else aass = " checked"; var moreHelp = "
          Advanced/Technical Controls<\/b><\/center> \ \
            \
          • " + makeNonStandardCheckbox() + "
          • \ Show " + makeNotesLink("Anomalous atoms", "anomalous") + " as
            \ dots, or
            \ dots with spacefilled atoms. \
            " + "
            \ \
          • \
          • Show Atomic Coordinate Axes. \
          • " + //
          • Show Crystallographic Unit Cell. \ //  (Shows nothing for NMR models.) \ //
          • "
          • Show Bound Box. \
          • \ \
            \ \
          • Jmol has an extensive menu \ (right click within Jmol, or \ click on the "" + theFrank + "" frank to the lower right of the molecule). \ It is not well organized and lacks help. \ FirstGlance does not know \ when Jmol's menu has been used, so changes it makes to the view will be lost \ upon any subsequent use of a FirstGlance control. \ \
          • Jmol has a \ powerful \ command language. To type commands and send them to Jmol, \ click Jmol (or JSmol, to lower right of molecule), \ then on the menu that pops up, select Console, Open. \ FirstGlance does not know \ when commands have been used, so changes they make \ to the view will be lost \ upon any subsequent use of a FirstGlance control. \ \
          "; moreHelp += "Click About \ FirstGlance in Jmol<\/a> \ for full documentation, including troubleshooting, \ linking to or installing, license and copyright, \ contributors, and versions. \ \ \ "; //
        • \ // showSptInWindow(moreHelp.replace(/\/g, ">")); return moreHelp; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHelpFooter() { // alert(helpPanel); var hfoo = "

          \
          "; if (!match(helpPanel, "capture") && !match(helpPanel, "cifonly")) hfoo += "
          \ Show or animate this view in a presentation.\ \
          "; if (missingCount > 0) // no missing if no PDB file! hfoo += "To hide empty baskets, click Missing Residues under \ the first tab (Molecule Information).

          "; if (!match(helpPanel, "cifonly")) hfoo += "Return to \ Introduction \ (atom identification, centering, etc.). \ To reset to the default view, click Reset \ (near the bottom of any upper left panel). \ "; return hfoo; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var nohelp = "To Be Written ..."; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var licenseHelp = "Copyright & License \

          \ \ FirstGlance in Jmol is copyright © 2005-2021 by \ Eric \ Martz. FirstGlance in Jmol is freely available, \ including its source code*. \ It may be used and redistributed for non-commercial purposes. \ Links to FirstGlance in Jmol \ from the websites of for-profit scientific journals are permitted and \ encouraged (see adoptions) \ provided that no payment is required for the use of FirstGlance in Jmol. \ Such links must be accessible without a subscription to the journal. \ For use of FirstGlance in Jmol in a commercial environment, such as within \ a pharmaceutical enterprise, please contact the copyright holder. \ All modified derivitives or copies must obey the same license. \ \

          \ \ \ Creative Commons License Version " + fgijVersion + " of FirstGlance in Jmol by \ Eric Martz is licensed under a \
          Creative \ Commons Attribution-Noncommercial-Share Alike 3.0 United States License. \ \ \
          \ (Versions 1.42 and earlier used a less restrictive license.) \
          \
          \ *Source Code is \ available. \ \

          \ Acknowledgements and Credits \

          \ FirstGlance in Jmol would not be possible without the \ free, open-source java applet \ Jmol, \ and the JSmol application. Thanks \ are due many people who have selflessly contributed their time \ and expertise to creating Jmol. Special thanks are due Miguel \ Howard for the quality and quantity of his programming contributions \ to the Jmol project, and to \ Robert Hanson for his extensive and amazing contributions \ to Jmol, and for creating and maintaining \ the indispensible Jmol reference manual. \ Jmol \ is licensed under the \ GNU \ "Library" or Lesser General Public License. \ Briefly, this means that Jmol is free, that its source code is openly \ available, and that all derivatives of Jmol itself (the "library") \ must also be free and have open source code. However, proprietary \ commercial products may utilize Jmol, so long as Jmol itself is unmodified, \ and is redistributed in accord with the terms of the license. \ \

          \ Thanks to Robert Hanson also for introducing tabs into the control panel \ of Protein Explorer in Jmol, which inspired me to do the same in \ FirstGlance in Jmol. \

          \ Thanks to \ Angel Herráez \ for much clever advice and some coding suggestions, and earlier, \ for his \ resizable Jmol \ code, which enabled FirstGlance to operate in Internet Explorer 9. \ \

          \ Thanks to Evelyn Jabri for her encouragement while at Nature Publishing \ Group. \ Special thanks to Frieda Reichsman \ (moleculesinmotion.com) \ for a large number of insightful suggestions that improved FirstGlance \ substantially. \

          \ \ Thanks to Jaime Prilusky and \ Joel Sussman \ for providing a fast, reliable server home for FirstGlance at \ Proteopedia.Org. \ \

          \ Thanks to Jeff Bizzaro and \ bioinformatics.org for providing a home for this project. \ For a previous home of FirstGlance, \ thanks to Phil Bourne \ and the San \ Diego Supercomputer Center for providing a very fast \ server, and to Andy Sanderson for configuring it. \ \

          \ Thanks to Jaime Prilusky for contributing the " + makeNotesLink("CGI program", "uploads", "") + " and server that accepts an uploaded \ PDB file, and displays it in FirstGlance, and the PERL program that makes it easy for users to \ create presentation-ready animations. \ Also for determining most of \ the carbohydrates present in the Protein Data Bank. Also for developing \ and maintaining the OCA browser, which provided previous mirror sites for \ FirstGlance in Jmol. \ \

          \ Thanks to Guoli Wang and Roland L. Dunbrack for their \ S2C \ server, previously used in FirstGlance. \ \

          \ Thanks, for good ideas, inspiration, crystallographic advice, or technical help, \ to Miguel Howard, Bob Hanson, \ Cris Necocea, Jaime Prilusky, \ Frieda Reichsman, Tim Driscoll, Rolf Huehne, Michael Maroney, Andreas Bohne, Thomas \ Luetteke, Joel Sussman, Evelyn Jabri, Boyana Konforti, Karsten Theis, \ Keiichi Namba, Fadel Samatey, and Wayne Decatur. \ Thanks to Miguel Howard and Bob Hanson for enhancements \ to Jmol requested for the FirstGlance project. \ \

          \ Initial development of FirstGlance in Jmol \ (through April, 2006, version 0.99) \ was supported by a grant from the \ Division of Undergraduate Education of the \ \ US National Science Foundation \ (Award 9980909). Initial and subsequent development has been supported \ by the use of facilities at the \ University of Massachusetts, Amherst. \ \

          \ See also \ Design and History of FirstGlance. \ "; //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function checkAll(result) { document.contactsForm.contactsWater.checked = result; document.contactsForm.waterBridges.checked = result; document.contactsForm.contactsHBonds.checked = result; document.contactsForm.contactsHphob.checked = result; document.contactsForm.contactsSB.checked = result; document.contactsForm.contactsCatPi.checked = result; document.contactsForm.contactsMeMi.checked = result; // if (!contactingSF) // document.contactsForm.contactsSticks.checked = result; // document.contactsForm.contactsHydrogens.checked = result; changeContactsView(); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCatPiSBHelp() { var hiddenTot = getHiddenTot(); cancelCenteringHidingPreContacts("caller makeCatPiSBHelp() stayBusy"); // in makeCatPiSBHelp() var ckcp, cksb, ckcoe, ckcoc, ckbb; ckcp = cksb = ckcoe = ckcoc = ckbb = ""; var cpsb; if (showCatPi) { ckcp = " checked "; cpsb = "Cation-Pi Interactions" } else { cksb = " checked "; cpsb = "Salt Bridges" } if (colorCatPiSBChain) ckcoc = " checked"; else ckcoe = " checked"; if (showCatPiSBBackbones) ckbb = " checked"; var hh = "
          "; // This returns 'number' 0 when altloc and fewer details for 9ins. //var hiddenNotHydrogen = jmolAtomCount("~hidden_jdef and not hydrogen"); //alert(typeof(hiddenNotHydrogen) + " " + hiddenNotHydrogen); // hiddenTot does not include isolated. hiddenTot = getHiddenTot(); // does not refresh ~hidden_jdef // if ((hiddenTot > 0 || isolatedDescription != "") // if (hiddenNotHydrogen) if ((hiddenTot > 0 && preferenceDetails) || (hiddenTot > 1 && !preferenceDetails) || isolatedDescription != "") { hh += '
          \n\ CAUTION: Some portions of this model are invisible due to Hide or \n\ Isolate operations'; /* if (altLocCount && !preferenceDetails) { hh += ', or fewer details mode which quietly hides the ' + altLocCount + ' atoms with alternate locations in this model'; } */ hh += '. Interactions involving the invisible portions \n\ are NOT shown.\n\
          '; } hh += "
          Salt Bridges / Cation-Pi Interactions
          \
          \ \ Show Protein " + makeNotesLink("Salt Bridges (4.0 Å)", "saltbr", "") + "
          \ Show Protein " + makeNotesLink("Cation-Pi Interactions (6.0 Å)", "catpi", "*"); if (useConsurfColors) { hh += "
          Protein " + cpsb + " are colored by ConSurf (see checkbox above)" + '
          ' + // hidden radio buttons "" + "" + ""; } else // not using consurf colors { hh += "
          Color Protein " + cpsb + "
            by Element "; if (ckcoe.length) hh += '' + 'O ' + 'N ' + 'C ' + ''; hh += "
            by Chain \ "; if (telAvivMode) hh += "
              by " + serverName + " (use checkbox above)."; } // end of NOT using consurf colors hh += "
          Show Backbones \ "; // SALT BRIDGED ATOM COUNTS - see showCatPiSBAtomCounts() // if (!showCatPi) hh += '
          ' + '
          (Report will appear here when ready.)
          ' + '
          '; hh += showHalosCatPiSB(showCatPi) if (showCatPi) hh += // margin-top not working in span "
          \ * Caution:  \ Some cation-pi interactions shown may not be \ energetically significant, while some energetically signficant \ interactions may fail to be shown. Consult \ CaPTURE \ for a definitive list. " + makeNotesLink("More..", "catpi", ".") + '
          '; if (!colorCatPiSBChain) { hh += "
          \ Cations (+) \ are \ nitrogen atoms \ in Arg or Lys sidechains, or N-termini. \
          "; if (!showCatPi) hh += "Anions (-) \ are \ oxygen atoms \ in Asp or Glu sidechains, or C-termini."; else hh += "Anions are the pi-orbital faces of \ six-carbon \ aromatic rings in Phe, Tyr or Trp. \ "; } hh += "
          For more detailed views of chain termini, use Ends.. or \n\ Contacts & Non-Covalent Interactions.. in the Tools tab.
          "; hh += "
          \ Only protein-protein interactions are shown"; if (hiddenTot > 0 || isolatedDescription != "") hh += " (excluding any hidden protein)"; hh += ". FirstGlance \ does not show interactions involving ligands or nucleic acids."; var misinc = false; if (!showCatPi && (incompleteChargedSidechainsProteinCount > 0 || missingNeg > 0 || missingPos > 0)) { hh += ''; return rowtxt; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeBadPDBFileHelp() { var bfh = 'We are sorry, but '; if (usePDBId) bfh += validPDBId; else bfh += pdbToLoad; if (usePDBId) { bfh += ' is not available\n\ from the Protein Data Bank (in either \n\ PDB or mmCIF format).\n\ If the PDB identification code above is correct, then \n\ the atomic coordinates may not have been released \n\ to the public yet. Sometimes there is a delay of a week or more between journal publication \n\ and release of the coordinates. '; bfh += makeCheckAtRCSB(); } else { bfh += ' cannot be interpreted.\n\ There may be an error in the filename or URL,\n\ or the file may not be in the\n\ PDB format (required by FirstGlance).'; } bfh += ' FirstGlance in Jmol is unable to display the molecule\n\ as specified. (You may close this browser window/tab.)\n\

          \n\ See also:\n\ Troubleshooting.\n\ '; return (bfh); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeCIFOnlyHelp() { var bfh = 'We apologize, but '; if (usePDBId) bfh += validPDBId; else bfh += pdbToLoad; bfh += ''; bfh += ' cannot be processed by FirstGlance in Jmol \n\ because it is available only in the \n\ mmCIF format (not in \n\ PDB format). \n\ Approximately 1% of the entries in the Protein Data Bank \n\ are too large for the PDB format. FirstGlance is not able \n\ to process mmCIF format. In future it may be adapted for mmCIF. \n\

          \n\ These very large entries (>99,999 atoms or >62 chains) are usually \n\ available broken into two or more PDB-formatted subsets, each \n\ of which can be processed by FirstGlance. At the Structure Summary for ' + validPDBId + ', open the Download Files menu and look for \n\ PDB format-like files. After downloading, these files \n\ can be uploaded to FirstGlance at its \n\ Entry Page. \n\ '; bfh += '

          FirstGlance in Jmol is unable to display the molecule\n\ as specified. (You may close this browser window/tab.)'; /*

          \n\ See also:\n\ Troubleshooting.\n\
          '; */ return (bfh); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeHideIsolatedHelp() { var hih = "

          \ You may use Hide \ (Focus Box) \ to hide portions of the isolated entity."; return hih; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeLabelSeqNumResNamHelp() // makeseqnum { var nnh = ""; if (labelSequenceNumbers && (labelResidueNames1 || labelResidueNames3)) nnh += "Sequence Numbers & Residue Names"; else if (labelSequenceNumbers) nnh += "Sequence Numbers"; else if (labelResidueNames1 || labelResidueNames3) nnh += "Residue Names"; var cklsiz1 = labelSize==1?"checked":""; var cklsiz2 = labelSize==2?"checked":""; var cklsiz3 = labelSize==3?"checked":""; var cklbw = labelsWhite?"checked":""; nnh += ':
          ' + "small \   \ Medium \   \ LARGE \   \ " + capitalize(getEchoColor()); if (labelResidueNames1 || labelResidueNames3) nnh += "
          Abbreviations: " + makeNotesLink("amino acids", "aanames", ",") + "   " + makeNotesLink("nucleotides", "ident", "."); nnh += "
          "; nnh += '
          To simplify or un-clutter the view:\n\
            \n\
          • Use Find..\n\ (upper panel, near the bottom of any tab except Preferences)\n\ to locate a range of residues, perhaps in a specified chain (e.g.\n\ chain=b and 12-33), then Isolate.. atoms with halos.\n\
          • Use Hide.. or Isolate..\n\ (upper panel, near the bottom of any tab except Preferences).\n\
          • In the Views Tab, use Thin Backbone.\n\
          • Use Center Atom..\n\ (upper panel, near the bottom of any tab except Preferences),\n\ then turn on Slab (button in the Views or Tools tabs).\n\
          \n\ Labels are attached to alpha carbons of amino acids, and ribose C5\' atoms\n\ in nucleotides (because the 5\' hydroxy terminal nucleotide lacks a phosphorus).\n\

          \n\ Reminder:\n\
          • \n\ Clicking on any residue reports its name and sequence number beneath the molecule.\n\
          • \n\ Touching any residue pops up a tooltip with the name and sequence number.\n\
          \n\ \n\ '; return nnh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeColorKeys(keyother) { var cck = ""; if (useConsurfColors) { cck += '
          ' + cskey + '
          '; if (chainCount > Ctot) // Ctot is count of seq-id consurf chains. cck += '

          Other chains:
          ' + keyother; } else cck += keyother; return cck; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          \n\ CAUTION: This model has missing charged amino acids and/or incomplete sidechains \n\ on charged amino acids. Salt bridges involving the missing atoms are NOT shown. '; misinc = true; } if (showCatPi && (incompleteCatPiSidechainsProteinCount > 0 || missingCount > 0)) { hh += '
          \n\ CAUTION: This model has missing amino acids and/or incomplete sidechains \n\ on some Arg, Lys, Phe, Tyr or Trp. \n\ Cation-Pi interactions involving the missing atoms are NOT shown. '; misinc = true; } if (misinc) hh += 'Locations of missing amino acids are marked with empty baskets (unless you unchecked the \n\ default), and residues with incomplete sidechains are labeled S- (unless you \n\ unchecked Labels: Show) and are shown in light colors in the Charge view. \n\
          '; else hh += '
          '; hh += '
          Balls are atoms likely to be engaged in ' + cpsb + '. Sticks are shown only for context.
          '; if (!showCatPi) hh += '
          Salt Bridge Examples \n\
            \n\
          • \n\ 4dnw \n\ is a homodimer with an unusual density of salt \n\ bridges and cation-pi interactions in the protein-protein interface. UV irradiation \n\ dissociates the dimer into monomers. Trp233 and Trp285 are believed to be the \n\ chromophore. \n\
          • 1zms \n\ has a long protruding alpha helix with cations on one side and anions on the other. \n\ In the trimeric \n\ biological unit, \n\ these interlock via salt bridges. \n\
          • Glutamate dehydrogenase from a thermophile (Pyrococcus furiosus), \n\ 1gtm, \n\ has 1.7-fold more atoms engaged in salt bridges than does the same enzyme from a mesophile \n\ (Clostridium symbiosum), \n\ 1hrd. \n\ Salt bridges are believed to be important in stabilizing proteins of thermophiles. \n\ (More...) \n\

            \n\ \n\ Salt Briges at Chain Termini \n\ \n\
          • The C-terminus is salt-bridged to the sidechains of lysine or arginine in \n\ 1zms, \n\ 1hho, \n\ within chain, and \n\ 6ef8, \n\ 2vaa (chain P), \n\ between chains. \n\ \n\
          • The N-terminus is salt-bridged to the sidechains of aspartic or glutamic acid in \n\ 2bbn (chain A), \n\ and \n\ 9ins (chain A), \n\ both within chain.\n \ \n\
          • The terminal charges of each chain in the homodimeric HIV protease \n\ 1hxw \n\ are salt-bridged to each other (within each chain). \n\ \n\
          • The N-terminal NH3+ of Asp1 in the light chains of immunoglobulin G2a \n\ 1igt \n\ forms an internal salt bridge with the sidechain of the same N-terminal residue. \n\ In contrast, here, the N-terminal Glu1\'s of the heavy chains \n\ do not form internal salt bridges, \n\ at least as modeled (with high temperature factors). \n\ However, Glu1 does form an internal salt bridge in heavy chain H in \n\ 4dgv. \n\ The C-terminus of chain B in \n\ 2nm1, \n\ Lys60, forms an internal salt bridge with the sidechain of the same residue. \n\
          • \n\ 9ins \n\ has only a few salt bridges, but they involve both N and C termini, an end-to-end bridge, \n\ within and between-chain bridges, and alternate locations for salt-bridged residues. \n\
          • 1mkx \n\ contains salt-bridged residues with sequence number \n\ insertion codes. \n\

            \n\ \n\ C-termini missing one oxygen \n\
          • It is fairly common for the authors to omit one oxygen on the C-terminus of a protein chain \n\ structured by crystallography. \n\ In such cases, FirstGlance reports a salt bridge by showing the carboxy carbon \n\ as a ball less than 5.2 Å from the cationic nitrogen \n\ (more about this). \n\ Examples: \n\ 3sok, \n\ 5j0z. \n\ After displaying salt bridges \n\ (Tools tab), in the lower left (help) panel, just below \n\ List All, \n\ click Show halos on All Protein Chain Termini to easily \n\ locate the C-terminal salt bridges. \n\

            \n\ \n\ Salt bridges to amino acid and dipeptide ligands \n\ \n\
          • 4cpa \n\ has two monomer glycines bound as ligands. The C-termini of chains I and J form salt \n\ bridges with the ligand glycine amino groups. \n\ \n\
          • 4ffL \n\ has a monomer lysine bound as a ligand. Both the backbone amino and the sidechain amino \n\ of this lysine form salt bridges with two different glutamic acids, as well as phosphates. \n\ To see the phosphates, click LYS under Ligands+ and Non-Standard Residues \n\ (Molecule Information Tab) and then use Contacts & Non-Covalent Bonds (Tools tab) \n\ targeting Atoms With Halos. \n\ \n\
          • 4d2c \n\ has an Ala-Phe \n\ dipeptide ligand, both ends of which form salt bridges. \n\ \n\

            \n\ D-amino acids \n\
          • 5i1n has dozens of salt bridges \n\ between D-amino acids (as well as L-amino acids), and one between a D- and L-amino acid. \n\
          '; else hh += // catpi examples '
          Cation-Pi Examples: \n\
            \n\ \n\
          • 4mdh \n\ has two inter-chain (between chain) cation-pi interactions \n\ (deemed energetically significant by CaPTURE). \n\ Use the Color by Chain option above to make \n\ these easy to see. \n\ \n\
          • In \n\ 3if7, \n\ FirstGlance displays two putative cation-pi interactions. \n\ CaPTURE \n\ deems Tyr128:Arg86 to be \n\ energetically significant, but not Phe65:Lys13. \n\ \n\
          • In \n\ 4enl, \n\ FirstGlance shows Trp303:Lys336 and Trp272:Lys254,Lys269, all deemed energetically significant \n\ by CaPTURE. CaPTURE also deems Trp56:Lys55 to be energetically significant but FirstGlance \n\ fails to show this pair. FirstGlance shows Phe262:Lys263 and Tyr289:Arg288 which \n\ CaPTURE deems not energetically significant. \n\

            \n\ Amino-terminal NH3+ \n\ \n\
          • 6mt3 \n\ appears to have a cation-pi interaction between \n\ the Phe1 amino terminal N+ of peptide chain B and Trp167 in chain A. Note that also the \n\ opposite face of Trp167:A interacts with Arg170:A (deemed energetically significant by \n\ \n\ CaPTURE). Do not be confused by the interaction of the aromatic ring of Phe1:B with \n\ Arg62:A (also deemed energetically significant). Note that the CaPTURE server does not \n\ report the energetics of cation-pi interactions involving amino terminal cations. \n\ \n\
          • 7ahl \n\ \n\ appears to have a cation-pi interaction between Ala1 and Tyr102 in adjacent chains. \n\ \n\

            \n\ D-amino acids \n\ \n\
          • 5hhc \n\ has cation-pi interactions between D-amino acids (and between L-amino acids), and also \n\ a pair of between-chain interactions between Lys41 and Dpn38 (D-phenylalanine) \n\ that look energetically significant. \n\ CaPTURE does not report on D-amino acids. \n\ \n\
          • 5i1n \n\ has a between-chain cation-pi interaction between Phe35:D and Dar14:H (D-arginine). \n\ as well as many between D-amino acids (and between L-amino acids). \n\ CaPTURE does not report on D-amino acids. \n\
          \n'; hh += ""; return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function showSBAtomCounts() // atom counts - called in consurf/msgcall.js when catpisb_displayed { if (showCatPi) { showCatPiResidueCounts(); return; } var vis = ""; if (hiddenTot > 0 || isolatedDescription != "") vis = " visible "; var sbn = jmolAtomCount("~targ_sb"); var sbo = jmolAtomCount("~cont_sb"); var sbnaa = jmolAtomCount("*.ca and within(group, ~targ_sb)"); var sboaa = jmolAtomCount("*.ca and within(group, ~cont_sb)"); var sbac = "
          " + "Salt-bridge counts for " + vis + " amino acids and (atoms):" + "
          NHx+: " + sbnaa + " (" + sbn + ");   " + "O−: " + sboaa + " (" + sbo + ");   " + "Total: " + (sbnaa + sboaa) + " (" + (sbn + sbo) + ")"; //alert(jmolAtomCount("*.ca and !~hidden_jdef")); // FOR SOME BIZARRE REASON "VISIBLE" SEEMS TO BE IGNORED HERE var vaa = jmolAtomCount("*.ca and protein and !~hidden_jdef"); // *.ca includes Ca++! var sbapaa = 100 * ((sbn + sbo) / vaa); var sbrpaa = 100 * ((sbnaa + sboaa) / vaa); sbac += "
          Salt-bridged " + vis + " amino acids: " + sbrpaa.toPrecision(3) + "% of " + vaa + (vis.length?" ":".") + vis + (vis.length?".":""); // List All. Margin does not work here. ? if (sbn) { sbac += '
          '; } document.getElementById("sbatoms").innerHTML = sbac; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function showCatPiResidueCounts() { var vis = ""; if (hiddenTot > 0 || isolatedDescription != "") vis = " visible "; var cpcaa = jmolAtomCount("visible and *.ca and within(group, ~catpi_cations)"); var cpraa = jmolAtomCount("visible and *.ca and within(group, ~catpi_rings)"); var sbac = "
          " + cpcaa + " cationic " + vis + " amino acids and " + cpraa + "" + vis + " aromatic amino acids are shown engaged in " + "putative cation-pi interactions."; if (allAtomNonHM1C1Count > catPiLimitNewAlgorithm && !detectCatPiPerResidueOnce) { sbac += '
          Re-detect ' + 'with slower, more accurate method ' + '(?).'; } sbac += '
          CaPTURE ' + "provides an authoritative list of energetically significant cation-pi interactions."; var ntcount = jmolAtomCount("visible and ~catpi_nterm"); if (ntcount) { if (ntcount > 1) sbac += "
          " + ntcount + " " + vis + "amino termini are shown in putative cation-pi interactions "; else sbac += "
          " + ntcount + " " + vis + "amino terminus is shown in a putative cation-pi interaction "; sbac += "(not reported by CaPTURE)."; } sbac += "
          "; document.getElementById("sbatoms").innerHTML = sbac; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function reDetectCatPiInfo() { if (confirm( "To save time, cation-pi interactions were detected\n\ with a fast but somewhat inaccurate method, used\n\ only for large models. OK for more information,\n\ or Cancel to skip more information.")) window.open("notes.htm#catpi"); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function showHalosCatPiSB(showCatPi) { var sho = ""; sho += "Show halos on:
          "; // Can't do this b/c ~targ_sb is not yet defined! Cf. gray box that waits till ready. // if (!showCatPi && jmolAtomCount("~targ_sb")) if (!showCatPi) { sho += '  Salt-bridged: ' + 'Cations' + ' or ' + 'Anions' + ' or ' + 'Amino Acids
          '; } else // catPi { sho += '  Cation-Pi: ' + 'Cations' + ' or ' + 'N-Termini' + ' or ' + 'Aromatic Rings' + ' or ' + 'Amino Acids
          '; } sho += '  All: ' + 'Protein Chain Termini' + '    (Remove All Halos)'; sho += "
          "; return sho; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function findNoHelpCatPiSB(tofind) { if (match(tofind, "allchainends") && !showCatPiSBBackbones) alert('Please check "Show Backbones"\n' + 'to make the ends of chains visible.'); if (tofind.length) findNoHelp(tofind); else clearFindNoHelp(); showHelp("makeCatPiSBHelp()"); // refresh CatPiSB help to show "Halos around:" jmolScript("\nmessage catpisb_displayed;\n"); } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSSBondsHelp() { var hiddenTot = getHiddenTot(); // (hiddenTot == 1 && hideHydrogen) means only hydrogen is hidden. if ( ( ((hiddenTot > 0 && preferenceDetails) || (hiddenTot > 1 && !preferenceDetails)) && !(hiddenTot == 1 && hideHydrogen) ) || (isolatedDescription != "") ) alert("CAUTION: Portions of this model are not visible\n" + "due to Hide or Isolate operations.\n" + "Disulfide bonds involving invisible portions\n" + "will NOT be shown."); cancelCenteringHidingPreContacts("ssbonds stayBusy"); // in makeSSBondsHelp() var ckbb, cklabels, ckconbb, ckcysnot, ckcolchain; ckbb = cklabels = ckconbb = ckhidecysnot = ckcolchain = ""; if (showSSBondsBackbones) { ckbb = " checked "; } if (showSSBondsLabels) { cklabels = " checked "; } if (connectSSBondsBackbones) { ckconbb = " checked "; } if (hideCysNotSSBonded) { ckhidecysnot = " checked "; } if (colorSSBondsChain) { ckcolchain = " checked "; } var hh = "
          "; hh += "
          Disulfide Bonds, Sulfur, Selenium
          "; hh += makeSulfursReport(); if (consurfMode && useConsurfColors) { hh += '
          Chain ' + consurf_chain + ':   (See ConSurf Colors checkbox above.)' + '
          '; } hh += " Label Cysteines (Sequence Number:Chain) " + "
          Show Backbones " + "
          Connect Backbones with Disulfides " + "
          Hide Cysteines Not Disulfide Bonded "; if (!useConsurfColors) hh += "
          Color Disulfide Bonds By Chain "; else hh += ""; // needed for script generation if (telAvivMode && !useConsurfColors) hh += "
              or by " + serverName + " (use checkbox above) "; //
          \ // \ //Show Protein " // + makeNotesLink("Salt Bridges", "saltbr", "") + //"
          Color Protein " + cpsb + //"
            by Element \ //\ //
            by Chain \ //"; // hh += //"
          Show Backbones \ //"; // if (!colorCatPiSBChain) // hh += //"

          \ //Cations (+) \ hh += "

          "; if (!useConsurfColors) hh += " "; // if (hiddenTot > 0 || isolatedDescription != "") if ((hiddenTot > 0 && preferenceDetails) || (hiddenTot > 1 && !preferenceDetails) || isolatedDescription != "") hh += "Disulfide bonds in visible portions of the model (excluding portions \ not visible due to Hide or Isolate operations) "; else hh += "All disulfide bonds "; hh += " are shown as thick rods connecting "; if (connectSSBondsBackbones) hh += " protein backbone traces."; else hh += " sulfurs in cystines."; hh += " Cysteines (not participating in disulfide bonds) are "; if (hideCysNotSSBonded) hh += "not shown."; else { hh += "shown as "; if (connectSSBondsBackbones) { hh += "spacefilled alpha carbons."; } else { hh += "sticks."; } } /* hh += "

          An example containing disulfide bonds (cystines), \ and also cysteines not disulfide bonded, and also methionines is \ 3kwb. \ An example containing both interchain and intrachain disulfides is \ 2mcg. \ An example containing cysteines and no disulfide bonds is \ 3h8e. \ An example containing no cys residues is \ 5cev. \ One containing non-protein sulfur is \ 4gp0. \ */ // non-breaking hyphen ‑ // PDB Code, S, S-S, Se, Sec*, Met, Mse* if (cseCount || mseCount) hh += '

          \ To show non-standard residues, including selenocysteine and selenomethionine, \ as balls and sticks: Use Advanced/Technical in the Tools tab.'; hh += "

          \ Note 1: To locate the alpha carbons of methionines, \ use the Find.. tool and enter met.ca. \ For the sulfurs, enter sulfur and met. \ To locate non-protein sulfurs, enter sulfur and not protein. \ "; hh += "

          Examples: \ \n\ \n\ \ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \ \n\ \n\ \n\ \
          PDB CodeSS‑SSeSec*MetMse*
          \n\ 3kwb \n\ Some Cys not in S‑S60080
          \n\ 9ins \n\ All in S‑S. Interchain and intrachain.30000
          \n\ 5kx0 \n\ Cys to Dcy, within chain.10000
          \n\ 4gls \n\ Dcy to Dcy, within and between chains.1600100
          \n\ 3h8e \n\ 14 Cys000180
          \n\ 5cev \n\ 0000660
          \n\ 4hik \n\ 4 Cys not in S-S03003
          \n\ 1k28 \n\ 2 Cys01502115
          \n\ 2bc7 \n\ 2 Cys12 as Se‑Se200
          \n\ 4gp0 \n\ 22 Cys + 7 non-protein00050
          \n\ 3ze7 \n\ 17 Cys + 13 non-protein + 1 OCS*011170
          \n\ * Sec = selenocysteine (SEC in PDB files); \n\ OCS = cysteinesulfonic acid; \n\ MSE = selenomethionine; \n\ "; // hh += makeNotesLink(" More..", "ssbonds", "."); hh += "
          "; return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeSulfursReport(hiddenTot) { // getSulfurCounts(); now done in moltab.js var see_lnsr = "See Ligands and Non-Standard Residues in the " + "Molecule Information Tab."; var dsr = ""; if (hiddenTot > 0 || isolatedDescription != "") { if (modelCount > 1) dsr += "These counts are for all of model 1, including portions not visible:"; else dsr += "These counts are for the entire model, including portions not visible:"; } else { if (modelCount > 1) dsr += "In model 1, there are:"; else dsr += 'There are:'; } dsr += "
          • " + sulfurCount + ' sulfur atoms,'; var w = (sulfurCount == proteinSulfurCount)? "all": proteinSulfurCount; dsr += " " + w + ' of which are in protein'; if (nonProteinSulfurCount > 0) dsr += " (" + nonProteinSulfurCount + " not in protein: " + see_lnsr + ")"; dsr += ".
          • "; dsr += "
          • " + (cysCount + dcyCount) + ' cysteines'; if (dcyCount) dsr += ' (' + dcyCount + ' of which are ' + 'D-cysteine, DCY)'; dsr += ', '; if (cysCount + dcyCount) { if (disulfideCount == 0) dsr += "but 0 disulfide bonds.
          • "; else { if ((cysCount + dcyCount) == (2 * disulfideCount)) w = "all"; else w = (2 * disulfideCount); dsr += " " + w + ' of which are in'; dsr += "
            " + disulfideCount + " disulfide bonds."; } } else dsr += "so 0 disulfide bonds." if (nonStdProteinSulfurCount > 0) dsr += "
          • " + nonStdProteinSulfurCount + " sulfur atoms are in non-standard residues in protein. (" + see_lnsr + ")
          • "; if (seleniumCount == 0) dsr += "
          • No selenium.
          • "; else { dsr += "
          • " + seleniumCount + " selenium(s), "; if (seleniumCount == proteinSeleniumCount) dsr += "all in protein.
          • "; else dsr += proteinSeleniumCount + " of which are in protein."; } if (cseCount == 0) dsr += "
          • No " + cseLink + "selenocysteines.
          • "; else dsr += "
          • " + cseCount + " " + cseLink + "selenocysteine(s).
          • "; dsr += "
          • " + metCount + " methionines"; if (mseCount == 0) dsr += " (no " + mseLink + "selenomethionine)"; else dsr += " plus " + mseCount + " " + mseLink + "selenomethionine(s)"; if (metCount > 0 && mseCount > 0) dsr += " (" + (metCount + mseCount) + " total)"; if (metCount > 0 || mseCount > 0) dsr += ". To locate them, see Note 1 below.
          • "; else dsr += "."; dsr += "
          "; return dsr; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - var fixedTemperatureColorScheme = '
          \ \ \ \ \ \ \ \ \ \
          02545505575≥100
          '; var relativeTemperatureColorScheme = '
          \ \ \ \ \ \ \ \ \ \
          min temp     max temp
          '; // for searching: makeLocalUncertaintyHelp makeTemperatureHelp function makeUncertaintyHelp(forceAbs) { cancelCenteringHidingPreContacts("uncertainty stayBusy"); // in makeUncertaintyHelp() if (forceAbs) uncertaintyRelative = false; var ckrel; ckrel = "" if (uncertaintyRelative) { ckrel = " checked "; } var hh = "
          "; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // HEADLESS if (pdbNoHeader && !pdbIsSwissModel && !pdbIsMakeMultimer && !pdbIsOPM) { hh += '
          ' + 'The color scheme and information below DO NOT APPLY unless ' + 'this model was determined by X-ray crystallography. ' + 'Because this model lacks a ' + 'header section, FirstGlance cannot tell. ' + '

          '; } hh += "Local Uncertainty
          "; // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // CRYO-EM PREAMBLE if (match(expMethod, "electron microscopy")) { hh += '
          ' + 'This model was determined by ' + 'Electron Microscopy. A ' + '2017 analysis ' + 'concluded that "the treatment of the atomic displacement (B) factors was ' + 'meaningless in almost all analyzed cryo-EM models". ' + '
          '; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // NO TEMP if (pdbIsSwissModel) { hh += '
          This view is not applicable to homology models. \n\ Please see \n\ Homology Models. \n\ '; showBusyOff("local uncertainty with pdbIsSwissModel"); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // NMR else if (match(expMethod, "nmr")) { hh += '
          This model was determined by NMR (see the ' + tab0Name_txt + ' tab). In NMR results, local uncertainty is reflected in the \n\ disagreement between models (see View All Models under the ' + tab0Name_txt + ' tab). \n\ See also \n\ Meaning of the Variation Between Models \n\ and \n\ Quality Assessment: NMR Models. \n\

          \n\ NMR results do not offer a per-atom uncertainty value comparable \n\ to the \n\ temperature values (B values) \ reported in crystallographic results. \n\ NMR results usually report the \n\ temperature values \n\ as zero for every atom (see the report in the upper right corner above \n\ the molecule). \n\

          \n\ Fixed Temperature Color Scheme: \n' + fixedTemperatureColorScheme + '
          \n\ Examples of crystallographic temperature values at various \n\ resolutions are given in Proteopedia. \n\ '; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - // X-RAY else { hh += "
          Each atom is colored by the "; if (uncertaintyRelative) hh+= "relative "; else hh+= "absolute "; hh += 'uncertainty of its position \n\ (temperature, B factor\ ).'; if (uncertaintyRelative) hh += relativeTemperatureColorScheme; else hh += fixedTemperatureColorScheme; hh += "
          " + spanCheckbox + " Color By Relative Temperature."; if (!uncertaintyRelative) { hh += // this div is only to keep a single blank line after the hidden div. ""; hh += "'; } else hh += '
          '; hh += '
          \n\ The positions of Red atoms \n\ have the highest uncertainty, while those of \n\ blue atoms have the greatest certainty. \n\ You will see more atoms when you color an all-atom depiction, such as \n\ Solid or Vines with More Detail checked. \n\ \

          \n\ \ The absolute color scheme is generally more informative, although \n\ the uncertainty values can be biased by various kinds of errors. \n\ \ Generally, a temperature value of less than 30 Å2 \n\ signifies confidence in the atomic position, while a temperature \n\ value of greater than \n\ 60 Å2 \n\ signifies disorder (low electron density). \n\ Touch an atom to report its temperature. \n\
          \n\ \ The relative color scheme is useful for locating the atoms \n\ with highest uncertainty. Generally, good-resolution models (low values \n\ for resolution) have \n\ low average temperatures, while poor-resolution models (high values \n\ for resolution) have higher average temperatures (see \n\ examples). \n\ \

          \n\ \ Resolution \n\ measures the uncertainty of atomic \n\ positions in the regions of a crystallographic model with the clearest electron density. \n\ (Resolution is given in the ' + tab0Name_txt + ' tab.) \n\ \

          \n\ \ However, the uncertainty of atomic positions varies, depending on the \n\ quality of the \n\ electron density map \n\ in different local regions. \n\ This variation in local uncertainty \n\ is quantitated in a \n\ \n\ B factor (also called temperature \n\ factor) specified for each atom in the model, and used in \n\ the color schemes shown here. \n\ '; } // end of else for not NMR hh += '

          \n\ For further analysis of local model quality, see Atomic Clashes \n\ under the ' + tab3Name_txt + ' tab.'; hh += "
          "; return hh; } //- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - function makeTempRow(thisC, oneChain, boldAv) { var boldon = boldoff = ""; if (boldAv) { boldon = ""; boldoff = "*"; } var rowtxt = '
          ' + thisC + '' + roundPctToTenth(jmolEvaluate("{" + oneChain + "}.temperature.min")) + '' + boldon + roundPctToTenth(jmolEvaluate("{" + oneChain + "}.temperature")) + boldoff + '' + roundPctToTenth(jmolEvaluate("{" + oneChain + "}.temperature.max")) + '