# HG changeset patch # User lain # Date 1643734345 0 # Node ID 85b4593da2713ce3b4fe451bfdff2ba9043d3f96 # Parent 0f3224a5addaafd63d14271deb8911068d017d08 " master branch Updating" diff -r 0f3224a5adda -r 85b4593da271 XSeeker.xml --- a/XSeeker.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ - - Webbased Interactive bidules visualization - - xseeker - - - - / - 8765 - - - - TRUE - http://172.17.0.1:8080/ - $__history_id__ - - - - - - - - - - - - - - - - - i love to talk to me myself - - diff -r 0f3224a5adda -r 85b4593da271 resources/XSeeker/config/XSeeker.config --- a/resources/XSeeker/config/XSeeker.config Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - - - - -R_DIRECTORY="/R" -R_BINARY="R" -R_SCRIPT="Rscript" - -PROJECT_ROOT=`dirname $(readlink -f $0)` -MODULE_BINARY_DIRECTORY="${PROJECT_ROOT}/bin" diff -r 0f3224a5adda -r 85b4593da271 resources/XSeeker/config/config.yml --- a/resources/XSeeker/config/config.yml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ - - -default: - - - XSeeker_path: "/XSeeker" - input_directory: "{{XSeeker_path}}/input/" - - - galaxy: - active: TRUE - export_directory: "{{XSeeker_path}}/output/" - export_method: "directory" - - - database: - base_data: "{{XSeeker_path}}/data/base.sql" - recreate: FALSE - models: - adduct - cluster - compound - feature - instrument - instrument_config - project - sample - smol_xcms_set - software - camera_parameters - pairing_parameters - peak_picking_parameters - alignmenmt_parameters - models_definition_path: "{{XSeeker_path}}/config/models.R" - connection: - connector: "SQLite" - dbname: "{{XSeeker_path}}/test.sqlite" - - - shiny: - host: "0.0.0.0" - port: 8765 - show_errors: TRUE - appname: "XSeeker" - base_ui_path: "{{XSeeker_path}}/R/base_ui.R" - added_resources: - www: "{{XSeeker_path}}/www/" - sbs: "{{XSeeker_path}}/dist/shinyBS/www/" - - - modules: - checksums_file: "{{XSeeker_path}}/.checksums" - re_compile_modified: FALSE - sources_location: "{{XSeeker_path}}/modules" - binaries_location: "{{XSeeker_path}}/bin" - binaries: - XSeekerRdataManager - XSeekerFilePreProcessing - XSeekerPreProcessPeakPicking - XSeekerPreProcessAlignment - XSeekerPreProcessCamera - XSeekerKMDPlot - XSeekerComputeFormula - XSeekerChromatoAndMassSpectrum - XSeekerClusterTable - XSeekerDatabaseManager - XSeekerDatabaseSummary - XSeekerHairyPlotter - XSeekerGalaxyInterfacR - - sources: - - - XSeekerRdataManager: - autoload: TRUE - download_rdata_mzml_from_galaxy: FALSE - - -production: - - database: - recreate: FALSE - connection: - connector: "SQLite" - dbname: "{{XSeeker_path}}/production.sqlite" - - modules: - re_compile_modified: FALSE - - -docker: - - database: - recreate: TRUE - connection: - connector: "SQLite" - dbname: "file::memory:" - - modules: - re_compile_modified: FALSE diff -r 0f3224a5adda -r 85b4593da271 resources/XSeeker/config/models.R --- a/resources/XSeeker/config/models.R Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ - -tryCatch({ - DBModelR::ModelDefinition(table="yui", fields=list(yui="INTEGER")) -}, error=function(e) { - stop("Please, install DBModelR before you source this file.") -}) - -list( - adduct=DBModelR::ModelDefinition( - table="adduct", - fields=list( - name="TEXT", - mass="FLOAT", - charge="INTEGER", - multi="INTEGER", - formula_add="TEXT", - formula_ded="TEXT", - sign="TEXT", - oidscore="INTEGER", - quasi="INTEGER", - ips="FLOAT" - ) - ), - cluster=DBModelR::ModelDefinition( - table="cluster", - fields=list( - clusterID="INTEGER", - formula="TEXT", - annotation="TEXT", - coeff="FLOAT", - r_squared="FLOAT", - charge="INTEGER", - mean_rt="FLOAT", - score="FLOAT", - deviation="FLOAT", - status="TEXT", - # adduct="TEXT", - curent_group="INTEGER", - pc_group="INTEGER", - align_group="INTEGER", - xcms_group="INTEGER" - ), - one=list("compound", "adduct"), - many=list("sample") - ), - compound=DBModelR::ModelDefinition( - table="compound", - fields=list( - name="TEXT", - common_name="TEXT", - formula="TEXT", - charge="INTEGER", - date="TEXT", - mz="FLOAT" - ) - ), - feature=DBModelR::ModelDefinition( - table="feature", - fields=list( - featureID="INTEGER", - mz="FLOAT", - mz_min="FLOAT", - mz_max="FLOAT", - rt="FLOAT", - rt_min="FLOAT", - rt_max="FLOAT", - int_o="FLOAT", - int_b="FLOAT", - max_o="FLOAT", - iso="TEXT", - abundance="FLOAT" - ), - one=list("cluster"), - many=list("sample") - ), - instrument=DBModelR::ModelDefinition( - table="instrument", - fields=list( - model="TEXT", - manufacturer="TEXT", - analyzer="TEXT", - detector_type="TEXT", - ion_source="TEXT" - ) - ), - instrument_config=DBModelR::ModelDefinition( - table="instrument_config", - fields=list( - resolution="TEXT", - agc_target="TEXT", - maximum_IT="TEXT", - number_of_scan_range="TEXT", - scan_range="TEXT", - version="TEXT" - ) - ), - project=DBModelR::ModelDefinition( - table="project", - fields=list( - name="TEXT", - comment="TEXT" - ), - one=list("sample") - ), - sample=DBModelR::ModelDefinition( - table="sample", - fields=list( - name="TEXT", - path="TEXT", - polarity="TEXT", - kind="TEXT", ## rdata or mxml or enriched_rdata - raw="BLOB" - ), - one=list( - "peak_picking_parameters", - "pairing_parameters", - "alignmenmt_parameters", - "camera_parameters", - "instrument", - "instrument_config", - "software", - "smol_xcms_set" - ) - ), - smol_xcms_set=DBModelR::ModelDefinition( - table="smol_xcms_set", - fields=list( - raw="BLOB" - ) - ), - software=DBModelR::ModelDefinition( - table="software", - fields=list( - name="TEXT", - version="TEXT" - ) - ), - # camera_parameters=DBModelR::ModelDefinition( - # table="camera_parameters", - # fields=list() - # ), - # pairing_parameters=DBModelR::ModelDefinition( - # table="pairing_parameters", - # fields=list() - # ), - peak_picking_parameters=DBModelR::ModelDefinition( - table="peak_picking_parameters", - fields=list( - ppm="FLOAT", - peakwidth="TEXT", - snthresh="TEXT", - prefilterStep="TEXT", - prefilterLevel="TEXT", - mzdiff="TEXT", - fitgauss="TEXT", - noise="TEXT", - mzCenterFun="TEXT", - integrate="INTEGER", - firstBaselineCheck="TEXT", - snthreshIsoROIs="TEXT", - maxCharge="INTEGER", - maxIso="INTEGER", - mzIntervalExtension="TEXT" - ) - ), - alignmenmt_parameters=DBModelR::ModelDefinition( - table="alignmenmt_parameters", - fields=list( - binSize="TEXT", - centerSample="TEXT", - response="TEXT", - distFun="TEXT", - gapInit="TEXT", - gapExtend="TEXT", - factorDiag="TEXT", - factorGap="TEXT", - localAlignment="INTEGER", - initPenalty="TEXT", - bw="TEXT", - minFraction="TEXT", - minSamples="TEXT", - maxFeatures="TEXT" - ) - ) -) diff -r 0f3224a5adda -r 85b4593da271 resources/XSeekerBaseModule/config.sh --- a/resources/XSeekerBaseModule/config.sh Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ - - - - -R_DIRECTORY="/R" -R_BINARY="R" -R_SCRIPT="Rscript" - -PROJECT_ROOT=`dirname $(readlink -f $0)` -MODULE_BINARY_DIRECTORY="${PROJECT_ROOT}/bin" diff -r 0f3224a5adda -r 85b4593da271 resources/entrypoint.sh --- a/resources/entrypoint.sh Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -#!/bin/bash - -apt-get install iproute2 original-awk iputils-ping -y - -HOST_DOMAIN="host.docker.internal" -ping -q -c1 $HOST_DOMAIN > /dev/null 2>&1 -if [ $? -ne 0 ]; then - HOST_IP=$(ip route | awk 'NR==1 {print $3}') - echo -e "$HOST_IP\t$HOST_DOMAIN" >> /etc/hosts -fi - - -cd /XSeeker -stdbuf -i0 -o0 -e0 ./run.sh 2>&1 > /var/log/xseeker.log \ No newline at end of file diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/config/datatypes_conf.xml --- a/resources/galaxy/GIE/config/datatypes_conf.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -diff --git a/lib/galaxy/config/sample/datatypes_conf.xml.sample b/lib/galaxy/config/sample/datatypes_conf.xml.sample -index 8b887b8568..d1d9fb7ab5 100644 ---- a/lib/galaxy/config/sample/datatypes_conf.xml.sample -+++ b/lib/galaxy/config/sample/datatypes_conf.xml.sample -@@ -809,6 +809,9 @@ - - - -+ -+ -+ - - - - - - - HistoryDatasetAssociation - - xseeker.sqlite.Binary - binary.Binary - dataset_id - - - - dataset_id - - - xseeker.mako - diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/config/plugins/interactive_environments/xseeker/templates/xseeker.mako --- a/resources/galaxy/GIE/config/plugins/interactive_environments/xseeker/templates/xseeker.mako Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -<%namespace name="ie" file="ie.mako"/> - -<% - - # Sets ID and sets up a lot of other variables - ie_request.load_deploy_config() - ie_request.attr.docker_port = 8765 - - docker_input_filename = "/XSeeker/input/input.{}".format(hda.ext) - - user_file = ie_request.volume( - docker_input_filename, - hda.file_name, - mode='ro' - ) - - # Launch the IE. This builds and runs the docker command in the background. - ie_request.launch( - volumes=[user_file], - ) - - - ## General IE specific - # Access URLs for the notebook from within galaxy. - notebook_access_url = ie_request.url_template('${PROXY_URL}//') - -%> - - - ${ ie.load_default_js() } - ${ ie.load_default_app() } - - - - -
-
- - diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/config/tool_conf.xml --- a/resources/galaxy/GIE/config/tool_conf.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -diff --git a/lib/galaxy/config/sample/tool_conf.xml.sample b/lib/galaxy/config/sample/tool_conf.xml.sample -index 286a0c9f1c..6472c6bf20 100644 ---- a/lib/galaxy/config/sample/tool_conf.xml.sample -+++ b/lib/galaxy/config/sample/tool_conf.xml.sample -@@ -1,5 +1,8 @@ - - -+
-+ -+
-
- - diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/lib/galaxy/datatypes/binary.py --- a/resources/galaxy/GIE/lib/galaxy/datatypes/binary.py Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -diff --git a/lib/galaxy/datatypes/binary.py b/lib/galaxy/datatypes/binary.py -index 1dc84499f8..50ec1acd16 100644 ---- a/lib/galaxy/datatypes/binary.py -+++ b/lib/galaxy/datatypes/binary.py -@@ -2868,6 +2868,58 @@ class WiffTar(BafTar): - return "Sciex WIFF/SCAN archive" - - -+class XSeekerDatabase(SQlite): -+ """Class describing an XSeeker Sqlite database """ -+ MetadataElement( -+ name="xseeker_version", -+ default="1.0.0", -+ param=MetadataParameter, -+ desc="XSeeker Version", -+ readonly=True, -+ visible=True, -+ no_value="1.0.0" -+ ) -+ file_ext = "xseeker.sqlite" -+ edam_format = "format_3622" -+ edam_data = "data_3498" -+ -+ def set_meta(self, dataset, overwrite=True, **kwd): -+ super(XSeekerDatabase, self).set_meta(dataset, overwrite=overwrite, **kwd) -+ try: -+ conn = sqlite.connect(dataset.file_name) -+ c = conn.cursor() -+ tables_query = "SELECT database_version FROM XSeeker_tagging_table" -+ result = c.execute(tables_query).fetchall() -+ for version, in result: -+ dataset.metadata.xseeker_vesrion = version -+ # TODO: Can/should we detect even more attributes, such as use of PED file, what was input annotation type, etc. -+ except Exception as e: -+ log.warning('%s, set_meta Exception: %s', self, e) -+ -+ def sniff(self, filename): -+ if super(XSeekerDatabase, self).sniff(filename): -+ table_names = [ -+ "XSeeker_tagging_table" -+ ] -+ return self.sniff_table_names(filename, table_names) -+ return False -+ -+ def set_peek(self, dataset, is_multi_byte=False): -+ if not dataset.dataset.purged: -+ dataset.peek = "XSeeker SQLite Database, version %s" % (dataset.metadata.xseeker_version or 'unknown') -+ dataset.blurb = nice_size(dataset.get_size()) -+ else: -+ dataset.peek = 'file does not exist' -+ dataset.blurb = 'file purged from disk' -+ -+ def display_peek(self, dataset): -+ try: -+ return dataset.peek -+ except Exception: -+ return "XSeeker SQLite Database, version %s" % (dataset.metadata.xseeker_version or 'unknown') -+ -+ -+ - if __name__ == '__main__': - import doctest - doctest.testmod(sys.modules[__name__]) diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/lib/galaxy/datatypes/text.py --- a/resources/galaxy/GIE/lib/galaxy/datatypes/text.py Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py -index b1884da52b..4ad1006c56 100644 ---- a/lib/galaxy/datatypes/text.py -+++ b/lib/galaxy/datatypes/text.py -@@ -804,3 +804,38 @@ class Gfa1(Text): - return False - found_valid_lines = True - return found_valid_lines -+ -+ -+@build_sniff_from_prefix -+class SQL(Text): -+ """Class describing an html file""" -+ file_ext = "sql" -+ -+ def set_peek(self, dataset, is_multi_byte=False): -+ if not dataset.dataset.purged: -+ dataset.peek = "SQL file" -+ dataset.blurb = nice_size(dataset.get_size()) -+ else: -+ dataset.peek = "file does not exist" -+ dataset.blurb = "file purged from disk" -+ -+ def get_mime(self): -+ """Returns the mime type of the datatype""" -+ return "application/sql" -+ -+ def sniff_prefix(self, file_prefix): -+ """ -+ Uses some patterns usualy encountered in sql files to guess -+ it's type -+ """ -+ start = file_prefix.string_io().read(42).strip() -+ return any( -+ header in start -+ for header in ( -+ "CREATE DATABASE", -+ "INSERT INTO", -+ "CREATE TABLE", -+ "BEGIN TRANSACTION" -+ ) -+ ) -+ diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/lib/galaxy/visualization/plugins/interactive_environments.py --- a/resources/galaxy/GIE/lib/galaxy/visualization/plugins/interactive_environments.py Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -diff --git a/lib/galaxy/visualization/plugins/interactive_environments.py b/lib/galaxy/visualization/plugins/interactive_environments.py -index 6f5374af37..2fc9e72210 100644 ---- a/lib/galaxy/visualization/plugins/interactive_environments.py -+++ b/lib/galaxy/visualization/plugins/interactive_environments.py -@@ -137,13 +137,13 @@ class InteractiveEnvironmentRequest: - # .get() that will ignore missing sections, so we must make use of - # their defaults dictionary instead. - default_dict = { -- 'container_interface': None, -+ 'container_interface': "", - 'command': 'docker', - 'command_inject': '-e DEBUG=false -e DEFAULT_CONTAINER_RUNTIME=120', - 'docker_hostname': 'localhost', - 'wx_tempdir': 'False', -- 'docker_galaxy_temp_dir': None, -- 'docker_connect_port': None, -+ 'docker_galaxy_temp_dir': "", -+ 'docker_connect_port': "", - } - viz_config = configparser.SafeConfigParser(default_dict) - conf_path = os.path.join(self.attr.our_config_dir, self.attr.viz_id + ".ini") diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/tools/LC-MSMS/XSeekerPreparator.R --- a/resources/galaxy/GIE/tools/LC-MSMS/XSeekerPreparator.R Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,921 +0,0 @@ - - -TOOL_NAME <- "XSeekerPreparator" -VERSION <- "1.1.0" - -OUTPUT_SPECIFIC_TOOL <- "XSeeker_Galaxy" - -ENRICHED_RDATA_VERSION <- paste("1.1.0", OUTPUT_SPECIFIC_TOOL, sep="-") -ENRICHED_RDATA_DOC <- sprintf(" -Welcome to the enriched of the output of CAMERA/xcms. -This doc was generated by the tool: %s - Version %s -To show the different variables contained in this rdata, type: - - `load('this_rdata.rdata', rdata_env <- new.env())` - - `names(rdata_env)` - -Sections -###### - - -This tools helpers ------- - The version number is somewhat special because the evolution of the - rdata's format is non-linear. - There may be different branches, each evolving separatly. - To reflect these branches's diversions, there may be a prepended - branch name following this format: - major.minor.patch-branch_name - Like this, we can process rdata with the same tool, and output - rdata formated differently, for each tool. - - - - enriched_rdata: - - Description: flag created by that tool to tell it was enriched. - - Retrieval method: enriched_rdata <- TRUE - - - enriched_rdata_version: - - Description: A flag created by that tool to tell which version of - this tool has enriched the rdata. - - Retrieval method: enriched_rdata_version <- sprintf(\"%s\", ENRICHED_RDATA_VERSION) - - - enriched_rdata_doc: - - Description: Contains the documentation string. - -Data from original mzxml file ------- - - tic: - - Description: Those are the tic values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: xcms::xcmsRaw('original_file.mzxml')@tic - - xcms version: 2.0 - - - mz: - - Description: Those are the m/z values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: xcms::xcmsRaw('original_file.mzxml')@env$mz - - xcms version: 2.0 - - - scanindex: - - Description: Those are the scanindex values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: xcms::xcmsRaw('original_file.mzxml')@scanindex - - xcms version: 2.0 - - - scantime: - - Description: Those are the scantime values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: xcms::xcmsRaw('original_file.mzxml')@scantime - - xcms version: 2.0 - - - intensity: - - Description: Those are the intensity values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: xcms::xcmsRaw('original_file.mzxml')@env$intensity - - xcms version: 2.0 - - - polarity: - - Description: Those are the polarity values from the original mzxml - file, extracted using xcms 2. - - Retrieval method: as.character(xcms::xcmsRaw('original_file.mzxml')@polarity[[1]]) - - xcms version: 2.0 - -Data taken from incoming rdata ------- - - variableMetadata: - - Description: Unmodified copy of variableMetadata from incoming rdata. - - Retrieval method: rdata_file$variableMetadata - - - process_params: - - Description: Those are the processing parameters values from the - curent rdata. They have been simplified to allow easy access like: - for (params in process_params) { - if (params[[\"xfunction\"]] == \"annotatediff\") { - process_peak_picking_params(params) - } - } - - Retrieval method: - ## just he same list, but simplified - process_params <- list() - for (list_name in names(rdata_file$listOFlistArguments)) { - param_list <- list() - for (param_name in names(rdata_file$listOFlistArguments[[list_name]])) { - param_list[[param_name]] <- rdata_file$listOFlistArguments[[list_name]][[param_name]] - } - process_params[[length(process_params)+1]] <- param_list - } -", ENRICHED_RDATA_VERSION, TOOL_NAME, VERSION, ENRICHED_RDATA_VERSION) - - - -get_models <- function(path) { - if (is.null(path)) { - stop("No models to define the database schema") - } else { - message(sprintf("Loading models from %s", path)) - } - ## galaxy mangles the "@" to a "__at__" - if (substr(path, 1, 9) == "git__at__") { - path <- sub("^git__at__", "git@", path, perl=TRUE) - } - if ( - substr(path, 1, 4) == "git@" - || substr(path, length(path)-4, 4) == ".git" - ) { - return (get_models_from_git(path)) - } - if (substr(path, 1, 4) == "http") { - return (get_models_from_url(path)) - } - return (source(path)$value) -} - -get_models_from_git <- function (url, target_file="models.R", rm=TRUE) { - tmp <- tempdir() - message(sprintf("Cloning %s", url)) - system2("git", c("clone", url, tmp)) - result <- search_tree(file.path(tmp, dir), target_file) - if (!is.null(result)) { - models <- source(result)$value - if (rm) { - unlink(tmp, recursive=TRUE) - } - return (models) - } - if (rm) { - unlink(tmp, recursive=TRUE) - } - stop(sprintf( - "Could not find any file named \"%s\" in this repo", - target_file - )) -} - -get_models_from_url <- function (url, target_file="models.R", rm=TRUE) { - tmp <- tempdir() - message(sprintf("Downloading %s", url)) - result <- file.path(tmp, target_file) - if (download.file(url, destfile=result) == 0) { - models <- source(result)$value - if (rm) { - unlink(tmp, recursive=TRUE) - } - return (models) - } - if (rm) { - unlink(tmp, recursive=TRUE) - } - stop("Could not download any file at this adress.") -} - -search_tree <- function(path, target) { - target <- tolower(target) - for (file in list.files(path)) { - if (is.dir(file)) { - result <- search_tree(file.path(path, file), target) - if (!is.null(result)) { - return (result) - } - } else if (tolower(file) == target) { - return (file.path(path, file)) - } - } - return (NULL) -} - -create_database <- function(orm) { - orm$recreate_database(no_exists=FALSE) - set_database_version(orm, "created") -} - -insert_adducts <- function(orm) { - message("Creating adducts...") - adducts <- list( - list("[M-H2O-H]-",1,-1,-48.992020312000001069,1,0,0.5,"H0","H1O3"), - list("[M-H-Cl+O]-",1,-1,-19.981214542000000022,2,0,0.5,"O1","H1Cl1"), - list("[M-Cl+O]-",1,-1,-18.973389510000000512,3,0,0.5,"O1","Cl1"), - list("[M-3H]3-",1,-3,-3.0218293560000000219,4,0,1.0,"H0","H3"), - list("[2M-3H]3-",2,-3,-3.0218293560000000219,4,0,0.5,"H0","H3"), - list("[3M-3H]3-",3,-3,-3.0218293560000000219,4,0,0.5,"H0","H3"), - list("[M-2H]2-",1,-2,-2.0145529039999998666,5,0,1.0,"H0","H2"), - list("[2M-2H]2-",2,-2,-2.0145529039999998666,5,0,0.5,"H0","H2"), - list("[3M-2H]2-",3,-2,-2.0145529039999998666,5,0,0.5,"H0","H2"), - list("[M-H]-",1,-1,-1.0072764519999999333,6,1,1.0,"H0","H1"), - list("[2M-H]-",2,-1,-1.0072764519999999333,6,0,0.5,"H0","H1"), - list("[3M-H]-",3,-1,-1.0072764519999999333,6,0,0.5,"H0","H1"), - list("[M]+",1,1,-0.00054858000000000000945,7,1,1.0,"H0","H0"), - list("[M]-",1,-1,0.00054858000000000000945,8,1,1.0,"H0","H0"), - list("[M+H]+",1,1,1.0072764519999999333,9,1,1.0,"H1","H0"), - list("[2M+H]+",2,1,1.0072764519999999333,9,0,0.5,"H1","H0"), - list("[3M+H]+",3,1,1.0072764519999999333,9,0,0.25,"H1","H0"), - list("[M+2H]2+",1,2,2.0145529039999998666,10,0,0.75,"H2","H0"), - list("[2M+2H]2+",2,2,2.0145529039999998666,10,0,0.5,"H2","H0"), - list("[3M+2H]2+",3,2,2.0145529039999998666,10,0,0.25,"H2","H0"), - list("[M+3H]3+",1,3,3.0218293560000000219,11,0,0.75,"H3","H0"), - list("[2M+3H]3+",2,3,3.0218293560000000219,11,0,0.5,"H3","H0"), - list("[3M+3H]3+",3,3,3.0218293560000000219,11,0,0.25,"H3","H0"), - list("[M-2H+NH4]-",1,-1,16.019272654000001665,12,0,0.25,"N1H4","H2"), - list("[2M-2H+NH4]-",2,-1,16.019272654000001665,12,0,0.0,"N1H4","H2"), - list("[3M-2H+NH4]-",3,-1,16.019272654000001665,12,0,0.25,"N1H4","H2"), - list("[M+NH4]+",1,1,18.033825558000000199,13,1,1.0,"N1H4","H0"), - list("[2M+NH4]+",2,1,18.033825558000000199,13,0,0.5,"N1H4","H0"), - list("[3M+NH4]+",3,1,18.033825558000000199,13,0,0.25,"N1H4","H0"), - list("[M+H+NH4]2+",1,2,19.041102009999999467,14,0,0.5,"N1H5","H0"), - list("[2M+H+NH4]2+",2,2,19.041102009999999467,14,0,0.5,"N1H5","H0"), - list("[3M+H+NH4]2+",3,2,19.041102009999999467,14,0,0.25,"N1H5","H0"), - list("[M+Na-2H]-",1,-1,20.974668176000001551,15,0,0.75,"Na1","H2"), - list("[2M-2H+Na]-",2,-1,20.974668176000001551,15,0,0.25,"Na1","H2"), - list("[3M-2H+Na]-",3,-1,20.974668176000001551,15,0,0.25,"Na1","H2"), - list("[M+Na]+",1,1,22.989221080000000086,16,1,1.0,"Na1","H0"), - list("[2M+Na]+",2,1,22.989221080000000086,16,0,0.5,"Na1","H0"), - list("[3M+Na]+",3,1,22.989221080000000086,16,0,0.25,"Na1","H0"), - list("[M+H+Na]2+",1,2,23.996497531999999353,17,0,0.5,"Na1H1","H0"), - list("[2M+H+Na]2+",2,2,23.996497531999999353,17,0,0.5,"Na1H1","H0"), - list("[3M+H+Na]2+",3,2,23.996497531999999353,17,0,0.25,"Na1H1","H0"), - list("[M+2H+Na]3+",1,3,25.003773983999998619,18,0,0.25,"H2Na1","H0"), - list("[M+CH3OH+H]+",1,1,33.033491200000000276,19,0,0.25,"C1O1H5","H0"), - list("[M-H+Cl]2-",1,-2,33.962124838000001148,20,0,1.0,"Cl1","H1"), - list("[2M-H+Cl]2-",2,-2,33.962124838000001148,20,0,0.5,"Cl1","H1"), - list("[3M-H+Cl]2-",3,-2,33.962124838000001148,20,0,0.5,"Cl1","H1"), - list("[M+Cl]-",1,-1,34.969401290000000416,21,1,1.0,"Cl1","H0"), - list("[2M+Cl]-",2,-1,34.969401290000000416,21,0,0.5,"Cl1","H0"), - list("[3M+Cl]-",3,-1,34.969401290000000416,21,0,0.5,"Cl1","H0"), - list("[M+K-2H]-",1,-1,36.948605415999999479,22,0,0.5,"K1","H2"), - list("[2M-2H+K]-",2,-1,36.948605415999999479,22,0,0.0,"K1","H2"), - list("[3M-2H+K]-",3,-1,36.948605415999999479,22,0,0.0,"K1","H2"), - list("[M+K]+",1,1,38.963158319999998013,23,1,1.0,"K1","H0"), - list("[2M+K]+",2,1,38.963158319999998013,23,0,0.5,"K1","H0"), - list("[3M+K]+",3,1,38.963158319999998013,23,0,0.25,"K1","H0"), - list("[M+H+K]2+",1,2,39.970434771999997281,24,0,0.5,"K1H1","H0"), - list("[2M+H+K]2+",2,2,39.970434771999997281,24,0,0.5,"K1H1","H0"), - list("[3M+H+K]2+",3,2,39.970434771999997281,24,0,0.25,"K1H1","H0"), - list("[M+ACN+H]+",1,1,42.033825557999996646,25,0,0.25,"C2H4N1","H0"), - list("[2M+ACN+H]+",2,1,42.033825557999996646,25,0,0.25,"C2H4N1","H0"), - list("[M+2Na-H]+",1,1,44.971165708000000902,26,0,0.5,"Na2","H1"), - list("[2M+2Na-H]+",2,1,44.971165708000000902,26,0,0.25,"Na2","H1"), - list("[3M+2Na-H]+",3,1,44.971165708000000902,26,0,0.25,"Na2","H1"), - list("[2M+FA-H]-",2,-1,44.998202851999998586,27,0,0.25,"C1O2H2","H1"), - list("[M+FA-H]-",1,-1,44.998202851999998586,27,0,0.5,"C1O2H2","H1"), - list("[M+2Na]2+",1,2,45.978442160000000172,28,0,0.5,"Na2","H0"), - list("[2M+2Na]2+",2,2,45.978442160000000172,28,0,0.5,"Na2","H0"), - list("[3M+2Na]2+",3,2,45.978442160000000172,28,0,0.25,"Na2","H0"), - list("[M+H+2Na]3+",1,3,46.985718611999999438,29,0,0.25,"H1Na2","H0"), - list("[M+H+FA]+",1,1,47.012755755999997122,30,0,0.25,"C1O2H3","H0"), - list("[M+Hac-H]-",1,-1,59.013852915999997607,31,0,0.25,"C2O2H4","H1"), - list("[2M+Hac-H]-",2,-1,59.013852915999997607,31,0,0.25,"C2O2H4","H1"), - list("[M+IsoProp+H]+",1,1,61.064791327999998317,32,0,0.25,"C3H9O1","H0"), - list("[M+Na+K]2+",1,2,61.9523793999999981,33,0,0.5,"Na1K1","H0"), - list("[2M+Na+K]2+",2,2,61.9523793999999981,33,0,0.5,"Na1K1","H0"), - list("[3M+Na+K]2+",3,2,61.9523793999999981,33,0,0.25,"Na1K1","H0"), - list("[M+NO3]-",1,-1,61.988366450000000895,34,0,0.5,"N1O3","H0"), - list("[M+ACN+Na]+",1,1,64.015770185999997464,35,0,0.25,"C2H3N1Na1","H0"), - list("[2M+ACN+Na]+",2,1,64.015770185999997464,35,0,0.25,"C2H3N1Na1","H0"), - list("[M+NH4+FA]+",1,1,64.039304861999994502,36,0,0.25,"N1C1O2H6","H0"), - list("[M-2H+Na+FA]-",1,-1,66.980147479999999405,37,0,0.5,"NaC1O2H2","H2"), - list("[M+3Na]3+",1,3,68.967663239999993153,38,0,0.25,"Na3","H0"), - list("[M+Na+FA]+",1,1,68.99470038399999794,39,0,0.25,"Na1C1O2H2","H0"), - list("[M+2Cl]2-",1,-2,69.938802580000000832,40,0,1.0,"Cl2","H0"), - list("[2M+2Cl]2-",2,-2,69.938802580000000832,40,0,0.5,"Cl2","H0"), - list("[3M+2Cl]2-",3,-2,69.938802580000000832,40,0,0.5,"Cl2","H0"), - list("[M+2K-H]+",1,1,76.919040187999996758,41,0,0.5,"K2","H1"), - list("[2M+2K-H]+",2,1,76.919040187999996758,41,0,0.25,"K2","H1"), - list("[3M+2K-H]+",3,1,76.919040187999996758,41,0,0.25,"K2","H1"), - list("[M+2K]2+",1,2,77.926316639999996028,42,0,0.5,"K2","H0"), - list("[2M+2K]2+",2,2,77.926316639999996028,42,0,0.5,"K2","H0"), - list("[3M+2K]2+",3,2,77.926316639999996028,42,0,0.25,"K2","H0"), - list("[M+Br]-",1,-1,78.918886479999997619,43,1,1.0,"Br1","H0"), - list("[M+Cl+FA]-",1,-1,80.974880593999998268,44,0,0.5,"Cl1C1O2H2","H0"), - list("[M+AcNa-H]-",1,-1,80.995797543999998426,45,0,0.25,"C2H3Na1O2","H1"), - list("[M+2ACN+2H]2+",1,2,84.067651115999993292,46,0,0.25,"C4H8N2","H0"), - list("[M+K+FA]+",1,1,84.968637623999995868,47,0,0.25,"K1C1O2H2","H0"), - list("[M+Cl+Na+FA-H]-",1,-1,102.95682522200000619,48,0,0.5,"Cl1Na1C1O2H2","H1"), - list("[2M+3H2O+2H]+",2,1,104.03153939599999944,49,0,0.25,"H8O6","H0"), - list("[M+TFA-H]-",1,-1,112.98558742000000165,50,0,0.5,"C2F3O2H1","H1"), - list("[M+H+TFA]+",1,1,115.00014032400000019,51,0,0.25,"C2F3O2H2","H0"), - list("[M+3ACN+2H]2+",1,2,125.09420022199999778,52,0,0.25,"C6H11N3","H0"), - list("[M+NH4+TFA]+",1,1,132.02668943000000468,53,0,0.25,"N1C2F3O2H5","H0"), - list("[M+Na+TFA]+",1,1,136.98208495200000811,54,0,0.25,"Na1C2F3O2H1","H0"), - list("[M+Cl+TFA]-",1,-1,148.96226516199999423,55,0,0.5,"Cl1C2F3O2H1","H0"), - list("[M+K+TFA]+",1,1,152.95602219200000604,56,0,0.25,"K1C2F3O2H1","H0") - ) - dummy_adduct <- orm$adduct() - for (adduct in adducts) { - i <- 0 - dummy_adduct$set_name(adduct[[i <- i+1]]) - dummy_adduct$set_multi(adduct[[i <- i+1]]) - dummy_adduct$set_charge(adduct[[i <- i+1]]) - dummy_adduct$set_mass(adduct[[i <- i+1]]) - dummy_adduct$set_oidscore(adduct[[i <- i+1]]) - dummy_adduct$set_quasi(adduct[[i <- i+1]]) - dummy_adduct$set_ips(adduct[[i <- i+1]]) - dummy_adduct$set_formula_add(adduct[[i <- i+1]]) - dummy_adduct$set_formula_ded(adduct[[i <- i+1]]) - dummy_adduct$save() - dummy_adduct$clear(unset_id=TRUE) - } - message("Adducts created") -} - -insert_base_data <- function(orm, path, archetype=FALSE) { - if (archetype) { - ## not implemented yet - return () - } - base_data <- readLines(path) - for (sql in strsplit(paste(base_data, collapse=" "), ";")[[1]]) { - orm$execute(sql) - } - set_database_version(orm, "enriched") -} - -insert_compounds <- function(orm, compounds_path) { - compounds <- read.csv(file=compounds_path, sep="\t") - if (is.null(compounds <- translate_compounds(compounds))) { - stop("Could not find asked compound's attributes in csv file.") - } - dummy_compound <- orm$compound() - compound_list <- list() - for (i in seq_len(nrow(compounds))) { - dummy_compound$set_mz(compounds[i, "mz"]) - dummy_compound$set_name(compounds[i, "name"]) - dummy_compound$set_common_name(compounds[i, "common_name"]) - dummy_compound$set_formula(compounds[i, "formula"]) - # dummy_compound$set_mz(compounds[i, "mz"]) - # dummy_compound$set_mz(compounds[i, "mz"]) - compound_list[[length(compound_list)+1]] <- as.list( - dummy_compound, - c("mz", "name", "common_name", "formula") - ) - dummy_compound$clear(unset_id=TRUE) - } - dummy_compound$save(bulk=compound_list) -} - -translate_compounds <- function(compounds) { - recognized_headers <- list( - c("HMDB_ID", "MzBank", "X.M.H..", "X.M.H...1", "MetName", "ChemFormula", "INChIkey") - ) - header_translators <- list( - hmdb_header_translator - ) - for (index in seq_along(recognized_headers)) { - headers <- recognized_headers[[index]] - if (identical(colnames(compounds), headers)) { - return (header_translators[[index]](compounds)) - } - } - if (is.null(translator <- guess_translator(colnames(compounds)))) { - return (NULL) - } - return (csv_header_translator(translator, compounds)) -} - -guess_translator <- function(header) { - result <- list( - # HMDB_ID=NULL,< - mz=NULL, - name=NULL, - common_name=NULL, - formula=NULL, - # inchi_key=NULL - ) - asked_cols <- names(result) - for (asked_col in asked_cols) { - for (col in header) { - if ((twisted <- tolower(col)) == asked_col - || gsub("-", "_", twisted) == asked_col - || gsub(" ", "_", twisted) == asked_col - || tolower(gsub("(.)([A-Z])", "\\1_\\2", col)) == asked_col - ) { - result[[asked_col]] <- col - next - } - } - } - if (any(mapply(is.null, result))) { - return (NULL) - } - return (result) -} - -hmdb_header_translator <- function(compounds) { - return (csv_header_translator( - list( - HMDB_ID="HMDB_ID", - mz="MzBank", - name="MetName", - common_name="MetName", - formula="ChemFormula", - inchi_key="INChIkey" - ), compounds - )) -} - -csv_header_translator <- function(translation_table, csv) { - header_names <- names(translation_table) - result <- data.frame(1:nrow(csv)) - # colnames(result) <- header_names - for (i in seq_along(header_names)) { - result[, header_names[[i]]] <- csv[, translation_table[[i]]] - } - print(result[, "mz"]) - result[, "mz"] <- as.numeric(result[, "mz"]) - print(result[, "mz"]) - return (result) -} - -set_database_version <- function(orm, version) { - orm$set_tag( - version, - tag_name="database_version", - tag_table_name="XSeeker_tagging_table" - ) -} - -process_rdata <- function(orm, rdata, options) { - mzml_tmp_dir <- gather_mzml_files(rdata) - samples <- names(rdata$singlefile) - if (!is.null(options$samples)) { - samples <- samples[options$samples %in% samples] - } - show_percent <- ( - is.null(options$`not-show-percent`) - || options$`not-show-percent` == FALSE - ) - error <- tryCatch({ - process_sample_list( - orm, rdata, samples, - show_percent=show_percent - ) - NULL - }, error=function(e) { - message(e) - e - }) - if (!is.null(mzml_tmp_dir)) { - unlink(mzml_tmp_dir, recursive=TRUE) - } - if (!is.null(error)) { - stop(error) - } -} - -gather_mzml_files <- function(rdata) { - if (is.null(rdata$singlefile)) { - message("Extracting mxml files") - tmp <- tempdir() - rdata$singlefile <- utils::unzip(rdata$zipfile, exdir=tmp) - names(rdata$singlefile) <- tools::file_path_sans_ext(basename(rdata$singlefile)) - message("Extracted") - return (tmp) - } - return (NULL) -} - -process_sample_list <- function(orm, radta, sample_names, show_percent) { - file_grouping_var <- find_grouping_var(rdata$variableMetadata) - message("Processing samples.") - message(sprintf("File grouping variable: %s", file_grouping_var)) - if(is.null(file_grouping_var)) { - stop("Malformed variableMetada.") - } - - process_arg_list <- rdata$listOFlistArguments - process_params <- list() - for (list_name in names(process_arg_list)) { - param_list <- list() - for (param_name in names(process_arg_list[[list_name]])) { - param_list[[param_name]] <- process_arg_list[[list_name]][[param_name]] - } - process_params[[length(process_params)+1]] <- param_list - } - message("Parameters from previous processes extracted.") - - var_meta <- rdata$variableMetadata - align_group <- rep(0, nrow(var_meta)) - var_meta <- cbind(var_meta, align_group) - context <- new.env() - context$clusters <- list() - context$groupidx <- rdata$xa@xcmsSet@groupidx - context$peaks <- rdata$xa@xcmsSet@peaks - context$show_percent <- show_percent - - indices <- as.numeric(unique(var_meta[, file_grouping_var])) - smol_xcms_set <- orm$smol_xcms_set() - mz_tab_info <- new.env() - xcms_set <- rdata$xa@xcmsSet - g <- xcms::groups(xcms_set) - mz_tab_info$sampnames <- xcms::sampnames(xcms_set) - mz_tab_info$sampclass <- xcms::sampclass(xcms_set) - mz_tab_info$rtmed <- g[,"rtmed"] - mz_tab_info$mzmed <- g[,"mzmed"] - mz_tab_info$smallmolecule_abundance_assay <- xcms::groupval(xcms_set, value="into") - str(as.list(mz_tab_info)) - serialized <- serialize(mz_tab_info, NULL) - compressed <- fst::compress_fst(serialized, compression=100) - blobified <- blob::blob(compressed) - print(length(blobified)) - smol_xcms_set$set_raw(blobified)$save() - # smol_xcms_set$set_raw(blobified)$save() - # smol_xcms_set$save() - for (no in indices) { - sample_name <- names(rdata$singlefile)[[no]] - sample_path <- rdata$singlefile[[no]] - if ( - is.na(no) - || is.null(sample_path) - || !(sample_name %in% sample_names) - ) { - next - } - ms_file=xcms::xcmsRaw(sample_path) - env <- new.env() - env$variableMetadata <- var_meta[var_meta[, file_grouping_var]==no,] - env$tic <- ms_file@tic - env$mz <- ms_file@env$mz - env$scanindex <- ms_file@scanindex - env$scantime <- ms_file@scantime - env$intensity <- ms_file@env$intensity - env$polarity <- as.character(ms_file@polarity[[1]]) - env$sample_name <- sample_name - env$dataset_path <- sample_path - env$process_params <- process_params - env$enriched_rdata <- TRUE - env$enriched_rdata_version <- ENRICHED_RDATA_VERSION - env$tool_name <- TOOL_NAME - env$enriched_rdata_doc <- ENRICHED_RDATA_DOC - context$sample_no <- no - add_sample_to_database(orm, env, context)#, smol_xcms_set) - } - message("Features enrichment") - complete_features(orm, context) - message("Features enrichment done.") - return (NULL) -} - -find_grouping_var <- function(var_meta) { - for (grouping_var in c(".", "Bio")) { - if (!is.null(rdata$variableMetadata[[grouping_var]])) { - return (grouping_var) - } - } - return (NULL) -} - -add_sample_to_database <- function(orm, env, context){#, smol_xcms_set) { - message(sprintf("Processing sample %s", env$sample_name)) - sample <- ( - orm$sample() - $set_name(env$sample_name) - $set_path(env$dataset_path) - $set_kind("enriched_rdata") - $set_polarity( - if (is.null(env$polarity) || identical(env$polarity, character(0))) "" - else env$polarity - ) - # $set_smol_xcms_set(smol_xcms_set) - $set_raw(blob::blob(fst::compress_fst( - serialize(env, NULL), - compression=100 - ))) - $save() - ) - load_variable_metadata(orm, sample, env$variableMetadata, context) - load_process_params(orm, sample, env$process_params) - message(sprintf("Sample %s inserted.", env$sample_name)) - return (sample) -} - - -load_variable_metadata <- function(orm, sample, var_meta, context) { - all_clusters <- orm$cluster()$all() - - next_feature_id <- get_next_id(orm$feature()$all(), "featureID") - next_cluster_id <- get_next_id(all_clusters, "clusterID") - next_pc_group <- get_next_id(all_clusters, "pc_group") - next_align_group <- get_next_id(all_clusters, "align_group") - message("Extracting features") - invisible(create_features( - orm, sample, var_meta, context, - next_feature_id, next_cluster_id, - next_pc_group, next_align_group - )) - message("Extracting features done.") - return (NULL) -} - -get_next_id <- function(models, attribute) { - if ((id <- models$max(attribute)) == Inf || id == -Inf) { - return (1) - } - return (id + 1) -} - -create_features <- function( - orm, sample, var_meta, context, - next_feature_id, next_cluster_id, - next_pc_group, next_align_group -) { - field_names <- as.list(names(orm$feature()$fields__)) - field_names[field_names=="id"] <- NULL - - features <- list() - dummy_feature <- orm$feature() - - if (show_percent <- context$show_percent) { - percent <- -1 - total <- nrow(var_meta) - } - for (row in seq_len(nrow(var_meta))) { - if (show_percent && (row / total) * 100 > percent) { - percent <- percent + 1 - message("\r", sprintf("\r%d %%", percent), appendLF=FALSE) - } - - curent_var_meta <- var_meta[row, ] - - peak_list <- context$peaks[context$groupidx[[row]], ] - sample_peak_list <- peak_list[peak_list[, "sample"] == context$sample_no, , drop=FALSE] - if (!identical(sample_peak_list, numeric(0)) && !is.null(nrow(sample_peak_list)) && nrow(sample_peak_list) != 0) { - if (!is.na(int_o <- extract_peak_var(sample_peak_list, "into"))) { - dummy_feature$set_int_o(int_o) - } - if (!is.na(int_b <- extract_peak_var(sample_peak_list, "intb"))) { - dummy_feature$set_int_b(int_b) - } - if (!is.na(max_o <- extract_peak_var(sample_peak_list, "maxo"))) { - dummy_feature$set_max_o(max_o) - } - } - - set_feature_fields_from_var_meta(dummy_feature, curent_var_meta) - - dummy_feature$set_featureID(next_feature_id) - next_feature_id <- next_feature_id + 1 - fake_iso <- dummy_feature$get_iso() - iso <- extract_iso(fake_iso) - clusterID <- extract_clusterID(fake_iso, next_cluster_id) - context$clusterID <- clusterID - dummy_feature$set_iso(iso) - create_associated_cluster( - sample, dummy_feature, clusterID, - context, curent_var_meta, next_pc_group, - next_align_group - ) - next_align_group <- next_align_group + 1 - features[[length(features)+1]] <- as.list(dummy_feature, field_names) - dummy_feature$clear() - } - message("")## +\n for previous message - message("Saving features") - dummy_feature$save(bulk=features) - message("Saved.") - return (context$clusters) -} - -extract_peak_var <- function(peak_list, var_name, selector=max) { - value <- peak_list[, var_name] - names(value) <- NULL - return (selector(value)) -} - -set_feature_fields_from_var_meta <- function(feature, var_meta) { - if (!is.null(mz <- var_meta[["mz"]]) && !is.na(mz)) { - feature$set_mz(mz) - } - if (!is.null(mzmin <- var_meta[["mzmin"]]) && !is.na(mzmin)) { - feature$set_mz_min(mzmin) - } - if (!is.null(mzmax <- var_meta[["mzmax"]]) && !is.na(mzmax)) { - feature$set_mz_max(mzmax) - } - if (!is.null(rt <- var_meta[["rt"]]) && !is.na(rt)) { - feature$set_rt(rt) - } - if (!is.null(rtmin <- var_meta[["rtmin"]]) && !is.na(rtmin)) { - feature$set_rt_min(rtmin) - } - if (!is.null(rtmax <- var_meta[["rtmax"]]) && !is.na(rtmax)) { - feature$set_rt_max(rtmax) - } - if (!is.null(isotopes <- var_meta[["isotopes"]]) && !is.na(isotopes)) { - feature$set_iso(isotopes) - } - return (feature) -} - -extract_iso <- function(weird_data) { - if (grepl("^\\[\\d+\\]", weird_data)[[1]]) { - return (sub("^\\[\\d+\\]", "", weird_data, perl=TRUE)) - } - return (weird_data) -} - -extract_clusterID <- function(weird_data, next_cluster_id){ - if (grepl("^\\[\\d+\\]", weird_data)[[1]]) { - clusterID <- stringr::str_extract(weird_data, "^\\[\\d+\\]") - clusterID <- as.numeric(stringr::str_extract(clusterID, "\\d+")) - } else { - clusterID <- 0 - } - return (clusterID + next_cluster_id) -} - -create_associated_cluster <- function( - sample, feature, grouping_variable, - context, curent_var_meta, next_pc_group, next_align_group -) { - pcgroup <- as.numeric(curent_var_meta[["pcgroup"]]) - adduct <- as.character(curent_var_meta[["adduct"]]) - annotation <- curent_var_meta[["isotopes"]] - grouping_variable <- as.character(grouping_variable) - if (is.null(cluster <- context$clusters[[grouping_variable]])) { - cluster <- context$clusters[[grouping_variable]] <- orm$cluster( - pc_group=pcgroup + next_pc_group, - adduct=adduct, - align_group=next_align_group, - # curent_group=curent_group, - clusterID=context$clusterID, - annotation=annotation - )$set_sample(sample) - } else { - if (context$clusterID != 0 && cluster$get_clusterID() == 0) { - cluster$set_clusterID(context$clusterID) - } - } - cluster$save() - feature$set_cluster(cluster) - return (feature) -} - -complete_features <- function(orm, context) { - for (cluster in context$clusters) { - features <- orm$feature()$load_by(cluster_id=cluster$get_id()) - if (features$any()) { - if (!is.null(rt <- features$mean("rt"))) { - cluster$set_mean_rt(rt)$save() - } - features_df <- as.data.frame(features) - central_feature <- features_df[grepl("^\\[M\\]", features_df[, "iso"]), ] - central_feature_into <- central_feature[["int_o"]] - if (!identical(central_feature_into, numeric(0)) && central_feature_into != 0) { - for (feature in as.vector(features)) { - feature$set_abundance( - feature$get_int_o() / central_feature_into * 100 - )$save() - } - } - } - } - return (NULL) -} - -load_process_params <- function(orm, sample, params) { - for (param_list in params) { - if (is.null(param_list[["xfunction"]])) { - next - } - if (param_list[["xfunction"]] == "annotatediff") { - load_process_params_peak_picking(orm, sample, param_list) - } - } - return (sample) -} - -load_process_params_peak_picking <- function(orm, sample, peak_picking_params) { - return (add_sample_process_parameters( - params=peak_picking_params, - params_translation=list( - ppm="ppm", - maxcharge="maxCharge", - maxiso="maxIso" - ), - param_model_generator=orm$peak_picking_parameters, - sample_param_setter=sample$set_peak_picking_parameters - )) -} - -add_sample_process_parameters <- function( - params, - params_translation, - param_model_generator, - sample_param_setter -) { - model_params <- list() - for (rdata_param_name in names(params_translation)) { - database_param_name <- params_translation[[rdata_param_name]] - if (is.null(rdata_param <- params[[rdata_param_name]])) { - next - } - model_params[[database_param_name]] <- rdata_param - } - params_models <- do.call(param_model_generator()$load_by, model_params) - if (params_models$any()) { - params_model <- params_models$first() - } else { - params_model <- do.call(param_model_generator, model_params) - params_model$save() - } - return (sample_param_setter(params_model)$save()) -} - - -library(optparse) - -option_list <- list( - optparse::make_option( - c("-v", "--version"), - action="store_true", - help="Display this tool's version and exits" - ), - optparse::make_option( - c("-i", "--input"), - type="character", - help="The rdata path to import in XSeeker" - ), - optparse::make_option( - c("-s", "--samples"), - type="character", - help="Samples to visualise in XSeeker" - ), - optparse::make_option( - c("-B", "--archetype"), - type="character", - help="The name of the base database" - ), - optparse::make_option( - c("-b", "--database"), - type="character", - help="The base database's path" - ), - optparse::make_option( - c("-c", "--compounds-csv"), - type="character", - help="The csv containing compounds" - ), - optparse::make_option( - c("-m", "--models"), - type="character", - help="The path or url (must begin with http[s]:// or git@) to the database's models" - ), - optparse::make_option( - c("-o", "--output"), - type="character", - help="The path where to output sqlite" - ), - optparse::make_option( - c("-P", "--not-show-percent"), - action="store_true", - help="Flag not to show the percents", - default=FALSE - ) -) - -options(error=function(){traceback(3)}) - -parser <- OptionParser(usage="%prog [options] file", option_list=option_list) -args <- parse_args(parser, positional_arguments=0) - -err_code <- 0 - -if (!is.null(args$options$version)) { - message(sprintf("%s %s", TOOL_NAME, VERSION)) - quit() -} - -models <- get_models(args$options$models) -orm <- DBModelR::ORM( - connection_params=list(dbname=args$options$output), - dbms="SQLite" -) - -invisible(orm$models(models)) -invisible(create_database(orm)) - -message("Database model created") - -insert_adducts(orm) - -if (!is.null(args$options$database)) { - insert_base_data(orm, args$options$database) -} -message(sprintf("Base data inserted using %s.", args$options$database)) - -if (!is.null(args$options$archetype)) { - insert_base_data(orm, args$options$archetype, archetype=TRUE) -} -if (!is.null(args$options$`compounds-csv`)) { - insert_compounds(orm, args$options$`compounds-csv`) -} - -# if (!is.null(args$options$rdata)) { -# load_rdata_in_base(args$options$rdata, args$options$samples, args$options$`not-show-percent`) -# } - - -load(args$options$input, rdata <- new.env()) - -process_rdata(orm, rdata, args$options) - -quit(status=err_code) - - diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIE/tools/LC-MSMS/XSeekerPreparator.xml --- a/resources/galaxy/GIE/tools/LC-MSMS/XSeekerPreparator.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,335 +0,0 @@ - - Prepare RData file from CAMERA to be visualized in XSeeker - - - operation_1812 - operation_0335 - - - - /home/lpavot/R/bin/Rscript - - - - - - - - - - - - - /home/lpavot/R/bin/Rscript '$__tool_directory__/XSeekerPreparator.R' -v - - - - - - - - - - -
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - - - - - -tryCatch({ - DBModelR::ModelDefinition(table="yui", fields=list(yui="INTEGER")) -}, error=function(e) { - stop("Please, install DBModelR before you source this file.") -}) - -list( - adduct=DBModelR::ModelDefinition( - table="adduct", - fields=list( - name="TEXT", - mass="FLOAT", - charge="INTEGER", - multi="INTEGER", - formula_add="TEXT", - formula_ded="TEXT", - sign="TEXT", - oidscore="INTEGER", - quasi="INTEGER", - ips="FLOAT" - ) - ), - cluster=DBModelR::ModelDefinition( - table="cluster", - fields=list( - clusterID="INTEGER", - formula="TEXT", - annotation="TEXT", - coeff="FLOAT", - r_squared="FLOAT", - charge="INTEGER", - mean_rt="FLOAT", - score="FLOAT", - deviation="FLOAT", - status="TEXT", - adduct="TEXT", - curent_group="INTEGER", - pc_group="INTEGER", - align_group="INTEGER", - xcms_group="INTEGER" - ), - one=list("sample", "compound") - ), - compound=DBModelR::ModelDefinition( - table="compound", - fields=list( - name="TEXT", - common_name="TEXT", - formula="TEXT", - charge="INTEGER", - date="TEXT", - mz="FLOAT" - ) - ), - feature=DBModelR::ModelDefinition( - table="feature", - fields=list( - featureID="INTEGER", - mz="FLOAT", - mz_min="FLOAT", - mz_max="FLOAT", - rt="FLOAT", - rt_min="FLOAT", - rt_max="FLOAT", - int_o="FLOAT", - int_b="FLOAT", - max_o="FLOAT", - iso="TEXT", - abundance="FLOAT" - ), - one=list("cluster") - ), - instrument=DBModelR::ModelDefinition( - table="instrument", - fields=list( - model="TEXT", - manufacturer="TEXT", - analyzer="TEXT", - detector_type="TEXT", - ion_source="TEXT" - ) - ), - instrument_config=DBModelR::ModelDefinition( - table="instrument_config", - fields=list( - resolution="TEXT", - agc_target="TEXT", - maximum_IT="TEXT", - number_of_scan_range="TEXT", - scan_range="TEXT", - version="TEXT" - ) - ), - project=DBModelR::ModelDefinition( - table="project", - fields=list( - name="TEXT", - comment="TEXT" - ), - one=list("sample") - ), - sample=DBModelR::ModelDefinition( - table="sample", - fields=list( - name="TEXT", - path="TEXT", - polarity="TEXT", - kind="TEXT", ## rdata or mxml or enriched_rdata - raw="BLOB" - ), - one=list( - "peak_picking_parameters", - "pairing_parameters", - "alignmenmt_parameters", - "camera_parameters", - "instrument", - "instrument_config", - "software", - "smol_xcms_set" - ) - ), - smol_xcms_set=DBModelR::ModelDefinition( - table="smol_xcms_set", - fields=list( - raw="BLOB" - ) - ), - software=DBModelR::ModelDefinition( - table="software", - fields=list( - name="TEXT", - version="TEXT" - ) - ), - peak_picking_parameters=DBModelR::ModelDefinition( - table="peak_picking_parameters", - fields=list( - ppm="FLOAT", - peakwidth="TEXT", - snthresh="TEXT", - prefilterStep="TEXT", - prefilterLevel="TEXT", - mzdiff="TEXT", - fitgauss="TEXT", - noise="TEXT", - mzCenterFun="TEXT", - integrate="INTEGER", - firstBaselineCheck="TEXT", - snthreshIsoROIs="TEXT", - maxCharge="INTEGER", - maxIso="INTEGER", - mzIntervalExtension="TEXT" - ) - ), - alignmenmt_parameters=DBModelR::ModelDefinition( - table="alignmenmt_parameters", - fields=list( - binSize="TEXT", - centerSample="TEXT", - response="TEXT", - distFun="TEXT", - gapInit="TEXT", - gapExtend="TEXT", - factorDiag="TEXT", - factorGap="TEXT", - localAlignment="INTEGER", - initPenalty="TEXT", - bw="TEXT", - minFraction="TEXT", - minSamples="TEXT", - maxFeatures="TEXT" - ) - ) -) - - -
diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIT/config/galaxy.yml --- a/resources/galaxy/GIT/config/galaxy.yml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -diff --git a/lib/galaxy/config/sample/galaxy.yml.sample b/lib/galaxy/config/sample/galaxy.yml.sample -index b0fe163e6d..975acbf855 100644 ---- a/lib/galaxy/config/sample/galaxy.yml.sample -+++ b/lib/galaxy/config/sample/galaxy.yml.sample -@@ -105,6 +105,30 @@ uwsgi: - # to be in the same group as the Galaxy system user - umask: 027 - -+ http: localhost:8080 -+ -+ threads: 8 -+ -+ http-raw-body: True -+ -+ offload-threads: 8 -+ -+ master: true -+ -+ module: galaxy.webapps.galaxy.buildapp:uwsgi_app() -+ -+ interactivetools_enable: true -+ interactivetools_map: database/interactivetools_map.sqlite -+ python-raw: scripts/interactivetools/key_type_token_mapping.py -+ route-host: ^([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)-([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.(interactivetool\.localhost:8080)$ goto:interactivetool -+ route-run: goto:endendend -+ route-label: interactivetool -+ route-host: ^([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)-([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.(interactivetool\.localhost:8080)$ rpcvar:TARGET_HOST rtt_key_type_token_mapper_cached $1 $3 $2 $4 $0 5 -+ route-if-not: empty:${TARGET_HOST} httpdumb:${TARGET_HOST} -+ route: .* break:404 Not Found -+ route-label: endendend -+ -+ - galaxy: - - # The directory that will be prepended to relative paths in options -@@ -2091,3 +2115,18 @@ galaxy: - # Path to dynamic tool destinations configuration file. - #tool_destinations_config_file: tool_destinations.yml - -+ -+ interactivetools_enable: true -+ # outputs_to_working_directory will provide you with a better level of isolation. It is highly recommended to set -+ # this parameter with InteractiveTools. -+ outputs_to_working_directory: true -+ interactivetools_prefix: interactivetool -+ interactivetools_map: database/interactivetools_map.sqlite -+ # If you develop InteractiveTools locally and do not have a full FQDN you can -+ # use an arbritrary one, e.g. 'my-hostname' here, if you set this hostname in your -+ # job_conf.xml as well (see the corresponding comment). If running mac OS X, do not match the -+ # "http://host.docker.internal:8080" used at galaxy_infrastructure_url in the galaxy.yml file, -+ # and use an arbitrary name here instead. -+ # Please make sure that in the local development case you use https://localhost:8080 to access -+ # your Galaxy. http://my-hostname:8080 will not work. -+ # galaxy_infrastructure_url: http://my-hostname:8080 diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIT/config/galaxy.yml.interactivetools --- a/resources/galaxy/GIT/config/galaxy.yml.interactivetools Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -diff --git a/config/galaxy.yml.interactivetools b/config/galaxy.yml.interactivetools -index fe2d589208..4610c0b68f 100644 ---- a/config/galaxy.yml.interactivetools -+++ b/config/galaxy.yml.interactivetools -@@ -12,6 +12,7 @@ uwsgi: - - module: galaxy.webapps.galaxy.buildapp:uwsgi_app() - -+ interactivetools_enable: true - interactivetools_map: database/interactivetools_map.sqlite - python-raw: scripts/interactivetools/key_type_token_mapping.py - route-host: ^([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)-([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.([A-Za-z0-9]+(?:-[A-Za-z0-9]+)*)\.(interactivetool\.localhost:8080)$ goto:interactivetool -@@ -23,6 +24,7 @@ uwsgi: - route-label: endendend - - -+ - galaxy: - interactivetools_enable: true - # outputs_to_working_directory will provide you with a better level of isolation. It is highly recommended to set diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIT/config/tool_conf.xml --- a/resources/galaxy/GIT/config/tool_conf.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -diff --git a/lib/galaxy/config/sample/tool_conf.xml.sample b/lib/galaxy/config/sample/tool_conf.xml.sample -index 286a0c9f1c..570a7a6193 100644 ---- a/lib/galaxy/config/sample/tool_conf.xml.sample -+++ b/lib/galaxy/config/sample/tool_conf.xml.sample -@@ -124,15 +124,16 @@ - - -
-- -+ -+ -+ -
diff -r 0f3224a5adda -r 85b4593da271 resources/galaxy/GIT/tools/interactive/xseeker.xml --- a/resources/galaxy/GIT/tools/interactive/xseeker.xml Tue Feb 01 14:28:08 2022 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ - - Webbased Interactive bidules visualization - - xseeker - - - - / - 8765 - - - - TRUE - http://172.17.0.1:8080/ - $__history_id__ - - - - - - - - - - - - - - - - - i love to talk to me myself - -