Closed julianu closed 9 years ago
Hey @julianu
thanks for reporting and even looking into the problem. Could you give me the exact stdout and stderr of the MSGFPlus Node when running it? I can reproduce a problem but I am not sure if it is the same.
Output directly in KNIME:
ERROR GenericKnimeNodeModel Failing process stdout: [Error: The required parameter 'executable' was not given or is empty!] ERROR GenericKnimeNodeModel Failing process stderr: [] ERROR MSGFPlusAdapter Execute failed: Failed to execute node MSGFPlusAdapter
Not much in the stdout and stderr, but some more in the log-file:
2015-02-26 15:06:59,003 DEBUG KNIME-Worker-9 GenericKnimeNodeModel : > setting param MSGFPlusAdapter.1.mzid_out->/tmp/knime_inference_compa35317/knime_fs-MSGFPlusAdapter_0_205-35369/000/000/MSGFPlusAdapter_1/OEII12347.mzid 2015-02-26 15:06:59,013 DEBUG pool-3-thread-4 LocalToolExecutor : Executing: /home/julian/opt/knime/plugins/de.openms.linux.x86_64_2.0.0.201502211748/payload/bin/MSGFPlusAdapter -ini /tmp/MSGFPlusAdapter1272172075/params.ini 2015-02-26 15:06:59,317 DEBUG KNIME-Worker-9 GenericKnimeNodeModel : STDOUT: [Error: The required parameter 'executable' was not given or is empty!] 2015-02-26 15:06:59,317 DEBUG KNIME-Worker-9 GenericKnimeNodeModel : STDERR: [] 2015-02-26 15:06:59,317 DEBUG KNIME-Worker-9 GenericKnimeNodeModel : RETCODE: 7 2015-02-26 15:06:59,317 ERROR KNIME-Worker-9 GenericKnimeNodeModel : Failing process stdout: [Error: The required parameter 'executable' was not given or is empty!] 2015-02-26 15:06:59,318 ERROR KNIME-Worker-9 GenericKnimeNodeModel : Failing process stderr: [] 2015-02-26 15:06:59,318 DEBUG KNIME-Worker-9 MSGFPlusAdapter : reset 2015-02-26 15:06:59,318 ERROR KNIME-Worker-9 MSGFPlusAdapter : Execute failed: Failed to execute node MSGFPlusAdapter 2015-02-26 15:06:59,318 DEBUG KNIME-Worker-9 MSGFPlusAdapter : Execute failed: Failed to execute node MSGFPlusAdapter com.genericworkflownodes.knime.generic_node.ExecutionFailedException: Failed to execute node MSGFPlusAdapter at com.genericworkflownodes.knime.generic_node.GenericKnimeNodeModel.executeTool(GenericKnimeNodeModel.java:252) at com.genericworkflownodes.knime.generic_node.GenericKnimeNodeModel.execute(GenericKnimeNodeModel.java:477) at org.knime.core.node.NodeModel.executeModel(NodeModel.java:555) at org.knime.core.node.Node.invokeFullyNodeModelExecute(Node.java:1131) at org.knime.core.node.Node.execute(Node.java:927) at org.knime.core.node.workflow.NativeNodeContainer.performExecuteNode(NativeNodeContainer.java:559) at org.knime.core.node.exec.LocalNodeExecutionJob.mainExecute(LocalNodeExecutionJob.java:95) at org.knime.core.node.workflow.NodeExecutionJob.internalRun(NodeExecutionJob.java:179) at org.knime.core.node.workflow.NodeExecutionJob.run(NodeExecutionJob.java:110) at org.knime.core.util.ThreadUtils$RunnableWithContextImpl.runWithContext(ThreadUtils.java:328) at org.knime.core.util.ThreadUtils$RunnableWithContext.run(ThreadUtils.java:204) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at org.knime.core.util.ThreadPool$MyFuture.run(ThreadPool.java:125) at org.knime.core.util.ThreadPool$Worker.run(ThreadPool.java:248) 2015-02-26 15:06:59,318 DEBUG KNIME-Worker-9 WorkflowManager : MSGFPlusAdapter 0:205 doBeforePostExecution 2015-02-26 15:06:59,318 DEBUG KNIME-Worker-9 NodeContainer : MSGFPlusAdapter 0:205 has new state: POSTEXECUTE 2015-02-26 15:06:59,318 DEBUG KNIME-Worker-9 WorkflowManager : MSGFPlusAdapter 0:205 doAfterExecute - failure 2015-02-26 15:06:59,319 DEBUG KNIME-Worker-9 MSGFPlusAdapter : reset 2015-02-26 15:06:59,319 DEBUG KNIME-Worker-9 MSGFPlusAdapter : clean output ports. 2
Okay. The problem is, that MSGFPlus is a .jar. Usually we put third-party executables in a bin path in our KNIME plugin and add this path to PATH. However, when a third-party tool is called via "java -jar MSGFPlus.jar" as it's the case here, the java executable needs to be in the PATH and we need another way of specifying the complete path to MSGFPlus.jar. I found a workaround by modifying the binaries.ini, adding java to the PATH and adding another environment variable with the relative path to the ".jar" which is then checked by QT when performing the command in out C++-binary MSGFPlusAdapter.
PATH=$ROOT/bin/:$ROOT/bin/Fido:$ROOT/bin/OMSSA:$ROOT/bin/XTandem:/usr/bin/
MSGFPATH=$ROOT/bin/MSGFPlus/MSGFPlus.jar
However this seems to be "hacky" as for example the path to the java executable is not easy to specify (especially on Windows). The workaround also needs modifications in MSGFPlusAdapter code.
Maybe @aiche can comment on this?
Yep, I know of these java/jar problems. I implemented a way to call Java in https://github.com/mpc-bioinformatics/pia-knime-nodes, maybe this is helpful for you, too. All of these nodes call actually a script, which (depending on the OS) calls the Java-version shipped by KNIME with the PIA jar.
Ah KNIME ships a JRE located relative to the GKN root. Yes, then doing it the above way (similar or equal to yours) should work.
I just found two things: you moved OpenMS 2.0 to the stable contributions in KNIME, that is great!
But the MSGFPlusAdapter refuses its work completely right now. I tracked down the problem to this: the line
<ITEM name="executable" type="string" value="/path/to/MSGFPlus.jar"/>
is not added to the params.ini file before execution of the MSGFPlusAdapter. Adding this line and starting it in the command line works.I am using the 2.0.0.201501211748 version running KNIME 2.11 under linux.