COUNTS: proteinChainCount from getProteinChainCount() in help3.js ASYMMETRIC UNIT: determineChains(): moltab.js chainCount, distinctChainCount include nucleics. proteinChainCount was first needed for bimolecule charge help. See getProteinChainCount(). chainTypeFromName('A') returns Protein, DNA, RNA. chainList for 1d66: D,E,AB (seq id are grouped). auSeqIDChainLists[][] chains in AU grouped by seqid. BIOLOGICAL ASSYS: bmChainsTotal, bmChainList[] (not plural!) lists all chains, one per array element. getBMChainLists() in modeldat.js bmChainList is populated for BU1 even when BU1==AU, and is also populated for AU=1. bmChainsTotal: Ditto. bmSeqIDChainLists[][] chains present in BM grouped by seqid. *** chainIsPresent(chain) util.js returns T/F by scanning bmChainList. RATIO OF CHAINS: bmOverAU works for dotPDB (apiBMOverAU[bmNumber] works only for PDB ID api) COLORING makeColorAUChainsSpt() modeldat.js makeColorIDChainsSpt() modeldat.js ----------- chainList[] is generated from the COMPND records, which list all POLYMER chains in sequence- identical groups. Each sequence-identical group is a single element in the chainList array, which assumes single-letter chain names. Example 1d66: D,E,AB chainLengths[] are obtained from SEQRES in moltab.js (format "D 66"). If there are no SEQRES, chainLengths.length == 0. In this case, "show chains" is used to get a list of chains in getChainEnds(). chain type: moltab.js chainTypeFromName(chainName) ---------- METHOD USED ("bmchains") For the example below, 1zw0 bu=5, the BM chains become: $ load =1zw0 filter "biomolecule 5;bmchains" $ print {*}.chain.pivot.keys.join(" ") A1 A2 B1 B2 C C3 D D3 E E3 F F3 G G3 H H3 chainList = [ABCDEFGH] # all 8 original chains are sequence-identical. Every chain name references the original 1-character chain name, so we know which chains are sequence-identical based on chainList which comes from the COMPND records. ---------- BAD METHOD NOT USED (bmchains=1) This method (bmchains=1) loses original chain names when the original is moved. This loses correspondence between original chain names and biomolecule chain names. This means we cannot tell which chains are sequence identical based on COMPND record lists of original chain names. ORIGINAL CHAINS: Original chain names are preserved when the biomolecule has them in their original positions. If they are moved, then they are assigned new names. Thus, in 1zw0 biomolecule 5: REMARK 350 BIOMOLECULE: 5 REMARK 350 APPLY THE FOLLOWING TO CHAINS: A, B REMARK 350 BIOMT1 1 1.000000 0.000000 0.000000 0.00000 REMARK 350 BIOMT2 1 0.000000 1.000000 0.000000 0.00000 REMARK 350 BIOMT3 1 0.000000 0.000000 1.000000 -81.79900 REMARK 350 BIOMT1 2 -1.000000 0.000000 0.000000 165.93800 REMARK 350 BIOMT2 2 0.000000 -1.000000 0.000000 0.00000 REMARK 350 BIOMT3 2 0.000000 0.000000 1.000000 -81.79900 REMARK 350 APPLY THE FOLLOWING TO CHAINS: C, D, E, F, G, H REMARK 350 BIOMT1 3 1.000000 0.000000 0.000000 0.00000 REMARK 350 BIOMT2 3 0.000000 1.000000 0.000000 0.00000 REMARK 350 BIOMT3 3 0.000000 0.000000 1.000000 0.00000 REMARK 350 BIOMT1 4 -1.000000 0.000000 0.000000 165.93800 REMARK 350 BIOMT2 4 0.000000 -1.000000 0.000000 0.00000 REMARK 350 BIOMT3 4 0.000000 0.000000 1.000000 0.00000 --chains A,B are MOVED {symop=2} and also duplicated {symop=3}. Because none of the resulting 4 chains are in their original positions, the biomolecule has no chains A,B. A,B become I,J, and their duplicates become K,L. --chains CDEFGH are kept in their original positions {symop=1}, thus keeping their original names. Their duplicates {symop=4} become MNOPQR. The list of chains at a given symop: print {symop=1}.chains.pivot.keys.join("") # from Bob. Each element of bmChainLists[] is an array of chain names (which can be multi-character). The first name in each list is the original chain; the rest are duplicates of that chain. Example 1hho: [A,C],[B,D] ----------------------------------------------------------------------- CONSURF FG3.7: For a ConSurf PDB file, chainList is not populated in the initial display. Only after you click "Go to the FirstGlance Control Panel" it gets populated. FG3.8: chainList is populated for ConSurf*, and also [Clist, Ctot, consurf_identical_chains.]-> undefined with not ConSurf. FG4.0: getBMChainLists() is called in msgcall.js right after determineChains(). Clist -> ClistArray allowing NCCN (N [multipe] Character Chain Names). Clist is now obsolete. consurf_identical_chains is obsolete. Use ClistArray instead. Now old_consurf_chain, consurf_chain (differs from that specified for the job when the old chain is not present in the BU, e.g. 6nca 6NCA). In FG4.0, stopped supporting epitopia, pepitopia=pepsurf, selecton. These were using FG2.0 and gallery examples were 2007 and did not work in FG3.8. Did not consult Nir about this. See also chainLengths. *consurf_chain* in Javascript is the chain processed by ConSurf\ consurf_identical_chains has been broken from Tel Aviv for a long time, but in FG3.8, it is *populated from the pdbHeader using determineChains() called in processPDBHeader() in msgcall.js. CONSURF CHAIN CHECKBOXES execute reset_to_mode(false) in main_cs.js reset_consurf(false) in main_cs.js make_reset_consurf_spt(false) -> do_spt() in main_cs.js make_consurf_color_spt() make_consurf_color_spt() + add'l commands. in main_cs.js make_for_spt(make_chain_select_cmd()) in main_cs.js & cs_key.js chooses ISD or NoISD *make_chain_select_cmd()* in consurf/cs_key.js generates "select selected and (:A,:B, ...)" according to the checkboxes in the ConSurf view. The state of identical-chain checkboxes is kept in consurf_chain_checkbox[], which is updated by make_select_checked() when a checkbox is clicked. In the FG control panel, when the "ConSurf Colors" checkbox is clicked, ALL chains identical to the primary chain processed by consurf are colored. This occurs by calling *make_select_all_id_chains()* (in make_chain_select_cmd() in cs_key.js) when currentView = "renderCrosslinks" etc. The first time a View Link is clicked, if useConsurfColors, doViewLink() in jcontrol.js adds makeConsurfColorsSpt() in main_cs.js make_isd_color_spt() in main_cs.js ---->>>> make_chain_select_cmd() in cs_key.js <<<---- which selects all ConSurf sequence-identical chains according to currentView: - thin backbones (makeAllModelsSpt()) and many others. The "ConSurf Colors" checkbox (help_cs.js makeConsurfHelpPrefix() -> toggleConsurfColors()) appears in the middle left for - protein crosslinks - contacts and non-covalent interactions -------------------------------------- chainList (array) is populated (in moltab.js) from header COMPND in getChains() COMPND obtained with var rawCompnd = jgetfi("compnd") jgetfi uses jmolGetPropertyAsString("fileInfo", "compnd") COMPND lists sequence-identical chains in the same line. See "chain names" in moltab.js. For 1d66, chainList is D,E,AB useLowerCaseChains is set in moltab.js moltab.js also sets chainCount and distinctChainCount -------- EndsChain (array) has one chain per element. For 1d66: D,E,A,B. It is set from chainList in getChainEnds() in modeldat.js NOTE debugEnds! in modeldat.js When there is no COMPND, chainList and EndsChain have length 0. Then, getChainEnds (modeldat.js) populates EndsChain with jmolScriptEcho("show chains"); show chain messages a list of one chain name per line. ---------