Skip to content
Snippets Groups Projects
Commit ce3e74d2 authored by schmittu's avatar schmittu :beer:
Browse files

WIP: backup

parent 178c0f61
No related branches found
No related tags found
No related merge requests found
......@@ -9,15 +9,15 @@
set -x
set -e
JDK_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
# JDK_HOME=/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home/
#JDK_HOME=/Users/uweschmitt/Downloads/jdk-11.0.2.jdk/Contents/Home/
#JDK_HOME=/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home/
JDK_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home
JAVAC=${JDK_HOME}/bin/javac
JAR=${JDK_HOME}/bin/jar
MZMINE_JARS=~/Projects/mzmine2/build/MZmine-2.52-macOS/lib # /mzmine2-2.52.jar
MZMINE_JARS=~/Downloads/MZmine-2.51-macOS/lib
#MZMINE_JARS=~/Downloads/MZmine-2.51-macOS/lib
#MZMINE_JARS=~/Projects/mzmine2/build/MZmine-2.52-macOS/lib # /mzmine2-2.52.jar
MZMINE_JARS=$(cat ~/.emzed.ext.mzmine2/mzmine2/mzmine2_home)/lib
echo ${MZMINE_JARS}
cd mzm/java
......@@ -27,5 +27,5 @@ BUILD_ROOT=$(mktemp -d)/ch/ethz/emzed
mkdir -p ${BUILD_ROOT}
cp *.java ${BUILD_ROOT}
${JAVAC} -Xlint:unchecked -cp ${MZMINE_JARS}'/*' ${BUILD_ROOT}/*.java
${JAVAC} -Xlint:unchecked -cp "${MZMINE_JARS}/*" ${BUILD_ROOT}/*.java
${JAR} cf extensions.jar ${BUILD_ROOT}/../../../ch
import os as _os
from .install_jre import get_jre_home
from .install_mzmine2 import get_mzmine2_home
from .installers import get_jre_home, get_mzmine2_home
if get_mzmine2_home() is None or get_jre_home() is None:
def init():
from .install_jre import install_jre
from .install_mzmine2 import install_mzmine2
from .installers import install_jre, install_mzmine2
install_jre()
install_mzmine2()
......@@ -24,19 +22,23 @@ if get_mzmine2_home() is None or get_jre_home() is None:
else:
# cleanup ns
del get_jre_home
del get_mzmine2_home
def init():
print("nothing to do")
HERE = _os.path.dirname(_os.path.abspath(__file__))
here = _os.path.dirname(_os.path.abspath(__file__))
def _start_jvm_if_not_done_yet():
return
import jpype
if not jpype.isJVMStarted():
from .install_mzmine2 import get_mzmine2_home
from .install_jre import set_java_home
from .installers import get_mzmine2_home, set_java_home
set_java_home()
......@@ -44,7 +46,7 @@ else:
java_dll = jpype.getDefaultJVMPath()
#cp = "/Users/uweschmitt/Projects/mzmine2/build/MZmine-2.52-macOS/lib/*"
cp = "/Users/uweschmitt/Projects/mzmine2/build/MZmine-2.52-macOS/lib/*"
try:
# on win the jvm dll requires dlls from its parent folder
......@@ -55,8 +57,8 @@ else:
jpype.getDefaultJVMPath(),
"-Djava.awt.headless=true",
classpath=[
get_mzmine2_home() + "/lib/*",
_os.path.join(HERE, "java", "extensions.jar"),
_os.path.join(get_mzmine2_home(), "lib", "*"),
_os.path.join(here, "java", "extensions.jar"),
],
convertStrings=True,
)
......
#! /usr/bin/env python
# Copyright © 2019 Uwe Schitt <uwe.schmitt@id.ethz.ch>
import os
import sys
from .utils import default_install_target, download, unpack
ROOT = "http://emzed.ethz.ch/downloads/"
URLS = {
"linux": ROOT + "latest-jre-linux2.tar.gz",
"darwin": ROOT + "latest-jre-darwin.tar.gz",
"win32": ROOT + "latest-jre-win32.zip",
}
SUPPORTED_PLATFORMS = list(URLS.keys())
JVM_HOME_FILE = "jvm_home"
"""
original jres were downloaded from https://adoptopenjdk.net
"""
def _default_jre_folder():
return os.path.join(default_install_target(), "jre")
def install_jre(platform=sys.platform, target_folder=_default_jre_folder()):
assert (
platform in SUPPORTED_PLATFORMS
), f"platform must be one of {SUPPORTED_PLATFORMS}"
if not os.path.exists(target_folder):
os.makedirs(target_folder)
url = URLS[platform]
target_path = os.path.join(target_folder, os.path.basename(url))
if os.path.exists(target_path):
print("jre is already installed")
return
print("download", url)
download(url, target_path)
print("unpack", target_path)
unpacked_to = unpack(target_path)
with open(os.path.join(target_folder, JVM_HOME_FILE), "w") as fh:
fh.write(unpacked_to)
def get_jre_home(folder=_default_jre_folder()):
jvm_home_path = os.path.join(folder, JVM_HOME_FILE)
print("HOME PATH", jvm_home_path)
if not os.path.exists(jvm_home_path):
return None
path = open(jvm_home_path).read().strip()
if not os.path.exists(path):
raise RuntimeError(f"file {jvm_home_path} contains invalid path {path}")
return path
def set_java_home(folder=_default_jre_folder()):
import os
path = get_jre_home(folder)
if path is None:
raise RuntimeError(f"did not find jre, did you run download_jre()?")
#path = "/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/"
#path = "/Users/uweschmitt/Downloads/jdk-11.0.2.jdk/Contents/Home/"
#path = "/Library/Java/JavaVirtualMachines/openjdk-12.0.2.jdk/Contents/Home/"
os.environ["JAVA_HOME"] = path
#! /usr/bin/env python
# Copyright © 2019 Uwe Schitt <uwe.schmitt@id.ethz.ch>
import os
from .utils import default_install_target, download, unpack
URL = "https://github.com/mzmine/mzmine2/releases/download/v2.41.2/MZmine-2.41.2.zip"
MZMINE2_HOME_FILE = "mzmine2_home"
def _default_mzmine2_folder():
return os.path.join(default_install_target(), "mzmine2")
def install_mzmine2(target_folder=_default_mzmine2_folder()):
if not os.path.exists(target_folder):
os.makedirs(target_folder)
target_path = os.path.join(target_folder, os.path.basename(URL))
if os.path.exists(target_path):
print("mzmine2 is already installed")
return
print("download", URL)
download(URL, target_path)
print("unpack", target_path)
result_folder = unpack(target_path)
with open(os.path.join(target_folder, MZMINE2_HOME_FILE), "w") as fh:
fh.write(result_folder)
def get_mzmine2_home(target_folder=_default_mzmine2_folder()):
mzmine2_path = os.path.join(target_folder, MZMINE2_HOME_FILE)
if not os.path.exists(mzmine2_path):
return None
path = open(mzmine2_path).read().strip()
if not os.path.exists(path):
raise RuntimeError(f"file {mzmine2_path} contains invalid path {path}")
return path
No preview for this file type
......@@ -44,13 +44,6 @@ def create_combo_checker(choices):
return combo_checker
_checkers = {
"DoubleParameter": double_checker,
"StringParameter": string_checker,
"BooleanParameter": bool_checker,
}
def create_descriptor(python_field_name, entry):
java_type = entry["type"]
choices = entry["choices"]
......
......@@ -2,54 +2,68 @@
# Copyright © 2019 Uwe Schitt <uwe.schmitt@id.ethz.ch>
import emzed.lib
from .converters import create_mass_lists, from_peakmap, to_peakmap
from .exceptions import MzMine2Exception
from .parameters import ParameterBase, from_python_obj
import tempfile
import subprocess
import emzed.lib
class RemoveShoulderPeaksParameters(ParameterBase):
from .parameters import ParameterField, create_combo_checker
from .installers import construct_java_call_cli_args
_java_class = "ShoulderPeaksFilterParameters"
_fields = ["resolution", "peakModel"]
class RemoveShoulderPeaksParameters:
def remove_shoulder_peaks(peakmap, parameters):
assert isinstance(peakmap, emzed.lib.PeakMap)
resolution = ParameterField(
"resolution",
(
lambda v: isinstance(v, float) and v >= 0,
"nonnegative floating point value required",
),
)
from . import _start_jvm_if_not_done_yet
peak_model = ParameterField(
"peak_model", create_combo_checker(["GAUSS", "LORENTZ", "LORENTZEXTENDED"])
)
_start_jvm_if_not_done_yet()
from .classes import ShoulderPeaksFilterTask, PeakModelType
"""
TODO
try:
mzmine2_parameters = from_python_obj(parameters)
except AssertionError as e:
raise ValueError(f"the parameters you passed are not valid: {e}")
1. rt format issu: pm_back in tests has truncated rt values
2. extract sepctra from masslists
3. cleanup code
"""
# fix combo parameters
mzmine2_parameters.peakModel.setValue(
{
"GAUSS": PeakModelType.GAUSS,
"LORENTZ": PeakModelType.LORENTZ,
"LORENTZEXTENDED": PeakModelType.LORENTZEXTENDED,
}[mzmine2_parameters.peakModel.getValue()]
)
# set reasonbale default for emzed:
mzmine2_parameters.autoRemove.setValue(True)
mzmine2_parameters.massList.setValue("_mass_list")
mzmine2_parameters.suffix.setValue("")
def remove_shoulder_peaks(peakmap, parameters):
assert isinstance(peakmap, emzed.lib.PeakMap)
writer = from_peakmap(peakmap)
create_mass_lists(writer, "_mass_list")
temp_file_in = tempfile.mktemp(".mzXML")
temp_file_out = tempfile.mktemp(".mzML")
peakmap.store(temp_file_in)
task = ShoulderPeaksFilterTask(writer, mzmine2_parameters)
task.run()
msg = task.getErrorMessage()
if msg is not None:
raise MzMine2Exception(msg)
cli = construct_java_call_cli_args() + [
"ch.ethz.emzed.RemoveShoulderPeaks",
temp_file_in,
str(parameters.resolution),
parameters.peak_model,
temp_file_out,
]
return to_peakmap(writer, "_mass_list ")
p = subprocess.Popen(
" ".join(cli), shell=True, stderr=subprocess.STDOUT, stdout=subprocess.PIPE
)
for line in iter(p.stdout.readline, b""):
line = str(line, "utf-8").rstrip()
if line.startswith("!!!ERROR"):
raise RuntimeError("calling java failed")
if line.startswith("!!!DONE"):
break
print(line)
peakmap_back = emzed.lib.PeakMap.load(temp_file_out)
# the mzXML parser of mzedmin2 rounds rt values, we fix this here:
for s, s_back in zip(peakmap.spectra, peakmap_back.spectra):
s_back.rt = s.rt
return peakmap_back
......@@ -6,10 +6,7 @@ from functools import partial
import pytest
from emzed.ext.mzmine2.install_jre import set_java_home
from emzed.ext.mzmine2 import _start_jvm_if_not_done_yet
_start_jvm_if_not_done_yet()
from emzed.ext.mzmine2.installers import set_java_home
def pytest_addoption(parser):
......
......@@ -23,6 +23,8 @@ def test_remove_shoulder_peaks(data_path):
assert pm_back.spectra[0].mzs.shape == (241,)
assert pm_back.spectra[1].mzs.shape == (259,)
assert pm_back.spectra[0].rt == pm.spectra[0].rt
def execute(what):
f, *args = dill.loads(what)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment