Hi all, I have some problems debugging a complex script in Jmol.
First of all, the command 'set scriptReportingLevel' doesn't seem to work in Jmol 14.3.13_2015.04.08. It is always setting the value to zero. Q: What do the numbers (e.g.: $[2.295.299]) in the debugging output after the command 'set showScript on' mean? The first number looks like it could be the function call level. The third number could be the line number within the function after removing empty lines. Following the debugging information for a problematic function (~500 lines of code, see short extract below) the critical line seems to be a 'for' loop. Depending on the input data the loop sometimes cycles more often (twice instead of once) than indicated by the variable value ('fileCount=1' in any of the described cases) or the function is exited (without any error message or exception) after reaching the line the second time: $[2.83.82] for (var fileNumber=1; fileNumber<=fileCount; fileNumber++); $[2.400.400] $[2.83.82] for (var fileNumber=1; fileNumber<=fileCount; fileNumber++); --- Problematic function, extract --- function parseNetworkTsvData(dataHashref) { ... if (fileCount >0) { for (var fileNumber=1; fileNumber<=fileCount; fileNumber++) { ... } ... } ... } --------------------------------------------------------------------- Replacing the old syntax by the new one "for (var fileNumber FROM [1 fileCount]) {" dosen't change the problematic behaviour. The only visible difference can be seen in the case of the additional loop run. With the old syntax 'fileNumber' is "1" in the first cycle and "2" in the second one. With the new syntax it is "1" during both cycles. Although I have no clue what difference between the datasets is responsible for the different behaviour (they have many differences) it seems to be reproducible for each dataset. Since there might be involved some strange interference between the 'for' loop and other block-level elements I have added below also a version of the function reduced to all block-level begins/ends. Regards, Rolf --- Problematic function, larger extract ------------------- function parseNetworkTsvData(dataHashref) { if (dataHashref.type != "hash") { } else { if (networkType == "") { } if (dataHashref..subsets.type != "hash") { } elseif (dataHashref..subsets.[dataHashref..currentSubsetKey].type != "hash") { } if (dataHashref..networkDefinitions.type != "hash") { } else { if (dataHashref..networkDefinitions.[networkType].type != "hash") { } else { if (dataHashref..networkDefinitions.[networkType]..nodeColumns.type != "hash") { if (dataHashref..networkDefinitions.[networkType]..nodeColumns.type != "hash") { } } } } if (dataHashref..tsvData.type != "array") { } } if (msg != "") { } if (fileCount >0) { if (networkDefs..annotationColumns.type == "hash") { } if (allNodes..nodeInfo.type != hash) { } if (allNodes..edgeInfo.type != hash) { } if (allNodes..edgeKeysUsed.type != hash) { } if (allNodes..neighbours.type != hash) { } for (var fileNumber=1; fileNumber<=fileCount; fileNumber++) { if (dataHashref..tsvData.[fileNumber].type == "hash") { if (tsvData.type == "array") { if (rowCount > 0) { for (var column in tsvData[1].keys) { if (networkType == "generic") { if (columnDefs.[column].type != "hash") { } } if (nodeColumns[column]) { if (columnDefs[column].type != "hash") { } else { if (nodeTypesFound[nodeType].type != "hash") { } if (nodeTypesFound[nodeType]..columnNumbers.type != "array") { } if (nodeTypesFound[nodeType]..minColumnNumber == "") { } else { } if (nodeTypesFound[nodeType]..maxColumnNumber == "") { } else { } if (columnDefs[column].subTypeInfoKey != "") { } } } } for (var column in tsvData[1].keys) { if (annotationColumns.[column]) { if (columnDefs.[column].type != "hash") { } else { if (targetNodeTypes.type == "array") { for (var targetNodeType in targetNodeTypes) { if (nodeTypesFound[targetNodeType].type == "hash") { if (annotationColumnsFound[column].type != "hash") { } if (targetColumnCount > 0) { if (targetColumnCount == 1) { } else { if (columnNumber < nodeTypesFound[targetNodeType]..minColumnNumber) { } elseif (columnNumber > nodeTypesFound[targetNodeType]..maxColumnNumber) { } else { for (var i=1; i<=targetColumnCount; i++) { if (targetColumnNumber == 0) { } else { if (columnNumber > currentTargetColumnNumber) { } else { } } } } } } if (annotationColumnsFound[column]..targetNodeTypes.type != "hash") { } if (annotationColumnsFound[column]..targetNodeTypes.[targetNodeType].type != "hash") { } if (annotationColumnsFound[column]..minTargetColumnNumber == "") { } else { } if (annotationColumnsFound[column]..maxTargetColumnNumber == "") { } else { } } } if (assignMode != "all") { for (var targetNodeType in targetNodeTypesFound) { } if (columnNumber < annotationColumnsFound[column]..minTargetColumnNumber) { } elseif (columnNumber > annotationColumnsFound[column]..maxTargetColumnNumber) { } else { for (var currentTargetColumnNumber in targetColumnNumbers.sort) { if (singleTargetColumnNumber == 0) { } else { if (columnNumber > currentTargetColumnNumber) { } else { } } } } } } } } } for (var column in annotationColumnsFound.keys) { if (annotationColumnsFound[column]..singleTargetColumnNumber > 0) { } else { if (annotationColumnsFound[column]..targetNodeTypes.type == "hash") { for (targetNodeType in annotationColumnsFound[column]..targetNodeTypes) { if (annotationColumnsFound[column]..targetNodeTypes.[targetNodeType].type == "hash") { if (annotationColumnsFound[column]..targetNodeTypes.[targetNodeType]..targetColumnNumber > 0) { } } } } } } if (msg != "") { } for (var rowNumber from [1 rowCount]) { for (var column in nodeColumnsFound.keys) { if (allNodes..nodeInfo.[nodeKey].type != "hash") { } } if (currentNodeKeyCount > 1) { for (var i from [1 limit1]) { for (var j from [currentNodeKeyCount limit2]) { if (i==j) { log "ERROR: i(" + i + ") = j(" + j + ")"; } if (allNodes..edgeKeysUsed.[edgeKey].type != "hash") { if (allNodes..edgeKeysUsed.[edgeKeyRev].type != "hash") { if (allNodes..neighbours.[nodeKey1].type != "hash") { } if (allNodes..neighbours.[nodeKey2].type != "hash") { } } else { } } } } } if (networkType != "generic") { for (var column in annotationColumnsFound.keys) { if (annotationColumnsFound.[column].singleTargetColumnNumber > 0) { } else { if (annotationColumnsFound.[column]..targetColumnNumbers.type == "array") { } } for (var targetColumnNumber in targetColumnNumbers) { if (nodeKey != "") { } } } } } } } else { } } else { } } } if (allNodes..subnetworkInfo.type == "hash") { if (allNodes..subnetworkInfo..nodeKeyToSubnetworkNumber.type == "hash") { } } if (networkDefs..translations.type == "hash") { } for (var nodeKey in allNodes..nodeInfo) { if (allNodes..nodeInfo.[nodeKey]..nodeType != "") { } if (allNodes..nodeInfo.[nodeKey]..subTypeInfoKey != "") { if (allNodes..nodeInfo.[nodeKey].[subTypeInfoKey] != "") { } } if (subnetworkNumbersAvailable) { if (allNodes..subnetworkInfo..nodeKeyToSubnetworkNumber.[nodeKey].type != "") { } } if (translationsAvailable) { if (networkDefs..translations..typeToSingleLetter.type == "hash") { if (networkDefs..translations..typeToSingleLetter.[nodeType] != "") { } } else { } if (networkDefs..translations..typeToTypeId.type == "hash") { if (networkDefs..translations..typeToTypeId.[nodeType] != "") { } if (networkDefs..translations..typeToTypeId.[nodeSubType] != "") { } } else { } } } for (var edgeKey in allNodes..edgeInfo) { } } --------------------------------------------------------------------- -- Rolf Huehne Postdoc Leibniz Institute for Age Research - Fritz Lipmann Institute (FLI) Beutenbergstrasse 11 07745 Jena, Germany Phone: +49 3641 65 6205 Fax: +49 3641 65 6210 E-Mail: rhue...@fli-leibniz.de Website: http://www.fli-leibniz.de Scientific Director: Prof. Dr. K. Lenhard Rudolph Head of Administration: Dr. Daniele Barthel Chairman of Board of Trustees: Dennys Klein VAT No: DE 153 925 464 Register of Associations: No. 230296, Amtsgericht Jena Tax Number: 162/141/08228 ------------------------------------------------------------------------------ BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT Develop your own process in accordance with the BPMN 2 standard Learn Process modeling best practices with Bonita BPM through live exercises http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_ source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF _______________________________________________ Jmol-developers mailing list Jmol-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jmol-developers